steep 0.40.0 → 0.44.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (169) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +38 -0
  3. data/Gemfile +1 -0
  4. data/bin/output_rebaseline.rb +15 -30
  5. data/bin/output_test.rb +23 -57
  6. data/lib/steep.rb +89 -15
  7. data/lib/steep/annotation_parser.rb +10 -2
  8. data/lib/steep/ast/types/class.rb +4 -0
  9. data/lib/steep/cli.rb +31 -6
  10. data/lib/steep/diagnostic/ruby.rb +13 -8
  11. data/lib/steep/diagnostic/signature.rb +152 -2
  12. data/lib/steep/drivers/annotations.rb +18 -36
  13. data/lib/steep/drivers/check.rb +140 -31
  14. data/lib/steep/drivers/diagnostic_printer.rb +20 -11
  15. data/lib/steep/drivers/langserver.rb +4 -8
  16. data/lib/steep/drivers/print_project.rb +10 -9
  17. data/lib/steep/drivers/stats.rb +135 -119
  18. data/lib/steep/drivers/utils/driver_helper.rb +35 -0
  19. data/lib/steep/drivers/utils/jobs_count.rb +9 -0
  20. data/lib/steep/drivers/validate.rb +29 -18
  21. data/lib/steep/drivers/watch.rb +55 -49
  22. data/lib/steep/drivers/worker.rb +11 -8
  23. data/lib/steep/expectations.rb +159 -0
  24. data/lib/steep/index/signature_symbol_provider.rb +23 -1
  25. data/lib/steep/index/source_index.rb +55 -5
  26. data/lib/steep/interface/block.rb +4 -0
  27. data/lib/steep/project.rb +0 -30
  28. data/lib/steep/project/dsl.rb +5 -3
  29. data/lib/steep/project/pattern.rb +56 -0
  30. data/lib/steep/project/target.rb +11 -227
  31. data/lib/steep/server/base_worker.rb +1 -3
  32. data/lib/steep/server/change_buffer.rb +63 -0
  33. data/lib/steep/server/interaction_worker.rb +72 -57
  34. data/lib/steep/server/master.rb +652 -234
  35. data/lib/steep/server/type_check_worker.rb +304 -0
  36. data/lib/steep/server/worker_process.rb +16 -11
  37. data/lib/steep/{project → services}/completion_provider.rb +5 -5
  38. data/lib/steep/services/content_change.rb +61 -0
  39. data/lib/steep/services/file_loader.rb +48 -0
  40. data/lib/steep/services/goto_service.rb +321 -0
  41. data/lib/steep/{project → services}/hover_content.rb +19 -20
  42. data/lib/steep/services/path_assignment.rb +27 -0
  43. data/lib/steep/services/signature_service.rb +403 -0
  44. data/lib/steep/services/stats_calculator.rb +69 -0
  45. data/lib/steep/services/type_check_service.rb +413 -0
  46. data/lib/steep/signature/validator.rb +187 -85
  47. data/lib/steep/source.rb +21 -18
  48. data/lib/steep/subtyping/check.rb +246 -45
  49. data/lib/steep/subtyping/constraints.rb +4 -4
  50. data/lib/steep/type_construction.rb +428 -193
  51. data/lib/steep/type_inference/block_params.rb +1 -1
  52. data/lib/steep/type_inference/context.rb +22 -0
  53. data/lib/steep/type_inference/local_variable_type_env.rb +26 -12
  54. data/lib/steep/type_inference/logic.rb +1 -1
  55. data/lib/steep/type_inference/logic_type_interpreter.rb +4 -4
  56. data/lib/steep/type_inference/type_env.rb +43 -17
  57. data/lib/steep/version.rb +1 -1
  58. data/smoke/alias/test_expectations.yml +96 -0
  59. data/smoke/and/test_expectations.yml +31 -0
  60. data/smoke/array/test_expectations.yml +103 -0
  61. data/smoke/block/test_expectations.yml +125 -0
  62. data/smoke/case/test_expectations.yml +47 -0
  63. data/smoke/class/test_expectations.yml +120 -0
  64. data/smoke/const/test_expectations.yml +129 -0
  65. data/smoke/diagnostics-rbs-duplicated/test_expectations.yml +13 -0
  66. data/smoke/diagnostics-rbs/Steepfile +7 -4
  67. data/smoke/diagnostics-rbs/test_expectations.yml +231 -0
  68. data/smoke/diagnostics-rbs/unknown-type-name-2.rbs +5 -0
  69. data/smoke/{broken → diagnostics-ruby-unsat}/Steepfile +0 -0
  70. data/smoke/diagnostics-ruby-unsat/a.rbs +3 -0
  71. data/smoke/diagnostics-ruby-unsat/test_expectations.yml +27 -0
  72. data/smoke/{diagnostics → diagnostics-ruby-unsat}/unsatisfiable_constraint.rb +0 -1
  73. data/smoke/diagnostics/a.rbs +0 -4
  74. data/smoke/diagnostics/test_expectations.yml +451 -0
  75. data/smoke/dstr/test_expectations.yml +13 -0
  76. data/smoke/ensure/test_expectations.yml +62 -0
  77. data/smoke/enumerator/test_expectations.yml +135 -0
  78. data/smoke/extension/f.rb +2 -0
  79. data/smoke/extension/f.rbs +3 -0
  80. data/smoke/extension/test_expectations.yml +73 -0
  81. data/smoke/hash/test_expectations.yml +81 -0
  82. data/smoke/hello/test_expectations.yml +25 -0
  83. data/smoke/if/test_expectations.yml +34 -0
  84. data/smoke/implements/b.rb +13 -0
  85. data/smoke/implements/b.rbs +12 -0
  86. data/smoke/implements/test_expectations.yml +23 -0
  87. data/smoke/initialize/test_expectations.yml +1 -0
  88. data/smoke/integer/test_expectations.yml +101 -0
  89. data/smoke/interface/test_expectations.yml +23 -0
  90. data/smoke/kwbegin/test_expectations.yml +17 -0
  91. data/smoke/lambda/test_expectations.yml +39 -0
  92. data/smoke/literal/test_expectations.yml +106 -0
  93. data/smoke/map/test_expectations.yml +1 -0
  94. data/smoke/method/test_expectations.yml +90 -0
  95. data/smoke/module/test_expectations.yml +75 -0
  96. data/smoke/regexp/test_expectations.yml +615 -0
  97. data/smoke/regression/issue_328.rb +1 -0
  98. data/smoke/regression/issue_328.rbs +0 -0
  99. data/smoke/regression/issue_332.rb +11 -0
  100. data/smoke/regression/issue_332.rbs +19 -0
  101. data/smoke/regression/issue_372.rb +8 -0
  102. data/smoke/regression/issue_372.rbs +4 -0
  103. data/smoke/regression/masgn.rb +4 -0
  104. data/smoke/regression/test_expectations.yml +60 -0
  105. data/smoke/regression/thread.rb +7 -0
  106. data/smoke/rescue/test_expectations.yml +79 -0
  107. data/smoke/self/test_expectations.yml +23 -0
  108. data/smoke/skip/test_expectations.yml +23 -0
  109. data/smoke/stdout/test_expectations.yml +1 -0
  110. data/smoke/super/test_expectations.yml +69 -0
  111. data/smoke/toplevel/test_expectations.yml +15 -0
  112. data/smoke/tsort/Steepfile +2 -0
  113. data/smoke/tsort/test_expectations.yml +63 -0
  114. data/smoke/type_case/test_expectations.yml +48 -0
  115. data/smoke/unexpected/Steepfile +5 -0
  116. data/smoke/unexpected/test_expectations.yml +25 -0
  117. data/smoke/unexpected/unexpected.rb +1 -0
  118. data/smoke/unexpected/unexpected.rbs +3 -0
  119. data/smoke/yield/test_expectations.yml +68 -0
  120. data/steep.gemspec +4 -3
  121. metadata +127 -80
  122. data/lib/steep/project/file_loader.rb +0 -68
  123. data/lib/steep/project/signature_file.rb +0 -39
  124. data/lib/steep/project/source_file.rb +0 -129
  125. data/lib/steep/project/stats_calculator.rb +0 -80
  126. data/lib/steep/server/code_worker.rb +0 -150
  127. data/lib/steep/server/signature_worker.rb +0 -157
  128. data/lib/steep/server/utils.rb +0 -69
  129. data/smoke/alias/test.yaml +0 -73
  130. data/smoke/and/test.yaml +0 -24
  131. data/smoke/array/test.yaml +0 -80
  132. data/smoke/block/test.yaml +0 -96
  133. data/smoke/broken/broken.rb +0 -0
  134. data/smoke/broken/broken.rbs +0 -0
  135. data/smoke/broken/test.yaml +0 -6
  136. data/smoke/case/test.yaml +0 -36
  137. data/smoke/class/test.yaml +0 -89
  138. data/smoke/const/test.yaml +0 -96
  139. data/smoke/diagnostics-rbs-duplicated/test.yaml +0 -10
  140. data/smoke/diagnostics-rbs/test.yaml +0 -142
  141. data/smoke/diagnostics/test.yaml +0 -333
  142. data/smoke/dstr/test.yaml +0 -10
  143. data/smoke/ensure/test.yaml +0 -47
  144. data/smoke/enumerator/test.yaml +0 -100
  145. data/smoke/extension/test.yaml +0 -50
  146. data/smoke/hash/test.yaml +0 -62
  147. data/smoke/hello/test.yaml +0 -18
  148. data/smoke/if/test.yaml +0 -27
  149. data/smoke/implements/test.yaml +0 -16
  150. data/smoke/initialize/test.yaml +0 -4
  151. data/smoke/integer/test.yaml +0 -66
  152. data/smoke/interface/test.yaml +0 -16
  153. data/smoke/kwbegin/test.yaml +0 -14
  154. data/smoke/lambda/test.yaml +0 -28
  155. data/smoke/literal/test.yaml +0 -79
  156. data/smoke/map/test.yaml +0 -4
  157. data/smoke/method/test.yaml +0 -71
  158. data/smoke/module/test.yaml +0 -51
  159. data/smoke/regexp/test.yaml +0 -372
  160. data/smoke/regression/test.yaml +0 -38
  161. data/smoke/rescue/test.yaml +0 -60
  162. data/smoke/self/test.yaml +0 -16
  163. data/smoke/skip/test.yaml +0 -16
  164. data/smoke/stdout/test.yaml +0 -4
  165. data/smoke/super/test.yaml +0 -52
  166. data/smoke/toplevel/test.yaml +0 -12
  167. data/smoke/tsort/test.yaml +0 -32
  168. data/smoke/type_case/test.yaml +0 -33
  169. data/smoke/yield/test.yaml +0 -49
@@ -0,0 +1,615 @@
1
+ ---
2
+ - file: a.rb
3
+ diagnostics:
4
+ - range:
5
+ start:
6
+ line: 2
7
+ character: 6
8
+ end:
9
+ line: 2
10
+ character: 9
11
+ severity: ERROR
12
+ message: Type `::Regexp` does not have method `foo`
13
+ code: Ruby::NoMethod
14
+ - range:
15
+ start:
16
+ line: 5
17
+ character: 6
18
+ end:
19
+ line: 5
20
+ character: 9
21
+ severity: ERROR
22
+ message: Type `::Regexp` does not have method `foo`
23
+ code: Ruby::NoMethod
24
+ - range:
25
+ start:
26
+ line: 8
27
+ character: 6
28
+ end:
29
+ line: 8
30
+ character: 9
31
+ severity: ERROR
32
+ message: Type `::Regexp` does not have method `foo`
33
+ code: Ruby::NoMethod
34
+ - range:
35
+ start:
36
+ line: 11
37
+ character: 6
38
+ end:
39
+ line: 11
40
+ character: 9
41
+ severity: ERROR
42
+ message: Type `::Regexp` does not have method `foo`
43
+ code: Ruby::NoMethod
44
+ - range:
45
+ start:
46
+ line: 14
47
+ character: 10
48
+ end:
49
+ line: 14
50
+ character: 13
51
+ severity: ERROR
52
+ message: Type `::Regexp` does not have method `foo`
53
+ code: Ruby::NoMethod
54
+ - range:
55
+ start:
56
+ line: 17
57
+ character: 10
58
+ end:
59
+ line: 17
60
+ character: 13
61
+ severity: ERROR
62
+ message: Type `::Regexp` does not have method `foo`
63
+ code: Ruby::NoMethod
64
+ - range:
65
+ start:
66
+ line: 20
67
+ character: 10
68
+ end:
69
+ line: 20
70
+ character: 13
71
+ severity: ERROR
72
+ message: Type `::Regexp` does not have method `foo`
73
+ code: Ruby::NoMethod
74
+ - range:
75
+ start:
76
+ line: 23
77
+ character: 10
78
+ end:
79
+ line: 23
80
+ character: 13
81
+ severity: ERROR
82
+ message: Type `::Regexp` does not have method `foo`
83
+ code: Ruby::NoMethod
84
+ - range:
85
+ start:
86
+ line: 26
87
+ character: 9
88
+ end:
89
+ line: 26
90
+ character: 12
91
+ severity: ERROR
92
+ message: Type `::String` does not have method `foo`
93
+ code: Ruby::NoMethod
94
+ - range:
95
+ start:
96
+ line: 29
97
+ character: 13
98
+ end:
99
+ line: 29
100
+ character: 16
101
+ severity: ERROR
102
+ message: Type `(::MatchData | nil)` does not have method `foo`
103
+ code: Ruby::NoMethod
104
+ - range:
105
+ start:
106
+ line: 32
107
+ character: 13
108
+ end:
109
+ line: 32
110
+ character: 16
111
+ severity: ERROR
112
+ message: Type `(::String | nil)` does not have method `foo`
113
+ code: Ruby::NoMethod
114
+ - range:
115
+ start:
116
+ line: 35
117
+ character: 8
118
+ end:
119
+ line: 35
120
+ character: 11
121
+ severity: ERROR
122
+ message: Type `::String` does not have method `foo`
123
+ code: Ruby::NoMethod
124
+ - range:
125
+ start:
126
+ line: 38
127
+ character: 14
128
+ end:
129
+ line: 38
130
+ character: 17
131
+ severity: ERROR
132
+ message: Type `(::Regexp | nil)` does not have method `foo`
133
+ code: Ruby::NoMethod
134
+ - range:
135
+ start:
136
+ line: 41
137
+ character: 8
138
+ end:
139
+ line: 41
140
+ character: 11
141
+ severity: ERROR
142
+ message: Type `::Regexp` does not have method `foo`
143
+ code: Ruby::NoMethod
144
+ - range:
145
+ start:
146
+ line: 44
147
+ character: 8
148
+ end:
149
+ line: 44
150
+ character: 11
151
+ severity: ERROR
152
+ message: Type `::Regexp` does not have method `foo`
153
+ code: Ruby::NoMethod
154
+ - range:
155
+ start:
156
+ line: 47
157
+ character: 8
158
+ end:
159
+ line: 47
160
+ character: 11
161
+ severity: ERROR
162
+ message: Type `::Regexp` does not have method `foo`
163
+ code: Ruby::NoMethod
164
+ - range:
165
+ start:
166
+ line: 50
167
+ character: 8
168
+ end:
169
+ line: 50
170
+ character: 11
171
+ severity: ERROR
172
+ message: Type `::Regexp` does not have method `foo`
173
+ code: Ruby::NoMethod
174
+ - range:
175
+ start:
176
+ line: 53
177
+ character: 8
178
+ end:
179
+ line: 53
180
+ character: 11
181
+ severity: ERROR
182
+ message: Type `::Regexp` does not have method `foo`
183
+ code: Ruby::NoMethod
184
+ - range:
185
+ start:
186
+ line: 56
187
+ character: 8
188
+ end:
189
+ line: 56
190
+ character: 11
191
+ severity: ERROR
192
+ message: Type `::Regexp` does not have method `foo`
193
+ code: Ruby::NoMethod
194
+ - range:
195
+ start:
196
+ line: 59
197
+ character: 8
198
+ end:
199
+ line: 59
200
+ character: 11
201
+ severity: ERROR
202
+ message: Type `::Regexp` does not have method `foo`
203
+ code: Ruby::NoMethod
204
+ - range:
205
+ start:
206
+ line: 62
207
+ character: 12
208
+ end:
209
+ line: 62
210
+ character: 15
211
+ severity: ERROR
212
+ message: Type `bool` does not have method `foo`
213
+ code: Ruby::NoMethod
214
+ - range:
215
+ start:
216
+ line: 68
217
+ character: 11
218
+ end:
219
+ line: 68
220
+ character: 14
221
+ severity: ERROR
222
+ message: Type `bool` does not have method `foo`
223
+ code: Ruby::NoMethod
224
+ - range:
225
+ start:
226
+ line: 71
227
+ character: 11
228
+ end:
229
+ line: 71
230
+ character: 14
231
+ severity: ERROR
232
+ message: Type `::Encoding` does not have method `foo`
233
+ code: Ruby::NoMethod
234
+ - range:
235
+ start:
236
+ line: 74
237
+ character: 17
238
+ end:
239
+ line: 74
240
+ character: 20
241
+ severity: ERROR
242
+ message: Type `bool` does not have method `foo`
243
+ code: Ruby::NoMethod
244
+ - range:
245
+ start:
246
+ line: 77
247
+ character: 8
248
+ end:
249
+ line: 77
250
+ character: 11
251
+ severity: ERROR
252
+ message: Type `(::MatchData | nil)` does not have method `foo`
253
+ code: Ruby::NoMethod
254
+ - range:
255
+ start:
256
+ line: 80
257
+ character: 8
258
+ end:
259
+ line: 80
260
+ character: 11
261
+ severity: ERROR
262
+ message: Type `(::MatchData | nil)` does not have method `foo`
263
+ code: Ruby::NoMethod
264
+ - range:
265
+ start:
266
+ line: 83
267
+ character: 4
268
+ end:
269
+ line: 83
270
+ character: 7
271
+ severity: ERROR
272
+ message: Type `::MatchData` does not have method `foo`
273
+ code: Ruby::NoMethod
274
+ - range:
275
+ start:
276
+ line: 87
277
+ character: 4
278
+ end:
279
+ line: 87
280
+ character: 7
281
+ severity: ERROR
282
+ message: Type `::MatchData` does not have method `foo`
283
+ code: Ruby::NoMethod
284
+ - range:
285
+ start:
286
+ line: 91
287
+ character: 10
288
+ end:
289
+ line: 91
290
+ character: 13
291
+ severity: ERROR
292
+ message: Type `bool` does not have method `foo`
293
+ code: Ruby::NoMethod
294
+ - range:
295
+ start:
296
+ line: 94
297
+ character: 10
298
+ end:
299
+ line: 94
300
+ character: 13
301
+ severity: ERROR
302
+ message: Type `bool` does not have method `foo`
303
+ code: Ruby::NoMethod
304
+ - range:
305
+ start:
306
+ line: 97
307
+ character: 17
308
+ end:
309
+ line: 97
310
+ character: 20
311
+ severity: ERROR
312
+ message: Type `::Hash[::String, ::Array[::Integer]]` does not have method `foo`
313
+ code: Ruby::NoMethod
314
+ - range:
315
+ start:
316
+ line: 100
317
+ character: 8
318
+ end:
319
+ line: 100
320
+ character: 11
321
+ severity: ERROR
322
+ message: Type `::Array[::String]` does not have method `foo`
323
+ code: Ruby::NoMethod
324
+ - range:
325
+ start:
326
+ line: 103
327
+ character: 10
328
+ end:
329
+ line: 103
330
+ character: 13
331
+ severity: ERROR
332
+ message: Type `::Integer` does not have method `foo`
333
+ code: Ruby::NoMethod
334
+ - range:
335
+ start:
336
+ line: 106
337
+ character: 9
338
+ end:
339
+ line: 106
340
+ character: 12
341
+ severity: ERROR
342
+ message: Type `::String` does not have method `foo`
343
+ code: Ruby::NoMethod
344
+ - range:
345
+ start:
346
+ line: 109
347
+ character: 17
348
+ end:
349
+ line: 109
350
+ character: 20
351
+ severity: ERROR
352
+ message: Type `(::Integer | nil)` does not have method `foo`
353
+ code: Ruby::NoMethod
354
+ - file: b.rb
355
+ diagnostics:
356
+ - range:
357
+ start:
358
+ line: 3
359
+ character: 14
360
+ end:
361
+ line: 3
362
+ character: 17
363
+ severity: ERROR
364
+ message: Type `(::String | nil)` does not have method `foo`
365
+ code: Ruby::NoMethod
366
+ - range:
367
+ start:
368
+ line: 6
369
+ character: 14
370
+ end:
371
+ line: 6
372
+ character: 17
373
+ severity: ERROR
374
+ message: Type `(::String | nil)` does not have method `foo`
375
+ code: Ruby::NoMethod
376
+ - range:
377
+ start:
378
+ line: 9
379
+ character: 14
380
+ end:
381
+ line: 9
382
+ character: 17
383
+ severity: ERROR
384
+ message: Type `(::String | nil)` does not have method `foo`
385
+ code: Ruby::NoMethod
386
+ - range:
387
+ start:
388
+ line: 12
389
+ character: 14
390
+ end:
391
+ line: 12
392
+ character: 17
393
+ severity: ERROR
394
+ message: Type `::Array[(::String | nil)]` does not have method `foo`
395
+ code: Ruby::NoMethod
396
+ - range:
397
+ start:
398
+ line: 15
399
+ character: 14
400
+ end:
401
+ line: 15
402
+ character: 17
403
+ severity: ERROR
404
+ message: Type `::Array[(::String | nil)]` does not have method `foo`
405
+ code: Ruby::NoMethod
406
+ - range:
407
+ start:
408
+ line: 18
409
+ character: 10
410
+ end:
411
+ line: 18
412
+ character: 13
413
+ severity: ERROR
414
+ message: Type `(::Integer | nil)` does not have method `foo`
415
+ code: Ruby::NoMethod
416
+ - range:
417
+ start:
418
+ line: 21
419
+ character: 10
420
+ end:
421
+ line: 21
422
+ character: 13
423
+ severity: ERROR
424
+ message: Type `(::Integer | nil)` does not have method `foo`
425
+ code: Ruby::NoMethod
426
+ - range:
427
+ start:
428
+ line: 24
429
+ character: 10
430
+ end:
431
+ line: 24
432
+ character: 13
433
+ severity: ERROR
434
+ message: Type `(::Integer | nil)` does not have method `foo`
435
+ code: Ruby::NoMethod
436
+ - range:
437
+ start:
438
+ line: 27
439
+ character: 13
440
+ end:
441
+ line: 27
442
+ character: 16
443
+ severity: ERROR
444
+ message: Type `::Array[(::String | nil)]` does not have method `foo`
445
+ code: Ruby::NoMethod
446
+ - range:
447
+ start:
448
+ line: 30
449
+ character: 8
450
+ end:
451
+ line: 30
452
+ character: 11
453
+ severity: ERROR
454
+ message: Type `(::Integer | nil)` does not have method `foo`
455
+ code: Ruby::NoMethod
456
+ - range:
457
+ start:
458
+ line: 33
459
+ character: 8
460
+ end:
461
+ line: 33
462
+ character: 11
463
+ severity: ERROR
464
+ message: Type `(::Integer | nil)` does not have method `foo`
465
+ code: Ruby::NoMethod
466
+ - range:
467
+ start:
468
+ line: 36
469
+ character: 8
470
+ end:
471
+ line: 36
472
+ character: 11
473
+ severity: ERROR
474
+ message: Type `(::Integer | nil)` does not have method `foo`
475
+ code: Ruby::NoMethod
476
+ - range:
477
+ start:
478
+ line: 39
479
+ character: 11
480
+ end:
481
+ line: 39
482
+ character: 14
483
+ severity: ERROR
484
+ message: Type `::Integer` does not have method `foo`
485
+ code: Ruby::NoMethod
486
+ - range:
487
+ start:
488
+ line: 42
489
+ character: 19
490
+ end:
491
+ line: 42
492
+ character: 22
493
+ severity: ERROR
494
+ message: Type `::Hash[::String, (::String | nil)]` does not have method `foo`
495
+ code: Ruby::NoMethod
496
+ - range:
497
+ start:
498
+ line: 45
499
+ character: 10
500
+ end:
501
+ line: 45
502
+ character: 13
503
+ severity: ERROR
504
+ message: Type `::Array[::String]` does not have method `foo`
505
+ code: Ruby::NoMethod
506
+ - range:
507
+ start:
508
+ line: 48
509
+ character: 11
510
+ end:
511
+ line: 48
512
+ character: 14
513
+ severity: ERROR
514
+ message: Type `([::Integer, ::Integer] | [nil, nil])` does not have method `foo`
515
+ code: Ruby::NoMethod
516
+ - range:
517
+ start:
518
+ line: 51
519
+ character: 11
520
+ end:
521
+ line: 51
522
+ character: 14
523
+ severity: ERROR
524
+ message: Type `([::Integer, ::Integer] | [nil, nil])` does not have method `foo`
525
+ code: Ruby::NoMethod
526
+ - range:
527
+ start:
528
+ line: 54
529
+ character: 11
530
+ end:
531
+ line: 54
532
+ character: 14
533
+ severity: ERROR
534
+ message: Type `([::Integer, ::Integer] | [nil, nil])` does not have method `foo`
535
+ code: Ruby::NoMethod
536
+ - range:
537
+ start:
538
+ line: 57
539
+ character: 15
540
+ end:
541
+ line: 57
542
+ character: 18
543
+ severity: ERROR
544
+ message: Type `::String` does not have method `foo`
545
+ code: Ruby::NoMethod
546
+ - range:
547
+ start:
548
+ line: 60
549
+ character: 14
550
+ end:
551
+ line: 60
552
+ character: 17
553
+ severity: ERROR
554
+ message: Type `::String` does not have method `foo`
555
+ code: Ruby::NoMethod
556
+ - range:
557
+ start:
558
+ line: 63
559
+ character: 11
560
+ end:
561
+ line: 63
562
+ character: 14
563
+ severity: ERROR
564
+ message: Type `::Regexp` does not have method `foo`
565
+ code: Ruby::NoMethod
566
+ - range:
567
+ start:
568
+ line: 66
569
+ character: 9
570
+ end:
571
+ line: 66
572
+ character: 12
573
+ severity: ERROR
574
+ message: Type `::Integer` does not have method `foo`
575
+ code: Ruby::NoMethod
576
+ - range:
577
+ start:
578
+ line: 69
579
+ character: 11
580
+ end:
581
+ line: 69
582
+ character: 14
583
+ severity: ERROR
584
+ message: Type `::String` does not have method `foo`
585
+ code: Ruby::NoMethod
586
+ - range:
587
+ start:
588
+ line: 72
589
+ character: 9
590
+ end:
591
+ line: 72
592
+ character: 12
593
+ severity: ERROR
594
+ message: Type `::Array[(::String | nil)]` does not have method `foo`
595
+ code: Ruby::NoMethod
596
+ - range:
597
+ start:
598
+ line: 75
599
+ character: 14
600
+ end:
601
+ line: 75
602
+ character: 17
603
+ severity: ERROR
604
+ message: Type `::Array[(::String | nil)]` does not have method `foo`
605
+ code: Ruby::NoMethod
606
+ - range:
607
+ start:
608
+ line: 78
609
+ character: 14
610
+ end:
611
+ line: 78
612
+ character: 17
613
+ severity: ERROR
614
+ message: Type `::Array[(::String | nil)]` does not have method `foo`
615
+ code: Ruby::NoMethod