rbs_rails 0.4.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/.gitattributes +1 -0
  3. data/.github/workflows/ci.yml +18 -0
  4. data/.gitignore +3 -1
  5. data/.gitmodules +0 -0
  6. data/CHANGELOG.md +13 -0
  7. data/Gemfile +2 -2
  8. data/README.md +24 -43
  9. data/Rakefile +2 -1
  10. data/Steepfile +12 -1
  11. data/bin/add-type-params.rb +2 -1
  12. data/bin/gem_rbs +94 -0
  13. data/bin/postprocess.rb +1 -1
  14. data/bin/rbs +29 -2
  15. data/bin/rbs-prototype-rb.rb +59 -6
  16. data/lib/rbs_rails.rb +4 -0
  17. data/lib/rbs_rails/active_record.rb +74 -46
  18. data/lib/rbs_rails/dependency_builder.rb +43 -0
  19. data/lib/rbs_rails/rake_task.rb +73 -0
  20. data/lib/rbs_rails/util.rb +25 -0
  21. data/lib/rbs_rails/version.rb +1 -1
  22. data/rbs_rails.gemspec +3 -2
  23. data/sig/fileutils.rbs +1 -0
  24. data/sig/rake.rbs +6 -0
  25. data/sig/rbs_rails/active_record.rbs +8 -2
  26. data/sig/rbs_rails/dependency_builder.rbs +9 -0
  27. data/sig/rbs_rails/rake_task.rbs +26 -0
  28. data/sig/rbs_rails/util.rbs +11 -0
  29. metadata +30 -46
  30. data/.travis.yml +0 -11
  31. data/assets/sig/action_controller.rbs +0 -49
  32. data/assets/sig/action_mailer.rbs +0 -8
  33. data/assets/sig/active_record.rbs +0 -137
  34. data/assets/sig/builtin.rbs +0 -7
  35. data/assets/sig/capybara.rbs +0 -14
  36. data/assets/sig/concurrent.rbs +0 -4
  37. data/assets/sig/erb.rbs +0 -4
  38. data/assets/sig/erubi.rbs +0 -4
  39. data/assets/sig/generated/actionpack.rbs +0 -11831
  40. data/assets/sig/generated/actionview.rbs +0 -10591
  41. data/assets/sig/generated/activejob.rbs +0 -1920
  42. data/assets/sig/generated/activemodel.rbs +0 -4214
  43. data/assets/sig/generated/activerecord-meta-programming.rbs +0 -98
  44. data/assets/sig/generated/activerecord.rbs +0 -24602
  45. data/assets/sig/generated/activesupport.rbs +0 -12613
  46. data/assets/sig/generated/railties.rbs +0 -4687
  47. data/assets/sig/i18n.rbs +0 -4
  48. data/assets/sig/libxml.rbs +0 -10
  49. data/assets/sig/minitest.rbs +0 -13
  50. data/assets/sig/nokogiri.rbs +0 -8
  51. data/assets/sig/patches/README.md +0 -4
  52. data/assets/sig/patches/for_actionpack.rbs +0 -74
  53. data/assets/sig/patches/for_actionview.rbs +0 -19
  54. data/assets/sig/patches/for_activemodel.rbs +0 -11
  55. data/assets/sig/patches/for_activerecord.rbs +0 -84
  56. data/assets/sig/patches/for_activesupport.rbs +0 -48
  57. data/assets/sig/patches/for_railties.rbs +0 -30
  58. data/assets/sig/pg.rbs +0 -5
  59. data/assets/sig/que.rbs +0 -4
  60. data/assets/sig/queue_classic.rbs +0 -4
  61. data/assets/sig/racc.rbs +0 -4
  62. data/assets/sig/rack-test.rbs +0 -6
  63. data/assets/sig/rack.rbs +0 -47
  64. data/assets/sig/rails.rbs +0 -14
  65. data/assets/sig/rdoc.rbs +0 -9
  66. data/assets/sig/sidekiq.rbs +0 -4
  67. data/assets/sig/sneakers.rbs +0 -4
  68. data/assets/sig/stdlib.rbs +0 -24
  69. data/assets/sig/sucker_punch.rbs +0 -4
  70. data/assets/sig/thor.rbs +0 -12
  71. data/assets/sig/tzinfo.rbs +0 -4
  72. data/bin/generate_rbs_from_rails_source_code.rb +0 -195
@@ -1,4 +0,0 @@
1
- module SuckerPunch
2
- module Job
3
- end
4
- end
@@ -1,12 +0,0 @@
1
- class Thor
2
- class Group
3
- end
4
-
5
- module Actions
6
- class CreateFile
7
- end
8
- end
9
-
10
- class Error
11
- end
12
- end
@@ -1,4 +0,0 @@
1
- module TZInfo
2
- class Timezone
3
- end
4
- end
@@ -1,195 +0,0 @@
1
- # Usage
2
- #
3
- # ruby bin/generate_rbs_from_rails_source_code.rb ../../rails/rails actionpack
4
-
5
- require 'bundler/inline'
6
-
7
- require 'pathname'
8
- require 'open3'
9
-
10
- SIG_DIR = Pathname('assets/sig/generated/')
11
-
12
- def bin(c)
13
- Pathname(__dir__).join(c).to_s
14
- end
15
-
16
- def sh!(*cmd, **kwargs)
17
- puts(cmd.join(' '))
18
- Open3.capture2(*cmd, **kwargs).then do |out, status|
19
- raise unless status.success?
20
-
21
- out
22
- end
23
- end
24
-
25
- def patch!(name, rbs)
26
- case name
27
- when 'actionpack'
28
- rbs.gsub!(/( def _reduce_\d+: \(untyped val, untyped _values\) -> )([A-Z]\w*)/) do
29
- "#{$~[1]}Nodes::#{$~[2]}"
30
- end || raise('it looks unnecessary.')
31
-
32
- # XXX: I guess add-type-params.rb resolves this
33
- rbs.gsub!('-> Parameter', '-> Parameter[untyped]') || raise('it looks unnecessary')
34
- when 'railties'
35
- rbs.gsub!(
36
- 'class NonSymbolAccessDeprecatedHash < HashWithIndifferentAccess',
37
- 'class NonSymbolAccessDeprecatedHash[T, U] < HashWithIndifferentAccess[T, U]')
38
- # XXX: I guess add-type-params.rb resolves this
39
- rbs.gsub!(
40
- 'def middleware: () -> Hash',
41
- 'def middleware: () -> Hash[untyped, untyped]')
42
- # XXX: I guess add-type-params.rb resolves this
43
- rbs.gsub!(
44
- 'def +: (untyped other) -> Collection',
45
- 'def +: (untyped other) -> Collection[untyped]')
46
- # XXX: I guess add-type-params.rb resolves this
47
- rbs.gsub!(
48
- 'def initializers_for: (untyped binding) -> Collection',
49
- 'def initializers_for: (untyped binding) -> Collection[untyped]')
50
- when 'activesupport'
51
- rbs.gsub!(
52
- /^ include Java$/,
53
- ' # include Java # Java module is missing')
54
- # XXX: I guess add-type-params.rb resolves this
55
- rbs.gsub!(
56
- 'class Configuration < ActiveSupport::InheritableOptions',
57
- 'class Configuration[T, U] < ActiveSupport::InheritableOptions[T, U]')
58
- # XXX: I guess add-type-params.rb resolves this
59
- rbs.gsub!(
60
- 'class InheritableOptions < OrderedOptions',
61
- 'class InheritableOptions[T, U] < OrderedOptions[T, U]')
62
- rbs.gsub!( # ref: 5c507aaae492ff5b2002fdd3ece2044b283b5d6f
63
- 'include ActiveSupport::Logger::Severity',
64
- 'include ::Logger::Severity')
65
- # XXX: I guess add-type-params.rb resolves this
66
- rbs.gsub!(
67
- 'def with_indifferent_access: () -> ActiveSupport::HashWithIndifferentAccess',
68
- 'def with_indifferent_access: () -> ActiveSupport::HashWithIndifferentAccess[K, V]')
69
- # XXX: I guess add-type-params.rb resolves this
70
- rbs.gsub!(
71
- 'def inquiry: () -> ActiveSupport::ArrayInquirer',
72
- 'def inquiry: () -> ActiveSupport::ArrayInquirer[Elem]')
73
-
74
- # These aliases are actually defined, but it causes duplicated method definition
75
- rbs.gsub!('alias to_s to_formatted_s', '')
76
- rbs.gsub!('alias + plus_with_duration', '')
77
- rbs.gsub!('alias - minus_with_duration', '')
78
- rbs.gsub!('alias - minus_with_coercion', '')
79
- rbs.gsub!('alias <=> compare_with_coercion', '')
80
- rbs.gsub!('alias eql? eql_with_coercion', '')
81
- rbs.gsub!('alias self.at self.at_with_coercion', '')
82
- rbs.gsub!('alias inspect readable_inspect', '')
83
- rbs.gsub!('alias default_inspect inspect', '')
84
-
85
- rbs.gsub!('HashWithIndifferentAccess: untyped', <<~RBS)
86
- # NOTE: HashWithIndifferentAccess and ActiveSupport::HashWithIndifferentAccess are the same object
87
- # but RBS doesn't have class alias syntax
88
- class HashWithIndifferentAccess[T, U] < ActiveSupport::HashWithIndifferentAccess[T, U]
89
- end
90
- RBS
91
- when 'actionview'
92
- rbs.gsub!(
93
- 'class CheckBoxBuilder < Builder',
94
- 'class CheckBoxBuilder < CollectionHelpers::Builder')
95
- rbs.gsub!(
96
- 'class RadioButtonBuilder < Builder',
97
- 'class RadioButtonBuilder < CollectionHelpers::Builder')
98
- rbs.gsub!('TemplateError: untyped', <<~RBS)
99
- # It is actual TemplateError = Template::Error, but we can't write it in RBS
100
- class TemplateError < Template::Error
101
- end
102
- RBS
103
- when 'activerecord'
104
- rbs.gsub!(':==', 'Symbol') # To avoid syntax error
105
-
106
- rbs.gsub!(
107
- '< Type::Value',
108
- '< ActiveModel::Type::Value')
109
- rbs.gsub!(
110
- '< Type::Binary',
111
- '< ActiveModel::Type::Binary')
112
- rbs.gsub!(
113
- '< Type::Decimal',
114
- '< ActiveModel::Type::Decimal')
115
- rbs.gsub!(
116
- '< Type::String',
117
- '< ActiveModel::Type::String')
118
- rbs.gsub!(
119
- '< Type::Integer',
120
- '< ActiveModel::Type::Integer')
121
-
122
- rbs.gsub!(
123
- 'class SchemaDumper < SchemaDumper',
124
- 'class SchemaDumper < ActiveRecord::SchemaDumper')
125
- rbs.gsub!(
126
- 'def schema_creation: () -> SchemaCreation',
127
- 'def schema_creation: () -> untyped')
128
- rbs.gsub!('V6_0: untyped', <<~RBS)
129
- # V6_0 and Current are the same object actually. hack for https://github.com/ruby/rbs/issues/345
130
- class V6_0 < Current
131
- end
132
- RBS
133
- rbs.gsub!('alias numeric decimal', '')
134
-
135
- # XXX: I guess add-type-params.rb resolves this
136
- rbs.gsub!(
137
- '-> ColumnDefinition',
138
- '-> ColumnDefinition[untyped]')
139
- # XXX: I guess add-type-params.rb resolves this
140
- rbs.gsub!(
141
- 'def build_point: (untyped x, untyped y) -> ActiveRecord::Point',
142
- 'def build_point: (untyped x, untyped y) -> ActiveRecord::Point[untyped]')
143
- # XXX: I guess add-type-params.rb resolves this
144
- rbs.gsub!(
145
- 'class NullMigration < MigrationProxy',
146
- 'class NullMigration[T] < MigrationProxy[T]')
147
- # XXX: I guess add-type-params.rb resolves this
148
- rbs.gsub!(
149
- '-> JoinKeys',
150
- '-> JoinKeys[untyped]')
151
- # XXX: I guess add-type-params.rb resolves this
152
- rbs.gsub!(
153
- 'def row_num_literal: (untyped order_by) -> RowNumber',
154
- 'def row_num_literal: (untyped order_by) -> RowNumber[untyped]')
155
-
156
- rbs.gsub!(
157
- 'def get_database_version: () -> Version',
158
- 'def get_database_version: () -> AbstractAdapter::Version')
159
- rbs.gsub!(
160
- 'def get_database_version: () -> SQLite3Adapter::Version',
161
- 'def get_database_version: () -> AbstractAdapter::Version')
162
- rbs.gsub!(
163
- 'def []: (untyped name) -> Attribute',
164
- 'def []: (untyped name) -> ::Arel::Attributes::Attribute')
165
-
166
- end
167
- end
168
-
169
- def generate!(rails_code_dir, name)
170
- files = Pathname(rails_code_dir).join(name, 'lib').glob('**/*.rb').map(&:to_s)
171
- generated_rbs_path = SIG_DIR.join("#{name}.rbs")
172
-
173
- rbs = sh! 'ruby', bin("rbs-prototype-rb.rb"), 'prototype', 'rb', *files
174
- rbs.gsub!(/^(?<indent>\s*)class (?<name>\S+) < $/) { "#{$~[:indent]}class #{$~[:name]} # Note: It inherits unnamed class, but omitted" }
175
- rbs.gsub!(/[^[:ascii:]]+/, '(trim non-ascii characters)')
176
- patch! name, rbs
177
- generated_rbs_path.write(rbs)
178
-
179
- rbs = sh! 'ruby', bin('add-type-params.rb'), generated_rbs_path.to_s
180
- generated_rbs_path.write(rbs)
181
-
182
- sh!({ 'ONLY' => name }, 'ruby', bin('postprocess.rb'), '-rlogger', '-rmutex_m', '-Iassets/sig', '-Isig', 'assets/')
183
- end
184
-
185
- def main(rails_code_dir, name)
186
- if name == 'all'
187
- %w[actionpack activejob railties activemodel activesupport actionview activerecord].each do |n|
188
- generate!(rails_code_dir, n)
189
- end
190
- else
191
- generate!(rails_code_dir, name)
192
- end
193
- end
194
-
195
- main(*ARGV)