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,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