steep 0.51.0 → 0.52.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/Gemfile.lock +2 -2
- data/lib/steep/cli.rb +70 -1
- data/lib/steep/source.rb +53 -6
- data/lib/steep/type_construction.rb +12 -0
- data/lib/steep/version.rb +1 -1
- data/smoke/diagnostics/test_expectations.yml +0 -10
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f6846cc048d7515ef655b81cf7f399e5852a96c390d90c7f859c07cc6a5c0f94
|
4
|
+
data.tar.gz: fecb8b0b0be4e338f3ccf0375064f39167693c0b25b68e3b4ea2f103f117260f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c08fa692eda8915ef4ce4fe725aecb2a9823c2da188900a3811fdf1d02c6b0369dae8755aed83fe9cc80a376c3309df29efcf849681cd2a9a249559ff6c3ae2
|
7
|
+
data.tar.gz: 77953f34eb6ab001dfee4f03e0ec1250f1128fedae9e5b427e0037b97b6b809c5bb8ae4c94d9d93f3af3a702de7dd33a182399fe2b7a81ba8ac0d2708c422579
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,12 @@
|
|
2
2
|
|
3
3
|
## master
|
4
4
|
|
5
|
+
## 0.52.0 (2022-04-05)
|
6
|
+
|
7
|
+
* Add `steep binstub` command ([\#527](https://github.com/soutaro/steep/pull/527))
|
8
|
+
* Let hover and completion work in heredoc ([\#528](https://github.com/soutaro/steep/pull/528))
|
9
|
+
* Better constant typing ([\#529](https://github.com/soutaro/steep/pull/529))
|
10
|
+
|
5
11
|
## 0.51.0 (2022-04-01)
|
6
12
|
|
7
13
|
* Completion for constant ([\#524](https://github.com/soutaro/steep/pull/524))
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
steep (0.
|
4
|
+
steep (0.52.0)
|
5
5
|
activesupport (>= 5.1)
|
6
6
|
language_server-protocol (>= 3.15, < 4.0)
|
7
7
|
listen (~> 3.0)
|
@@ -51,7 +51,7 @@ GEM
|
|
51
51
|
rb-fsevent (0.11.1)
|
52
52
|
rb-inotify (0.10.1)
|
53
53
|
ffi (~> 1.0)
|
54
|
-
rbs (2.3.
|
54
|
+
rbs (2.3.1)
|
55
55
|
stackprof (0.2.19)
|
56
56
|
terminal-table (3.0.2)
|
57
57
|
unicode-display_width (>= 1.1.1, < 3)
|
data/lib/steep/cli.rb
CHANGED
@@ -18,7 +18,7 @@ module Steep
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def self.available_commands
|
21
|
-
[:init, :check, :validate, :annotations, :version, :project, :watch, :langserver, :stats]
|
21
|
+
[:init, :check, :validate, :annotations, :version, :project, :watch, :langserver, :stats, :binstub]
|
22
22
|
end
|
23
23
|
|
24
24
|
def process_global_options
|
@@ -208,6 +208,75 @@ module Steep
|
|
208
208
|
end.run
|
209
209
|
end
|
210
210
|
|
211
|
+
def process_binstub
|
212
|
+
path = Pathname("bin/steep")
|
213
|
+
force = false
|
214
|
+
|
215
|
+
OptionParser.new do |opts|
|
216
|
+
opts.banner = <<BANNER
|
217
|
+
Usage: steep binstub [options]
|
218
|
+
|
219
|
+
Generate a binstub to execute Steep with setting up Bundler and rbenv/rvm.
|
220
|
+
Use the executable for LSP integration setup.
|
221
|
+
|
222
|
+
Options:
|
223
|
+
BANNER
|
224
|
+
handle_logging_options opts
|
225
|
+
|
226
|
+
opts.on("-o PATH", "--output=PATH", "The path of the executable file (defaults to `bin/steep`)") do |v|
|
227
|
+
path = Pathname(v)
|
228
|
+
end
|
229
|
+
|
230
|
+
opts.on("--[no-]force", "Overwrite file (defaults to false)") do
|
231
|
+
force = true
|
232
|
+
end
|
233
|
+
end.parse!(argv)
|
234
|
+
|
235
|
+
path.parent.mkpath
|
236
|
+
|
237
|
+
gemfile_path =
|
238
|
+
if defined?(Bundler)
|
239
|
+
Bundler.default_gemfile.relative_path_from(Pathname.pwd + path.parent)
|
240
|
+
else
|
241
|
+
Pathname("../Gemfile")
|
242
|
+
end
|
243
|
+
|
244
|
+
if path.file?
|
245
|
+
if force
|
246
|
+
stdout.puts Rainbow("#{path} already exists. Overwriting...").yellow
|
247
|
+
else
|
248
|
+
stdout.puts Rainbow(''"⚠️ #{path} already exists. Bye! 👋").red
|
249
|
+
return 0
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
253
|
+
template = <<TEMPLATE
|
254
|
+
#!/usr/bin/env bash
|
255
|
+
|
256
|
+
BINSTUB_DIR=$(cd $(dirname $0); pwd)
|
257
|
+
GEMFILE=${BINSTUB_DIR}/#{gemfile_path}
|
258
|
+
|
259
|
+
STEEP="bundle exec --gemfile=${GEMFILE} steep"
|
260
|
+
|
261
|
+
if type "rbenv" > /dev/null 2>&1; then
|
262
|
+
STEEP="rbenv exec ${STEEP}"
|
263
|
+
else
|
264
|
+
if type "rvm" > /dev/null 2>&1; then
|
265
|
+
STEEP="rvm ${REPO_ROOT} do ${STEEP}"
|
266
|
+
fi
|
267
|
+
fi
|
268
|
+
|
269
|
+
exec $STEEP $@
|
270
|
+
TEMPLATE
|
271
|
+
|
272
|
+
path.write(template)
|
273
|
+
path.chmod(0755)
|
274
|
+
|
275
|
+
stdout.puts Rainbow("Successfully generated executable #{path} 🎉").blue
|
276
|
+
|
277
|
+
0
|
278
|
+
end
|
279
|
+
|
211
280
|
def process_version
|
212
281
|
stdout.puts Steep::VERSION
|
213
282
|
0
|
data/lib/steep/source.rb
CHANGED
@@ -301,13 +301,42 @@ module Steep
|
|
301
301
|
end
|
302
302
|
end
|
303
303
|
|
304
|
-
def
|
305
|
-
|
304
|
+
def each_heredoc_node(node = self.node, parents = [], &block)
|
305
|
+
if block
|
306
|
+
case node.type
|
307
|
+
when :dstr, :str
|
308
|
+
if node.location.is_a?(Parser::Source::Map::Heredoc)
|
309
|
+
yield [node, *parents]
|
310
|
+
end
|
311
|
+
end
|
306
312
|
|
307
|
-
|
308
|
-
|
309
|
-
|
313
|
+
parents.unshift(node)
|
314
|
+
Source.each_child_node(node) do |child|
|
315
|
+
each_heredoc_node(child, parents, &block)
|
316
|
+
end
|
317
|
+
parents.shift()
|
318
|
+
else
|
319
|
+
enum_for :each_heredoc_node, node
|
320
|
+
end
|
321
|
+
end
|
310
322
|
|
323
|
+
def find_heredoc_nodes(line, column, position)
|
324
|
+
each_heredoc_node() do |nodes|
|
325
|
+
node = nodes[0]
|
326
|
+
|
327
|
+
range = node.location.heredoc_body&.yield_self do |r|
|
328
|
+
r.begin_pos..r.end_pos
|
329
|
+
end
|
330
|
+
|
331
|
+
if range && (range === position)
|
332
|
+
return nodes
|
333
|
+
end
|
334
|
+
end
|
335
|
+
|
336
|
+
nil
|
337
|
+
end
|
338
|
+
|
339
|
+
def find_nodes_loc(node, position, parents)
|
311
340
|
range = node.location.expression&.yield_self do |r|
|
312
341
|
r.begin_pos..r.end_pos
|
313
342
|
end
|
@@ -317,7 +346,7 @@ module Steep
|
|
317
346
|
parents.unshift node
|
318
347
|
|
319
348
|
Source.each_child_node(node) do |child|
|
320
|
-
ns =
|
349
|
+
ns = find_nodes_loc(child, position, parents) and return ns
|
321
350
|
end
|
322
351
|
|
323
352
|
parents
|
@@ -325,6 +354,24 @@ module Steep
|
|
325
354
|
end
|
326
355
|
end
|
327
356
|
|
357
|
+
def find_nodes(line:, column:)
|
358
|
+
return [] unless node
|
359
|
+
|
360
|
+
position = (line-1).times.sum do |i|
|
361
|
+
node.location.expression.source_buffer.source_line(i+1).size + 1
|
362
|
+
end + column
|
363
|
+
|
364
|
+
if nodes = find_heredoc_nodes(line, column, position)
|
365
|
+
Source.each_child_node(nodes[0]) do |child|
|
366
|
+
find_nodes_loc(child, position, nodes) and break
|
367
|
+
end
|
368
|
+
|
369
|
+
nodes
|
370
|
+
else
|
371
|
+
find_nodes_loc(node, position, [])
|
372
|
+
end
|
373
|
+
end
|
374
|
+
|
328
375
|
def self.delete_defs(node, allow_list)
|
329
376
|
case node.type
|
330
377
|
when :def
|
@@ -2731,6 +2731,14 @@ module Steep
|
|
2731
2731
|
|
2732
2732
|
return [type, constr, name]
|
2733
2733
|
end
|
2734
|
+
when AST::Types::Any
|
2735
|
+
# Couldn't detect the type of the parent constant
|
2736
|
+
# Skip reporting error for this node.
|
2737
|
+
if node
|
2738
|
+
_, constr = add_typing(node, type: parent_type)
|
2739
|
+
end
|
2740
|
+
|
2741
|
+
return [parent_type, constr, nil]
|
2734
2742
|
end
|
2735
2743
|
end
|
2736
2744
|
|
@@ -2744,6 +2752,10 @@ module Steep
|
|
2744
2752
|
end
|
2745
2753
|
end
|
2746
2754
|
|
2755
|
+
if node
|
2756
|
+
_, constr = add_typing(node, type: AST::Builtin.any_type)
|
2757
|
+
end
|
2758
|
+
|
2747
2759
|
[AST::Builtin.any_type, constr, nil]
|
2748
2760
|
end
|
2749
2761
|
end
|
data/lib/steep/version.rb
CHANGED
@@ -557,16 +557,6 @@
|
|
557
557
|
severity: ERROR
|
558
558
|
message: 'Cannot find the declaration of constant: `FOO`'
|
559
559
|
code: Ruby::UnknownConstant
|
560
|
-
- range:
|
561
|
-
start:
|
562
|
-
line: 4
|
563
|
-
character: 7
|
564
|
-
end:
|
565
|
-
line: 4
|
566
|
-
character: 10
|
567
|
-
severity: ERROR
|
568
|
-
message: 'Cannot find the declaration of constant: `BAR`'
|
569
|
-
code: Ruby::UnknownConstant
|
570
560
|
- range:
|
571
561
|
start:
|
572
562
|
line: 6
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: steep
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.52.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: 2022-04-
|
11
|
+
date: 2022-04-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parser
|