steep 1.4.0.dev.2 → 1.4.0.dev.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +1 -2
  3. data/Gemfile +1 -1
  4. data/Gemfile.lock +9 -11
  5. data/Gemfile.steep +1 -2
  6. data/Gemfile.steep.lock +11 -14
  7. data/README.md +7 -1
  8. data/Steepfile +0 -3
  9. data/bin/rbs +0 -1
  10. data/guides/README.md +5 -0
  11. data/guides/src/gem-rbs-collection/gem-rbs-collection.md +143 -0
  12. data/guides/src/getting-started/getting-started.md +164 -0
  13. data/guides/src/nil-optional/nil-optional.md +195 -0
  14. data/lib/steep/diagnostic/ruby.rb +80 -6
  15. data/lib/steep/drivers/check.rb +4 -4
  16. data/lib/steep/interface/block.rb +10 -0
  17. data/lib/steep/interface/builder.rb +3 -3
  18. data/lib/steep/method_name.rb +8 -0
  19. data/lib/steep/module_helper.rb +13 -11
  20. data/lib/steep/path_helper.rb +4 -0
  21. data/lib/steep/server/interaction_worker.rb +197 -230
  22. data/lib/steep/server/lsp_formatter.rb +308 -154
  23. data/lib/steep/server/master.rb +4 -1
  24. data/lib/steep/services/completion_provider.rb +140 -103
  25. data/lib/steep/services/hover_provider/rbs.rb +37 -32
  26. data/lib/steep/services/signature_help_provider.rb +108 -0
  27. data/lib/steep/services/type_name_completion.rb +165 -0
  28. data/lib/steep/source.rb +1 -0
  29. data/lib/steep/type_construction.rb +460 -266
  30. data/lib/steep/type_inference/block_params.rb +13 -0
  31. data/lib/steep/type_inference/context.rb +3 -3
  32. data/lib/steep/type_inference/method_call.rb +1 -1
  33. data/lib/steep/type_inference/method_params.rb +42 -16
  34. data/lib/steep/type_inference/send_args.rb +80 -51
  35. data/lib/steep/type_inference/type_env.rb +12 -4
  36. data/lib/steep/version.rb +1 -1
  37. data/lib/steep.rb +2 -0
  38. data/rbs_collection.steep.lock.yaml +0 -28
  39. data/rbs_collection.steep.yaml +10 -9
  40. data/sample/Steepfile +2 -0
  41. data/sample/lib/conference.rb +12 -0
  42. data/sample/sig/conference.rbs +5 -0
  43. data/sig/shims/language-server_protocol.rbs +277 -0
  44. data/sig/shims/parser/nodes.rbs +37 -0
  45. data/sig/shims/parser.rbs +4 -0
  46. data/sig/shims/string.rbs +4 -0
  47. data/sig/steep/ast/types/factory.rbs +10 -8
  48. data/sig/steep/diagnostic/lsp_formatter.rbs +1 -1
  49. data/sig/steep/diagnostic/ruby.rbs +38 -2
  50. data/sig/steep/drivers/check.rbs +1 -1
  51. data/sig/steep/drivers/checkfile.rbs +1 -1
  52. data/sig/steep/drivers/diagnostic_printer.rbs +1 -1
  53. data/sig/steep/drivers/watch.rbs +1 -1
  54. data/sig/steep/index/signature_symbol_provider.rbs +1 -1
  55. data/sig/steep/interface/block.rbs +2 -0
  56. data/sig/steep/interface/builder.rbs +5 -3
  57. data/sig/steep/interface/method_type.rbs +5 -3
  58. data/sig/steep/method_name.rbs +5 -1
  59. data/sig/steep/module_helper.rbs +9 -0
  60. data/sig/steep/path_helper.rbs +3 -1
  61. data/sig/steep/server/base_worker.rbs +1 -1
  62. data/sig/steep/server/interaction_worker.rbs +52 -17
  63. data/sig/steep/server/lsp_formatter.rbs +43 -18
  64. data/sig/steep/server/master.rbs +1 -1
  65. data/sig/steep/server/type_check_worker.rbs +7 -5
  66. data/sig/steep/server/worker_process.rbs +6 -4
  67. data/sig/steep/services/completion_provider.rbs +106 -28
  68. data/sig/steep/services/hover_provider/rbs.rbs +13 -9
  69. data/sig/steep/services/signature_help_provider.rbs +39 -0
  70. data/sig/steep/services/type_name_completion.rbs +122 -0
  71. data/sig/steep/type_construction.rbs +99 -30
  72. data/sig/steep/type_inference/block_params.rbs +4 -0
  73. data/sig/steep/type_inference/context.rbs +70 -22
  74. data/sig/steep/type_inference/method_call.rbs +1 -1
  75. data/sig/steep/type_inference/method_params.rbs +43 -24
  76. data/sig/steep/type_inference/multiple_assignment.rbs +1 -1
  77. data/sig/steep/type_inference/send_args.rbs +19 -5
  78. data/sig/steep/typing.rbs +8 -3
  79. data/smoke/diagnostics/test_expectations.yml +1 -0
  80. data/steep.gemspec +0 -1
  81. metadata +12 -16
@@ -52,7 +52,9 @@ module Steep
52
52
  include Equatable
53
53
  end
54
54
 
55
- type arg = NodeParamPair | NodeTypePair | SplatArg | UnexpectedArg | MissingArg
55
+ type arg = NodeParamPair | NodeTypePair | SplatArg | error_arg
56
+
57
+ type error_arg = UnexpectedArg | MissingArg
56
58
 
57
59
  attr_reader args: Array[Parser::AST::Node]
58
60
 
@@ -68,7 +70,7 @@ module Steep
68
70
 
69
71
  def following_args: () -> Array[Parser::AST::Node]
70
72
 
71
- def param: () -> Interface::Function::Params::PositionalParams::param?
73
+ %a{pure} def param: () -> Interface::Function::Params::PositionalParams::param?
72
74
 
73
75
  def update: (?index: Integer, ?positional_params: Interface::Function::Params::PositionalParams?, ?uniform: bool) -> PositionalArgs
74
76
 
@@ -134,7 +136,9 @@ module Steep
134
136
  def initialize: (keywords: Set[Symbol]) -> void
135
137
  end
136
138
 
137
- type arg = ArgTypePairs | SplatArg | UnexpectedKeyword | MissingKeyword
139
+ type arg = ArgTypePairs | SplatArg | error_arg
140
+
141
+ type error_arg = UnexpectedKeyword | MissingKeyword
138
142
 
139
143
  attr_reader kwarg_nodes: Array[Parser::AST::Node]
140
144
 
@@ -198,6 +202,14 @@ module Steep
198
202
  def node_type: () -> AST::Types::t
199
203
  end
200
204
 
205
+ class ForwardedArgs
206
+ attr_reader node: Parser::AST::Node
207
+
208
+ attr_reader params: Interface::Function::Params
209
+
210
+ def initialize: (node: Parser::AST::Node, params: Interface::Function::Params) -> void
211
+ end
212
+
201
213
  attr_reader node: Parser::AST::Node
202
214
 
203
215
  attr_reader arguments: Array[Parser::AST::Node]
@@ -216,14 +228,16 @@ module Steep
216
228
 
217
229
  def kwargs_node: () -> Parser::AST::Node?
218
230
 
231
+ def forwarded_args_node: () -> Parser::AST::Node?
232
+
219
233
  def positional_arg: () -> PositionalArgs
220
234
 
221
235
  def keyword_args: () -> KeywordArgs
222
236
 
223
237
  def block_pass_arg: () -> BlockPassArg
224
238
 
225
- def each: () { (PositionalArgs::arg | KeywordArgs::arg) -> void } -> Array[Diagnostic::Ruby::Base]
226
- | () -> Enumerator[PositionalArgs::arg | KeywordArgs::arg, Array[Diagnostic::Ruby::Base]]
239
+ def each: () { (PositionalArgs::arg | KeywordArgs::arg) -> void } -> [ForwardedArgs?, Array[Diagnostic::Ruby::Base]]
240
+ | () -> Enumerator[PositionalArgs::arg | KeywordArgs::arg, [ForwardedArgs?, Array[Diagnostic::Ruby::Base]]]
227
241
  end
228
242
  end
229
243
  end
data/sig/steep/typing.rbs CHANGED
@@ -34,7 +34,7 @@ module Steep
34
34
 
35
35
  def add_error: (Diagnostic::Ruby::Base error) -> void
36
36
 
37
- def add_typing: (Parser::AST::Node node, AST::Types::t `type`, TypeInference::Context _context) -> untyped
37
+ def add_typing: (Parser::AST::Node node, AST::Types::t `type`, top) -> untyped
38
38
 
39
39
  def add_call: (untyped node, untyped call) -> untyped
40
40
 
@@ -44,7 +44,7 @@ module Steep
44
44
 
45
45
  def type_of: (node: Parser::AST::Node) -> AST::Types::t
46
46
 
47
- def call_of: (node: untyped) -> untyped
47
+ def call_of: (node: Parser::AST::Node) -> TypeInference::MethodCall::t
48
48
 
49
49
  def add_context_for_node: (untyped node, context: untyped) -> untyped
50
50
 
@@ -61,8 +61,13 @@ module Steep
61
61
  def new_child: [A] (Range[Integer] range) { (Typing) -> A } -> A
62
62
  | (Range[Integer]) -> Typing
63
63
 
64
- def each_typing: () { () -> untyped } -> untyped
64
+ def each_typing: () { (Parser::AST::Node, AST::Types::t) -> void } -> void
65
65
 
66
+ # Push the current changes to the `#parent` typing
67
+ #
68
+ # * Raises an error if `#parent` is `nil`
69
+ # * Raises an error if `#parent` is changed since `#new_child` call that instantiated `self`
70
+ #
66
71
  def save!: () -> void
67
72
  end
68
73
  end
@@ -46,6 +46,7 @@
46
46
  message: |-
47
47
  Cannot pass a value of type `^(untyped, untyped, untyped) -> untyped` as a block-pass-argument of type `^(::Integer) -> void`
48
48
  ^(untyped, untyped, untyped) -> untyped <: ^(::Integer) -> void
49
+ (Params are incompatible)
49
50
  code: Ruby::BlockTypeMismatch
50
51
  - file: break_type_mismatch.rb
51
52
  diagnostics:
data/steep.gemspec CHANGED
@@ -42,5 +42,4 @@ Gem::Specification.new do |spec|
42
42
  spec.add_runtime_dependency "fileutils", ">= 1.1.0"
43
43
  spec.add_runtime_dependency "strscan", ">= 1.0.0"
44
44
  spec.add_runtime_dependency "csv", ">= 3.0.9"
45
- spec.add_runtime_dependency "pathname", ">= 0.2.1"
46
45
  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: 1.4.0.dev.2
4
+ version: 1.4.0.dev.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Soutaro Matsumoto
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-02-28 00:00:00.000000000 Z
11
+ date: 2023-04-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -224,20 +224,6 @@ dependencies:
224
224
  - - ">="
225
225
  - !ruby/object:Gem::Version
226
226
  version: 3.0.9
227
- - !ruby/object:Gem::Dependency
228
- name: pathname
229
- requirement: !ruby/object:Gem::Requirement
230
- requirements:
231
- - - ">="
232
- - !ruby/object:Gem::Version
233
- version: 0.2.1
234
- type: :runtime
235
- prerelease: false
236
- version_requirements: !ruby/object:Gem::Requirement
237
- requirements:
238
- - - ">="
239
- - !ruby/object:Gem::Version
240
- version: 0.2.1
241
227
  description: Gradual Typing for Ruby
242
228
  email:
243
229
  - matsumoto@soutaro.com
@@ -268,6 +254,10 @@ files:
268
254
  - bin/steep
269
255
  - bin/steep-prof
270
256
  - exe/steep
257
+ - guides/README.md
258
+ - guides/src/gem-rbs-collection/gem-rbs-collection.md
259
+ - guides/src/getting-started/getting-started.md
260
+ - guides/src/nil-optional/nil-optional.md
271
261
  - lib/steep.rb
272
262
  - lib/steep/annotation_parser.rb
273
263
  - lib/steep/ast/annotation.rb
@@ -353,9 +343,11 @@ files:
353
343
  - lib/steep/services/hover_provider/ruby.rb
354
344
  - lib/steep/services/hover_provider/singleton_methods.rb
355
345
  - lib/steep/services/path_assignment.rb
346
+ - lib/steep/services/signature_help_provider.rb
356
347
  - lib/steep/services/signature_service.rb
357
348
  - lib/steep/services/stats_calculator.rb
358
349
  - lib/steep/services/type_check_service.rb
350
+ - lib/steep/services/type_name_completion.rb
359
351
  - lib/steep/shims/filter_map.rb
360
352
  - lib/steep/shims/symbol_start_with.rb
361
353
  - lib/steep/signature/validator.rb
@@ -393,8 +385,10 @@ files:
393
385
  - sig/shims/parallel.rbs
394
386
  - sig/shims/parser.rbs
395
387
  - sig/shims/parser/comment.rbs
388
+ - sig/shims/parser/nodes.rbs
396
389
  - sig/shims/parser/source/map.rbs
397
390
  - sig/shims/parser/source/range.rbs
391
+ - sig/shims/string.rbs
398
392
  - sig/shims/tagged_logging.rbs
399
393
  - sig/steep.rbs
400
394
  - sig/steep/annotation_parser.rbs
@@ -481,9 +475,11 @@ files:
481
475
  - sig/steep/services/hover_provider/ruby.rbs
482
476
  - sig/steep/services/hover_provider/singleton_methods.rbs
483
477
  - sig/steep/services/path_assignment.rbs
478
+ - sig/steep/services/signature_help_provider.rbs
484
479
  - sig/steep/services/signature_service.rbs
485
480
  - sig/steep/services/stats_calculator.rbs
486
481
  - sig/steep/services/type_check_service.rbs
482
+ - sig/steep/services/type_name_completion.rbs
487
483
  - sig/steep/signature/validator.rbs
488
484
  - sig/steep/source.rbs
489
485
  - sig/steep/subtyping/cache.rbs