tapioca 0.4.23 → 0.5.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 (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 +19 -31
  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 +26 -19
  41. data/lib/tapioca/generator.rb +127 -43
  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 -9
  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 +2 -0
  53. metadata +35 -23
  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 -82
  63. data/lib/tapioca/rbi/visitor.rb +0 -21
@@ -1,65 +0,0 @@
1
- # typed: strict
2
- # frozen_string_literal: true
3
-
4
- module Tapioca
5
- module RBI
6
- module Rewriters
7
- class NestNonPublicMethods < Visitor
8
- extend T::Sig
9
-
10
- sig { override.params(node: T.nilable(Node)).void }
11
- def visit(node)
12
- return unless node
13
-
14
- case node
15
- when Tree
16
- public_group = VisibilityGroup.new(Visibility::Public)
17
- protected_group = VisibilityGroup.new(Visibility::Protected)
18
- private_group = VisibilityGroup.new(Visibility::Private)
19
-
20
- node.nodes.dup.each do |child|
21
- visit(child)
22
- next unless child.is_a?(Method)
23
- child.detach
24
- case child.visibility
25
- when Visibility::Protected
26
- protected_group << child
27
- when Visibility::Private
28
- private_group << child
29
- else
30
- public_group << child
31
- end
32
- end
33
-
34
- node << public_group unless public_group.empty?
35
- node << protected_group unless protected_group.empty?
36
- node << private_group unless private_group.empty?
37
- end
38
- end
39
- end
40
- end
41
-
42
- class Tree
43
- extend T::Sig
44
-
45
- sig { void }
46
- def nest_non_public_methods!
47
- visitor = Rewriters::NestNonPublicMethods.new
48
- visitor.visit(self)
49
- end
50
- end
51
-
52
- class VisibilityGroup < Tree
53
- extend T::Sig
54
-
55
- sig { returns(Visibility) }
56
- attr_reader :visibility
57
-
58
- sig { params(visibility: Visibility).void }
59
- def initialize(visibility)
60
- super()
61
- @visibility = visibility
62
- end
63
- end
64
- end
65
- end
@@ -1,42 +0,0 @@
1
- # typed: strict
2
- # frozen_string_literal: true
3
-
4
- module Tapioca
5
- module RBI
6
- module Rewriters
7
- class NestSingletonMethods < Visitor
8
- extend T::Sig
9
-
10
- sig { override.params(node: T.nilable(Node)).void }
11
- def visit(node)
12
- return unless node
13
-
14
- case node
15
- when Tree
16
- singleton_class = SingletonClass.new
17
-
18
- node.nodes.dup.each do |child|
19
- visit(child)
20
- next unless child.is_a?(Method) && child.is_singleton
21
- child.detach
22
- child.is_singleton = false
23
- singleton_class << child
24
- end
25
-
26
- node << singleton_class unless singleton_class.empty?
27
- end
28
- end
29
- end
30
- end
31
-
32
- class Tree
33
- extend T::Sig
34
-
35
- sig { void }
36
- def nest_singleton_methods!
37
- visitor = Rewriters::NestSingletonMethods.new
38
- visitor.visit(self)
39
- end
40
- end
41
- end
42
- end
@@ -1,82 +0,0 @@
1
- # typed: strict
2
- # frozen_string_literal: true
3
-
4
- module Tapioca
5
- module RBI
6
- module Rewriters
7
- class SortNodes < Visitor
8
- extend T::Sig
9
-
10
- sig { override.params(node: T.nilable(Node)).void }
11
- def visit(node)
12
- return unless node.is_a?(Tree)
13
- visit_all(node.nodes)
14
- node.nodes.sort! do |a, b|
15
- res = node_rank(a) <=> node_rank(b)
16
- res = node_name(a) <=> node_name(b) if res == 0
17
- res || 0
18
- end
19
- end
20
-
21
- private
22
-
23
- sig { params(node: Node).returns(Integer) }
24
- def node_rank(node)
25
- case node
26
- when Group then kind_rank(node.kind)
27
- when Include, Extend then 0
28
- when Helper then 1
29
- when TypeMember then 2
30
- when MixesInClassMethods then 3
31
- when TStructField then 4
32
- when TEnumBlock then 5
33
- when Method
34
- if node.name == "initialize"
35
- 7
36
- else
37
- 8
38
- end
39
- when Scope, Const then 9
40
- else
41
- 10
42
- end
43
- end
44
-
45
- sig { params(kind: Group::Kind).returns(Integer) }
46
- def kind_rank(kind)
47
- case kind
48
- when Group::Kind::Mixins then 0
49
- when Group::Kind::Helpers then 1
50
- when Group::Kind::TypeMembers then 2
51
- when Group::Kind::MixesInClassMethods then 3
52
- when Group::Kind::TStructFields then 4
53
- when Group::Kind::TEnums then 5
54
- when Group::Kind::Inits then 6
55
- when Group::Kind::Methods then 7
56
- when Group::Kind::Consts then 8
57
- else
58
- T.absurd(kind)
59
- end
60
- end
61
-
62
- sig { params(node: Node).returns(T.nilable(String)) }
63
- def node_name(node)
64
- case node
65
- when Module, Class, Const, Method, Helper, TStructField
66
- node.name
67
- end
68
- end
69
- end
70
- end
71
-
72
- class Tree
73
- extend T::Sig
74
-
75
- sig { void }
76
- def sort_nodes!
77
- visitor = Rewriters::SortNodes.new
78
- visitor.visit(self)
79
- end
80
- end
81
- end
82
- end
@@ -1,21 +0,0 @@
1
- # typed: strict
2
- # frozen_string_literal: true
3
-
4
- module Tapioca
5
- module RBI
6
- class Visitor
7
- extend T::Helpers
8
- extend T::Sig
9
-
10
- abstract!
11
-
12
- sig { abstract.params(node: T.nilable(Node)).void }
13
- def visit(node); end
14
-
15
- sig { params(nodes: T::Array[Node]).void }
16
- def visit_all(nodes)
17
- nodes.each { |node| visit(node) }
18
- end
19
- end
20
- end
21
- end