rbs_rails 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 820a0b86c257e12194d883e6f5edda1793b54cb789c2b57da2e496e16041c803
4
- data.tar.gz: 173abfdce9274fc34671198b7640f5e84a92c8b0bb1a7ede8224cd2fb851137d
3
+ metadata.gz: 5dd350161bbcf1358c43fbda2fb5b42aa106b42a14f079a26e60338e9ccbae92
4
+ data.tar.gz: b5a700311050c8500037f70be69d652c96bbf20ebc0334ad49d7c97964b977ec
5
5
  SHA512:
6
- metadata.gz: 500bb14e66e9d6188d931e8a655b8af42b17caf13fa9487e8ad22318a54f34b5e05c412e65c2e68258d13165cb5760d09dc00d52d05b7cb9c9696e97dbbcc8bb
7
- data.tar.gz: 86e1ec208cba577ce7ed5ac4a6b7bcd5ada10fe7d3ca0fd4ba5e014a68144bbe3182fcbd04145e9b9472be24a627eb0d5c3a2b7424661caae25d43507390d15a
6
+ metadata.gz: 414a6a9fa8feb585dbae5826c68e9043eedeb3b4e1c43d112efdcdcb61c10686d18dc76d57191c34f456ec43c36246cb4c096ceb59dba7cdf0bba4f10a5e4159
7
+ data.tar.gz: da5d5c7f919d5b2dedfb596bb8e207210ee9a3391db6af13372cc976b57f3ba89ca4b8a19578847f538b4b6adfd547c634f261ac8e21030f2ec98dee3e15147e
data/.gitignore CHANGED
@@ -7,4 +7,6 @@
7
7
  /spec/reports/
8
8
  /tmp/
9
9
  /Gemfile.lock
10
- /test/sig
10
+ /test/app/sig/rbs_rails
11
+ /test/app/sig/app
12
+ /test/app/sig/path_helpers.rbs
data/Gemfile CHANGED
@@ -4,6 +4,6 @@ source "https://rubygems.org"
4
4
  gemspec
5
5
 
6
6
  gem "rake", "~> 12.0"
7
- gem 'rbs', '>= 0.14.0'
8
- gem 'steep', '>= 0.34.0'
7
+ gem 'rbs', '1.0.0'
8
+ gem 'steep', '>= 0.34.0', git: 'https://github.com/soutaro/steep.git'
9
9
  gem 'minitest'
data/README.md CHANGED
@@ -7,7 +7,7 @@ RBS files generator for Ruby on Rails.
7
7
  Add this line to your application's Gemfile:
8
8
 
9
9
  ```ruby
10
- gem 'rbs_rails'
10
+ gem 'rbs_rails', require: false
11
11
  ```
12
12
 
13
13
  And then execute:
@@ -20,56 +20,23 @@ Or install it yourself as:
20
20
 
21
21
  ## Usage
22
22
 
23
- ### For Active Record models
24
-
25
- It has two tasks.
26
-
27
- * `copy_signature_files`: Copy type definition files for Rails from rbs_rails.
28
- * `generate_rbs_for_model`: Generate RBS files from model classes.
23
+ Put the following code to `lib/tasks/rbs.rake`.
29
24
 
30
25
  ```ruby
31
- # Rakefile
32
-
33
- task copy_signature_files: :environment do
34
- require 'rbs_rails'
35
-
36
- to = Rails.root.join('sig/rbs_rails/')
37
- to.mkpath unless to.exist?
38
- RbsRails.copy_signatures(to: to)
39
- end
40
-
41
- task generate_rbs_for_model: :environment do
42
- require 'rbs_rails'
43
-
44
- out_dir = Rails.root / 'sig'
45
- out_dir.mkdir unless out_dir.exist?
26
+ require 'rbs_rails/rake_task'
46
27
 
47
- Rails.application.eager_load!
28
+ RbsRails::RakeTask.new
29
+ ```
48
30
 
49
- ActiveRecord::Base.descendants.each do |klass|
50
- next if klass.abstract_class?
31
+ Then, the following four tasks are available.
51
32
 
52
- path = out_dir / "app/models/#{klass.name.underscore}.rbs"
53
- FileUtils.mkdir_p(path.dirname)
33
+ * `rbs_rails:copy_signature_files`: Copy RBS files for rbs_rails
34
+ * `rbs_rails:generate_rbs_for_models`: Generate RBS files for Active Record models
35
+ * `rbs_rails:generate_rbs_for_path_helpers`: Generate RBS files for path helpers
36
+ * `rbs_rails:all`: Execute all tasks of RBS Rails
54
37
 
55
- sig = RbsRails::ActiveRecord.class_to_rbs(klass)
56
- path.write sig
57
- end
58
- end
59
- ```
60
38
 
61
- ### For path helpers
62
39
 
63
- ```ruby
64
- # Rakefile
65
-
66
- task generate_rbs_for_path_helpers: :environment do
67
- require 'rbs_rails'
68
- out_path = Rails.root.join 'sig/path_helpers.rbs'
69
- rbs = RbsRails::PathHelpers.generate
70
- out_path.write rbs
71
- end
72
- ```
73
40
 
74
41
  ### Steep integration
75
42
 
@@ -1,5 +1,5 @@
1
1
  module Rails
2
- overload def self.env: () -> ActiveSupport::StringInquirer
2
+ def self.env: () -> ActiveSupport::StringInquirer | ...
3
3
 
4
4
  module Dom
5
5
  module Testing
@@ -8,7 +8,3 @@ module Rails
8
8
  end
9
9
  end
10
10
  end
11
-
12
- class Rails::Application
13
- def routes: () -> untyped
14
- end
@@ -4,7 +4,7 @@ require 'bundler/inline'
4
4
 
5
5
  gemfile do
6
6
  source 'https://rubygems.org'
7
- gem 'rbs', '>= 0.19'
7
+ gem 'rbs', '1.0.0'
8
8
  end
9
9
 
10
10
  require 'rbs'
@@ -6,7 +6,7 @@ require 'bundler/inline'
6
6
 
7
7
  gemfile do
8
8
  source 'https://rubygems.org'
9
- gem 'rbs', '>= 0.19.0'
9
+ gem 'rbs', '1.0.0'
10
10
  end
11
11
 
12
12
  require 'rbs'
@@ -68,6 +68,7 @@ using Module.new {
68
68
  kls.members << RBS::AST::Members::AttrAccessor.new(
69
69
  name: f.children.first,
70
70
  type: untyped,
71
+ kind: :instance,
71
72
  ivar_name: false,
72
73
  annotations: [],
73
74
  location: nil,
@@ -98,6 +99,7 @@ using Module.new {
98
99
  name: name,
99
100
  ivar_name: :"@_#{name}",
100
101
  type: RBS::Types::Bases::Any.new(location: nil),
102
+ kind: context.attribute_kind,
101
103
  location: nil,
102
104
  comment: comments[node.first_lineno - 1],
103
105
  annotations: []
@@ -111,6 +113,7 @@ using Module.new {
111
113
  name: name,
112
114
  ivar_name: :"@_#{name}",
113
115
  type: RBS::Types::Bases::Any.new(location: nil),
116
+ kind: context.attribute_kind,
114
117
  location: nil,
115
118
  comment: comments[node.first_lineno - 1],
116
119
  annotations: []
@@ -124,6 +127,7 @@ using Module.new {
124
127
  name: name,
125
128
  ivar_name: :"@_#{name}",
126
129
  type: RBS::Types::Bases::Any.new(location: nil),
130
+ kind: context.attribute_kind,
127
131
  location: nil,
128
132
  comment: comments[node.first_lineno - 1],
129
133
  annotations: []
@@ -171,7 +175,7 @@ using Module.new {
171
175
 
172
176
  def struct_as_superclass
173
177
  name = RBS::TypeName.new(name: 'Struct', namespace: RBS::Namespace.root)
174
- RBS::AST::Declarations::Class::Super.new(name: name, args: ['untyped'])
178
+ RBS::AST::Declarations::Class::Super.new(name: name, args: ['untyped'], location: nil)
175
179
  end
176
180
  end
177
181
  }
@@ -303,23 +303,20 @@ module RbsRails
303
303
  when :string, :text, :citext, :uuid, :binary
304
304
  'String'
305
305
  when :datetime
306
- # TODO
307
- # ActiveSupport::TimeWithZone.name
308
- 'Time'
306
+ 'ActiveSupport::TimeWithZone'
309
307
  when :boolean
310
- "TrueClass | FalseClass"
308
+ "bool"
311
309
  when :jsonb, :json
312
310
  "untyped"
313
311
  when :date
314
- # TODO
315
- # Date.name
316
- 'untyped'
312
+ 'Date'
317
313
  when :time
318
314
  'Time'
319
315
  when :inet
320
316
  "IPAddr"
321
317
  else
322
- raise "unexpected: #{t.inspect}"
318
+ # Unknown column type, give up
319
+ 'untyped'
323
320
  end
324
321
  end
325
322
 
@@ -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.5.0"
5
+ VERSION = "0.6.0"
6
6
  end
@@ -26,5 +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', '>= 0.17'
29
+ spec.add_runtime_dependency 'rbs', '>= 1'
30
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
@@ -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.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masataka Pocke Kuwabara
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-12-17 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
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '0.17'
33
+ version: '1'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '0.17'
40
+ version: '1'
41
41
  description: A RBS files generator for Rails application
42
42
  email:
43
43
  - kuwabara@pocke.me
@@ -87,13 +87,16 @@ files:
87
87
  - lib/rbs_rails.rb
88
88
  - lib/rbs_rails/active_record.rb
89
89
  - lib/rbs_rails/path_helpers.rb
90
+ - lib/rbs_rails/rake_task.rb
90
91
  - lib/rbs_rails/version.rb
91
92
  - rbs_rails.gemspec
92
93
  - sig/fileutils.rbs
93
94
  - sig/parser.rbs
95
+ - sig/rake.rbs
94
96
  - sig/rbs_rails.rbs
95
97
  - sig/rbs_rails/active_record.rbs
96
98
  - sig/rbs_rails/path_helpers.rbs
99
+ - sig/rbs_rails/rake_task.rbs
97
100
  - sig/rbs_rails/version.rbs
98
101
  homepage: https://github.com/pocke/rbs_rails
99
102
  licenses:
@@ -116,7 +119,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
116
119
  - !ruby/object:Gem::Version
117
120
  version: '0'
118
121
  requirements: []
119
- rubygems_version: 3.2.1
122
+ rubygems_version: 3.2.3
120
123
  signing_key:
121
124
  specification_version: 4
122
125
  summary: A RBS files generator for Rails application