rbs-inline 0.4.0 → 0.6.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/README.md +8 -5
- data/Rakefile +12 -0
- data/lib/rbs/inline/annotation_parser/tokenizer.rb +361 -0
- data/lib/rbs/inline/annotation_parser.rb +548 -326
- data/lib/rbs/inline/ast/annotations.rb +433 -138
- data/lib/rbs/inline/ast/comment_lines.rb +17 -20
- data/lib/rbs/inline/ast/declarations.rb +301 -28
- data/lib/rbs/inline/ast/members.rb +130 -121
- data/lib/rbs/inline/ast/tree.rb +37 -22
- data/lib/rbs/inline/cli.rb +12 -12
- data/lib/rbs/inline/node_utils.rb +1 -1
- data/lib/rbs/inline/parser.rb +165 -67
- data/lib/rbs/inline/version.rb +1 -1
- data/lib/rbs/inline/writer.rb +395 -118
- data/lib/rbs/inline.rb +1 -0
- data/rbs_collection.lock.yaml +2 -2
- data/sig/generated/rbs/inline/annotation_parser/tokenizer.rbs +221 -0
- data/sig/generated/rbs/inline/annotation_parser.rbs +148 -92
- data/sig/generated/rbs/inline/ast/annotations.rbs +143 -37
- data/sig/generated/rbs/inline/ast/comment_lines.rbs +8 -4
- data/sig/generated/rbs/inline/ast/declarations.rbs +133 -10
- data/sig/generated/rbs/inline/ast/members.rbs +26 -15
- data/sig/generated/rbs/inline/ast/tree.rbs +23 -17
- data/sig/generated/rbs/inline/cli.rbs +3 -3
- data/sig/generated/rbs/inline/node_utils.rbs +1 -1
- data/sig/generated/rbs/inline/parser.rbs +35 -18
- data/sig/generated/rbs/inline/writer.rbs +62 -22
- metadata +5 -3
@@ -3,11 +3,11 @@
|
|
3
3
|
module RBS
|
4
4
|
module Inline
|
5
5
|
module AST
|
6
|
-
|
7
|
-
type token = [ Symbol, String ]
|
6
|
+
type token = [ Symbol, String ]
|
8
7
|
|
9
|
-
|
8
|
+
type tree = token | Tree | Types::t | MethodType | nil
|
10
9
|
|
10
|
+
class Tree
|
11
11
|
attr_reader trees: Array[tree]
|
12
12
|
|
13
13
|
attr_reader type: Symbol
|
@@ -16,21 +16,27 @@ module RBS
|
|
16
16
|
attr_reader non_trivia_trees: Array[tree]
|
17
17
|
|
18
18
|
# @rbs type: Symbol
|
19
|
-
def initialize: (Symbol type) ->
|
19
|
+
def initialize: (Symbol type) -> void
|
20
20
|
|
21
21
|
# @rbs tok: tree
|
22
|
-
# @rbs
|
22
|
+
# @rbs return: self
|
23
23
|
def <<: (tree tok) -> self
|
24
24
|
|
25
25
|
# Returns the source code associated to the tree
|
26
26
|
def to_s: () -> String
|
27
27
|
|
28
|
+
# Returns `true` if token at the given index is of the given type
|
29
|
+
def token?: (untyped type, at: untyped) -> untyped
|
30
|
+
|
31
|
+
# Returns `true` if tree at the given index is of the given type
|
32
|
+
def tree?: (untyped type, at: untyped) -> untyped
|
33
|
+
|
28
34
|
# Returns n-th token from the children
|
29
35
|
#
|
30
36
|
# Raises if the value is not a token or nil.
|
31
37
|
#
|
32
38
|
# @rbs index: Integer
|
33
|
-
# @rbs
|
39
|
+
# @rbs return: token?
|
34
40
|
def nth_token: (Integer index) -> token?
|
35
41
|
|
36
42
|
# Returns n-th token from the children
|
@@ -38,7 +44,7 @@ module RBS
|
|
38
44
|
# Returns `nil` if the value is not a token.
|
39
45
|
#
|
40
46
|
# @rbs index: Integer
|
41
|
-
# @rbs
|
47
|
+
# @rbs return: token?
|
42
48
|
def nth_token?: (Integer index) -> token?
|
43
49
|
|
44
50
|
# Returns n-th token from the children
|
@@ -46,7 +52,7 @@ module RBS
|
|
46
52
|
# Raises if the value is not token.
|
47
53
|
#
|
48
54
|
# @rbs index: Integer
|
49
|
-
# @rbs
|
55
|
+
# @rbs return: token
|
50
56
|
def nth_token!: (Integer index) -> token
|
51
57
|
|
52
58
|
# Returns n-th tree from the children
|
@@ -54,7 +60,7 @@ module RBS
|
|
54
60
|
# Raises if the value is not a tree or nil.
|
55
61
|
#
|
56
62
|
# @rbs index: Integer
|
57
|
-
# @rbs
|
63
|
+
# @rbs return: Tree?
|
58
64
|
def nth_tree: (Integer index) -> Tree?
|
59
65
|
|
60
66
|
# Returns n-th tree from the children
|
@@ -62,7 +68,7 @@ module RBS
|
|
62
68
|
# Returns `nil` if the value is not a tree or nil.
|
63
69
|
#
|
64
70
|
# @rbs index: Integer
|
65
|
-
# @rbs
|
71
|
+
# @rbs return: Tree?
|
66
72
|
def nth_tree?: (Integer index) -> Tree?
|
67
73
|
|
68
74
|
# Returns n-th tree from the children
|
@@ -70,7 +76,7 @@ module RBS
|
|
70
76
|
# Raises if the value is not a tree.
|
71
77
|
#
|
72
78
|
# @rbs index: Integer
|
73
|
-
# @rbs
|
79
|
+
# @rbs return: Tree
|
74
80
|
def nth_tree!: (Integer index) -> Tree
|
75
81
|
|
76
82
|
# Returns n-th type from the children
|
@@ -78,7 +84,7 @@ module RBS
|
|
78
84
|
# Raises if the value is not a type or nil.
|
79
85
|
#
|
80
86
|
# @rbs index: Integer
|
81
|
-
# @rbs
|
87
|
+
# @rbs return: Types::t?
|
82
88
|
def nth_type: (Integer index) -> Types::t?
|
83
89
|
|
84
90
|
# Returns n-th type from the children
|
@@ -86,7 +92,7 @@ module RBS
|
|
86
92
|
# Returns `nil` if the value is not a type.
|
87
93
|
#
|
88
94
|
# @rbs index: Integer
|
89
|
-
# @rbs
|
95
|
+
# @rbs return: Types::t?
|
90
96
|
def nth_type?: (Integer index) -> Types::t?
|
91
97
|
|
92
98
|
# Returns n-th type from the children
|
@@ -94,7 +100,7 @@ module RBS
|
|
94
100
|
# Raises if the value is not a type.
|
95
101
|
#
|
96
102
|
# @rbs index: Integer
|
97
|
-
# @rbs
|
103
|
+
# @rbs return: Types::t
|
98
104
|
def nth_type!: (Integer index) -> Types::t
|
99
105
|
|
100
106
|
# Returns n-th method type from the children
|
@@ -102,7 +108,7 @@ module RBS
|
|
102
108
|
# Raises if the value is not a method type or `nil`.
|
103
109
|
#
|
104
110
|
# @rbs index: Integer
|
105
|
-
# @rbs
|
111
|
+
# @rbs return: MethodType?
|
106
112
|
def nth_method_type: (Integer index) -> MethodType?
|
107
113
|
|
108
114
|
# Returns n-th method type from the children
|
@@ -110,7 +116,7 @@ module RBS
|
|
110
116
|
# Returns `nil` if the value is not a method type.
|
111
117
|
#
|
112
118
|
# @rbs index: Integer
|
113
|
-
# @rbs
|
119
|
+
# @rbs return: MethodType?
|
114
120
|
def nth_method_type?: (Integer index) -> MethodType?
|
115
121
|
|
116
122
|
# Returns n-th method tree from the children
|
@@ -118,7 +124,7 @@ module RBS
|
|
118
124
|
# Raises if the value is not a method tree.
|
119
125
|
#
|
120
126
|
# @rbs index: Integer
|
121
|
-
# @rbs
|
127
|
+
# @rbs return: MethodType
|
122
128
|
def nth_method_type!: (Integer index) -> MethodType
|
123
129
|
end
|
124
130
|
end
|
@@ -25,12 +25,12 @@ module RBS
|
|
25
25
|
# @rbs output_path: Pathname
|
26
26
|
def initialize: (Pathname pwd, Array[Pathname] base_paths, Pathname output_path) -> void
|
27
27
|
|
28
|
-
#
|
28
|
+
# : (Pathname) -> Pathname?
|
29
29
|
def calculate: (Pathname) -> Pathname?
|
30
30
|
|
31
31
|
# @rbs path: Pathname
|
32
32
|
# @rbs prefix: Pathname
|
33
|
-
# @rbs
|
33
|
+
# @rbs return: bool
|
34
34
|
def has_prefix?: (Pathname path, prefix: Pathname) -> bool
|
35
35
|
end
|
36
36
|
|
@@ -45,7 +45,7 @@ module RBS
|
|
45
45
|
def initialize: (?stdout: IO, ?stderr: IO) -> void
|
46
46
|
|
47
47
|
# @rbs args: Array[String]
|
48
|
-
# @rbs
|
48
|
+
# @rbs return: Integer
|
49
49
|
def run: (Array[String] args) -> Integer
|
50
50
|
end
|
51
51
|
end
|
@@ -5,11 +5,13 @@ use Prism::*
|
|
5
5
|
module RBS
|
6
6
|
module Inline
|
7
7
|
class Parser < Prism::Visitor
|
8
|
+
type with_members = AST::Declarations::ModuleDecl | AST::Declarations::ClassDecl | AST::Declarations::SingletonClassDecl | AST::Declarations::BlockDecl
|
9
|
+
|
8
10
|
# The top level declarations
|
9
11
|
attr_reader decls: Array[AST::Declarations::t]
|
10
12
|
|
11
13
|
# The surrounding declarations
|
12
|
-
attr_reader surrounding_decls: Array[
|
14
|
+
attr_reader surrounding_decls: Array[with_members]
|
13
15
|
|
14
16
|
# ParsingResult associated with the line number at the end
|
15
17
|
#
|
@@ -30,21 +32,30 @@ module RBS
|
|
30
32
|
|
31
33
|
def initialize: () -> void
|
32
34
|
|
35
|
+
# Parses the given Prism result to a three tuple
|
36
|
+
#
|
37
|
+
# Returns a three tuple of:
|
38
|
+
#
|
39
|
+
# 1. An array of `use` directives
|
40
|
+
# 2. An array of declarations
|
41
|
+
# 3. An array of RBS declarations given as `@rbs!` annotation at top-level
|
42
|
+
#
|
43
|
+
# Note that only RBS declarations are allowed in the top-level `@rbs!` annotations.
|
44
|
+
# RBS *members* are ignored in the array.
|
45
|
+
#
|
33
46
|
# @rbs result: ParseResult
|
34
47
|
# @rbs opt_in: bool -- `true` for *opt-out* mode, `false` for *opt-in* mode.
|
35
|
-
# @rbs
|
36
|
-
def self.parse: (ParseResult result, opt_in: bool) -> [ Array[AST::Annotations::Use], Array[AST::Declarations::t] ]?
|
48
|
+
# @rbs return: [Array[AST::Annotations::Use], Array[AST::Declarations::t], Array[RBS::AST::Declarations::t]]?
|
49
|
+
def self.parse: (ParseResult result, opt_in: bool) -> [ Array[AST::Annotations::Use], Array[AST::Declarations::t], Array[RBS::AST::Declarations::t] ]?
|
37
50
|
|
38
|
-
# @rbs
|
39
|
-
def current_class_module_decl: () ->
|
51
|
+
# @rbs return: with_members?
|
52
|
+
def current_class_module_decl: () -> with_members?
|
40
53
|
|
41
|
-
# @rbs
|
42
|
-
def current_class_module_decl!: () ->
|
54
|
+
# @rbs return: with_members
|
55
|
+
def current_class_module_decl!: () -> with_members
|
43
56
|
|
44
|
-
#
|
45
|
-
|
46
|
-
def push_class_module_decl: (AST::Declarations::ModuleDecl | AST::Declarations::ClassDecl | AST::Declarations::SingletonClassDecl) { () -> void } -> void
|
47
|
-
| (AST::Declarations::ConstantDecl) -> void
|
57
|
+
# : (with_members) { () -> void } -> void
|
58
|
+
def push_class_module_decl: (with_members) { () -> void } -> void
|
48
59
|
|
49
60
|
# Load inner declarations and delete them from `#comments` hash
|
50
61
|
#
|
@@ -89,12 +100,15 @@ module RBS
|
|
89
100
|
def visit_call_node: ...
|
90
101
|
|
91
102
|
# @rbs new_visibility: RBS::AST::Members::visibility?
|
92
|
-
# @rbs block:
|
93
|
-
# @rbs
|
103
|
+
# @rbs &block: () -> void
|
104
|
+
# @rbs return: void
|
94
105
|
def push_visibility: (RBS::AST::Members::visibility? new_visibility) { () -> void } -> void
|
95
106
|
|
107
|
+
# @rbs [A] (Node) { () -> A } -> A?
|
108
|
+
def process_nesting_node: [A] (Node) { () -> A } -> A?
|
109
|
+
|
96
110
|
# @rbs node: Node
|
97
|
-
# @rbs
|
111
|
+
# @rbs return: bool
|
98
112
|
def ignored_node?: (Node node) -> bool
|
99
113
|
|
100
114
|
# Fetch Application annotation which is associated to `node`
|
@@ -102,19 +116,22 @@ module RBS
|
|
102
116
|
# The application annotation is removed from `comments`.
|
103
117
|
#
|
104
118
|
# @rbs node: Node
|
105
|
-
# @rbs
|
119
|
+
# @rbs return: AST::Annotations::Application?
|
106
120
|
def application_annotation: (Node node) -> AST::Annotations::Application?
|
107
121
|
|
108
|
-
# Fetch
|
122
|
+
# Fetch TypeAssertion annotation which is associated to `node`
|
109
123
|
#
|
110
124
|
# The assertion annotation is removed from `comments`.
|
111
125
|
#
|
112
126
|
# @rbs node: Node | Location
|
113
|
-
# @rbs
|
114
|
-
def assertion_annotation: (Node | Location node) -> AST::Annotations::
|
127
|
+
# @rbs return: AST::Annotations::TypeAssertion?
|
128
|
+
def assertion_annotation: (Node | Location node) -> AST::Annotations::TypeAssertion?
|
115
129
|
|
116
130
|
# @rbs override
|
117
131
|
def visit_constant_write_node: ...
|
132
|
+
|
133
|
+
# @rbs override
|
134
|
+
def visit_block_node: ...
|
118
135
|
end
|
119
136
|
end
|
120
137
|
end
|
@@ -3,50 +3,80 @@
|
|
3
3
|
module RBS
|
4
4
|
module Inline
|
5
5
|
class Writer
|
6
|
+
interface _Content
|
7
|
+
def <<: (RBS::AST::Declarations::t | RBS::AST::Members::t) -> void
|
8
|
+
|
9
|
+
def concat: (Array[RBS::AST::Declarations::t | RBS::AST::Members::t]) -> void
|
10
|
+
end
|
11
|
+
|
6
12
|
attr_reader output: String
|
7
13
|
|
8
14
|
attr_reader writer: RBS::Writer
|
9
15
|
|
10
16
|
# @rbs buffer: String
|
11
|
-
def initialize: (?String buffer) ->
|
17
|
+
def initialize: (?String buffer) -> void
|
12
18
|
|
13
19
|
# @rbs uses: Array[AST::Annotations::Use]
|
14
20
|
# @rbs decls: Array[AST::Declarations::t]
|
15
|
-
|
21
|
+
# @rbs rbs_decls: Array[RBS::AST::Declarations::t]
|
22
|
+
def self.write: (Array[AST::Annotations::Use] uses, Array[AST::Declarations::t] decls, Array[RBS::AST::Declarations::t] rbs_decls) -> void
|
16
23
|
|
17
|
-
# @rbs lines:
|
18
|
-
# @rbs
|
24
|
+
# @rbs *lines: String
|
25
|
+
# @rbs return: void
|
19
26
|
def header: (*String lines) -> void
|
20
27
|
|
21
28
|
# @rbs uses: Array[AST::Annotations::Use]
|
22
29
|
# @rbs decls: Array[AST::Declarations::t]
|
23
|
-
# @rbs
|
24
|
-
|
30
|
+
# @rbs rbs_decls: Array[RBS::AST::Declarations::t] --
|
31
|
+
# Top level `rbs!` declarations
|
32
|
+
# @rbs return: void
|
33
|
+
def write: (Array[AST::Annotations::Use] uses, Array[AST::Declarations::t] decls, Array[RBS::AST::Declarations::t] rbs_decls) -> void
|
25
34
|
|
26
35
|
# @rbs decl: AST::Declarations::t
|
27
|
-
# @rbs
|
28
|
-
|
36
|
+
# @rbs rbs: _Content
|
37
|
+
# @rbs return: void
|
38
|
+
def translate_decl: (AST::Declarations::t decl, _Content rbs) -> void
|
29
39
|
|
30
40
|
# @rbs decl: AST::Declarations::ClassDecl
|
31
|
-
# @rbs
|
32
|
-
|
41
|
+
# @rbs rbs: _Content
|
42
|
+
# @rbs return: void
|
43
|
+
def translate_class_decl: (AST::Declarations::ClassDecl decl, _Content rbs) -> void
|
44
|
+
|
45
|
+
# @rbs members: Array[AST::Declarations::t | AST::Members::t]
|
46
|
+
# @rbs decl: AST::Declarations::SingletonClassDecl?
|
47
|
+
# @rbs rbs: _Content
|
48
|
+
# @rbs return: void
|
49
|
+
def translate_members: (Array[AST::Declarations::t | AST::Members::t] members, AST::Declarations::SingletonClassDecl? decl, _Content rbs) -> void
|
33
50
|
|
34
51
|
# @rbs decl: AST::Declarations::ModuleDecl
|
35
|
-
# @rbs
|
36
|
-
|
52
|
+
# @rbs rbs: _Content
|
53
|
+
# @rbs return: void
|
54
|
+
def translate_module_decl: (AST::Declarations::ModuleDecl decl, _Content rbs) -> void
|
37
55
|
|
38
56
|
# @rbs decl: AST::Declarations::ConstantDecl
|
39
|
-
# @rbs
|
40
|
-
|
57
|
+
# @rbs rbs: _Content
|
58
|
+
# @rbs return: void
|
59
|
+
def translate_constant_decl: (AST::Declarations::ConstantDecl decl, _Content rbs) -> void
|
60
|
+
|
61
|
+
# @rbs decl: AST::Declarations::DataAssignDecl
|
62
|
+
# @rbs rbs: _Content
|
63
|
+
def translate_data_assign_decl: (AST::Declarations::DataAssignDecl decl, _Content rbs) -> void
|
64
|
+
|
65
|
+
# @rbs decl: AST::Declarations::StructAssignDecl
|
66
|
+
# @rbs rbs: _Content
|
67
|
+
def translate_struct_assign_decl: (AST::Declarations::StructAssignDecl decl, _Content rbs) -> void
|
41
68
|
|
42
69
|
# @rbs decl: AST::Declarations::SingletonClassDecl
|
43
|
-
# @rbs
|
44
|
-
|
70
|
+
# @rbs rbs: _Content
|
71
|
+
# @rbs return: void
|
72
|
+
def translate_singleton_decl: (AST::Declarations::SingletonClassDecl decl, _Content rbs) -> void
|
45
73
|
|
46
74
|
# @rbs member: AST::Members::t
|
47
|
-
# @rbs decl: AST::Declarations::
|
48
|
-
#
|
49
|
-
|
75
|
+
# @rbs decl: AST::Declarations::SingletonClassDecl? --
|
76
|
+
# The surrouding singleton class definition
|
77
|
+
# @rbs rbs: _Content
|
78
|
+
# @rbs return void
|
79
|
+
def translate_member: (AST::Members::t member, AST::Declarations::SingletonClassDecl? decl, _Content rbs) -> void
|
50
80
|
|
51
81
|
private
|
52
82
|
|
@@ -64,9 +94,19 @@ module RBS
|
|
64
94
|
# ```
|
65
95
|
#
|
66
96
|
# @rbs member: AST::Members::RubyDef
|
67
|
-
# @rbs decl: AST::Declarations::
|
68
|
-
# @rbs
|
69
|
-
def method_kind: (AST::Members::RubyDef member, AST::Declarations::
|
97
|
+
# @rbs decl: AST::Declarations::SingletonClassDecl?
|
98
|
+
# @rbs return: RBS::AST::Members::MethodDefinition::kind
|
99
|
+
def method_kind: (AST::Members::RubyDef member, AST::Declarations::SingletonClassDecl? decl) -> RBS::AST::Members::MethodDefinition::kind
|
100
|
+
|
101
|
+
# @rbs block: AST::Declarations::BlockDecl
|
102
|
+
# @rbs rbs: _Content
|
103
|
+
# @rbs return: void
|
104
|
+
def translate_module_block_decl: (AST::Declarations::BlockDecl block, _Content rbs) -> void
|
105
|
+
|
106
|
+
# @rbs block: AST::Declarations::BlockDecl
|
107
|
+
# @rbs rbs: _Content
|
108
|
+
# @rbs return: void
|
109
|
+
def translate_class_block_decl: (AST::Declarations::BlockDecl block, _Content rbs) -> void
|
70
110
|
end
|
71
111
|
end
|
72
112
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbs-inline
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Soutaro Matsumoto
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-08-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: prism
|
@@ -61,6 +61,7 @@ files:
|
|
61
61
|
- exe/rbs-inline
|
62
62
|
- lib/rbs/inline.rb
|
63
63
|
- lib/rbs/inline/annotation_parser.rb
|
64
|
+
- lib/rbs/inline/annotation_parser/tokenizer.rb
|
64
65
|
- lib/rbs/inline/ast/annotations.rb
|
65
66
|
- lib/rbs/inline/ast/comment_lines.rb
|
66
67
|
- lib/rbs/inline/ast/declarations.rb
|
@@ -75,6 +76,7 @@ files:
|
|
75
76
|
- rbs_collection.yaml
|
76
77
|
- sig/generated/rbs/inline.rbs
|
77
78
|
- sig/generated/rbs/inline/annotation_parser.rbs
|
79
|
+
- sig/generated/rbs/inline/annotation_parser/tokenizer.rbs
|
78
80
|
- sig/generated/rbs/inline/ast/annotations.rbs
|
79
81
|
- sig/generated/rbs/inline/ast/comment_lines.rbs
|
80
82
|
- sig/generated/rbs/inline/ast/declarations.rbs
|
@@ -108,7 +110,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
108
110
|
- !ruby/object:Gem::Version
|
109
111
|
version: '0'
|
110
112
|
requirements: []
|
111
|
-
rubygems_version: 3.5.
|
113
|
+
rubygems_version: 3.5.11
|
112
114
|
signing_key:
|
113
115
|
specification_version: 4
|
114
116
|
summary: Inline RBS type declaration.
|