steep 0.32.0 → 0.33.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 +4 -0
- data/lib/steep.rb +0 -2
- data/lib/steep/ast/types/factory.rb +18 -18
- data/lib/steep/server/utils.rb +1 -1
- data/lib/steep/source.rb +2 -2
- data/lib/steep/type_inference/context_array.rb +1 -1
- data/lib/steep/version.rb +1 -1
- data/smoke/regression/fun.rb +8 -0
- data/smoke/regression/fun.rbs +4 -0
- metadata +8 -8
- data/lib/steep/ast/buffer.rb +0 -51
- data/lib/steep/ast/location.rb +0 -86
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e93086efe3704ac8b59a1450fda301b7ab91f409c13c53a679a2ed3b3419ca84
|
4
|
+
data.tar.gz: b00e2030a9ea2171b6f967c78f469204c903cb937d421e5dcab896021fce2919
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 06023d31b509f58efdea8c8f0e13c49b38f3a4936debbe3a0d88bfd84b356e7a761506a8f105c035bd454a4b2f39ae6af13d16b84d29e6d0050d9d58d7062e82
|
7
|
+
data.tar.gz: '0601459d31ad8ca758c95c29215eb237b5bc50490b5133e574057ec1836396d9189c3dd22628244c1d8d432e0f945a746c280ae96ca20b768c063fbae0c696af'
|
data/CHANGELOG.md
CHANGED
data/lib/steep.rb
CHANGED
@@ -16,7 +16,6 @@ require 'uri'
|
|
16
16
|
|
17
17
|
require "rbs"
|
18
18
|
|
19
|
-
require "steep/ast/location"
|
20
19
|
require "steep/ast/types/helper"
|
21
20
|
require "steep/ast/types/any"
|
22
21
|
require "steep/ast/types/instance"
|
@@ -39,7 +38,6 @@ require "steep/ast/types/logic"
|
|
39
38
|
require "steep/ast/type_params"
|
40
39
|
require "steep/ast/annotation"
|
41
40
|
require "steep/ast/annotation/collection"
|
42
|
-
require "steep/ast/buffer"
|
43
41
|
require "steep/ast/builtin"
|
44
42
|
require "steep/ast/types/factory"
|
45
43
|
|
@@ -342,44 +342,44 @@ module Steep
|
|
342
342
|
end
|
343
343
|
end
|
344
344
|
|
345
|
+
NilClassName = TypeName("::NilClass")
|
346
|
+
|
345
347
|
def setup_primitives(method_name, method_type)
|
346
348
|
if method_def = method_type.method_def
|
347
349
|
defined_in = method_def.defined_in
|
348
350
|
member = method_def.member
|
349
351
|
|
350
352
|
if member.is_a?(RBS::AST::Members::MethodDefinition)
|
351
|
-
case
|
352
|
-
when
|
353
|
-
|
354
|
-
when :is_a?, :kind_of?, :instance_of?
|
353
|
+
case method_name
|
354
|
+
when :is_a?, :kind_of?, :instance_of?
|
355
|
+
if defined_in == RBS::BuiltinNames::Object.name && member.instance?
|
355
356
|
return method_type.with(
|
356
357
|
return_type: AST::Types::Logic::ReceiverIsArg.new(location: method_type.return_type.location)
|
357
358
|
)
|
358
|
-
when :nil?
|
359
|
-
return method_type.with(
|
360
|
-
return_type: AST::Types::Logic::ReceiverIsNil.new(location: method_type.return_type.location)
|
361
|
-
)
|
362
359
|
end
|
363
360
|
|
364
|
-
when
|
365
|
-
case
|
366
|
-
when
|
361
|
+
when :nil?
|
362
|
+
case defined_in
|
363
|
+
when RBS::BuiltinNames::Object.name,
|
364
|
+
NilClassName
|
367
365
|
return method_type.with(
|
368
366
|
return_type: AST::Types::Logic::ReceiverIsNil.new(location: method_type.return_type.location)
|
369
367
|
)
|
370
368
|
end
|
371
369
|
|
372
|
-
when
|
373
|
-
case
|
374
|
-
when
|
370
|
+
when :!
|
371
|
+
case defined_in
|
372
|
+
when RBS::BuiltinNames::BasicObject.name,
|
373
|
+
RBS::BuiltinNames::TrueClass.name,
|
374
|
+
RBS::BuiltinNames::FalseClass.name
|
375
375
|
return method_type.with(
|
376
376
|
return_type: AST::Types::Logic::Not.new(location: method_type.return_type.location)
|
377
377
|
)
|
378
378
|
end
|
379
379
|
|
380
|
-
when
|
381
|
-
case
|
382
|
-
when
|
380
|
+
when :===
|
381
|
+
case defined_in
|
382
|
+
when RBS::BuiltinNames::Module.name
|
383
383
|
return method_type.with(
|
384
384
|
return_type: AST::Types::Logic::ArgIsReceiver.new(location: method_type.return_type.location)
|
385
385
|
)
|
@@ -409,7 +409,7 @@ module Steep
|
|
409
409
|
else
|
410
410
|
raise "Unexpected `self` type interface"
|
411
411
|
end
|
412
|
-
|
412
|
+
|
413
413
|
when Name::Instance
|
414
414
|
Interface::Interface.new(type: self_type, private: private).tap do |interface|
|
415
415
|
definition = definition_builder.build_instance(type.name)
|
data/lib/steep/server/utils.rb
CHANGED
@@ -13,7 +13,7 @@ module Steep
|
|
13
13
|
if range
|
14
14
|
text = text.dup
|
15
15
|
|
16
|
-
buf =
|
16
|
+
buf = RBS::Buffer.new(name: :_, content: text)
|
17
17
|
|
18
18
|
start_pos = buf.loc_to_pos(range[:start].yield_self {|pos| [pos[:line]+1, pos[:character]] })
|
19
19
|
end_pos = buf.loc_to_pos(range[:end].yield_self {|pos| [pos[:line]+1, pos[:character]] })
|
data/lib/steep/source.rb
CHANGED
@@ -65,11 +65,11 @@ module Steep
|
|
65
65
|
parser.tokenize(buffer)
|
66
66
|
end
|
67
67
|
|
68
|
-
buffer =
|
68
|
+
buffer = RBS::Buffer.new(name: path, content: source_code)
|
69
69
|
|
70
70
|
comments.each do |comment|
|
71
71
|
src = comment.text.gsub(/\A#\s*/, '')
|
72
|
-
location =
|
72
|
+
location = RBS::Location.new(buffer: buffer,
|
73
73
|
start_pos: comment.location.expression.begin_pos + 1,
|
74
74
|
end_pos: comment.location.expression.end_pos)
|
75
75
|
annotation = AnnotationParser.new(factory: factory).parse(src, location: location)
|
data/lib/steep/version.rb
CHANGED
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.33.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Soutaro Matsumoto
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-10-
|
11
|
+
date: 2020-10-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parser
|
@@ -140,9 +140,7 @@ files:
|
|
140
140
|
- lib/steep/annotation_parser.rb
|
141
141
|
- lib/steep/ast/annotation.rb
|
142
142
|
- lib/steep/ast/annotation/collection.rb
|
143
|
-
- lib/steep/ast/buffer.rb
|
144
143
|
- lib/steep/ast/builtin.rb
|
145
|
-
- lib/steep/ast/location.rb
|
146
144
|
- lib/steep/ast/type_params.rb
|
147
145
|
- lib/steep/ast/types.rb
|
148
146
|
- lib/steep/ast/types/any.rb
|
@@ -331,6 +329,8 @@ files:
|
|
331
329
|
- smoke/regexp/b.rb
|
332
330
|
- smoke/regression/Steepfile
|
333
331
|
- smoke/regression/array.rb
|
332
|
+
- smoke/regression/fun.rb
|
333
|
+
- smoke/regression/fun.rbs
|
334
334
|
- smoke/regression/hash.rb
|
335
335
|
- smoke/regression/poly_new.rb
|
336
336
|
- smoke/regression/poly_new.rbs
|
@@ -363,7 +363,7 @@ metadata:
|
|
363
363
|
homepage_uri: https://github.com/soutaro/steep
|
364
364
|
source_code_uri: https://github.com/soutaro/steep
|
365
365
|
changelog_uri: https://github.com/soutaro/steep/blob/master/CHANGELOG.md
|
366
|
-
post_install_message:
|
366
|
+
post_install_message:
|
367
367
|
rdoc_options: []
|
368
368
|
require_paths:
|
369
369
|
- lib
|
@@ -378,8 +378,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
378
378
|
- !ruby/object:Gem::Version
|
379
379
|
version: '0'
|
380
380
|
requirements: []
|
381
|
-
rubygems_version: 3.
|
382
|
-
signing_key:
|
381
|
+
rubygems_version: 3.1.2
|
382
|
+
signing_key:
|
383
383
|
specification_version: 4
|
384
384
|
summary: Gradual Typing for Ruby
|
385
385
|
test_files: []
|
data/lib/steep/ast/buffer.rb
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
module Steep
|
2
|
-
module AST
|
3
|
-
class Buffer
|
4
|
-
attr_reader :name
|
5
|
-
attr_reader :content
|
6
|
-
attr_reader :lines
|
7
|
-
attr_reader :ranges
|
8
|
-
|
9
|
-
def initialize(name:, content:)
|
10
|
-
@name = name
|
11
|
-
@content = content
|
12
|
-
|
13
|
-
@lines = content.split(/\n/, -1)
|
14
|
-
|
15
|
-
@ranges = []
|
16
|
-
offset = 0
|
17
|
-
lines.each.with_index do |line, index|
|
18
|
-
if index == lines.size - 1
|
19
|
-
ranges << (offset..offset)
|
20
|
-
else
|
21
|
-
size = line.size
|
22
|
-
range = offset..(offset+size)
|
23
|
-
ranges << range
|
24
|
-
offset += size+1
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def pos_to_loc(pos)
|
30
|
-
index = ranges.bsearch_index do |range|
|
31
|
-
pos <= range.end
|
32
|
-
end
|
33
|
-
|
34
|
-
if index
|
35
|
-
[index + 1, pos - ranges[index].begin]
|
36
|
-
else
|
37
|
-
[1, pos]
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def loc_to_pos(loc)
|
42
|
-
line, column = loc
|
43
|
-
ranges[line - 1].begin + column
|
44
|
-
end
|
45
|
-
|
46
|
-
def source(range)
|
47
|
-
content[range]
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
data/lib/steep/ast/location.rb
DELETED
@@ -1,86 +0,0 @@
|
|
1
|
-
module Steep
|
2
|
-
module AST
|
3
|
-
class Location
|
4
|
-
attr_reader :buffer
|
5
|
-
attr_reader :start_pos
|
6
|
-
attr_reader :end_pos
|
7
|
-
|
8
|
-
def initialize(buffer:, start_pos:, end_pos:)
|
9
|
-
@buffer = buffer
|
10
|
-
@start_pos = start_pos
|
11
|
-
@end_pos = end_pos
|
12
|
-
end
|
13
|
-
|
14
|
-
def inspect
|
15
|
-
"#<#{self.class}:#{self.__id__} @buffer=#{buffer.name}, @start_pos=#{start_pos}, @end_pos=#{end_pos}, source='#{source.lines.first}', start_line=#{start_line}, start_column=#{start_column}>"
|
16
|
-
end
|
17
|
-
|
18
|
-
def name
|
19
|
-
buffer.name
|
20
|
-
end
|
21
|
-
|
22
|
-
def start_line
|
23
|
-
start_loc[0]
|
24
|
-
end
|
25
|
-
|
26
|
-
def start_column
|
27
|
-
start_loc[1]
|
28
|
-
end
|
29
|
-
|
30
|
-
def end_line
|
31
|
-
end_loc[0]
|
32
|
-
end
|
33
|
-
|
34
|
-
def end_column
|
35
|
-
end_loc[1]
|
36
|
-
end
|
37
|
-
|
38
|
-
def start_loc
|
39
|
-
@start_loc ||= buffer.pos_to_loc(start_pos)
|
40
|
-
end
|
41
|
-
|
42
|
-
def end_loc
|
43
|
-
@end_loc ||= buffer.pos_to_loc(end_pos)
|
44
|
-
end
|
45
|
-
|
46
|
-
def source
|
47
|
-
@source ||= buffer.source(start_pos...end_pos)
|
48
|
-
end
|
49
|
-
|
50
|
-
def to_s
|
51
|
-
"#{start_line}:#{start_column}...#{end_line}:#{end_column}"
|
52
|
-
end
|
53
|
-
|
54
|
-
def ==(other)
|
55
|
-
other.is_a?(Location) &&
|
56
|
-
other.buffer == buffer &&
|
57
|
-
other.start_pos == start_pos &&
|
58
|
-
other.end_pos == end_pos
|
59
|
-
end
|
60
|
-
|
61
|
-
def +(other)
|
62
|
-
if other
|
63
|
-
raise "Invalid concat: buffer=#{buffer.name}, other.buffer=#{other.buffer.name}" unless other.buffer == buffer
|
64
|
-
|
65
|
-
self.class.new(buffer: buffer,
|
66
|
-
start_pos: start_pos,
|
67
|
-
end_pos: other.end_pos)
|
68
|
-
else
|
69
|
-
self
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
def self.concat(*locations)
|
74
|
-
locations.inject {|l1, l2|
|
75
|
-
l1 + l2
|
76
|
-
}
|
77
|
-
end
|
78
|
-
|
79
|
-
def pred?(loc)
|
80
|
-
loc.is_a?(Location) &&
|
81
|
-
loc.name == name &&
|
82
|
-
loc.start_pos == end_pos
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|