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

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.
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