tapioca 0.4.23 → 0.5.0

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