rbi 0.2.4 → 0.3.0
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 +1 -1
- data/lib/rbi/formatter.rb +5 -16
- data/lib/rbi/index.rb +37 -41
- data/lib/rbi/loc.rb +6 -18
- data/lib/rbi/model.rb +207 -575
- data/lib/rbi/parser.rb +64 -63
- data/lib/rbi/printer.rb +135 -101
- data/lib/rbi/rbs/method_type_translator.rb +120 -0
- data/lib/rbi/rbs/type_translator.rb +181 -0
- data/lib/rbi/rbs_printer.rb +178 -116
- data/lib/rbi/rewriters/add_sig_templates.rb +7 -10
- data/lib/rbi/rewriters/annotate.rb +6 -9
- data/lib/rbi/rewriters/attr_to_methods.rb +16 -32
- data/lib/rbi/rewriters/deannotate.rb +5 -8
- data/lib/rbi/rewriters/filter_versions.rb +7 -12
- data/lib/rbi/rewriters/flatten_singleton_methods.rb +3 -6
- data/lib/rbi/rewriters/flatten_visibilities.rb +4 -7
- data/lib/rbi/rewriters/group_nodes.rb +6 -11
- data/lib/rbi/rewriters/merge_trees.rb +74 -122
- data/lib/rbi/rewriters/nest_non_public_members.rb +5 -10
- data/lib/rbi/rewriters/nest_singleton_methods.rb +3 -6
- data/lib/rbi/rewriters/nest_top_level_members.rb +4 -7
- data/lib/rbi/rewriters/remove_known_definitions.rb +10 -20
- data/lib/rbi/rewriters/sort_nodes.rb +7 -10
- data/lib/rbi/rewriters/translate_rbs_sigs.rb +87 -0
- data/lib/rbi/type.rb +127 -129
- data/lib/rbi/type_parser.rb +15 -15
- data/lib/rbi/type_visitor.rb +19 -21
- data/lib/rbi/version.rb +1 -1
- data/lib/rbi/visitor.rb +50 -46
- data/lib/rbi.rb +7 -3
- data/rbi/rbi.rbi +4686 -0
- metadata +21 -3
@@ -4,9 +4,8 @@
|
|
4
4
|
module RBI
|
5
5
|
module Rewriters
|
6
6
|
class SortNodes < Visitor
|
7
|
-
|
8
|
-
|
9
|
-
sig { override.params(node: T.nilable(Node)).void }
|
7
|
+
# @override
|
8
|
+
#: (Node? node) -> void
|
10
9
|
def visit(node)
|
11
10
|
sort_node_names!(node) if node
|
12
11
|
|
@@ -41,7 +40,7 @@ module RBI
|
|
41
40
|
|
42
41
|
private
|
43
42
|
|
44
|
-
|
43
|
+
#: (Node node) -> Integer
|
45
44
|
def node_rank(node)
|
46
45
|
case node
|
47
46
|
when Group then group_rank(node.kind)
|
@@ -69,7 +68,7 @@ module RBI
|
|
69
68
|
end
|
70
69
|
end
|
71
70
|
|
72
|
-
|
71
|
+
#: (Group::Kind kind) -> Integer
|
73
72
|
def group_rank(kind)
|
74
73
|
case kind
|
75
74
|
when Group::Kind::Mixins then 0
|
@@ -90,7 +89,7 @@ module RBI
|
|
90
89
|
end
|
91
90
|
end
|
92
91
|
|
93
|
-
|
92
|
+
#: (Node node) -> String?
|
94
93
|
def node_name(node)
|
95
94
|
case node
|
96
95
|
when Module, Class, Struct, Const, Method, Helper, RequiresAncestor
|
@@ -102,7 +101,7 @@ module RBI
|
|
102
101
|
end
|
103
102
|
end
|
104
103
|
|
105
|
-
|
104
|
+
#: (Node node) -> void
|
106
105
|
def sort_node_names!(node)
|
107
106
|
case node
|
108
107
|
when Attr
|
@@ -113,9 +112,7 @@ module RBI
|
|
113
112
|
end
|
114
113
|
|
115
114
|
class Tree
|
116
|
-
|
117
|
-
|
118
|
-
sig { void }
|
115
|
+
#: -> void
|
119
116
|
def sort_nodes!
|
120
117
|
visitor = Rewriters::SortNodes.new
|
121
118
|
visitor.visit(self)
|
@@ -0,0 +1,87 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module RBI
|
5
|
+
module Rewriters
|
6
|
+
# Translate all RBS signature comments to Sorbet RBI signatures
|
7
|
+
class TranslateRBSSigs < Visitor
|
8
|
+
class Error < RBI::Error; end
|
9
|
+
|
10
|
+
# @override
|
11
|
+
#: (Node? node) -> void
|
12
|
+
def visit(node)
|
13
|
+
return unless node
|
14
|
+
|
15
|
+
case node
|
16
|
+
when Tree
|
17
|
+
visit_all(node.nodes)
|
18
|
+
when AttrAccessor, AttrReader, AttrWriter
|
19
|
+
rbs_comments = extract_rbs_comments(node)
|
20
|
+
rbs_comments.each do |comment|
|
21
|
+
node.sigs << translate_rbs_attr_type(node, comment)
|
22
|
+
end
|
23
|
+
when Method
|
24
|
+
rbs_comments = extract_rbs_comments(node)
|
25
|
+
rbs_comments.each do |comment|
|
26
|
+
node.sigs << translate_rbs_method_type(node, comment)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
#: (Method | Attr) -> Array[RBSComment]
|
34
|
+
def extract_rbs_comments(node)
|
35
|
+
comments = node.comments.dup
|
36
|
+
node.comments.clear
|
37
|
+
|
38
|
+
rbs_sigs = T.let([], T::Array[RBSComment])
|
39
|
+
|
40
|
+
comments.each do |comment|
|
41
|
+
case comment
|
42
|
+
when RBSComment
|
43
|
+
rbs_sigs << comment
|
44
|
+
else
|
45
|
+
node.comments << comment
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
rbs_sigs
|
50
|
+
end
|
51
|
+
|
52
|
+
#: (Method, RBSComment) -> Sig
|
53
|
+
def translate_rbs_method_type(node, comment)
|
54
|
+
method_type = ::RBS::Parser.parse_method_type(comment.text)
|
55
|
+
translator = RBS::MethodTypeTranslator.new(node)
|
56
|
+
translator.visit(method_type)
|
57
|
+
translator.result
|
58
|
+
end
|
59
|
+
|
60
|
+
#: (Attr, RBSComment) -> Sig
|
61
|
+
def translate_rbs_attr_type(node, comment)
|
62
|
+
attr_type = ::RBS::Parser.parse_type(comment.text)
|
63
|
+
sig = Sig.new
|
64
|
+
|
65
|
+
if node.is_a?(AttrWriter)
|
66
|
+
if node.names.size != 1
|
67
|
+
raise Error, "AttrWriter must have exactly one name"
|
68
|
+
end
|
69
|
+
|
70
|
+
name = T.must(node.names.first)
|
71
|
+
sig.params << SigParam.new(name.to_s, RBS::TypeTranslator.translate(attr_type))
|
72
|
+
end
|
73
|
+
|
74
|
+
sig.return_type = RBS::TypeTranslator.translate(attr_type)
|
75
|
+
sig
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
class Tree
|
81
|
+
#: -> void
|
82
|
+
def translate_rbs_sigs!
|
83
|
+
visitor = Rewriters::TranslateRBSSigs.new
|
84
|
+
visitor.visit(self)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|