steep 0.42.0 → 0.43.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +14 -0
  3. data/lib/steep.rb +4 -3
  4. data/lib/steep/annotation_parser.rb +10 -2
  5. data/lib/steep/cli.rb +1 -0
  6. data/lib/steep/diagnostic/ruby.rb +15 -6
  7. data/lib/steep/diagnostic/signature.rb +28 -11
  8. data/lib/steep/drivers/annotations.rb +1 -3
  9. data/lib/steep/drivers/check.rb +17 -7
  10. data/lib/steep/drivers/diagnostic_printer.rb +4 -0
  11. data/lib/steep/drivers/langserver.rb +1 -0
  12. data/lib/steep/drivers/print_project.rb +1 -1
  13. data/lib/steep/drivers/stats.rb +125 -105
  14. data/lib/steep/drivers/utils/driver_helper.rb +35 -0
  15. data/lib/steep/drivers/validate.rb +1 -1
  16. data/lib/steep/drivers/watch.rb +12 -10
  17. data/lib/steep/index/signature_symbol_provider.rb +20 -6
  18. data/lib/steep/project/target.rb +4 -4
  19. data/lib/steep/server/interaction_worker.rb +2 -3
  20. data/lib/steep/server/master.rb +621 -170
  21. data/lib/steep/server/type_check_worker.rb +127 -13
  22. data/lib/steep/server/worker_process.rb +7 -4
  23. data/lib/steep/services/completion_provider.rb +2 -2
  24. data/lib/steep/services/hover_content.rb +5 -4
  25. data/lib/steep/services/path_assignment.rb +6 -8
  26. data/lib/steep/services/signature_service.rb +43 -9
  27. data/lib/steep/services/type_check_service.rb +184 -138
  28. data/lib/steep/signature/validator.rb +17 -9
  29. data/lib/steep/source.rb +21 -18
  30. data/lib/steep/subtyping/constraints.rb +2 -2
  31. data/lib/steep/type_construction.rb +223 -125
  32. data/lib/steep/type_inference/block_params.rb +1 -1
  33. data/lib/steep/type_inference/context.rb +22 -0
  34. data/lib/steep/type_inference/logic.rb +1 -1
  35. data/lib/steep/type_inference/logic_type_interpreter.rb +3 -3
  36. data/lib/steep/version.rb +1 -1
  37. data/smoke/implements/b.rb +13 -0
  38. data/smoke/implements/b.rbs +12 -0
  39. data/smoke/regression/issue_328.rb +1 -0
  40. data/smoke/regression/issue_328.rbs +0 -0
  41. data/smoke/regression/issue_332.rb +11 -0
  42. data/smoke/regression/issue_332.rbs +19 -0
  43. data/smoke/regression/masgn.rb +4 -0
  44. data/smoke/regression/test_expectations.yml +29 -0
  45. data/smoke/regression/thread.rb +7 -0
  46. data/smoke/super/test_expectations.yml +2 -12
  47. data/steep.gemspec +2 -2
  48. metadata +40 -20
@@ -61,7 +61,7 @@ module Steep
61
61
  return
62
62
  end
63
63
 
64
- type = annotations.var_type(lvar: var.name)
64
+ type = annotations.var_type(lvar: var)
65
65
 
66
66
  case arg.type
67
67
  when :arg, :procarg0
@@ -78,6 +78,28 @@ module Steep
78
78
  end
79
79
  end
80
80
  end
81
+
82
+ def update(
83
+ instance_type: self.instance_type,
84
+ module_type: self.module_type,
85
+ implement_name: self.implement_name,
86
+ current_namespace: self.current_namespace,
87
+ const_env: self.const_env,
88
+ class_name: self.class_name,
89
+ instance_definition: self.instance_definition,
90
+ module_definition: self.module_definition
91
+ )
92
+ ModuleContext.new(
93
+ instance_type: instance_type,
94
+ module_type: module_type,
95
+ implement_name: implement_name,
96
+ current_namespace: current_namespace,
97
+ const_env: const_env,
98
+ class_name: class_name,
99
+ instance_definition: instance_definition,
100
+ module_definition: module_definition
101
+ )
102
+ end
81
103
  end
82
104
 
83
105
  attr_reader :call_context
@@ -22,7 +22,7 @@ module Steep
22
22
  nodes.each do |node|
23
23
  case node.type
24
24
  when :lvar, :lvasgn
25
- vars << node.children[0].name
25
+ vars << node.children[0]
26
26
  end
27
27
  end
28
28
 
@@ -159,16 +159,16 @@ module Steep
159
159
  def decompose_value(node)
160
160
  case node.type
161
161
  when :lvar
162
- [node, Set[node.children[0].name]]
162
+ [node, Set[node.children[0]]]
163
163
  when :masgn
164
164
  lhs, rhs = node.children
165
- lhs_vars = lhs.children.select {|m| m.type == :lvasgn }.map {|m| m.children[0].name }
165
+ lhs_vars = lhs.children.select {|m| m.type == :lvasgn }.map {|m| m.children[0] }
166
166
  val, vars = decompose_value(rhs)
167
167
  [val, vars + lhs_vars]
168
168
  when :lvasgn
169
169
  var, rhs = node.children
170
170
  val, vars = decompose_value(rhs)
171
- [val, vars + [var.name]]
171
+ [val, vars + [var]]
172
172
  when :begin
173
173
  decompose_value(node.children.last)
174
174
  when :and
data/lib/steep/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Steep
2
- VERSION = "0.42.0"
2
+ VERSION = "0.43.0"
3
3
  end
@@ -0,0 +1,13 @@
1
+ class B
2
+ Request = _ = Struct.new(:method, :path, keyword_init: true) do
3
+ # @implements Request
4
+
5
+ def post?
6
+ method == "POST"
7
+ end
8
+
9
+ def get?
10
+ method == "GET"
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ class B
2
+ class Request
3
+ attr_reader method: String
4
+ attr_reader path: String
5
+
6
+ def initialize: (method: String, path: String) -> void
7
+
8
+ def post?: () -> bool
9
+
10
+ def get?: () -> bool
11
+ end
12
+ end
@@ -0,0 +1 @@
1
+ ["abc", "d", ""].to_h { |e| [e, e.size] }
File without changes
@@ -0,0 +1,11 @@
1
+ module Issue332
2
+ module TimeDurationExtensions
3
+ def -(other)
4
+ if other.is_a?(Duration)
5
+ Time.now
6
+ else
7
+ super(other)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,19 @@
1
+ module Issue332
2
+ class Duration
3
+ end
4
+
5
+ interface _TimeDurationExtensions
6
+ def -: (Numeric other) -> Time
7
+ | (Time other) -> Float
8
+ end
9
+
10
+ module TimeDurationExtensions : _TimeDurationExtensions
11
+ def -: (Duration other) -> Time
12
+ | ...
13
+ end
14
+ end
15
+
16
+ class Time
17
+ prepend Issue332::TimeDurationExtensions
18
+ end
19
+
@@ -0,0 +1,4 @@
1
+ * = [1,2,3]
2
+ *, a = [1,2,3]
3
+
4
+ p a
@@ -1,4 +1,21 @@
1
1
  ---
2
+ - file: issue_332.rb
3
+ diagnostics:
4
+ - range:
5
+ start:
6
+ line: 7
7
+ character: 8
8
+ end:
9
+ line: 7
10
+ character: 20
11
+ severity: ERROR
12
+ message: |-
13
+ Cannot find compatible overloading of method `-` of type `(::Object & ::Issue332::_TimeDurationExtensions & ::Issue332::TimeDurationExtensions)`
14
+ Method types:
15
+ def -: (::Issue332::Duration) -> ::Time
16
+ | (::Numeric) -> ::Time
17
+ | (::Time) -> ::Float
18
+ code: Ruby::UnresolvedOverloading
2
19
  - file: set_divide.rb
3
20
  diagnostics:
4
21
  - range:
@@ -41,3 +58,15 @@
41
58
  severity: ERROR
42
59
  message: Type `::String` does not have method `ggggg`
43
60
  code: Ruby::NoMethod
61
+ - file: thread.rb
62
+ diagnostics:
63
+ - range:
64
+ start:
65
+ line: 6
66
+ character: 13
67
+ end:
68
+ line: 7
69
+ character: 3
70
+ severity: ERROR
71
+ message: The method cannot be called with a block
72
+ code: Ruby::UnexpectedBlockGiven
@@ -0,0 +1,7 @@
1
+ Thread.new do
2
+ Thread.stop
3
+ end
4
+
5
+
6
+ Thread.start do
7
+ end
@@ -55,7 +55,7 @@
55
55
  line: 26
56
56
  character: 11
57
57
  severity: ERROR
58
- message: UnexpectedSuper
58
+ message: No superclass method `baz` defined
59
59
  code: Ruby::UnexpectedSuper
60
60
  - range:
61
61
  start:
@@ -65,15 +65,5 @@
65
65
  line: 28
66
66
  character: 9
67
67
  severity: ERROR
68
- message: Cannot detect the type of the expression
69
- code: Ruby::FallbackAny
70
- - range:
71
- start:
72
- line: 28
73
- character: 4
74
- end:
75
- line: 28
76
- character: 9
77
- severity: ERROR
78
- message: UnexpectedSuper
68
+ message: No superclass method `baz` defined
79
69
  code: Ruby::UnexpectedSuper
data/steep.gemspec CHANGED
@@ -29,11 +29,11 @@ Gem::Specification.new do |spec|
29
29
  spec.required_ruby_version = '>= 2.6.0'
30
30
 
31
31
  spec.add_runtime_dependency "parser", ">= 2.7"
32
- spec.add_runtime_dependency "ast_utils", ">= 0.4.0"
33
32
  spec.add_runtime_dependency "activesupport", ">= 5.1"
34
33
  spec.add_runtime_dependency "rainbow", ">= 2.2.2", "< 4.0"
35
34
  spec.add_runtime_dependency "listen", "~> 3.0"
36
- spec.add_runtime_dependency "language_server-protocol", "~> 3.15.0.1"
35
+ spec.add_runtime_dependency "language_server-protocol", ">= 3.15", "< 4.0"
37
36
  spec.add_runtime_dependency "rbs", "~> 1.1.0"
38
37
  spec.add_runtime_dependency "parallel", ">= 1.0.0"
38
+ spec.add_runtime_dependency "terminal-table", ">= 2", "< 4"
39
39
  end
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.42.0
4
+ version: 0.43.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: 2021-03-08 00:00:00.000000000 Z
11
+ date: 2021-03-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.7'
27
- - !ruby/object:Gem::Dependency
28
- name: ast_utils
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: 0.4.0
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: 0.4.0
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: activesupport
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -90,16 +76,22 @@ dependencies:
90
76
  name: language_server-protocol
91
77
  requirement: !ruby/object:Gem::Requirement
92
78
  requirements:
93
- - - "~>"
79
+ - - ">="
94
80
  - !ruby/object:Gem::Version
95
- version: 3.15.0.1
81
+ version: '3.15'
82
+ - - "<"
83
+ - !ruby/object:Gem::Version
84
+ version: '4.0'
96
85
  type: :runtime
97
86
  prerelease: false
98
87
  version_requirements: !ruby/object:Gem::Requirement
99
88
  requirements:
100
- - - "~>"
89
+ - - ">="
101
90
  - !ruby/object:Gem::Version
102
- version: 3.15.0.1
91
+ version: '3.15'
92
+ - - "<"
93
+ - !ruby/object:Gem::Version
94
+ version: '4.0'
103
95
  - !ruby/object:Gem::Dependency
104
96
  name: rbs
105
97
  requirement: !ruby/object:Gem::Requirement
@@ -128,6 +120,26 @@ dependencies:
128
120
  - - ">="
129
121
  - !ruby/object:Gem::Version
130
122
  version: 1.0.0
123
+ - !ruby/object:Gem::Dependency
124
+ name: terminal-table
125
+ requirement: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '2'
130
+ - - "<"
131
+ - !ruby/object:Gem::Version
132
+ version: '4'
133
+ type: :runtime
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '2'
140
+ - - "<"
141
+ - !ruby/object:Gem::Version
142
+ version: '4'
131
143
  description: Gradual Typing for Ruby
132
144
  email:
133
145
  - matsumoto@soutaro.com
@@ -385,6 +397,8 @@ files:
385
397
  - smoke/implements/Steepfile
386
398
  - smoke/implements/a.rb
387
399
  - smoke/implements/a.rbs
400
+ - smoke/implements/b.rb
401
+ - smoke/implements/b.rbs
388
402
  - smoke/implements/test_expectations.yml
389
403
  - smoke/initialize/Steepfile
390
404
  - smoke/initialize/a.rb
@@ -437,11 +451,17 @@ files:
437
451
  - smoke/regression/fun.rb
438
452
  - smoke/regression/fun.rbs
439
453
  - smoke/regression/hash.rb
454
+ - smoke/regression/issue_328.rb
455
+ - smoke/regression/issue_328.rbs
456
+ - smoke/regression/issue_332.rb
457
+ - smoke/regression/issue_332.rbs
458
+ - smoke/regression/masgn.rb
440
459
  - smoke/regression/poly_new.rb
441
460
  - smoke/regression/poly_new.rbs
442
461
  - smoke/regression/range.rb
443
462
  - smoke/regression/set_divide.rb
444
463
  - smoke/regression/test_expectations.yml
464
+ - smoke/regression/thread.rb
445
465
  - smoke/rescue/Steepfile
446
466
  - smoke/rescue/a.rb
447
467
  - smoke/rescue/test_expectations.yml