tapioca 0.4.25 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +14 -14
  3. data/README.md +2 -2
  4. data/Rakefile +5 -7
  5. data/exe/tapioca +2 -2
  6. data/lib/tapioca/cli.rb +256 -2
  7. data/lib/tapioca/compilers/dsl/aasm.rb +122 -0
  8. data/lib/tapioca/compilers/dsl/action_controller_helpers.rb +52 -12
  9. data/lib/tapioca/compilers/dsl/action_mailer.rb +6 -9
  10. data/lib/tapioca/compilers/dsl/active_job.rb +8 -12
  11. data/lib/tapioca/compilers/dsl/active_model_attributes.rb +131 -0
  12. data/lib/tapioca/compilers/dsl/active_record_associations.rb +33 -54
  13. data/lib/tapioca/compilers/dsl/active_record_columns.rb +10 -105
  14. data/lib/tapioca/compilers/dsl/active_record_enum.rb +8 -10
  15. data/lib/tapioca/compilers/dsl/active_record_scope.rb +7 -10
  16. data/lib/tapioca/compilers/dsl/active_record_typed_store.rb +5 -8
  17. data/lib/tapioca/compilers/dsl/active_resource.rb +9 -37
  18. data/lib/tapioca/compilers/dsl/active_storage.rb +98 -0
  19. data/lib/tapioca/compilers/dsl/active_support_concern.rb +108 -0
  20. data/lib/tapioca/compilers/dsl/active_support_current_attributes.rb +13 -8
  21. data/lib/tapioca/compilers/dsl/base.rb +96 -82
  22. data/lib/tapioca/compilers/dsl/config.rb +111 -0
  23. data/lib/tapioca/compilers/dsl/frozen_record.rb +5 -7
  24. data/lib/tapioca/compilers/dsl/identity_cache.rb +66 -29
  25. data/lib/tapioca/compilers/dsl/protobuf.rb +19 -69
  26. data/lib/tapioca/compilers/dsl/sidekiq_worker.rb +25 -12
  27. data/lib/tapioca/compilers/dsl/smart_properties.rb +21 -33
  28. data/lib/tapioca/compilers/dsl/state_machines.rb +56 -78
  29. data/lib/tapioca/compilers/dsl/url_helpers.rb +7 -10
  30. data/lib/tapioca/compilers/dsl_compiler.rb +22 -38
  31. data/lib/tapioca/compilers/requires_compiler.rb +2 -2
  32. data/lib/tapioca/compilers/sorbet.rb +26 -5
  33. data/lib/tapioca/compilers/symbol_table/symbol_generator.rb +139 -154
  34. data/lib/tapioca/compilers/symbol_table/symbol_loader.rb +4 -4
  35. data/lib/tapioca/compilers/symbol_table_compiler.rb +1 -1
  36. data/lib/tapioca/compilers/todos_compiler.rb +1 -1
  37. data/lib/tapioca/config.rb +2 -0
  38. data/lib/tapioca/config_builder.rb +4 -2
  39. data/lib/tapioca/constant_locator.rb +6 -8
  40. data/lib/tapioca/gemfile.rb +10 -12
  41. data/lib/tapioca/generator.rb +129 -45
  42. data/lib/tapioca/generic_type_registry.rb +25 -98
  43. data/lib/tapioca/helpers/active_record_column_type_helper.rb +98 -0
  44. data/lib/tapioca/internal.rb +1 -10
  45. data/lib/tapioca/loader.rb +14 -48
  46. data/lib/tapioca/rbi_ext/model.rb +122 -0
  47. data/lib/tapioca/reflection.rb +131 -0
  48. data/lib/tapioca/sorbet_ext/fixed_hash_patch.rb +1 -1
  49. data/lib/tapioca/sorbet_ext/generic_name_patch.rb +72 -4
  50. data/lib/tapioca/sorbet_ext/name_patch.rb +1 -1
  51. data/lib/tapioca/version.rb +1 -1
  52. data/lib/tapioca.rb +3 -0
  53. metadata +34 -22
  54. data/lib/tapioca/cli/main.rb +0 -146
  55. data/lib/tapioca/core_ext/class.rb +0 -28
  56. data/lib/tapioca/core_ext/string.rb +0 -18
  57. data/lib/tapioca/rbi/model.rb +0 -405
  58. data/lib/tapioca/rbi/printer.rb +0 -410
  59. data/lib/tapioca/rbi/rewriters/group_nodes.rb +0 -106
  60. data/lib/tapioca/rbi/rewriters/nest_non_public_methods.rb +0 -65
  61. data/lib/tapioca/rbi/rewriters/nest_singleton_methods.rb +0 -42
  62. data/lib/tapioca/rbi/rewriters/sort_nodes.rb +0 -86
  63. data/lib/tapioca/rbi/visitor.rb +0 -21
@@ -1,28 +0,0 @@
1
- # typed: strict
2
- # frozen_string_literal: true
3
-
4
- class Class
5
- extend T::Sig
6
-
7
- # Returns an array with all classes that are < than its receiver.
8
- #
9
- # class C; end
10
- # C.descendants # => []
11
- #
12
- # class B < C; end
13
- # C.descendants # => [B]
14
- #
15
- # class A < B; end
16
- # C.descendants # => [B, A]
17
- #
18
- # class D < C; end
19
- # C.descendants # => [B, A, D]
20
- sig { returns(T::Array[Class]) }
21
- def descendants
22
- result = ObjectSpace.each_object(singleton_class).reject do |k|
23
- T.cast(k, Module).singleton_class? || k == self
24
- end
25
-
26
- T.cast(result, T::Array[Class])
27
- end
28
- end
@@ -1,18 +0,0 @@
1
- # typed: strict
2
- # frozen_string_literal: true
3
-
4
- class String
5
- extend T::Sig
6
-
7
- sig { returns(String) }
8
- def underscore
9
- return self unless /[A-Z-]|::/.match?(self)
10
-
11
- word = to_s.gsub("::", "/")
12
- word.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2')
13
- word.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
14
- word.tr!("-", "_")
15
- word.downcase!
16
- word
17
- end
18
- end
@@ -1,405 +0,0 @@
1
- # typed: strict
2
- # frozen_string_literal: true
3
-
4
- module Tapioca
5
- module RBI
6
- class Node
7
- extend T::Sig
8
- extend T::Helpers
9
-
10
- abstract!
11
-
12
- sig { returns(T.nilable(Tree)) }
13
- attr_accessor :parent_tree
14
-
15
- sig { void }
16
- def initialize
17
- @parent_tree = nil
18
- end
19
-
20
- sig { void }
21
- def detach
22
- tree = parent_tree
23
- return unless tree
24
- tree.nodes.delete(self)
25
- self.parent_tree = nil
26
- end
27
- end
28
-
29
- class Tree < Node
30
- extend T::Sig
31
-
32
- sig { returns(T::Array[Node]) }
33
- attr_reader :nodes
34
-
35
- sig { void }
36
- def initialize
37
- super()
38
- @nodes = T.let([], T::Array[Node])
39
- end
40
-
41
- sig { params(node: Node).void }
42
- def <<(node)
43
- node.parent_tree = self
44
- @nodes << node
45
- end
46
-
47
- sig { returns(T::Boolean) }
48
- def empty?
49
- nodes.empty?
50
- end
51
- end
52
-
53
- # Scopes
54
-
55
- class Scope < Tree
56
- extend T::Helpers
57
-
58
- abstract!
59
- end
60
-
61
- class Module < Scope
62
- extend T::Sig
63
-
64
- sig { returns(String) }
65
- attr_accessor :name
66
-
67
- sig { params(name: String).void }
68
- def initialize(name)
69
- super()
70
- @name = name
71
- end
72
- end
73
-
74
- class Class < Scope
75
- extend T::Sig
76
-
77
- sig { returns(String) }
78
- attr_accessor :name
79
-
80
- sig { returns(T.nilable(String)) }
81
- attr_accessor :superclass_name
82
-
83
- sig { params(name: String, superclass_name: T.nilable(String)).void }
84
- def initialize(name, superclass_name: nil)
85
- super()
86
- @name = name
87
- @superclass_name = superclass_name
88
- end
89
- end
90
-
91
- class SingletonClass < Scope
92
- extend T::Sig
93
-
94
- sig { void }
95
- def initialize
96
- super()
97
- end
98
- end
99
-
100
- # Consts
101
-
102
- class Const < Node
103
- extend T::Sig
104
-
105
- sig { returns(String) }
106
- attr_reader :name, :value
107
-
108
- sig { params(name: String, value: String).void }
109
- def initialize(name, value)
110
- super()
111
- @name = name
112
- @value = value
113
- end
114
- end
115
-
116
- # Methods and args
117
-
118
- class Method < Node
119
- extend T::Sig
120
-
121
- sig { returns(String) }
122
- attr_accessor :name
123
-
124
- sig { returns(T::Array[Param]) }
125
- attr_reader :params
126
-
127
- sig { returns(T::Boolean) }
128
- attr_accessor :is_singleton
129
-
130
- sig { returns(Visibility) }
131
- attr_accessor :visibility
132
-
133
- sig { returns(T::Array[Sig]) }
134
- attr_accessor :sigs
135
-
136
- sig do
137
- params(
138
- name: String,
139
- params: T::Array[Param],
140
- is_singleton: T::Boolean,
141
- visibility: Visibility,
142
- sigs: T::Array[Sig]
143
- ).void
144
- end
145
- def initialize(name, params: [], is_singleton: false, visibility: Visibility::Public, sigs: [])
146
- super()
147
- @name = name
148
- @params = params
149
- @is_singleton = is_singleton
150
- @visibility = visibility
151
- @sigs = sigs
152
- end
153
-
154
- sig { params(param: Param).void }
155
- def <<(param)
156
- @params << param
157
- end
158
- end
159
-
160
- class Param < Node
161
- extend T::Sig
162
-
163
- sig { returns(String) }
164
- attr_reader :name
165
-
166
- sig { params(name: String).void }
167
- def initialize(name)
168
- super()
169
- @name = name
170
- end
171
- end
172
-
173
- class OptParam < Param
174
- extend T::Sig
175
-
176
- sig { returns(String) }
177
- attr_reader :value
178
-
179
- sig { params(name: String, value: String).void }
180
- def initialize(name, value)
181
- super(name)
182
- @value = value
183
- end
184
- end
185
-
186
- class RestParam < Param; end
187
- class KwParam < Param; end
188
- class KwOptParam < OptParam; end
189
- class KwRestParam < Param; end
190
- class BlockParam < Param; end
191
-
192
- # Mixins
193
-
194
- class Mixin < Node
195
- extend T::Sig
196
- extend T::Helpers
197
-
198
- abstract!
199
-
200
- sig { returns(String) }
201
- attr_reader :name
202
-
203
- sig { params(name: String).void }
204
- def initialize(name)
205
- super()
206
- @name = name
207
- end
208
- end
209
-
210
- class Include < Mixin; end
211
- class Extend < Mixin; end
212
-
213
- # Visibility
214
-
215
- class Visibility < Node
216
- extend T::Sig
217
- extend T::Helpers
218
-
219
- abstract!
220
-
221
- sig { returns(Symbol) }
222
- attr_reader :visibility
223
-
224
- sig { params(visibility: Symbol).void }
225
- def initialize(visibility)
226
- super()
227
- @visibility = visibility
228
- end
229
-
230
- sig { returns(T::Boolean) }
231
- def public?
232
- visibility == :public
233
- end
234
-
235
- Public = T.let(Visibility.new(:public), Visibility)
236
- Protected = T.let(Visibility.new(:protected), Visibility)
237
- Private = T.let(Visibility.new(:private), Visibility)
238
- end
239
-
240
- # Sorbet's sigs
241
-
242
- class Sig < Node
243
- extend T::Sig
244
-
245
- sig { returns(T::Array[SigParam]) }
246
- attr_reader :params
247
-
248
- sig { returns(T.nilable(String)) }
249
- attr_accessor :return_type
250
-
251
- sig { returns(T::Boolean) }
252
- attr_accessor :is_abstract, :is_override, :is_overridable
253
-
254
- sig { returns(T::Array[String]) }
255
- attr_reader :type_params
256
-
257
- sig do
258
- params(
259
- params: T::Array[SigParam],
260
- return_type: T.nilable(String),
261
- is_abstract: T::Boolean,
262
- is_override: T::Boolean,
263
- is_overridable: T::Boolean,
264
- type_params: T::Array[String]
265
- ).void
266
- end
267
- def initialize(
268
- params: [],
269
- return_type: nil,
270
- is_abstract: false,
271
- is_override: false,
272
- is_overridable: false,
273
- type_params: []
274
- )
275
- super()
276
- @params = params
277
- @return_type = return_type
278
- @is_abstract = is_abstract
279
- @is_override = is_override
280
- @is_overridable = is_overridable
281
- @type_params = type_params
282
- end
283
-
284
- sig { params(param: SigParam).void }
285
- def <<(param)
286
- @params << param
287
- end
288
- end
289
-
290
- class SigParam < Node
291
- extend T::Sig
292
-
293
- sig { returns(String) }
294
- attr_reader :name, :type
295
-
296
- sig { params(name: String, type: String).void }
297
- def initialize(name, type)
298
- super()
299
- @name = name
300
- @type = type
301
- end
302
- end
303
-
304
- # Sorbet's T::Struct
305
-
306
- class TStruct < Class
307
- extend T::Sig
308
-
309
- sig { params(name: String).void }
310
- def initialize(name)
311
- super(name, superclass_name: "::T::Struct")
312
- end
313
- end
314
-
315
- class TStructField < Node
316
- extend T::Sig
317
- extend T::Helpers
318
-
319
- abstract!
320
-
321
- sig { returns(String) }
322
- attr_accessor :name, :type
323
-
324
- sig { returns(T.nilable(String)) }
325
- attr_accessor :default
326
-
327
- sig do
328
- params(
329
- name: String,
330
- type: String,
331
- default: T.nilable(String)
332
- ).void
333
- end
334
- def initialize(name, type, default: nil)
335
- super()
336
- @name = name
337
- @type = type
338
- @default = default
339
- end
340
- end
341
-
342
- class TStructProp < TStructField; end
343
- class TStructConst < TStructField; end
344
-
345
- # Sorbet's T::Enum
346
-
347
- class TEnum < Class
348
- extend T::Sig
349
-
350
- sig { params(name: String).void }
351
- def initialize(name)
352
- super(name, superclass_name: "::T::Enum")
353
- end
354
- end
355
-
356
- class TEnumBlock < Node
357
- extend T::Sig
358
-
359
- sig { returns(T::Array[String]) }
360
- attr_reader :names
361
-
362
- sig { params(names: T::Array[String]).void }
363
- def initialize(names = [])
364
- super()
365
- @names = names
366
- end
367
-
368
- sig { returns(T::Boolean) }
369
- def empty?
370
- names.empty?
371
- end
372
- end
373
-
374
- # Sorbet's misc.
375
-
376
- class Helper < Node
377
- extend T::Helpers
378
-
379
- sig { returns(String) }
380
- attr_reader :name
381
-
382
- sig { params(name: String).void }
383
- def initialize(name)
384
- super()
385
- @name = name
386
- end
387
- end
388
-
389
- class TypeMember < Node
390
- extend T::Sig
391
-
392
- sig { returns(String) }
393
- attr_reader :name, :value
394
-
395
- sig { params(name: String, value: String).void }
396
- def initialize(name, value)
397
- super()
398
- @name = name
399
- @value = value
400
- end
401
- end
402
-
403
- class MixesInClassMethods < Mixin; end
404
- end
405
- end