steep 1.7.0.dev.3 → 1.7.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/CHANGELOG.md +43 -0
- data/README.md +18 -0
- data/doc/narrowing.md +1 -1
- data/doc/shape.md +176 -0
- data/guides/src/gem-rbs-collection/gem-rbs-collection.md +7 -24
- data/lib/steep/ast/types/factory.rb +27 -18
- data/lib/steep/ast/types/proc.rb +14 -9
- data/lib/steep/interface/block.rb +1 -1
- data/lib/steep/interface/builder.rb +1 -0
- data/lib/steep/interface/function.rb +14 -6
- data/lib/steep/interface/method_type.rb +15 -7
- data/lib/steep/project/pattern.rb +1 -2
- data/lib/steep/rake_task.rb +132 -0
- data/lib/steep/server/interaction_worker.rb +6 -0
- data/lib/steep/server/lsp_formatter.rb +2 -0
- data/lib/steep/services/completion_provider.rb +1 -1
- data/lib/steep/services/file_loader.rb +15 -20
- data/lib/steep/services/signature_help_provider.rb +11 -9
- data/lib/steep/signature/validator.rb +1 -1
- data/lib/steep/subtyping/check.rb +15 -6
- data/lib/steep/subtyping/variable_variance.rb +3 -3
- data/lib/steep/type_construction.rb +186 -149
- data/lib/steep/type_inference/block_params.rb +1 -1
- data/lib/steep/type_inference/logic_type_interpreter.rb +2 -1
- data/lib/steep/type_inference/method_params.rb +16 -0
- data/lib/steep/type_inference/send_args.rb +5 -2
- data/lib/steep/version.rb +1 -1
- data/steep.gemspec +5 -2
- metadata +7 -145
- data/.github/dependabot.yml +0 -28
- data/.github/workflows/ruby-windows.yml +0 -35
- data/.github/workflows/ruby.yml +0 -32
- data/.vscode/steep-shared.code-snippets +0 -41
- data/Gemfile +0 -14
- data/Gemfile.lock +0 -104
- data/Gemfile.steep +0 -0
- data/gemfile_steep/Gemfile +0 -3
- data/gemfile_steep/Gemfile.lock +0 -77
- data/rbs_collection.steep.lock.yaml +0 -108
- data/rbs_collection.steep.yaml +0 -23
- data/sig/shims/bundler.rbs +0 -3
- data/sig/shims/concurrent-ruby.rbs +0 -39
- data/sig/shims/exception.rbs +0 -4
- data/sig/shims/language-server_protocol.rbs +0 -450
- data/sig/shims/parser/comment.rbs +0 -33
- data/sig/shims/parser/nodes.rbs +0 -252
- data/sig/shims/parser/source/map.rbs +0 -146
- data/sig/shims/parser/source/range.rbs +0 -237
- data/sig/shims/parser.rbs +0 -69
- data/sig/shims/string.rbs +0 -4
- data/sig/shims/tagged_logging.rbs +0 -6
- data/sig/shims/yaml.rbs +0 -4
- data/sig/steep/annotation_parser.rbs +0 -60
- data/sig/steep/ast/annotation/collection.rbs +0 -78
- data/sig/steep/ast/annotation.rbs +0 -121
- data/sig/steep/ast/builtin.rbs +0 -69
- data/sig/steep/ast/ignore.rbs +0 -66
- data/sig/steep/ast/node/type_application.rbs +0 -31
- data/sig/steep/ast/node/type_assertion.rbs +0 -32
- data/sig/steep/ast/types/any.rbs +0 -29
- data/sig/steep/ast/types/boolean.rbs +0 -31
- data/sig/steep/ast/types/bot.rbs +0 -29
- data/sig/steep/ast/types/class.rbs +0 -33
- data/sig/steep/ast/types/factory.rbs +0 -110
- data/sig/steep/ast/types/helper.rbs +0 -24
- data/sig/steep/ast/types/instance.rbs +0 -33
- data/sig/steep/ast/types/intersection.rbs +0 -40
- data/sig/steep/ast/types/literal.rbs +0 -35
- data/sig/steep/ast/types/logic.rbs +0 -83
- data/sig/steep/ast/types/name.rbs +0 -84
- data/sig/steep/ast/types/nil.rbs +0 -31
- data/sig/steep/ast/types/proc.rbs +0 -53
- data/sig/steep/ast/types/record.rbs +0 -39
- data/sig/steep/ast/types/self.rbs +0 -33
- data/sig/steep/ast/types/top.rbs +0 -29
- data/sig/steep/ast/types/tuple.rbs +0 -37
- data/sig/steep/ast/types/union.rbs +0 -40
- data/sig/steep/ast/types/var.rbs +0 -42
- data/sig/steep/ast/types/void.rbs +0 -29
- data/sig/steep/ast/types.rbs +0 -16
- data/sig/steep/cli.rbs +0 -55
- data/sig/steep/diagnostic/deprecated/else_on_exhaustive_case.rbs +0 -13
- data/sig/steep/diagnostic/deprecated/unknown_constant_assigned.rbs +0 -15
- data/sig/steep/diagnostic/helper.rbs +0 -15
- data/sig/steep/diagnostic/lsp_formatter.rbs +0 -36
- data/sig/steep/diagnostic/ruby.rbs +0 -703
- data/sig/steep/diagnostic/signature.rbs +0 -252
- data/sig/steep/drivers/annotations.rbs +0 -17
- data/sig/steep/drivers/check.rbs +0 -33
- data/sig/steep/drivers/checkfile.rbs +0 -27
- data/sig/steep/drivers/diagnostic_printer.rbs +0 -25
- data/sig/steep/drivers/init.rbs +0 -19
- data/sig/steep/drivers/langserver.rbs +0 -36
- data/sig/steep/drivers/print_project.rbs +0 -15
- data/sig/steep/drivers/stats.rbs +0 -47
- data/sig/steep/drivers/utils/driver_helper.rbs +0 -25
- data/sig/steep/drivers/utils/jobs_option.rbs +0 -19
- data/sig/steep/drivers/validate.rbs +0 -15
- data/sig/steep/drivers/vendor.rbs +0 -19
- data/sig/steep/drivers/watch.rbs +0 -27
- data/sig/steep/drivers/worker.rbs +0 -29
- data/sig/steep/equatable.rbs +0 -11
- data/sig/steep/expectations.rbs +0 -72
- data/sig/steep/index/rbs_index.rbs +0 -141
- data/sig/steep/index/signature_symbol_provider.rbs +0 -41
- data/sig/steep/index/source_index.rbs +0 -63
- data/sig/steep/interface/block.rbs +0 -41
- data/sig/steep/interface/builder.rbs +0 -152
- data/sig/steep/interface/function.rbs +0 -270
- data/sig/steep/interface/method_type.rbs +0 -105
- data/sig/steep/interface/shape.rbs +0 -80
- data/sig/steep/interface/substitution.rbs +0 -51
- data/sig/steep/interface/type_param.rbs +0 -43
- data/sig/steep/method_name.rbs +0 -30
- data/sig/steep/module_helper.rbs +0 -16
- data/sig/steep/node_helper.rbs +0 -91
- data/sig/steep/path_helper.rbs +0 -15
- data/sig/steep/project/dsl.rbs +0 -108
- data/sig/steep/project/options.rbs +0 -47
- data/sig/steep/project/pattern.rbs +0 -47
- data/sig/steep/project/target.rbs +0 -25
- data/sig/steep/project.rbs +0 -26
- data/sig/steep/range_extension.rbs +0 -7
- data/sig/steep/server/base_worker.rbs +0 -49
- data/sig/steep/server/change_buffer.rbs +0 -38
- data/sig/steep/server/delay_queue.rbs +0 -37
- data/sig/steep/server/interaction_worker.rbs +0 -90
- data/sig/steep/server/lsp_formatter.rbs +0 -63
- data/sig/steep/server/master.rbs +0 -299
- data/sig/steep/server/type_check_worker.rbs +0 -141
- data/sig/steep/server/worker_process.rbs +0 -97
- data/sig/steep/services/completion_provider.rbs +0 -264
- data/sig/steep/services/content_change.rbs +0 -37
- data/sig/steep/services/file_loader.rbs +0 -21
- data/sig/steep/services/goto_service.rbs +0 -106
- data/sig/steep/services/hover_provider/rbs.rbs +0 -47
- data/sig/steep/services/hover_provider/ruby.rbs +0 -127
- data/sig/steep/services/hover_provider/singleton_methods.rbs +0 -11
- data/sig/steep/services/path_assignment.rbs +0 -21
- data/sig/steep/services/signature_help_provider.rbs +0 -51
- data/sig/steep/services/signature_service.rbs +0 -156
- data/sig/steep/services/stats_calculator.rbs +0 -41
- data/sig/steep/services/type_check_service.rbs +0 -112
- data/sig/steep/services/type_name_completion.rbs +0 -135
- data/sig/steep/signature/validator.rbs +0 -85
- data/sig/steep/source/ignore_ranges.rbs +0 -38
- data/sig/steep/source.rbs +0 -105
- data/sig/steep/subtyping/cache.rbs +0 -17
- data/sig/steep/subtyping/check.rbs +0 -131
- data/sig/steep/subtyping/constraints.rbs +0 -111
- data/sig/steep/subtyping/relation.rbs +0 -63
- data/sig/steep/subtyping/result.rbs +0 -179
- data/sig/steep/subtyping/variable_variance.rbs +0 -25
- data/sig/steep/thread_waiter.rbs +0 -13
- data/sig/steep/type_construction.rbs +0 -542
- data/sig/steep/type_inference/block_params.rbs +0 -170
- data/sig/steep/type_inference/case_when.rbs +0 -130
- data/sig/steep/type_inference/constant_env.rbs +0 -29
- data/sig/steep/type_inference/context.rbs +0 -216
- data/sig/steep/type_inference/context_array.rbs +0 -38
- data/sig/steep/type_inference/logic_type_interpreter.rbs +0 -108
- data/sig/steep/type_inference/method_call.rbs +0 -124
- data/sig/steep/type_inference/method_params.rbs +0 -127
- data/sig/steep/type_inference/multiple_assignment.rbs +0 -76
- data/sig/steep/type_inference/send_args.rbs +0 -243
- data/sig/steep/type_inference/type_env.rbs +0 -160
- data/sig/steep/type_inference/type_env_builder.rbs +0 -81
- data/sig/steep/typing.rbs +0 -75
- data/sig/steep.rbs +0 -45
data/sig/shims/parser/nodes.rbs
DELETED
|
@@ -1,252 +0,0 @@
|
|
|
1
|
-
module Parser
|
|
2
|
-
module AST
|
|
3
|
-
interface _BlockNode
|
|
4
|
-
def type: () -> :block
|
|
5
|
-
|
|
6
|
-
%a{pure} def loc: () -> (Source::Map & _BlockLocation)
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
interface _BlockLocation
|
|
10
|
-
%a{pure} def end: () -> Source::Range
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
interface _DefNode
|
|
14
|
-
def type: () -> :def
|
|
15
|
-
|
|
16
|
-
def children: () -> [Symbol, Node, Node?]
|
|
17
|
-
|
|
18
|
-
%a{pure} def loc: () -> (Source::Map & _DefLocation)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
interface _DefLocation
|
|
22
|
-
def name: () -> Source::Range
|
|
23
|
-
|
|
24
|
-
%a{pure} def end: () -> Source::Range?
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
interface _CaseNode
|
|
28
|
-
def type: () -> :case
|
|
29
|
-
|
|
30
|
-
%a{pure} def loc: () -> (Source::Map & _CaseLocation)
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
interface _CaseLocation
|
|
34
|
-
%a{pure} def else: () -> Source::Range?
|
|
35
|
-
|
|
36
|
-
%a{pure} def end: () -> Source::Range
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
interface _NamedLocation
|
|
40
|
-
%a{pure} def name: () -> Source::Range
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
interface _SelectorLocation
|
|
44
|
-
%a{pure} def selector: () -> Source::Range
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
# ```ruby
|
|
48
|
-
# if foo then bar else baz end
|
|
49
|
-
# #^ => keyword
|
|
50
|
-
# # ^^^^ => begin
|
|
51
|
-
# # ^^^^ => else
|
|
52
|
-
# # ^^^ => end
|
|
53
|
-
# ```
|
|
54
|
-
#
|
|
55
|
-
interface _Condition
|
|
56
|
-
%a{pure} def keyword: () -> Source::Range
|
|
57
|
-
|
|
58
|
-
%a{pure} def begin: () -> Source::Range?
|
|
59
|
-
|
|
60
|
-
%a{pure} def else: () -> Source::Range?
|
|
61
|
-
|
|
62
|
-
%a{pure} def end: () -> Source::Range?
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
# ```ruby
|
|
66
|
-
# foo ? bar : baz
|
|
67
|
-
# # ^ question
|
|
68
|
-
# # ^ colon
|
|
69
|
-
# ```
|
|
70
|
-
interface _Ternary
|
|
71
|
-
%a{pure} def question: () -> Source::Range
|
|
72
|
-
|
|
73
|
-
%a{pure} def colon: () -> Source::Range
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
interface _Variable
|
|
77
|
-
%a{pure} def name: () -> Source::Range
|
|
78
|
-
|
|
79
|
-
%a{pure} def operator: () -> Source::Range?
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
# ```ruby
|
|
83
|
-
# foo.bar(baz)
|
|
84
|
-
# # ^ => dot
|
|
85
|
-
# # ^^^ => selector
|
|
86
|
-
# # ^ => begin
|
|
87
|
-
# # ^ => end
|
|
88
|
-
#
|
|
89
|
-
# foo.bar += 1
|
|
90
|
-
# # ^ => dot
|
|
91
|
-
# # ^^^ => selector
|
|
92
|
-
# # ^^ => operator
|
|
93
|
-
# ```
|
|
94
|
-
#
|
|
95
|
-
interface _Send
|
|
96
|
-
%a{pure} def dot: () -> Source::Range?
|
|
97
|
-
|
|
98
|
-
%a{pure} def selector: () -> Source::Range
|
|
99
|
-
|
|
100
|
-
%a{pure} def operator: () -> Source::Range?
|
|
101
|
-
|
|
102
|
-
%a{pure} def begin: () -> Source::Range?
|
|
103
|
-
|
|
104
|
-
%a{pure} def end: () -> Source::Range?
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
# ```ruby
|
|
108
|
-
# rescue Foo => x then
|
|
109
|
-
# #^^^^^ => keyword
|
|
110
|
-
# # ^^ => assoc
|
|
111
|
-
# # ^^^^ => begin
|
|
112
|
-
# ```
|
|
113
|
-
interface _RescueBody
|
|
114
|
-
%a{pure} def keyword: () -> Source::Range
|
|
115
|
-
|
|
116
|
-
%a{pure} def assoc: () -> Source::Range?
|
|
117
|
-
|
|
118
|
-
%a{pure} def begin: () -> Source::Range?
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
# ```ruby
|
|
122
|
-
# +1
|
|
123
|
-
# ^ => operator
|
|
124
|
-
# ```
|
|
125
|
-
interface _Operator
|
|
126
|
-
%a{pure} def operator: () -> Source::Range?
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
# ```ruby
|
|
130
|
-
# def self.foo(); end
|
|
131
|
-
# #^^ => keyword
|
|
132
|
-
# # ^ => operator
|
|
133
|
-
# # ^^^ => name
|
|
134
|
-
# # ^^^ => end
|
|
135
|
-
#
|
|
136
|
-
# def foo = bar
|
|
137
|
-
# #^^ => keyword
|
|
138
|
-
# # ^^^ => name
|
|
139
|
-
# # ^ => assignment
|
|
140
|
-
# ```
|
|
141
|
-
interface _MethodDefinition
|
|
142
|
-
%a{pure} def keyword: () -> Source::Range
|
|
143
|
-
|
|
144
|
-
%a{pure} def operator: () -> Source::Range?
|
|
145
|
-
|
|
146
|
-
%a{pure} def name: () -> Source::Range
|
|
147
|
-
|
|
148
|
-
%a{pure} def end: () -> Source::Range?
|
|
149
|
-
|
|
150
|
-
%a{pure} def assignment: () -> Source::Range?
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
# ```ruby
|
|
154
|
-
# when foo then
|
|
155
|
-
# #^^^ => keyword
|
|
156
|
-
# # ^^^^ => begin
|
|
157
|
-
# ```
|
|
158
|
-
interface _Keyword
|
|
159
|
-
%a{pure} def keyword: () -> Source::Range
|
|
160
|
-
|
|
161
|
-
%a{pure} def begin: () -> Source::Range?
|
|
162
|
-
|
|
163
|
-
%a{pure} def end: () -> Source::Range?
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
# ```ruby
|
|
167
|
-
# foo[1] += 1
|
|
168
|
-
# # ^ => begin
|
|
169
|
-
# # ^ => end
|
|
170
|
-
# # ^^ => operator
|
|
171
|
-
# ```
|
|
172
|
-
interface _Index
|
|
173
|
-
%a{pure} def begin: () -> Source::Range
|
|
174
|
-
|
|
175
|
-
%a{pure} def end: () -> Source::Range
|
|
176
|
-
|
|
177
|
-
%a{pure} def operator: () -> Source::Range?
|
|
178
|
-
end
|
|
179
|
-
|
|
180
|
-
# ```ruby
|
|
181
|
-
# <<FOO <= expression
|
|
182
|
-
# foo <= heredoc_body
|
|
183
|
-
# FOO <= heredoc_end
|
|
184
|
-
# ```
|
|
185
|
-
#
|
|
186
|
-
interface _Heredoc
|
|
187
|
-
%a{pure} def heredoc_body: () -> Source::Range
|
|
188
|
-
|
|
189
|
-
%a{pure} def heredoc_end: () -> Source::Range
|
|
190
|
-
end
|
|
191
|
-
|
|
192
|
-
# ```ruby
|
|
193
|
-
# for x in [] then ... end
|
|
194
|
-
# #^^ => keyword
|
|
195
|
-
# # ^^ => in
|
|
196
|
-
# # ^^^^ => begin
|
|
197
|
-
# # ^^^ => end
|
|
198
|
-
# ```
|
|
199
|
-
interface _For
|
|
200
|
-
%a{pure} def keyword: () -> Source::Range
|
|
201
|
-
|
|
202
|
-
%a{pure} def in: () -> Source::Range
|
|
203
|
-
|
|
204
|
-
%a{pure} def begin: () -> Source::Range?
|
|
205
|
-
|
|
206
|
-
%a{pure} def end: () -> Source::Range
|
|
207
|
-
end
|
|
208
|
-
|
|
209
|
-
# ```ruby
|
|
210
|
-
# class Foo::Bar < Baz; end
|
|
211
|
-
# #^^^^ => keyword
|
|
212
|
-
# # ^^^^^^^^ => name
|
|
213
|
-
# # ^ => operator
|
|
214
|
-
# # ^^^ => end
|
|
215
|
-
# ```
|
|
216
|
-
interface _Definition
|
|
217
|
-
%a{pure} def keyword: () -> Source::Range
|
|
218
|
-
|
|
219
|
-
%a{pure} def name: () -> Source::Range
|
|
220
|
-
|
|
221
|
-
%a{pure} def operator: () -> Source::Range?
|
|
222
|
-
|
|
223
|
-
%a{pure} def end: () -> Source::Range
|
|
224
|
-
end
|
|
225
|
-
|
|
226
|
-
# ```ruby
|
|
227
|
-
# Foo::Bar += 1
|
|
228
|
-
# # ^^ => double_colon
|
|
229
|
-
# # ^^^ => name
|
|
230
|
-
# # ^^ => operator
|
|
231
|
-
# ```
|
|
232
|
-
#
|
|
233
|
-
interface _Constant
|
|
234
|
-
%a{pure} def double_colon: () -> Source::Range?
|
|
235
|
-
|
|
236
|
-
%a{pure} def name: () -> Source::Range
|
|
237
|
-
|
|
238
|
-
%a{pure} def operator: () -> Source::Range?
|
|
239
|
-
end
|
|
240
|
-
|
|
241
|
-
# ```ruby
|
|
242
|
-
# (1)
|
|
243
|
-
# # ^ => begin
|
|
244
|
-
# # ^ => end
|
|
245
|
-
# ```
|
|
246
|
-
interface _Collection
|
|
247
|
-
%a{pure} def begin: () -> Source::Range?
|
|
248
|
-
|
|
249
|
-
%a{pure} def end: () -> Source::Range?
|
|
250
|
-
end
|
|
251
|
-
end
|
|
252
|
-
end
|
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
module Parser
|
|
2
|
-
module Source
|
|
3
|
-
#
|
|
4
|
-
# {Map} relates AST nodes to the source code they were parsed from.
|
|
5
|
-
# More specifically, a {Map} or its subclass contains a set of ranges:
|
|
6
|
-
#
|
|
7
|
-
# * `expression`: smallest range which includes all source corresponding
|
|
8
|
-
# to the node and all `expression` ranges of its children.
|
|
9
|
-
# * other ranges (`begin`, `end`, `operator`, ...): node-specific ranges
|
|
10
|
-
# pointing to various interesting tokens corresponding to the node.
|
|
11
|
-
#
|
|
12
|
-
# Note that the {Map::Heredoc} map is the only one whose `expression` does
|
|
13
|
-
# not include other ranges. It only covers the heredoc marker (`<<HERE`),
|
|
14
|
-
# not the here document itself.
|
|
15
|
-
#
|
|
16
|
-
# All ranges except `expression` are defined by {Map} subclasses.
|
|
17
|
-
#
|
|
18
|
-
# Ranges (except `expression`) can be `nil` if the corresponding token is
|
|
19
|
-
# not present in source. For example, a hash may not have opening/closing
|
|
20
|
-
# braces, and so would its source map.
|
|
21
|
-
#
|
|
22
|
-
# p Parser::CurrentRuby.parse('[1 => 2]').children[0].loc
|
|
23
|
-
# # => <Parser::Source::Map::Collection:0x007f5492b547d8
|
|
24
|
-
# # @end=nil, @begin=nil,
|
|
25
|
-
# # @expression=#<Source::Range (string) 1...7>>
|
|
26
|
-
#
|
|
27
|
-
# The {file:doc/AST_FORMAT.md} document describes how ranges associated to source
|
|
28
|
-
# code tokens. For example, the entry
|
|
29
|
-
#
|
|
30
|
-
# (array (int 1) (int 2))
|
|
31
|
-
#
|
|
32
|
-
# "[1, 2]"
|
|
33
|
-
# ^ begin
|
|
34
|
-
# ^ end
|
|
35
|
-
# ~~~~~~ expression
|
|
36
|
-
#
|
|
37
|
-
# means that if `node` is an {Parser::AST::Node} `(array (int 1) (int 2))`,
|
|
38
|
-
# then `node.loc` responds to `begin`, `end` and `expression`, and
|
|
39
|
-
# `node.loc.begin` returns a range pointing at the opening bracket, and so on.
|
|
40
|
-
#
|
|
41
|
-
# If you want to write code polymorphic by the source map (i.e. accepting
|
|
42
|
-
# several subclasses of {Map}), use `respond_to?` instead of `is_a?` to
|
|
43
|
-
# check whether the map features the range you need. Concrete {Map}
|
|
44
|
-
# subclasses may not be preserved between versions, but their interfaces
|
|
45
|
-
# will be kept compatible.
|
|
46
|
-
#
|
|
47
|
-
# You can visualize the source maps with `ruby-parse -E` command-line tool.
|
|
48
|
-
#
|
|
49
|
-
# @example
|
|
50
|
-
# require 'parser/current'
|
|
51
|
-
#
|
|
52
|
-
# p Parser::CurrentRuby.parse('[1, 2]').loc
|
|
53
|
-
# # => #<Parser::Source::Map::Collection:0x007f14b80eccd8
|
|
54
|
-
# # @end=#<Source::Range (string) 5...6>,
|
|
55
|
-
# # @begin=#<Source::Range (string) 0...1>,
|
|
56
|
-
# # @expression=#<Source::Range (string) 0...6>>
|
|
57
|
-
#
|
|
58
|
-
# @!attribute [r] node
|
|
59
|
-
# The node that is described by this map. Nodes and maps have 1:1 correspondence.
|
|
60
|
-
# @return [Parser::AST::Node]
|
|
61
|
-
#
|
|
62
|
-
# @!attribute [r] expression
|
|
63
|
-
# @return [Range]
|
|
64
|
-
#
|
|
65
|
-
# @api public
|
|
66
|
-
#
|
|
67
|
-
class Map
|
|
68
|
-
attr_reader node: AST::Node
|
|
69
|
-
|
|
70
|
-
attr_reader expression: Range
|
|
71
|
-
|
|
72
|
-
#
|
|
73
|
-
# @param [Range] expression
|
|
74
|
-
def initialize: (untyped expression) -> void
|
|
75
|
-
|
|
76
|
-
#
|
|
77
|
-
# @api private
|
|
78
|
-
def initialize_copy: (untyped other) -> untyped
|
|
79
|
-
|
|
80
|
-
#
|
|
81
|
-
# @api private
|
|
82
|
-
def node=: (untyped node) -> untyped
|
|
83
|
-
|
|
84
|
-
#
|
|
85
|
-
# A shortcut for `self.expression.line`.
|
|
86
|
-
# @return [Integer]
|
|
87
|
-
#
|
|
88
|
-
def line: () -> Integer
|
|
89
|
-
|
|
90
|
-
alias first_line line
|
|
91
|
-
|
|
92
|
-
#
|
|
93
|
-
# A shortcut for `self.expression.column`.
|
|
94
|
-
# @return [Integer]
|
|
95
|
-
#
|
|
96
|
-
def column: () -> Integer
|
|
97
|
-
|
|
98
|
-
#
|
|
99
|
-
# A shortcut for `self.expression.last_line`.
|
|
100
|
-
# @return [Integer]
|
|
101
|
-
#
|
|
102
|
-
def last_line: () -> Integer
|
|
103
|
-
|
|
104
|
-
#
|
|
105
|
-
# A shortcut for `self.expression.last_column`.
|
|
106
|
-
# @return [Integer]
|
|
107
|
-
#
|
|
108
|
-
def last_column: () -> Integer
|
|
109
|
-
|
|
110
|
-
#
|
|
111
|
-
# @api private
|
|
112
|
-
#
|
|
113
|
-
def with_expression: (untyped expression_l) -> untyped
|
|
114
|
-
|
|
115
|
-
#
|
|
116
|
-
# Compares source maps.
|
|
117
|
-
# @return [Boolean]
|
|
118
|
-
#
|
|
119
|
-
def ==: (untyped other) -> bool
|
|
120
|
-
|
|
121
|
-
#
|
|
122
|
-
# Converts this source map to a hash with keys corresponding to
|
|
123
|
-
# ranges. For example, if called on an instance of {Collection},
|
|
124
|
-
# which adds the `begin` and `end` ranges, the resulting hash
|
|
125
|
-
# will contain keys `:expression`, `:begin` and `:end`.
|
|
126
|
-
#
|
|
127
|
-
# @example
|
|
128
|
-
# require 'parser/current'
|
|
129
|
-
#
|
|
130
|
-
# p Parser::CurrentRuby.parse('[1, 2]').loc.to_hash
|
|
131
|
-
# # => {
|
|
132
|
-
# # :begin => #<Source::Range (string) 0...1>,
|
|
133
|
-
# # :end => #<Source::Range (string) 5...6>,
|
|
134
|
-
# # :expression => #<Source::Range (string) 0...6>
|
|
135
|
-
# # }
|
|
136
|
-
#
|
|
137
|
-
# @return [Hash<Symbol, Parser::Source::Range>]
|
|
138
|
-
#
|
|
139
|
-
def to_hash: () -> Hash[Symbol, Range]
|
|
140
|
-
|
|
141
|
-
def with: () ?{ () -> untyped } -> untyped
|
|
142
|
-
|
|
143
|
-
def update_expression: (untyped expression_l) -> untyped
|
|
144
|
-
end
|
|
145
|
-
end
|
|
146
|
-
end
|
|
@@ -1,237 +0,0 @@
|
|
|
1
|
-
module Parser
|
|
2
|
-
module Source
|
|
3
|
-
#
|
|
4
|
-
# A range of characters in a particular source buffer.
|
|
5
|
-
#
|
|
6
|
-
# The range is always exclusive, i.e. a range with `begin_pos` of 3 and
|
|
7
|
-
# `end_pos` of 5 will contain the following characters:
|
|
8
|
-
#
|
|
9
|
-
# example
|
|
10
|
-
# ^^
|
|
11
|
-
#
|
|
12
|
-
# @!attribute [r] source_buffer
|
|
13
|
-
# @return [Parser::Source::Buffer]
|
|
14
|
-
#
|
|
15
|
-
# @!attribute [r] begin_pos
|
|
16
|
-
# @return [Integer] index of the first character in the range
|
|
17
|
-
#
|
|
18
|
-
# @!attribute [r] end_pos
|
|
19
|
-
# @return [Integer] index of the character after the last character in the range
|
|
20
|
-
#
|
|
21
|
-
# @api public
|
|
22
|
-
#
|
|
23
|
-
class Range
|
|
24
|
-
include Comparable
|
|
25
|
-
|
|
26
|
-
attr_reader source_buffer: untyped
|
|
27
|
-
|
|
28
|
-
attr_reader begin_pos: Integer
|
|
29
|
-
|
|
30
|
-
attr_reader end_pos: Integer
|
|
31
|
-
|
|
32
|
-
#
|
|
33
|
-
# @param [Buffer] source_buffer
|
|
34
|
-
# @param [Integer] begin_pos
|
|
35
|
-
# @param [Integer] end_pos
|
|
36
|
-
#
|
|
37
|
-
def initialize: (untyped source_buffer, untyped begin_pos, untyped end_pos) -> void
|
|
38
|
-
|
|
39
|
-
#
|
|
40
|
-
# @return [Range] a zero-length range located just before the beginning
|
|
41
|
-
# of this range.
|
|
42
|
-
#
|
|
43
|
-
def begin: () -> Range
|
|
44
|
-
|
|
45
|
-
#
|
|
46
|
-
# @return [Range] a zero-length range located just after the end
|
|
47
|
-
# of this range.
|
|
48
|
-
#
|
|
49
|
-
def end: () -> Range
|
|
50
|
-
|
|
51
|
-
#
|
|
52
|
-
# @return [Integer] amount of characters included in this range.
|
|
53
|
-
#
|
|
54
|
-
def size: () -> Integer
|
|
55
|
-
|
|
56
|
-
alias length size
|
|
57
|
-
|
|
58
|
-
#
|
|
59
|
-
# Line number of the beginning of this range. By default, the first line
|
|
60
|
-
# of a buffer is 1; as such, line numbers are most commonly one-based.
|
|
61
|
-
#
|
|
62
|
-
# @see Buffer
|
|
63
|
-
# @return [Integer] line number of the beginning of this range.
|
|
64
|
-
#
|
|
65
|
-
def line: () -> Integer
|
|
66
|
-
|
|
67
|
-
alias first_line line
|
|
68
|
-
|
|
69
|
-
#
|
|
70
|
-
# @return [Integer] zero-based column number of the beginning of this range.
|
|
71
|
-
#
|
|
72
|
-
def column: () -> Integer
|
|
73
|
-
|
|
74
|
-
#
|
|
75
|
-
# @return [Integer] line number of the end of this range.
|
|
76
|
-
#
|
|
77
|
-
def last_line: () -> Integer
|
|
78
|
-
|
|
79
|
-
#
|
|
80
|
-
# @return [Integer] zero-based column number of the end of this range.
|
|
81
|
-
#
|
|
82
|
-
def last_column: () -> Integer
|
|
83
|
-
|
|
84
|
-
#
|
|
85
|
-
# @return [::Range] a range of columns spanned by this range.
|
|
86
|
-
# @raise RangeError
|
|
87
|
-
#
|
|
88
|
-
def column_range: () -> ::Range[Integer]
|
|
89
|
-
|
|
90
|
-
#
|
|
91
|
-
# @return [String] a line of source code containing the beginning of this range.
|
|
92
|
-
#
|
|
93
|
-
def source_line: () -> String
|
|
94
|
-
|
|
95
|
-
#
|
|
96
|
-
# @return [String] all source code covered by this range.
|
|
97
|
-
#
|
|
98
|
-
def source: () -> String
|
|
99
|
-
|
|
100
|
-
#
|
|
101
|
-
# `is?` provides a concise way to compare the source corresponding to this range.
|
|
102
|
-
# For example, `r.source == '(' || r.source == 'begin'` is equivalent to
|
|
103
|
-
# `r.is?('(', 'begin')`.
|
|
104
|
-
#
|
|
105
|
-
def is?: (*untyped what) -> untyped
|
|
106
|
-
|
|
107
|
-
#
|
|
108
|
-
# @return [Array<Integer>] a set of character indexes contained in this range.
|
|
109
|
-
#
|
|
110
|
-
def to_a: () -> Array[Integer]
|
|
111
|
-
|
|
112
|
-
#
|
|
113
|
-
# @return [Range] a Ruby range with the same `begin_pos` and `end_pos`
|
|
114
|
-
#
|
|
115
|
-
def to_range: () -> ::Range[Integer]
|
|
116
|
-
|
|
117
|
-
#
|
|
118
|
-
# Composes a GNU/Clang-style string representation of the beginning of this
|
|
119
|
-
# range.
|
|
120
|
-
#
|
|
121
|
-
# For example, for the following range in file `foo.rb`,
|
|
122
|
-
#
|
|
123
|
-
# def foo
|
|
124
|
-
# ^^^
|
|
125
|
-
#
|
|
126
|
-
# `to_s` will return `foo.rb:1:5`.
|
|
127
|
-
# Note that the column index is one-based.
|
|
128
|
-
#
|
|
129
|
-
# @return [String]
|
|
130
|
-
#
|
|
131
|
-
def to_s: () -> String
|
|
132
|
-
|
|
133
|
-
#
|
|
134
|
-
# @param [Hash] Endpoint(s) to change, any combination of :begin_pos or :end_pos
|
|
135
|
-
# @return [Range] the same range as this range but with the given end point(s) changed
|
|
136
|
-
# to the given value(s).
|
|
137
|
-
#
|
|
138
|
-
def with: (?begin_pos: untyped, ?end_pos: untyped) -> untyped
|
|
139
|
-
|
|
140
|
-
#
|
|
141
|
-
# @param [Hash] Endpoint(s) to change, any combination of :begin_pos or :end_pos
|
|
142
|
-
# @return [Range] the same range as this range but with the given end point(s) adjusted
|
|
143
|
-
# by the given amount(s)
|
|
144
|
-
#
|
|
145
|
-
def adjust: (?begin_pos: ::Integer, ?end_pos: ::Integer) -> untyped
|
|
146
|
-
|
|
147
|
-
#
|
|
148
|
-
# @param [Integer] new_size
|
|
149
|
-
# @return [Range] a range beginning at the same point as this range and length `new_size`.
|
|
150
|
-
#
|
|
151
|
-
def resize: (untyped new_size) -> untyped
|
|
152
|
-
|
|
153
|
-
#
|
|
154
|
-
# @param [Range] other
|
|
155
|
-
# @return [Range] smallest possible range spanning both this range and `other`.
|
|
156
|
-
#
|
|
157
|
-
def join: (untyped other) -> untyped
|
|
158
|
-
|
|
159
|
-
#
|
|
160
|
-
# @param [Range] other
|
|
161
|
-
# @return [Range] overlapping region of this range and `other`, or `nil`
|
|
162
|
-
# if they do not overlap
|
|
163
|
-
#
|
|
164
|
-
def intersect: (untyped other) -> (untyped | nil)
|
|
165
|
-
|
|
166
|
-
#
|
|
167
|
-
# Return `true` iff this range and `other` are disjoint.
|
|
168
|
-
#
|
|
169
|
-
# Two ranges must be one and only one of ==, disjoint?, contains?, contained? or crossing?
|
|
170
|
-
#
|
|
171
|
-
# @param [Range] other
|
|
172
|
-
# @return [Boolean]
|
|
173
|
-
#
|
|
174
|
-
def disjoint?: (untyped other) -> untyped
|
|
175
|
-
|
|
176
|
-
#
|
|
177
|
-
# Return `true` iff this range is not disjoint from `other`.
|
|
178
|
-
#
|
|
179
|
-
# @param [Range] other
|
|
180
|
-
# @return [Boolean] `true` if this range and `other` overlap
|
|
181
|
-
#
|
|
182
|
-
def overlaps?: (untyped other) -> untyped
|
|
183
|
-
|
|
184
|
-
#
|
|
185
|
-
# Returns true iff this range contains (strictly) `other`.
|
|
186
|
-
#
|
|
187
|
-
# Two ranges must be one and only one of ==, disjoint?, contains?, contained? or crossing?
|
|
188
|
-
#
|
|
189
|
-
# @param [Range] other
|
|
190
|
-
# @return [Boolean]
|
|
191
|
-
#
|
|
192
|
-
def contains?: (untyped other) -> untyped
|
|
193
|
-
|
|
194
|
-
#
|
|
195
|
-
# Return `other.contains?(self)`
|
|
196
|
-
#
|
|
197
|
-
# Two ranges must be one and only one of ==, disjoint?, contains?, contained? or crossing?
|
|
198
|
-
#
|
|
199
|
-
# @param [Range] other
|
|
200
|
-
# @return [Boolean]
|
|
201
|
-
#
|
|
202
|
-
def contained?: (untyped other) -> untyped
|
|
203
|
-
|
|
204
|
-
#
|
|
205
|
-
# Returns true iff both ranges intersect and also have different elements from one another.
|
|
206
|
-
#
|
|
207
|
-
# Two ranges must be one and only one of ==, disjoint?, contains?, contained? or crossing?
|
|
208
|
-
#
|
|
209
|
-
# @param [Range] other
|
|
210
|
-
# @return [Boolean]
|
|
211
|
-
#
|
|
212
|
-
def crossing?: (untyped other) -> (false | untyped)
|
|
213
|
-
|
|
214
|
-
#
|
|
215
|
-
# Checks if a range is empty; if it contains no characters
|
|
216
|
-
# @return [Boolean]
|
|
217
|
-
def empty?: () -> untyped
|
|
218
|
-
|
|
219
|
-
#
|
|
220
|
-
# Compare ranges, first by begin_pos, then by end_pos.
|
|
221
|
-
#
|
|
222
|
-
def <=>: (untyped other) -> (nil | untyped)
|
|
223
|
-
|
|
224
|
-
alias eql? ==
|
|
225
|
-
|
|
226
|
-
#
|
|
227
|
-
# Support for Ranges be used in as Hash indices and in Sets.
|
|
228
|
-
#
|
|
229
|
-
def hash: () -> untyped
|
|
230
|
-
|
|
231
|
-
#
|
|
232
|
-
# @return [String] a human-readable representation of this range.
|
|
233
|
-
#
|
|
234
|
-
def inspect: () -> ::String
|
|
235
|
-
end
|
|
236
|
-
end
|
|
237
|
-
end
|
data/sig/shims/parser.rbs
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
module Parser
|
|
2
|
-
module AST
|
|
3
|
-
class Node
|
|
4
|
-
attr_reader type: Symbol
|
|
5
|
-
|
|
6
|
-
attr_reader children: Array[untyped]
|
|
7
|
-
|
|
8
|
-
def initialize: (Symbol `type`, ?Array[untyped] children, ?Hash[Symbol, untyped] properties) -> void
|
|
9
|
-
|
|
10
|
-
def updated: (?Symbol?, ?Array[untyped]?, ?Hash[Symbol, untyped]? properties) -> Node
|
|
11
|
-
|
|
12
|
-
attr_reader location: Source::Map
|
|
13
|
-
|
|
14
|
-
alias loc location
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
class Ruby31
|
|
19
|
-
def initialize: (untyped builder) -> void
|
|
20
|
-
|
|
21
|
-
def parse: (Source::Buffer) -> AST
|
|
22
|
-
|
|
23
|
-
def parse_with_comments: (Source::Buffer) -> [AST::Node, Array[Source::Comment]]
|
|
24
|
-
|
|
25
|
-
attr_reader diagnostics: untyped
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
class Ruby32
|
|
29
|
-
def initialize: (untyped builder) -> void
|
|
30
|
-
|
|
31
|
-
def parse: (Source::Buffer) -> AST
|
|
32
|
-
|
|
33
|
-
def parse_with_comments: (Source::Buffer) -> [AST::Node, Array[Source::Comment]]
|
|
34
|
-
|
|
35
|
-
attr_reader diagnostics: untyped
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
class Ruby33
|
|
39
|
-
def initialize: (untyped builder) -> void
|
|
40
|
-
|
|
41
|
-
def parse: (Source::Buffer) -> AST
|
|
42
|
-
|
|
43
|
-
def parse_with_comments: (Source::Buffer) -> [AST::Node, Array[Source::Comment]]
|
|
44
|
-
|
|
45
|
-
attr_reader diagnostics: untyped
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
module Source
|
|
49
|
-
class Buffer
|
|
50
|
-
def initialize: (String file, Integer lineno, source: String) -> void
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
module Builders
|
|
55
|
-
class Default
|
|
56
|
-
attr_accessor self.emit_lambda: bool
|
|
57
|
-
attr_accessor self.emit_procarg0: bool
|
|
58
|
-
attr_accessor self.emit_kwargs: bool
|
|
59
|
-
attr_accessor self.emit_forward_arg: bool
|
|
60
|
-
|
|
61
|
-
def string_value: (untyped) -> untyped
|
|
62
|
-
|
|
63
|
-
def value: (untyped) -> untyped
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
class SyntaxError < StandardError
|
|
68
|
-
end
|
|
69
|
-
end
|
data/sig/shims/string.rbs
DELETED