steep 0.21.0 → 0.27.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +38 -1
  3. data/Gemfile +7 -0
  4. data/bin/steep-prof +16 -0
  5. data/lib/steep/ast/types.rb +5 -3
  6. data/lib/steep/ast/types/any.rb +1 -3
  7. data/lib/steep/ast/types/boolean.rb +1 -3
  8. data/lib/steep/ast/types/bot.rb +1 -3
  9. data/lib/steep/ast/types/class.rb +2 -2
  10. data/lib/steep/ast/types/factory.rb +58 -16
  11. data/lib/steep/ast/types/helper.rb +6 -0
  12. data/lib/steep/ast/types/instance.rb +2 -2
  13. data/lib/steep/ast/types/intersection.rb +8 -4
  14. data/lib/steep/ast/types/literal.rb +5 -3
  15. data/lib/steep/ast/types/name.rb +13 -9
  16. data/lib/steep/ast/types/nil.rb +1 -3
  17. data/lib/steep/ast/types/proc.rb +5 -2
  18. data/lib/steep/ast/types/record.rb +9 -4
  19. data/lib/steep/ast/types/self.rb +1 -1
  20. data/lib/steep/ast/types/top.rb +1 -3
  21. data/lib/steep/ast/types/tuple.rb +5 -3
  22. data/lib/steep/ast/types/union.rb +11 -3
  23. data/lib/steep/ast/types/var.rb +2 -2
  24. data/lib/steep/ast/types/void.rb +1 -3
  25. data/lib/steep/drivers/check.rb +4 -0
  26. data/lib/steep/interface/method_type.rb +48 -18
  27. data/lib/steep/interface/substitution.rb +32 -2
  28. data/lib/steep/project/target.rb +17 -3
  29. data/lib/steep/server/base_worker.rb +4 -3
  30. data/lib/steep/server/master.rb +3 -1
  31. data/lib/steep/server/signature_worker.rb +3 -0
  32. data/lib/steep/signature/errors.rb +28 -0
  33. data/lib/steep/signature/validator.rb +11 -1
  34. data/lib/steep/source.rb +2 -1
  35. data/lib/steep/subtyping/check.rb +38 -21
  36. data/lib/steep/type_construction.rb +446 -181
  37. data/lib/steep/type_inference/constant_env.rb +1 -1
  38. data/lib/steep/type_inference/context.rb +8 -0
  39. data/lib/steep/type_inference/context_array.rb +4 -3
  40. data/lib/steep/type_inference/logic.rb +31 -0
  41. data/lib/steep/typing.rb +7 -0
  42. data/lib/steep/version.rb +1 -1
  43. data/smoke/hash/d.rb +1 -1
  44. data/steep.gemspec +1 -8
  45. metadata +5 -88
@@ -26,7 +26,7 @@ module Steep
26
26
  factory.type(constant.type)
27
27
  end
28
28
  rescue => exn
29
- Steep.logger.error "Looking up a constant failed: name=#{name}, context=[#{context.join(", ")}], error=#{exn.inspect}"
29
+ Steep.logger.debug "Looking up a constant failed: name=#{name}, context=[#{context.join(", ")}], error=#{exn.inspect}"
30
30
  nil
31
31
  end
32
32
  end
@@ -70,6 +70,14 @@ module Steep
70
70
  def const_context
71
71
  const_env.context
72
72
  end
73
+
74
+ def class_variables
75
+ if module_definition
76
+ @class_variables ||= module_definition.class_variables.transform_values do |var_def|
77
+ var_def.type
78
+ end
79
+ end
80
+ end
73
81
  end
74
82
 
75
83
  attr_reader :method_context
@@ -35,12 +35,13 @@ module Steep
35
35
 
36
36
  def insert_context(range, context:, entry: self.root)
37
37
  entry.sub_entries.each do |sub|
38
- next if sub.range.begin < range.begin && range.end <= sub.range.end
39
- next if range.begin < sub.range.begin && sub.range.end <= range.end
38
+ next if sub.range.begin <= range.begin && range.end <= sub.range.end
39
+ next if range.begin <= sub.range.begin && sub.range.end <= range.end
40
40
  next if range.end <= sub.range.begin
41
41
  next if sub.range.end <= range.begin
42
42
 
43
- raise "Range crossing: sub range=#{sub.range}, new range=#{range}"
43
+ Steep.logger.error { "Range crossing: sub range=#{sub.range}, new range=#{range}" }
44
+ raise
44
45
  end
45
46
 
46
47
  sup = entry.sub_entries.find do |sub|
@@ -47,6 +47,37 @@ module Steep
47
47
  f.merge([node])
48
48
  ]
49
49
 
50
+ when :masgn
51
+ lhs, rhs = node.children
52
+
53
+ lt, lf = nodes(node: lhs)
54
+ rt, rf = nodes(node: rhs)
55
+
56
+ [
57
+ (lt + rt).merge([node]),
58
+ (lf + rf).merge([node])
59
+ ]
60
+
61
+ when :mlhs
62
+ nodes = [node]
63
+
64
+ node.children.each do |child|
65
+ case child.type
66
+ when :lvasgn
67
+ nodes << child
68
+ when :splat
69
+ if node.children[0].type == :lvasgn
70
+ nodes << child
71
+ nodes << child.children[0]
72
+ end
73
+ end
74
+ end
75
+
76
+ [
77
+ Result.new(nodes),
78
+ Result.new(nodes)
79
+ ]
80
+
50
81
  when :and
51
82
  lhs, rhs = node.children
52
83
 
@@ -126,6 +126,13 @@ module Steep
126
126
  end_pos = node.loc.end.begin_pos
127
127
  add_context(begin_pos..end_pos, context: context)
128
128
 
129
+ when :for
130
+ _, collection, _ = node.children
131
+
132
+ begin_pos = collection.loc.expression.end_pos
133
+ end_pos = node.loc.end.begin_pos
134
+
135
+ add_context(begin_pos..end_pos, context: context)
129
136
  else
130
137
  raise "Unexpected node for insert_context: #{node.type}"
131
138
  end
@@ -1,3 +1,3 @@
1
1
  module Steep
2
- VERSION = "0.21.0"
2
+ VERSION = "0.27.0"
3
3
  end
@@ -2,5 +2,5 @@
2
2
 
3
3
  params = { id: 30, name: "Matz" }
4
4
 
5
- # !expects IncompatibleAssignment: lhs_type={ :name => ::String, :id => ::Integer }, rhs_type={ :id => ::String, :name => ::String, :email => ::String }
5
+ # !expects IncompatibleAssignment: lhs_type={ :id => ::Integer, :name => ::String }, rhs_type={ :email => ::String, :id => ::String, :name => ::String }
6
6
  params = { id: "30", name: "foo", email: "matsumoto@soutaro.com" }
@@ -28,18 +28,11 @@ Gem::Specification.new do |spec|
28
28
 
29
29
  spec.required_ruby_version = '>= 2.6.0'
30
30
 
31
- spec.add_development_dependency "bundler", ">= 1.13"
32
- spec.add_development_dependency "rake", "~> 13.0"
33
- spec.add_development_dependency "minitest", "~> 5.0"
34
- spec.add_development_dependency "racc", "~> 1.4"
35
- spec.add_development_dependency "minitest-reporters", "~> 1.4.2"
36
- spec.add_development_dependency "minitest-hooks", "~> 1.5.0"
37
-
38
31
  spec.add_runtime_dependency "parser", "~> 2.7.0"
39
32
  spec.add_runtime_dependency "ast_utils", "~> 0.3.0"
40
33
  spec.add_runtime_dependency "activesupport", ">= 5.1"
41
34
  spec.add_runtime_dependency "rainbow", ">= 2.2.2", "< 4.0"
42
35
  spec.add_runtime_dependency "listen", "~> 3.1"
43
36
  spec.add_runtime_dependency "language_server-protocol", "~> 3.14.0.2"
44
- spec.add_runtime_dependency "rbs", "~> 0.7.0"
37
+ spec.add_runtime_dependency "rbs", "~> 0.11.0"
45
38
  end
metadata CHANGED
@@ -1,99 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: steep
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.21.0
4
+ version: 0.27.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: 2020-07-20 00:00:00.000000000 Z
11
+ date: 2020-08-31 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '1.13'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '1.13'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '13.0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '13.0'
41
- - !ruby/object:Gem::Dependency
42
- name: minitest
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '5.0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '5.0'
55
- - !ruby/object:Gem::Dependency
56
- name: racc
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '1.4'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '1.4'
69
- - !ruby/object:Gem::Dependency
70
- name: minitest-reporters
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: 1.4.2
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: 1.4.2
83
- - !ruby/object:Gem::Dependency
84
- name: minitest-hooks
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: 1.5.0
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: 1.5.0
97
13
  - !ruby/object:Gem::Dependency
98
14
  name: parser
99
15
  requirement: !ruby/object:Gem::Requirement
@@ -190,14 +106,14 @@ dependencies:
190
106
  requirements:
191
107
  - - "~>"
192
108
  - !ruby/object:Gem::Version
193
- version: 0.7.0
109
+ version: 0.11.0
194
110
  type: :runtime
195
111
  prerelease: false
196
112
  version_requirements: !ruby/object:Gem::Requirement
197
113
  requirements:
198
114
  - - "~>"
199
115
  - !ruby/object:Gem::Version
200
- version: 0.7.0
116
+ version: 0.11.0
201
117
  description: Gradual Typing for Ruby
202
118
  email:
203
119
  - matsumoto@soutaro.com
@@ -218,6 +134,7 @@ files:
218
134
  - bin/console
219
135
  - bin/setup
220
136
  - bin/smoke_runner.rb
137
+ - bin/steep-prof
221
138
  - exe/steep
222
139
  - lib/steep.rb
223
140
  - lib/steep/annotation_parser.rb