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.
- checksums.yaml +4 -4
- data/Gemfile +14 -14
- data/README.md +2 -2
- data/Rakefile +5 -7
- data/exe/tapioca +2 -2
- data/lib/tapioca/cli.rb +256 -2
- data/lib/tapioca/compilers/dsl/aasm.rb +122 -0
- data/lib/tapioca/compilers/dsl/action_controller_helpers.rb +52 -12
- data/lib/tapioca/compilers/dsl/action_mailer.rb +6 -9
- data/lib/tapioca/compilers/dsl/active_job.rb +8 -12
- data/lib/tapioca/compilers/dsl/active_model_attributes.rb +131 -0
- data/lib/tapioca/compilers/dsl/active_record_associations.rb +33 -54
- data/lib/tapioca/compilers/dsl/active_record_columns.rb +10 -105
- data/lib/tapioca/compilers/dsl/active_record_enum.rb +8 -10
- data/lib/tapioca/compilers/dsl/active_record_scope.rb +7 -10
- data/lib/tapioca/compilers/dsl/active_record_typed_store.rb +5 -8
- data/lib/tapioca/compilers/dsl/active_resource.rb +9 -37
- data/lib/tapioca/compilers/dsl/active_storage.rb +98 -0
- data/lib/tapioca/compilers/dsl/active_support_concern.rb +108 -0
- data/lib/tapioca/compilers/dsl/active_support_current_attributes.rb +13 -8
- data/lib/tapioca/compilers/dsl/base.rb +96 -82
- data/lib/tapioca/compilers/dsl/config.rb +111 -0
- data/lib/tapioca/compilers/dsl/frozen_record.rb +5 -7
- data/lib/tapioca/compilers/dsl/identity_cache.rb +66 -29
- data/lib/tapioca/compilers/dsl/protobuf.rb +19 -69
- data/lib/tapioca/compilers/dsl/sidekiq_worker.rb +25 -12
- data/lib/tapioca/compilers/dsl/smart_properties.rb +19 -31
- data/lib/tapioca/compilers/dsl/state_machines.rb +56 -78
- data/lib/tapioca/compilers/dsl/url_helpers.rb +7 -10
- data/lib/tapioca/compilers/dsl_compiler.rb +22 -38
- data/lib/tapioca/compilers/requires_compiler.rb +2 -2
- data/lib/tapioca/compilers/sorbet.rb +26 -5
- data/lib/tapioca/compilers/symbol_table/symbol_generator.rb +139 -154
- data/lib/tapioca/compilers/symbol_table/symbol_loader.rb +4 -4
- data/lib/tapioca/compilers/symbol_table_compiler.rb +1 -1
- data/lib/tapioca/compilers/todos_compiler.rb +1 -1
- data/lib/tapioca/config.rb +2 -0
- data/lib/tapioca/config_builder.rb +4 -2
- data/lib/tapioca/constant_locator.rb +6 -8
- data/lib/tapioca/gemfile.rb +26 -19
- data/lib/tapioca/generator.rb +127 -43
- data/lib/tapioca/generic_type_registry.rb +25 -98
- data/lib/tapioca/helpers/active_record_column_type_helper.rb +98 -0
- data/lib/tapioca/internal.rb +1 -9
- data/lib/tapioca/loader.rb +14 -48
- data/lib/tapioca/rbi_ext/model.rb +122 -0
- data/lib/tapioca/reflection.rb +131 -0
- data/lib/tapioca/sorbet_ext/fixed_hash_patch.rb +1 -1
- data/lib/tapioca/sorbet_ext/generic_name_patch.rb +72 -4
- data/lib/tapioca/sorbet_ext/name_patch.rb +1 -1
- data/lib/tapioca/version.rb +1 -1
- data/lib/tapioca.rb +2 -0
- metadata +34 -22
- data/lib/tapioca/cli/main.rb +0 -146
- data/lib/tapioca/core_ext/class.rb +0 -28
- data/lib/tapioca/core_ext/string.rb +0 -18
- data/lib/tapioca/rbi/model.rb +0 -405
- data/lib/tapioca/rbi/printer.rb +0 -410
- data/lib/tapioca/rbi/rewriters/group_nodes.rb +0 -106
- data/lib/tapioca/rbi/rewriters/nest_non_public_methods.rb +0 -65
- data/lib/tapioca/rbi/rewriters/nest_singleton_methods.rb +0 -42
- data/lib/tapioca/rbi/rewriters/sort_nodes.rb +0 -86
- 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
|
data/lib/tapioca/rbi/visitor.rb
DELETED
@@ -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
|