tapioca 0.4.24 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|