rbs-inline 0.1.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 +7 -0
- data/CHANGELOG.md +5 -0
- data/CODE_OF_CONDUCT.md +84 -0
- data/LICENSE.txt +21 -0
- data/README.md +109 -0
- data/Rakefile +12 -0
- data/Steepfile +27 -0
- data/exe/rbs-inline +6 -0
- data/lib/rbs/inline/annotation_parser.rb +765 -0
- data/lib/rbs/inline/ast/annotations.rb +454 -0
- data/lib/rbs/inline/ast/comment_lines.rb +42 -0
- data/lib/rbs/inline/ast/declarations.rb +243 -0
- data/lib/rbs/inline/ast/members.rb +599 -0
- data/lib/rbs/inline/ast/tree.rb +141 -0
- data/lib/rbs/inline/cli.rb +106 -0
- data/lib/rbs/inline/node_utils.rb +12 -0
- data/lib/rbs/inline/parser.rb +360 -0
- data/lib/rbs/inline/version.rb +7 -0
- data/lib/rbs/inline/writer.rb +210 -0
- data/lib/rbs/inline.rb +22 -0
- data/rbs_collection.lock.yaml +68 -0
- data/rbs_collection.yaml +17 -0
- data/sig/generated/rbs/inline/annotation_parser.rbs +222 -0
- data/sig/generated/rbs/inline/ast/annotations.rbs +185 -0
- data/sig/generated/rbs/inline/ast/declarations.rbs +116 -0
- data/sig/generated/rbs/inline/ast/members.rbs +179 -0
- data/sig/generated/rbs/inline/cli.rbs +21 -0
- data/sig/generated/rbs/inline/parser.rbs +116 -0
- data/sig/rbs/inline/annotation_parser.rbs +0 -0
- data/sig/rbs/inline/ast/comment_lines.rbs +27 -0
- data/sig/rbs/inline/ast/members.rbs +24 -0
- data/sig/rbs/inline/ast/tree.rbs +98 -0
- data/sig/rbs/inline/node_utils.rbs +7 -0
- data/sig/rbs/inline/writer.rbs +27 -0
- data/sig/rbs/inline.rbs +41 -0
- data/yard-samples/hello.rb +6 -0
- data/yard-samples/sample1.rb +26 -0
- metadata +111 -0
@@ -0,0 +1,210 @@
|
|
1
|
+
module RBS
|
2
|
+
module Inline
|
3
|
+
class Writer
|
4
|
+
attr_reader :output
|
5
|
+
attr_reader :writer
|
6
|
+
|
7
|
+
def initialize(buffer = +"")
|
8
|
+
@output = buffer
|
9
|
+
@writer = RBS::Writer.new(out: StringIO.new(buffer))
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.write(uses, decls)
|
13
|
+
writer = Writer.new()
|
14
|
+
writer.write(uses, decls)
|
15
|
+
writer.output
|
16
|
+
end
|
17
|
+
|
18
|
+
def header(*lines)
|
19
|
+
lines.each do |line|
|
20
|
+
writer.out.puts("# " + line)
|
21
|
+
end
|
22
|
+
writer.out.puts
|
23
|
+
end
|
24
|
+
|
25
|
+
def write(uses, decls)
|
26
|
+
use_dirs = uses.map do |use|
|
27
|
+
RBS::AST::Directives::Use.new(
|
28
|
+
clauses: use.clauses,
|
29
|
+
location: nil
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
rbs = decls.filter_map do |decl|
|
34
|
+
translate_decl(decl)
|
35
|
+
end
|
36
|
+
|
37
|
+
writer.write(use_dirs + rbs)
|
38
|
+
end
|
39
|
+
|
40
|
+
def translate_decl(decl)
|
41
|
+
case decl
|
42
|
+
when AST::Declarations::ClassDecl
|
43
|
+
translate_class_decl(decl)
|
44
|
+
when AST::Declarations::ModuleDecl
|
45
|
+
translate_module_decl(decl)
|
46
|
+
when AST::Declarations::ConstantDecl
|
47
|
+
translate_constant_decl(decl)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def translate_class_decl(decl)
|
52
|
+
return unless decl.class_name
|
53
|
+
|
54
|
+
if decl.comments
|
55
|
+
comment = RBS::AST::Comment.new(string: decl.comments.content, location: nil)
|
56
|
+
end
|
57
|
+
|
58
|
+
members = [] #: Array[RBS::AST::Members::t | RBS::AST::Declarations::t]
|
59
|
+
|
60
|
+
decl.members.each do |member|
|
61
|
+
if member.is_a?(AST::Members::Base)
|
62
|
+
if rbs_member = translate_member(member)
|
63
|
+
members.concat rbs_member
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
if member.is_a?(AST::Declarations::Base)
|
68
|
+
if rbs = translate_decl(member)
|
69
|
+
members << rbs
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
RBS::AST::Declarations::Class.new(
|
75
|
+
name: decl.class_name,
|
76
|
+
type_params: decl.type_params,
|
77
|
+
members: members,
|
78
|
+
super_class: decl.super_class,
|
79
|
+
annotations: [],
|
80
|
+
location: nil,
|
81
|
+
comment: comment
|
82
|
+
)
|
83
|
+
end
|
84
|
+
|
85
|
+
def translate_module_decl(decl)
|
86
|
+
return unless decl.module_name
|
87
|
+
|
88
|
+
if decl.comments
|
89
|
+
comment = RBS::AST::Comment.new(string: decl.comments.content, location: nil)
|
90
|
+
end
|
91
|
+
|
92
|
+
members = [] #: Array[RBS::AST::Members::t | RBS::AST::Declarations::t]
|
93
|
+
|
94
|
+
decl.members.each do |member|
|
95
|
+
if member.is_a?(AST::Members::Base)
|
96
|
+
if rbs_member = translate_member(member)
|
97
|
+
members.concat rbs_member
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
if member.is_a?(AST::Declarations::Base)
|
102
|
+
if rbs = translate_decl(member)
|
103
|
+
members << rbs
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
self_types = decl.module_selfs.map { _1.constraint }.compact
|
109
|
+
|
110
|
+
RBS::AST::Declarations::Module.new(
|
111
|
+
name: decl.module_name,
|
112
|
+
type_params: decl.type_params,
|
113
|
+
members: members,
|
114
|
+
self_types: self_types,
|
115
|
+
annotations: [],
|
116
|
+
location: nil,
|
117
|
+
comment: comment
|
118
|
+
)
|
119
|
+
end
|
120
|
+
|
121
|
+
def translate_constant_decl(decl)
|
122
|
+
return unless decl.constant_name
|
123
|
+
|
124
|
+
if decl.comments
|
125
|
+
comment = RBS::AST::Comment.new(string: decl.comments.content, location: nil)
|
126
|
+
end
|
127
|
+
|
128
|
+
RBS::AST::Declarations::Constant.new(
|
129
|
+
name: decl.constant_name,
|
130
|
+
type: decl.type,
|
131
|
+
comment: comment,
|
132
|
+
location: nil
|
133
|
+
)
|
134
|
+
end
|
135
|
+
|
136
|
+
def translate_member(member)
|
137
|
+
case member
|
138
|
+
when AST::Members::RubyDef
|
139
|
+
if member.comments
|
140
|
+
comment = RBS::AST::Comment.new(string: member.comments.content, location: nil)
|
141
|
+
end
|
142
|
+
|
143
|
+
if member.override_annotation
|
144
|
+
return [
|
145
|
+
RBS::AST::Members::MethodDefinition.new(
|
146
|
+
name: member.method_name,
|
147
|
+
kind: member.method_kind,
|
148
|
+
overloads: [],
|
149
|
+
annotations: [],
|
150
|
+
location: nil,
|
151
|
+
comment: comment,
|
152
|
+
overloading: true,
|
153
|
+
visibility: member.visibility
|
154
|
+
)
|
155
|
+
]
|
156
|
+
end
|
157
|
+
|
158
|
+
[
|
159
|
+
RBS::AST::Members::MethodDefinition.new(
|
160
|
+
name: member.method_name,
|
161
|
+
kind: member.method_kind,
|
162
|
+
overloads: member.method_overloads,
|
163
|
+
annotations: member.method_annotations,
|
164
|
+
location: nil,
|
165
|
+
comment: comment,
|
166
|
+
overloading: false,
|
167
|
+
visibility: member.visibility
|
168
|
+
)
|
169
|
+
]
|
170
|
+
when AST::Members::RubyAlias
|
171
|
+
if member.comments
|
172
|
+
comment = RBS::AST::Comment.new(string: member.comments.content, location: nil)
|
173
|
+
end
|
174
|
+
|
175
|
+
[
|
176
|
+
RBS::AST::Members::Alias.new(
|
177
|
+
new_name: member.new_name,
|
178
|
+
old_name: member.old_name,
|
179
|
+
kind: :instance,
|
180
|
+
annotations: [],
|
181
|
+
location: nil,
|
182
|
+
comment: comment
|
183
|
+
)
|
184
|
+
]
|
185
|
+
when AST::Members::RubyMixin
|
186
|
+
[member.rbs].compact
|
187
|
+
when AST::Members::RubyAttr
|
188
|
+
member.rbs
|
189
|
+
when AST::Members::RubyPrivate
|
190
|
+
[
|
191
|
+
RBS::AST::Members::Private.new(location: nil)
|
192
|
+
]
|
193
|
+
when AST::Members::RubyPublic
|
194
|
+
[
|
195
|
+
RBS::AST::Members::Public.new(location: nil)
|
196
|
+
]
|
197
|
+
when AST::Members::RBSIvar
|
198
|
+
[
|
199
|
+
member.rbs
|
200
|
+
].compact
|
201
|
+
when AST::Members::RBSEmbedded
|
202
|
+
case members = member.members
|
203
|
+
when Array
|
204
|
+
members
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|
210
|
+
end
|
data/lib/rbs/inline.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "inline/version"
|
4
|
+
|
5
|
+
require "prism"
|
6
|
+
require "strscan"
|
7
|
+
require "rbs"
|
8
|
+
|
9
|
+
require "rbs/inline/node_utils"
|
10
|
+
require "rbs/inline/annotation_parser"
|
11
|
+
require "rbs/inline/ast/annotations"
|
12
|
+
require "rbs/inline/ast/comment_lines"
|
13
|
+
require "rbs/inline/ast/tree"
|
14
|
+
require "rbs/inline/ast/declarations"
|
15
|
+
require "rbs/inline/ast/members"
|
16
|
+
require "rbs/inline/parser"
|
17
|
+
require "rbs/inline/writer"
|
18
|
+
|
19
|
+
module RBS
|
20
|
+
module Inline
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
---
|
2
|
+
path: ".gem_rbs_collection"
|
3
|
+
gems:
|
4
|
+
- name: abbrev
|
5
|
+
version: '0'
|
6
|
+
source:
|
7
|
+
type: stdlib
|
8
|
+
- name: fileutils
|
9
|
+
version: '0'
|
10
|
+
source:
|
11
|
+
type: stdlib
|
12
|
+
- name: json
|
13
|
+
version: '0'
|
14
|
+
source:
|
15
|
+
type: stdlib
|
16
|
+
- name: logger
|
17
|
+
version: '0'
|
18
|
+
source:
|
19
|
+
type: stdlib
|
20
|
+
- name: minitest
|
21
|
+
version: '0'
|
22
|
+
source:
|
23
|
+
type: stdlib
|
24
|
+
- name: monitor
|
25
|
+
version: '0'
|
26
|
+
source:
|
27
|
+
type: stdlib
|
28
|
+
- name: mutex_m
|
29
|
+
version: '0'
|
30
|
+
source:
|
31
|
+
type: stdlib
|
32
|
+
- name: optparse
|
33
|
+
version: '0'
|
34
|
+
source:
|
35
|
+
type: stdlib
|
36
|
+
- name: pathname
|
37
|
+
version: '0'
|
38
|
+
source:
|
39
|
+
type: stdlib
|
40
|
+
- name: prism
|
41
|
+
version: 0.24.0
|
42
|
+
source:
|
43
|
+
type: rubygems
|
44
|
+
- name: rake
|
45
|
+
version: '13.0'
|
46
|
+
source:
|
47
|
+
type: git
|
48
|
+
name: ruby/gem_rbs_collection
|
49
|
+
revision: d2e93d426c927fdab90ef12e30a9875aa05d60d6
|
50
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
51
|
+
repo_dir: gems
|
52
|
+
- name: rbs
|
53
|
+
version: 3.5.0.pre.2
|
54
|
+
source:
|
55
|
+
type: rubygems
|
56
|
+
- name: rdoc
|
57
|
+
version: '0'
|
58
|
+
source:
|
59
|
+
type: stdlib
|
60
|
+
- name: strscan
|
61
|
+
version: '0'
|
62
|
+
source:
|
63
|
+
type: stdlib
|
64
|
+
- name: tsort
|
65
|
+
version: '0'
|
66
|
+
source:
|
67
|
+
type: stdlib
|
68
|
+
gemfile_lock_path: Gemfile.lock
|
data/rbs_collection.yaml
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# Download sources
|
2
|
+
sources:
|
3
|
+
- type: git
|
4
|
+
name: ruby/gem_rbs_collection
|
5
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
6
|
+
revision: main
|
7
|
+
repo_dir: gems
|
8
|
+
|
9
|
+
# You can specify local directories as sources also.
|
10
|
+
# - type: local
|
11
|
+
# path: path/to/your/local/repository
|
12
|
+
|
13
|
+
# A directory to install the downloaded RBSs
|
14
|
+
path: .gem_rbs_collection
|
15
|
+
|
16
|
+
gems:
|
17
|
+
- name: optparse
|
@@ -0,0 +1,222 @@
|
|
1
|
+
# Generated from lib/rbs/inline/annotation_parser.rb with RBS::Inline
|
2
|
+
|
3
|
+
module RBS
|
4
|
+
module Inline
|
5
|
+
class AnnotationParser
|
6
|
+
class ParsingResult
|
7
|
+
attr_reader comments: Array[Prism::Comment]
|
8
|
+
|
9
|
+
attr_reader annotations: Array[AST::Annotations::t]
|
10
|
+
|
11
|
+
attr_reader first_comment_offset: Integer
|
12
|
+
|
13
|
+
# @rbs first_comment: Prism::Comment
|
14
|
+
def initialize: (Prism::Comment first_comment) -> untyped
|
15
|
+
|
16
|
+
# @rbs returns Range[Integer]
|
17
|
+
def line_range: () -> Range[Integer]
|
18
|
+
|
19
|
+
# @rbs returns Prism::Comment
|
20
|
+
def last_comment: () -> Prism::Comment
|
21
|
+
|
22
|
+
# @rbs comment: Prism::Comment
|
23
|
+
# @rbs returns self?
|
24
|
+
def add_comment: (Prism::Comment comment) -> self?
|
25
|
+
|
26
|
+
# @rbs returns Array[[String, Prism::Comment]]
|
27
|
+
def lines: () -> Array[[ String, Prism::Comment ]]
|
28
|
+
|
29
|
+
# @rbs returns String
|
30
|
+
def content: () -> String
|
31
|
+
end
|
32
|
+
|
33
|
+
attr_reader input: Array[Prism::Comment]
|
34
|
+
|
35
|
+
# @rbs input: Array[Prism::Comment]
|
36
|
+
def initialize: (Array[Prism::Comment] input) -> untyped
|
37
|
+
|
38
|
+
# @rbs input: Array[Prism::Comment]
|
39
|
+
# @rbs returns Array[ParsingResult]
|
40
|
+
def self.parse: (Array[Prism::Comment] input) -> Array[ParsingResult]
|
41
|
+
|
42
|
+
# @rbs returns Array[ParsingResult]
|
43
|
+
def parse: () -> Array[ParsingResult]
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
# @rbs result: ParsingResult
|
48
|
+
# @rbs block: ^(Array[Prism::Comment]) -> void
|
49
|
+
# @rbs returns void
|
50
|
+
def each_annotation_paragraph: (ParsingResult result) { (Array[Prism::Comment]) -> void } -> void
|
51
|
+
|
52
|
+
class Tokenizer
|
53
|
+
attr_reader scanner: StringScanner
|
54
|
+
|
55
|
+
attr_reader current_token: token?
|
56
|
+
|
57
|
+
KEYWORDS: Hash[String, Symbol]
|
58
|
+
|
59
|
+
KW_RE: ::Regexp
|
60
|
+
|
61
|
+
PUNCTS: Hash[String, Symbol]
|
62
|
+
|
63
|
+
PUNCTS_RE: Regexp
|
64
|
+
|
65
|
+
# @rbs scanner: StringScanner
|
66
|
+
# @rbs returns void
|
67
|
+
def initialize: (StringScanner scanner) -> void
|
68
|
+
|
69
|
+
# @rbs tree: AST::Tree
|
70
|
+
# @rbs returns token?
|
71
|
+
def advance: (AST::Tree tree) -> token?
|
72
|
+
|
73
|
+
# Consume given token type and inserts the token to the tree or `nil`
|
74
|
+
#
|
75
|
+
# @rbs type: Array[Symbol]
|
76
|
+
# @rbs tree: AST::Tree
|
77
|
+
# @rbs returns void
|
78
|
+
def consume_token: (*untyped types, tree: AST::Tree) -> void
|
79
|
+
|
80
|
+
# Consume given token type and inserts the token to the tree or raise
|
81
|
+
#
|
82
|
+
# @rbs type: Array[Symbol]
|
83
|
+
# @rbs tree: AST::Tree
|
84
|
+
# @rbs returns void
|
85
|
+
def consume_token!: (*untyped types, tree: AST::Tree) -> void
|
86
|
+
|
87
|
+
# Test if current token has specified `type`
|
88
|
+
#
|
89
|
+
# @rbs type: Array[Symbol]
|
90
|
+
# @rbs returns bool
|
91
|
+
def type?: (*Symbol type) -> bool
|
92
|
+
|
93
|
+
# Ensure current token is one of the specified in types
|
94
|
+
#
|
95
|
+
# @rbs types: Array[Symbol]
|
96
|
+
# @rbs returns void
|
97
|
+
def type!: (*Symbol types) -> void
|
98
|
+
|
99
|
+
# Reset the current_token to incoming comment `--`
|
100
|
+
#
|
101
|
+
# Reset to the end of the input if `--` token cannot be found.
|
102
|
+
#
|
103
|
+
# @rbs returns String -- String that is skipped
|
104
|
+
def skip_to_comment: () -> String
|
105
|
+
end
|
106
|
+
|
107
|
+
# @rbs comments: AST::CommentLines
|
108
|
+
# @rbs returns AST::Annotations::t?
|
109
|
+
def parse_annotation: (AST::CommentLines comments) -> AST::Annotations::t?
|
110
|
+
|
111
|
+
# @rbs tokenizer: Tokenizer
|
112
|
+
# @rbs returns AST::Tree
|
113
|
+
def parse_var_decl: (Tokenizer tokenizer) -> AST::Tree
|
114
|
+
|
115
|
+
# @rbs tokenizer: Tokenizer
|
116
|
+
# @rbs returns AST::Tree
|
117
|
+
def parse_return_type_decl: (Tokenizer tokenizer) -> AST::Tree
|
118
|
+
|
119
|
+
# @rbs tokenizer: Tokenizer
|
120
|
+
# @rbs returns AST::Tree
|
121
|
+
def parse_comment: (Tokenizer tokenizer) -> AST::Tree
|
122
|
+
|
123
|
+
# @rbs tokenizer: Tokenizer
|
124
|
+
# @rbs returns AST::Tree
|
125
|
+
def parse_type_app: (Tokenizer tokenizer) -> AST::Tree
|
126
|
+
|
127
|
+
# Parse a RBS method type or type and returns it
|
128
|
+
#
|
129
|
+
# It tries parsing a method type, and then parsing a type if failed.
|
130
|
+
#
|
131
|
+
# If both parsing failed, it returns a Tree(`:type_syntax_error), consuming all of the remaining input.
|
132
|
+
#
|
133
|
+
# Note that this doesn't recognize `--` comment unlike `parse_type`.
|
134
|
+
#
|
135
|
+
# @rbs tokenizer: Tokenizer
|
136
|
+
# @rbs parent_tree: AST::Tree
|
137
|
+
# @rbs returns MethodType | AST::Tree | Types::t | nil
|
138
|
+
def parse_type_method_type: (Tokenizer tokenizer, AST::Tree parent_tree) -> (MethodType | AST::Tree | Types::t | nil)
|
139
|
+
|
140
|
+
# Parse a RBS type and returns it
|
141
|
+
#
|
142
|
+
# If parsing failed, it returns a Tree(`:type_syntax_error), consuming
|
143
|
+
#
|
144
|
+
# 1. All of the input with `--` token if exists (for comments)
|
145
|
+
# 2. All of the input (for anything else)
|
146
|
+
#
|
147
|
+
# ```
|
148
|
+
# Integer -- Foo # => Returns `Integer`, tokenizer has `--` as its current token
|
149
|
+
# Integer[ -- Foo # => Returns a tree for `Integer[`, tokenizer has `--` as its curren token
|
150
|
+
# Integer[ Foo # => Returns a tree for `Integer[ Foo`, tokenizer is at the end of the input
|
151
|
+
# ```
|
152
|
+
#
|
153
|
+
# @rbs tokenizer: Tokenizer
|
154
|
+
# @rbs parent_tree: AST::Tree
|
155
|
+
# @rbs returns Types::t | AST::Tree | nil
|
156
|
+
def parse_type: (Tokenizer tokenizer, AST::Tree parent_tree) -> (Types::t | AST::Tree | nil)
|
157
|
+
|
158
|
+
# @rbs tokenizer: Tokenizer
|
159
|
+
# @rbs returns AST::Tree
|
160
|
+
def parse_rbs_annotation: (Tokenizer tokenizer) -> AST::Tree
|
161
|
+
|
162
|
+
# @rbs tokznier: Tokenizer
|
163
|
+
# @rbs returns AST::Tree
|
164
|
+
def parse_inherits: (untyped tokenizer) -> AST::Tree
|
165
|
+
|
166
|
+
# Parse `@rbs override` annotation
|
167
|
+
#
|
168
|
+
# @rbs tokenizer: Tokenizer
|
169
|
+
# @rbs returns AST::Tree
|
170
|
+
def parse_override: (Tokenizer tokenizer) -> AST::Tree
|
171
|
+
|
172
|
+
# Parse `@rbs use [CLAUSES]` annotation
|
173
|
+
#
|
174
|
+
# @rbs tokenizer: Tokenizer
|
175
|
+
# @rbs returns AST::Tree
|
176
|
+
def parse_use: (Tokenizer tokenizer) -> AST::Tree
|
177
|
+
|
178
|
+
# Parses use clause
|
179
|
+
#
|
180
|
+
# Returns one of the following form:
|
181
|
+
#
|
182
|
+
# * [`::`?, [UIDENT, `::`]*, LIDENT, [`as` LIDENT]?]
|
183
|
+
# * [`::`?, [UIDENT, `::`]*, UIDENT, [`as` UIDENT]?]
|
184
|
+
# * [`::`?, [UIDENT, `::`]*, IFIDENT, [`as`, IFIDENT]?]
|
185
|
+
# * [`::`?, [UIDENT) `::`]*, `*`]
|
186
|
+
#
|
187
|
+
# @rbs tokenizer: Tokenizer
|
188
|
+
# @rbs returns AST::Tree
|
189
|
+
def parse_use_clause: (Tokenizer tokenizer) -> AST::Tree
|
190
|
+
|
191
|
+
# @rbs tokenizer: Tokenizer
|
192
|
+
# @rbs returns AST::Tree
|
193
|
+
def parse_module_self: (Tokenizer tokenizer) -> AST::Tree
|
194
|
+
|
195
|
+
# Yield the block and return the resulting tree if tokenizer has current token of `types`
|
196
|
+
#
|
197
|
+
# ```rb
|
198
|
+
# # Test if tokenize has `--` token, then parse comment or insert `nil` to tree
|
199
|
+
#
|
200
|
+
# tree << parse_optional(tokenizer, :kMINUS2) do
|
201
|
+
# parse_comment(tokenizer)
|
202
|
+
# end
|
203
|
+
# ```
|
204
|
+
#
|
205
|
+
# @rbs tokenizer: Tokenizer
|
206
|
+
# @rbs types: Array[Symbol]
|
207
|
+
# @rbs block: ^() -> AST::Tree
|
208
|
+
# @rbs returns AST::Tree?
|
209
|
+
def parse_optional: (Tokenizer tokenizer, *Symbol types) { () -> AST::Tree } -> AST::Tree?
|
210
|
+
|
211
|
+
# @rbs tokenizer: Tokenizer
|
212
|
+
# @rbs returns AST::Tree
|
213
|
+
def parse_generic: (Tokenizer tokenizer) -> AST::Tree
|
214
|
+
|
215
|
+
# :: (Tokenizer) -> AST::Tree
|
216
|
+
def parse_ivar_type: (Tokenizer) -> AST::Tree
|
217
|
+
|
218
|
+
# :: (Tokenizer) -> AST::Tree
|
219
|
+
def parse_yields: (Tokenizer) -> AST::Tree
|
220
|
+
end
|
221
|
+
end
|
222
|
+
end
|