rbs_rails 0.2.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/.gitmodules +3 -0
  4. data/.travis.yml +3 -0
  5. data/Gemfile +3 -2
  6. data/README.md +33 -35
  7. data/Rakefile +14 -1
  8. data/Steepfile +12 -1
  9. data/assets/sig/action_mailer.rbs +6 -3
  10. data/assets/sig/capybara.rbs +14 -0
  11. data/assets/sig/concurrent.rbs +4 -0
  12. data/assets/sig/erb.rbs +4 -0
  13. data/assets/sig/erubi.rbs +4 -0
  14. data/assets/sig/i18n.rbs +4 -0
  15. data/assets/sig/minitest.rbs +12 -1
  16. data/assets/sig/pg.rbs +5 -0
  17. data/assets/sig/que.rbs +4 -0
  18. data/assets/sig/queue_classic.rbs +4 -0
  19. data/assets/sig/racc.rbs +4 -0
  20. data/assets/sig/rack-test.rbs +6 -0
  21. data/assets/sig/rack.rbs +47 -0
  22. data/assets/sig/rails.rbs +7 -8
  23. data/assets/sig/rdoc.rbs +9 -0
  24. data/assets/sig/sidekiq.rbs +4 -0
  25. data/assets/sig/sneakers.rbs +4 -0
  26. data/assets/sig/stdlib.rbs +15 -5
  27. data/assets/sig/sucker_punch.rbs +4 -0
  28. data/assets/sig/thor.rbs +12 -0
  29. data/assets/sig/tzinfo.rbs +4 -0
  30. data/bin/add-type-params.rb +39 -13
  31. data/bin/postprocess.rb +137 -0
  32. data/bin/rbs +30 -0
  33. data/bin/rbs-prototype-rb.rb +195 -0
  34. data/bin/to-ascii.rb +5 -0
  35. data/lib/rbs_rails/active_record.rb +78 -33
  36. data/lib/rbs_rails/rake_task.rb +75 -0
  37. data/lib/rbs_rails/version.rb +1 -1
  38. data/rbs_rails.gemspec +1 -0
  39. data/sig/fileutils.rbs +1 -0
  40. data/sig/rake.rbs +6 -0
  41. data/sig/rbs_rails/active_record.rbs +4 -4
  42. data/sig/rbs_rails/rake_task.rbs +20 -0
  43. metadata +45 -12
  44. data/assets/sig/action_controller.rbs +0 -44
  45. data/assets/sig/action_view.rbs +0 -3
  46. data/assets/sig/active_record.rbs +0 -130
  47. data/assets/sig/generated/activemodel.rbs +0 -3877
  48. data/assets/sig/generated/activesupport.rbs +0 -11480
  49. data/bin/merge-duplicate-decls.rb +0 -30
@@ -0,0 +1,75 @@
1
+ require 'rake'
2
+ require 'rake/tasklib'
3
+
4
+ module RbsRails
5
+ class RakeTask < Rake::TaskLib
6
+ attr_accessor :ignore_model_if, :name
7
+
8
+ def initialize(name = :rbs_rails, &block)
9
+ super()
10
+
11
+ @name = name
12
+
13
+ block.call(self) if block
14
+
15
+ def_copy_signature_files
16
+ def_generate_rbs_for_models
17
+ def_generate_rbs_for_path_helpers
18
+ def_all
19
+ end
20
+
21
+ def def_all
22
+ desc 'Run all tasks of rbs_rails'
23
+
24
+ deps = [:"#{name}:copy_signature_files", :"#{name}:generate_rbs_for_models", :"#{name}:generate_rbs_for_path_helpers"]
25
+ task("#{name}:all": deps)
26
+ end
27
+
28
+ def def_copy_signature_files
29
+ desc 'Copy RBS files for rbs_rails'
30
+ task("#{name}:copy_signature_files": :environment) do
31
+ require 'rbs_rails'
32
+
33
+ to = Rails.root.join('sig/rbs_rails/')
34
+ to.mkpath unless to.exist?
35
+ RbsRails.copy_signatures(to: to)
36
+ end
37
+ end
38
+
39
+ def def_generate_rbs_for_models
40
+ desc 'Generate RBS files for Active Record models'
41
+ task("#{name}:generate_rbs_for_models": :environment) do
42
+ require 'rbs_rails'
43
+
44
+ out_dir = Rails.root / 'sig'
45
+ out_dir.mkdir unless out_dir.exist?
46
+
47
+ Rails.application.eager_load!
48
+
49
+
50
+ # HACK: for steep
51
+ (_ = ::ActiveRecord::Base).descendants.each do |klass|
52
+ next if klass.abstract_class?
53
+ next if ignore_model_if&.call(klass)
54
+
55
+ path = out_dir / "app/models/#{klass.name.underscore}.rbs"
56
+ FileUtils.mkdir_p(path.dirname)
57
+
58
+ sig = RbsRails::ActiveRecord.class_to_rbs(klass)
59
+ path.write sig
60
+ end
61
+ end
62
+ end
63
+
64
+ def def_generate_rbs_for_path_helpers
65
+ desc 'Generate RBS files for path helpers'
66
+ task("#{name}:generate_rbs_for_path_helpers": :environment) do
67
+ require 'rbs_rails'
68
+
69
+ out_path = Rails.root.join 'sig/path_helpers.rbs'
70
+ rbs = RbsRails::PathHelpers.generate
71
+ out_path.write rbs
72
+ end
73
+ end
74
+ end
75
+ end
@@ -2,5 +2,5 @@ module RbsRails
2
2
  # Because of copy_signatures is defined by lib/rbs_rails.rb
3
3
  # @dynamic self.copy_signatures
4
4
 
5
- VERSION = "0.2.0"
5
+ VERSION = "0.6.0"
6
6
  end
@@ -26,4 +26,5 @@ Gem::Specification.new do |spec|
26
26
  spec.require_paths = ["lib"]
27
27
 
28
28
  spec.add_runtime_dependency 'parser'
29
+ spec.add_runtime_dependency 'rbs', '>= 1'
29
30
  end
@@ -1,3 +1,4 @@
1
1
  module FileUtils
2
2
  def self.cp_r: (Pathname, Pathname) -> untyped
3
+ def self.mkdir_p: (String | Array[String], ?untyped) -> Array[String]
3
4
  end
@@ -0,0 +1,6 @@
1
+ module Rake
2
+ class TaskLib
3
+ def desc: (String) -> void
4
+ def task: (Hash[Symbol, Symbol | Array[Symbol]]) ?{ () -> void } -> void
5
+ end
6
+ end
@@ -1,11 +1,11 @@
1
1
  module RbsRails::ActiveRecord
2
- def self.class_to_rbs: (untyped klass, mode: untyped mode) -> untyped
2
+ def self.class_to_rbs: (untyped klass) -> untyped
3
3
  end
4
4
 
5
5
  class RbsRails::ActiveRecord::Generator
6
6
  @parse_model_file: nil | Parser::AST::Node
7
7
 
8
- def initialize: (singleton(ActiveRecord::Base) klass, mode: (:extension | :class) mode) -> untyped
8
+ def initialize: (singleton(ActiveRecord::Base) klass) -> untyped
9
9
 
10
10
  def generate: () -> String
11
11
 
@@ -53,7 +53,7 @@ class RbsRails::ActiveRecord::Generator
53
53
 
54
54
  def sql_type_to_class: (untyped t) -> untyped
55
55
 
56
- attr_reader klass: singleton(ActiveRecord::Base)
56
+ def optional: (String) -> String
57
57
 
58
- attr_reader mode: (:extension | :class)
58
+ attr_reader klass: singleton(ActiveRecord::Base)
59
59
  end
@@ -0,0 +1,20 @@
1
+ module RbsRails
2
+ class RakeTask < Rake::TaskLib
3
+ interface _Filter
4
+ def call: (Class) -> boolish
5
+ end
6
+ attr_accessor ignore_model_if: _Filter | nil
7
+
8
+ attr_accessor name: Symbol
9
+
10
+ def initialize: (?::Symbol name) { (self) -> void } -> void
11
+
12
+ def def_all: () -> void
13
+
14
+ def def_copy_signature_files: () -> void
15
+
16
+ def def_generate_rbs_for_models: () -> void
17
+
18
+ def def_generate_rbs_for_path_helpers: () -> void
19
+ end
20
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbs_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masataka Pocke Kuwabara
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-06-24 00:00:00.000000000 Z
11
+ date: 2020-12-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rbs
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '1'
27
41
  description: A RBS files generator for Rails application
28
42
  email:
29
43
  - kuwabara@pocke.me
@@ -32,38 +46,57 @@ extensions: []
32
46
  extra_rdoc_files: []
33
47
  files:
34
48
  - ".gitignore"
49
+ - ".gitmodules"
35
50
  - ".travis.yml"
36
51
  - Gemfile
37
52
  - LICENSE
38
53
  - README.md
39
54
  - Rakefile
40
55
  - Steepfile
41
- - assets/sig/action_controller.rbs
42
56
  - assets/sig/action_mailer.rbs
43
- - assets/sig/action_view.rbs
44
- - assets/sig/active_record.rbs
45
57
  - assets/sig/builtin.rbs
46
- - assets/sig/generated/activemodel.rbs
47
- - assets/sig/generated/activesupport.rbs
58
+ - assets/sig/capybara.rbs
59
+ - assets/sig/concurrent.rbs
60
+ - assets/sig/erb.rbs
61
+ - assets/sig/erubi.rbs
62
+ - assets/sig/i18n.rbs
48
63
  - assets/sig/libxml.rbs
49
64
  - assets/sig/minitest.rbs
50
65
  - assets/sig/nokogiri.rbs
66
+ - assets/sig/pg.rbs
67
+ - assets/sig/que.rbs
68
+ - assets/sig/queue_classic.rbs
69
+ - assets/sig/racc.rbs
70
+ - assets/sig/rack-test.rbs
71
+ - assets/sig/rack.rbs
51
72
  - assets/sig/rails.rbs
73
+ - assets/sig/rdoc.rbs
74
+ - assets/sig/sidekiq.rbs
75
+ - assets/sig/sneakers.rbs
52
76
  - assets/sig/stdlib.rbs
77
+ - assets/sig/sucker_punch.rbs
78
+ - assets/sig/thor.rbs
79
+ - assets/sig/tzinfo.rbs
53
80
  - bin/add-type-params.rb
54
81
  - bin/console
55
- - bin/merge-duplicate-decls.rb
82
+ - bin/postprocess.rb
83
+ - bin/rbs
84
+ - bin/rbs-prototype-rb.rb
56
85
  - bin/setup
86
+ - bin/to-ascii.rb
57
87
  - lib/rbs_rails.rb
58
88
  - lib/rbs_rails/active_record.rb
59
89
  - lib/rbs_rails/path_helpers.rb
90
+ - lib/rbs_rails/rake_task.rb
60
91
  - lib/rbs_rails/version.rb
61
92
  - rbs_rails.gemspec
62
93
  - sig/fileutils.rbs
63
94
  - sig/parser.rbs
95
+ - sig/rake.rbs
64
96
  - sig/rbs_rails.rbs
65
97
  - sig/rbs_rails/active_record.rbs
66
98
  - sig/rbs_rails/path_helpers.rbs
99
+ - sig/rbs_rails/rake_task.rbs
67
100
  - sig/rbs_rails/version.rbs
68
101
  homepage: https://github.com/pocke/rbs_rails
69
102
  licenses:
@@ -71,7 +104,7 @@ licenses:
71
104
  metadata:
72
105
  homepage_uri: https://github.com/pocke/rbs_rails
73
106
  source_code_uri: https://github.com/pocke/rbs_rails
74
- post_install_message:
107
+ post_install_message:
75
108
  rdoc_options: []
76
109
  require_paths:
77
110
  - lib
@@ -86,8 +119,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
86
119
  - !ruby/object:Gem::Version
87
120
  version: '0'
88
121
  requirements: []
89
- rubygems_version: 3.2.0.pre1
90
- signing_key:
122
+ rubygems_version: 3.2.3
123
+ signing_key:
91
124
  specification_version: 4
92
125
  summary: A RBS files generator for Rails application
93
126
  test_files: []
@@ -1,44 +0,0 @@
1
- interface _ActionController_API_and_Base
2
- def request: () -> untyped
3
- def params: () -> untyped
4
- def session: () -> untyped
5
- def cookies: () -> untyped
6
- def flash: () -> untyped
7
- def render: (*untyped) -> void
8
- def redirect_to: (*untyped) -> void
9
- end
10
-
11
- interface _ActionController_API_and_Base_singletion
12
- # hooks
13
- def before_action: (*untyped) -> void
14
- def around_action: (*untyped) -> void
15
- def after_action: (*untyped) -> void
16
- def skip_before_action: (*untyped) -> void
17
- def skip_around_action: (*untyped) -> void
18
- def skip_after_action: (*untyped) -> void
19
- def prepend_before_action: (*untyped) -> void
20
- def prepend_around_action: (*untyped) -> void
21
- def prepend_after_action: (*untyped) -> void
22
- def append_before_action: (*untyped) -> void
23
- def append_around_action: (*untyped) -> void
24
- def append_after_action: (*untyped) -> void
25
-
26
- def rescue_from: (*Class, ?with: Symbol | Proc) { (Exception) -> void } -> void
27
- end
28
-
29
- class AbstractController::Base
30
- end
31
-
32
- class ActionController::Metal < AbstractController::Base
33
- end
34
-
35
- class ActionController::Base < ActionController::Metal
36
- include _ActionController_API_and_Base
37
- extend _ActionController_API_and_Base_singletion
38
- extend ActionView::Layouts::ClassMethods
39
- end
40
-
41
- class ActionController::API < ActionController::Metal
42
- include _ActionController_API_and_Base
43
- extend _ActionController_API_and_Base_singletion
44
- end
@@ -1,3 +0,0 @@
1
- module ActionView::Layouts::ClassMethods
2
- def layout: (String) -> void
3
- end
@@ -1,130 +0,0 @@
1
- class ActiveRecord::Base
2
- def self.abstract_class=: (bool) -> void
3
- def self.scope: (Symbol, ^(*untyped) -> untyped ) -> void
4
- | (Symbol) { (*untyped) -> untyped } -> void
5
- def self.belongs_to: (Symbol, ?untyped, **untyped) -> void
6
- def self.has_many: (Symbol, ?untyped, **untyped) -> void
7
- def self.has_one: (Symbol, ?untyped, **untyped) -> void
8
- def self.transaction: [T] () { () -> T } -> T
9
- def self.create!: (**untyped) -> instance
10
- def self.validate: (*untyped) -> void
11
- def self.validates: (*untyped) -> void
12
- def self.enum: (Hash[Symbol, untyped]) -> void
13
-
14
- # callbacks
15
- def self.after_commit: (*untyped) -> void
16
- def self.after_create: (*untyped) -> void
17
- def self.after_destroy: (*untyped) -> void
18
- def self.after_rollback: (*untyped) -> void
19
- def self.after_save: (*untyped) -> void
20
- def self.after_update: (*untyped) -> void
21
- def self.after_validation: (*untyped) -> void
22
- def self.around_create: (*untyped) -> void
23
- def self.around_destroy: (*untyped) -> void
24
- def self.around_save: (*untyped) -> void
25
- def self.around_update: (*untyped) -> void
26
- def self.before_create: (*untyped) -> void
27
- def self.before_destroy: (*untyped) -> void
28
- def self.before_save: (*untyped) -> void
29
- def self.before_update: (*untyped) -> void
30
- def self.before_validation: (*untyped) -> void
31
-
32
- def self.columns: () -> Array[untyped]
33
- def self.reflect_on_all_associations: (?Symbol) -> Array[untyped]
34
-
35
- def will_save_change_to_attribute?: (String | Symbol attr_name, ?from: untyped, ?to: untyped) -> bool
36
-
37
- def save!: () -> self
38
- def save: () -> bool
39
- def update!: (*untyped) -> self
40
- def update: (*untyped) -> bool
41
- def destroy!: () -> self
42
- def destroy: () -> bool
43
- def valid?: () -> bool
44
- def invalid?: () -> bool
45
- def errors: () -> untyped
46
- def []: (Symbol) -> untyped
47
- def []=: (Symbol, untyped) -> untyped
48
- end
49
-
50
- class ActiveRecord::Relation
51
- end
52
-
53
- class ActiveRecord::Associations::CollectionProxy
54
- end
55
-
56
- interface _ActiveRecord_Relation[Model]
57
- def all: () -> self
58
- def ids: () -> Array[Integer]
59
- def none: () -> self
60
- def pluck: (Symbol | String column) -> Array[untyped]
61
- | (*Symbol | String columns) -> Array[Array[untyped]]
62
- def where: (*untyped) -> self
63
- def not: (*untyped) -> self
64
- def exists?: (*untyped) -> bool
65
- def order: (*untyped) -> self
66
- def group: (*Symbol | String) -> untyped
67
- def distinct: () -> self
68
- def or: (self) -> self
69
- def merge: (self) -> self
70
- def joins: (*String | Symbol) -> self
71
- | (Hash[untyped, untyped]) -> self
72
- def left_joins: (*String | Symbol) -> self
73
- | (Hash[untyped, untyped]) -> self
74
- def left_outer_joins: (*String | Symbol) -> self
75
- | (Hash[untyped, untyped]) -> self
76
- def includes: (*String | Symbol) -> self
77
- | (Hash[untyped, untyped]) -> self
78
- def eager_load: (*String | Symbol) -> self
79
- | (Hash[untyped, untyped]) -> self
80
- def preload: (*String | Symbol) -> self
81
- | (Hash[untyped, untyped]) -> self
82
- def find_by: (*untyped) -> Model?
83
- def find_by!: (*untyped) -> Model
84
- def find: (Integer id) -> Model
85
- def first: () -> Model
86
- | (Integer count) -> Array[Model]
87
- def find_each: (?batch_size: Integer, ?start: Integer, ?finish: Integer, ?error_on_ignore: bool) { (Model) -> void } -> nil
88
- def find_in_batches: (?batch_size: Integer, ?start: Integer, ?finish: Integer, ?error_on_ignore: bool) { (self) -> void } -> nil
89
- def destroy_all: () -> untyped
90
- def delete_all: () -> untyped
91
- def update_all: (*untyped) -> untyped
92
- def each: () { (Model) -> void } -> self
93
- end
94
-
95
- interface _ActiveRecord_Relation_ClassMethods[Model, Relation]
96
- def all: () -> Relation
97
- def ids: () -> Array[Integer]
98
- def none: () -> Relation
99
- def pluck: (Symbol | String column) -> Array[untyped]
100
- | (*Symbol | String columns) -> Array[Array[untyped]]
101
- def where: (*untyped) -> Relation
102
- def exists?: (*untyped) -> bool
103
- def order: (*untyped) -> Relation
104
- def group: (*Symbol | String) -> untyped
105
- def distinct: () -> self
106
- def or: (Relation) -> Relation
107
- def merge: (Relation) -> Relation
108
- def joins: (*String | Symbol) -> self
109
- | (Hash[untyped, untyped]) -> self
110
- def left_joins: (*String | Symbol) -> self
111
- | (Hash[untyped, untyped]) -> self
112
- def left_outer_joins: (*String | Symbol) -> self
113
- | (Hash[untyped, untyped]) -> self
114
- def includes: (*String | Symbol) -> self
115
- | (Hash[untyped, untyped]) -> self
116
- def eager_load: (*String | Symbol) -> self
117
- | (Hash[untyped, untyped]) -> self
118
- def preload: (*String | Symbol) -> self
119
- | (Hash[untyped, untyped]) -> self
120
- def find_by: (*untyped) -> Model?
121
- def find_by!: (*untyped) -> Model
122
- def find: (Integer id) -> Model
123
- def first: () -> Model
124
- | (Integer count) -> Array[Model]
125
- def find_each: (?batch_size: Integer, ?start: Integer, ?finish: Integer, ?error_on_ignore: bool) { (Model) -> void } -> nil
126
- def find_in_batches: (?batch_size: Integer, ?start: Integer, ?finish: Integer, ?error_on_ignore: bool) { (self) -> void } -> nil
127
- def destroy_all: () -> untyped
128
- def delete_all: () -> untyped
129
- def update_all: (*untyped) -> untyped
130
- end