tapioca 0.4.24 → 0.5.1

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 +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,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,86 +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
- original_order = node.nodes.map.with_index.to_h
15
- node.nodes.sort! do |a, b|
16
- res = node_rank(a) <=> node_rank(b)
17
- res = node_name(a) <=> node_name(b) if res == 0
18
- res = (original_order[a] || 0) <=> (original_order[b] || 0) if res == 0
19
- res || 0
20
- end
21
- end
22
-
23
- private
24
-
25
- sig { params(node: Node).returns(Integer) }
26
- def node_rank(node)
27
- case node
28
- when Group then group_rank(node.kind)
29
- when Include, Extend then 10
30
- when Helper then 20
31
- when TypeMember then 30
32
- when MixesInClassMethods then 40
33
- when TStructField then 50
34
- when TEnumBlock then 60
35
- when Method
36
- if node.name == "initialize"
37
- 71
38
- elsif !node.is_singleton
39
- 72
40
- else
41
- 73
42
- end
43
- when Scope, Const then 80
44
- else
45
- 100
46
- end
47
- end
48
-
49
- sig { params(kind: Group::Kind).returns(Integer) }
50
- def group_rank(kind)
51
- case kind
52
- when Group::Kind::Mixins then 0
53
- when Group::Kind::Helpers then 1
54
- when Group::Kind::TypeMembers then 2
55
- when Group::Kind::MixesInClassMethods then 3
56
- when Group::Kind::TStructFields then 4
57
- when Group::Kind::TEnums then 5
58
- when Group::Kind::Inits then 6
59
- when Group::Kind::Methods then 7
60
- when Group::Kind::Consts then 8
61
- else
62
- T.absurd(kind)
63
- end
64
- end
65
-
66
- sig { params(node: Node).returns(T.nilable(String)) }
67
- def node_name(node)
68
- case node
69
- when Module, Class, Const, Method, Helper, TStructField
70
- node.name
71
- end
72
- end
73
- end
74
- end
75
-
76
- class Tree
77
- extend T::Sig
78
-
79
- sig { void }
80
- def sort_nodes!
81
- visitor = Rewriters::SortNodes.new
82
- visitor.visit(self)
83
- end
84
- end
85
- end
86
- 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