steep 0.39.0 → 0.40.0

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 (183) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +1 -1
  3. data/CHANGELOG.md +6 -0
  4. data/Rakefile +5 -2
  5. data/bin/output_rebaseline.rb +49 -0
  6. data/bin/output_test.rb +93 -0
  7. data/lib/steep.rb +8 -3
  8. data/lib/steep/cli.rb +1 -1
  9. data/lib/steep/diagnostic/helper.rb +17 -0
  10. data/lib/steep/diagnostic/lsp_formatter.rb +16 -0
  11. data/lib/steep/diagnostic/ruby.rb +623 -0
  12. data/lib/steep/diagnostic/signature.rb +224 -0
  13. data/lib/steep/drivers/annotations.rb +13 -6
  14. data/lib/steep/drivers/check.rb +83 -60
  15. data/lib/steep/drivers/diagnostic_printer.rb +94 -0
  16. data/lib/steep/drivers/stats.rb +125 -29
  17. data/lib/steep/drivers/trace_printer.rb +5 -1
  18. data/lib/steep/drivers/validate.rb +13 -6
  19. data/lib/steep/drivers/watch.rb +26 -9
  20. data/lib/steep/drivers/worker.rb +5 -0
  21. data/lib/steep/project/options.rb +4 -4
  22. data/lib/steep/project/signature_file.rb +8 -2
  23. data/lib/steep/project/stats_calculator.rb +80 -0
  24. data/lib/steep/project/target.rb +64 -53
  25. data/lib/steep/range_extension.rb +29 -0
  26. data/lib/steep/server/base_worker.rb +42 -4
  27. data/lib/steep/server/code_worker.rb +37 -24
  28. data/lib/steep/server/interaction_worker.rb +1 -0
  29. data/lib/steep/server/master.rb +268 -82
  30. data/lib/steep/server/signature_worker.rb +7 -59
  31. data/lib/steep/server/worker_process.rb +9 -9
  32. data/lib/steep/signature/validator.rb +33 -9
  33. data/lib/steep/type_construction.rb +276 -194
  34. data/lib/steep/version.rb +1 -1
  35. data/smoke/alias/a.rb +0 -3
  36. data/smoke/alias/b.rb +0 -1
  37. data/smoke/alias/c.rb +0 -2
  38. data/smoke/alias/test.yaml +73 -0
  39. data/smoke/and/a.rb +0 -3
  40. data/smoke/and/test.yaml +24 -0
  41. data/smoke/array/a.rb +0 -3
  42. data/smoke/array/b.rb +0 -2
  43. data/smoke/array/c.rb +0 -1
  44. data/smoke/array/test.yaml +80 -0
  45. data/smoke/block/a.rb +0 -2
  46. data/smoke/block/b.rb +0 -2
  47. data/smoke/block/d.rb +0 -4
  48. data/smoke/block/test.yaml +96 -0
  49. data/smoke/broken/Steepfile +5 -0
  50. data/smoke/broken/broken.rb +0 -0
  51. data/smoke/broken/broken.rbs +0 -0
  52. data/smoke/broken/test.yaml +6 -0
  53. data/smoke/case/a.rb +0 -3
  54. data/smoke/case/test.yaml +36 -0
  55. data/smoke/class/a.rb +0 -3
  56. data/smoke/class/c.rb +0 -1
  57. data/smoke/class/f.rb +0 -1
  58. data/smoke/class/g.rb +0 -2
  59. data/smoke/class/i.rb +0 -2
  60. data/smoke/class/test.yaml +89 -0
  61. data/smoke/const/a.rb +0 -3
  62. data/smoke/const/b.rb +7 -0
  63. data/smoke/const/b.rbs +5 -0
  64. data/smoke/const/test.yaml +96 -0
  65. data/smoke/diagnostics-rbs-duplicated/Steepfile +5 -0
  66. data/smoke/diagnostics-rbs-duplicated/a.rbs +5 -0
  67. data/smoke/diagnostics-rbs-duplicated/test.yaml +10 -0
  68. data/smoke/diagnostics-rbs/Steepfile +5 -0
  69. data/smoke/diagnostics-rbs/duplicated-method-definition.rbs +20 -0
  70. data/smoke/diagnostics-rbs/generic-parameter-mismatch.rbs +7 -0
  71. data/smoke/diagnostics-rbs/invalid-method-overload.rbs +3 -0
  72. data/smoke/diagnostics-rbs/invalid-type-application.rbs +7 -0
  73. data/smoke/diagnostics-rbs/invalid_variance_annotation.rbs +3 -0
  74. data/smoke/diagnostics-rbs/recursive-alias.rbs +5 -0
  75. data/smoke/diagnostics-rbs/recursive-class.rbs +8 -0
  76. data/smoke/diagnostics-rbs/superclass-mismatch.rbs +7 -0
  77. data/smoke/diagnostics-rbs/test.yaml +142 -0
  78. data/smoke/diagnostics-rbs/unknown-method-alias.rbs +3 -0
  79. data/smoke/diagnostics-rbs/unknown-type-name.rbs +13 -0
  80. data/smoke/diagnostics/Steepfile +5 -0
  81. data/smoke/diagnostics/a.rbs +26 -0
  82. data/smoke/diagnostics/argument_type_mismatch.rb +1 -0
  83. data/smoke/diagnostics/block_body_type_mismatch.rb +1 -0
  84. data/smoke/diagnostics/block_type_mismatch.rb +3 -0
  85. data/smoke/diagnostics/break_type_mismatch.rb +1 -0
  86. data/smoke/diagnostics/else_on_exhaustive_case.rb +12 -0
  87. data/smoke/diagnostics/incompatible_annotation.rb +6 -0
  88. data/smoke/diagnostics/incompatible_argument.rb +1 -0
  89. data/smoke/diagnostics/incompatible_assignment.rb +8 -0
  90. data/smoke/diagnostics/method_arity_mismatch.rb +11 -0
  91. data/smoke/diagnostics/method_body_type_mismatch.rb +6 -0
  92. data/smoke/diagnostics/method_definition_missing.rb +2 -0
  93. data/smoke/diagnostics/method_return_type_annotation_mismatch.rb +7 -0
  94. data/smoke/diagnostics/missing_keyword.rb +1 -0
  95. data/smoke/diagnostics/no_method.rb +1 -0
  96. data/smoke/diagnostics/required_block_missing.rb +1 -0
  97. data/smoke/diagnostics/return_type_mismatch.rb +6 -0
  98. data/smoke/diagnostics/test.yaml +333 -0
  99. data/smoke/diagnostics/unexpected_block_given.rb +1 -0
  100. data/smoke/diagnostics/unexpected_dynamic_method.rb +3 -0
  101. data/smoke/diagnostics/unexpected_jump.rb +4 -0
  102. data/smoke/diagnostics/unexpected_jump_value.rb +3 -0
  103. data/smoke/diagnostics/unexpected_keyword.rb +1 -0
  104. data/smoke/diagnostics/unexpected_splat.rb +1 -0
  105. data/smoke/diagnostics/unexpected_yield.rb +6 -0
  106. data/smoke/diagnostics/unknown_constant_assigned.rb +7 -0
  107. data/smoke/diagnostics/unresolved_overloading.rb +1 -0
  108. data/smoke/diagnostics/unsatisfiable_constraint.rb +7 -0
  109. data/smoke/diagnostics/unsupported_syntax.rb +2 -0
  110. data/smoke/dstr/a.rb +0 -1
  111. data/smoke/dstr/test.yaml +10 -0
  112. data/smoke/ensure/a.rb +0 -4
  113. data/smoke/ensure/test.yaml +47 -0
  114. data/smoke/enumerator/a.rb +0 -6
  115. data/smoke/enumerator/b.rb +0 -3
  116. data/smoke/enumerator/test.yaml +100 -0
  117. data/smoke/extension/a.rb +0 -1
  118. data/smoke/extension/b.rb +0 -2
  119. data/smoke/extension/c.rb +0 -1
  120. data/smoke/extension/test.yaml +50 -0
  121. data/smoke/hash/b.rb +0 -1
  122. data/smoke/hash/c.rb +0 -3
  123. data/smoke/hash/d.rb +0 -1
  124. data/smoke/hash/e.rb +0 -1
  125. data/smoke/hash/test.yaml +62 -0
  126. data/smoke/hello/hello.rb +0 -2
  127. data/smoke/hello/test.yaml +18 -0
  128. data/smoke/if/a.rb +0 -2
  129. data/smoke/if/test.yaml +27 -0
  130. data/smoke/implements/a.rb +0 -2
  131. data/smoke/implements/test.yaml +16 -0
  132. data/smoke/initialize/test.yaml +4 -0
  133. data/smoke/integer/a.rb +0 -7
  134. data/smoke/integer/test.yaml +66 -0
  135. data/smoke/interface/a.rb +0 -2
  136. data/smoke/interface/test.yaml +16 -0
  137. data/smoke/kwbegin/a.rb +0 -1
  138. data/smoke/kwbegin/test.yaml +14 -0
  139. data/smoke/lambda/a.rb +1 -4
  140. data/smoke/lambda/test.yaml +28 -0
  141. data/smoke/literal/a.rb +0 -5
  142. data/smoke/literal/b.rb +0 -2
  143. data/smoke/literal/test.yaml +79 -0
  144. data/smoke/map/test.yaml +4 -0
  145. data/smoke/method/a.rb +0 -5
  146. data/smoke/method/b.rb +0 -1
  147. data/smoke/method/test.yaml +71 -0
  148. data/smoke/module/a.rb +0 -2
  149. data/smoke/module/b.rb +0 -2
  150. data/smoke/module/c.rb +0 -1
  151. data/smoke/module/d.rb +0 -1
  152. data/smoke/module/f.rb +0 -2
  153. data/smoke/module/test.yaml +51 -0
  154. data/smoke/regexp/a.rb +0 -38
  155. data/smoke/regexp/b.rb +0 -26
  156. data/smoke/regexp/test.yaml +372 -0
  157. data/smoke/regression/set_divide.rb +0 -4
  158. data/smoke/regression/test.yaml +38 -0
  159. data/smoke/rescue/a.rb +0 -5
  160. data/smoke/rescue/test.yaml +60 -0
  161. data/smoke/self/a.rb +0 -2
  162. data/smoke/self/test.yaml +16 -0
  163. data/smoke/skip/skip.rb +0 -2
  164. data/smoke/skip/test.yaml +16 -0
  165. data/smoke/stdout/test.yaml +4 -0
  166. data/smoke/super/a.rb +0 -4
  167. data/smoke/super/test.yaml +52 -0
  168. data/smoke/toplevel/a.rb +0 -1
  169. data/smoke/toplevel/test.yaml +12 -0
  170. data/smoke/tsort/a.rb +0 -3
  171. data/smoke/tsort/test.yaml +32 -0
  172. data/smoke/type_case/a.rb +0 -4
  173. data/smoke/type_case/test.yaml +33 -0
  174. data/smoke/yield/a.rb +0 -3
  175. data/smoke/yield/b.rb +6 -0
  176. data/smoke/yield/test.yaml +49 -0
  177. data/steep.gemspec +3 -3
  178. metadata +108 -17
  179. data/bin/smoke_runner.rb +0 -139
  180. data/lib/steep/drivers/signature_error_printer.rb +0 -25
  181. data/lib/steep/errors.rb +0 -594
  182. data/lib/steep/signature/errors.rb +0 -128
  183. data/lib/steep/type_assignability.rb +0 -367
@@ -5,13 +5,11 @@ class A
5
5
  end
6
6
 
7
7
  # A#bar is defined but the implementation is incompatible.
8
- # !expects MethodArityMismatch: method=bar
9
8
  def bar(y)
10
9
  y
11
10
  end
12
11
 
13
12
  # Object#to_s is defined but the implementation is incompatible.
14
- # !expects MethodBodyTypeMismatch: method=to_s, expected=::String, actual=::Integer
15
13
  def to_s
16
14
  3
17
15
  end
@@ -21,7 +19,6 @@ class A
21
19
  5
22
20
  end
23
21
 
24
- # !expects MethodBodyTypeMismatch: method=self.baz, expected=::Integer, actual=::String
25
22
  def self.baz
26
23
  "baz"
27
24
  end
@@ -1,4 +1,3 @@
1
- # !expects UnexpectedDynamicMethod: module=::B, method=type
2
1
  class B
3
2
  # @implements B
4
3
 
@@ -6,5 +6,4 @@ d = (_ = nil)
6
6
 
7
7
  e = d
8
8
 
9
- # !expects IncompatibleAssignment: lhs_type=::D, rhs_type=::_E
10
9
  d = e
@@ -1,8 +1,6 @@
1
- # !expects MethodDefinitionMissing: module=::B, method=name
2
1
  class B
3
2
  end
4
3
 
5
- # !expects MethodDefinitionMissing: module=::B, method=name
6
4
  class C
7
5
  # @implements ::B
8
6
  end
@@ -1,14 +1,12 @@
1
1
  class IncompatibleChild
2
2
  def foo(arg)
3
3
  # @type var x: Symbol
4
- # !expects IncompatibleAssignment: lhs_type=::Symbol, rhs_type=::Integer
5
4
  x = super()
6
5
 
7
6
  "123"
8
7
  end
9
8
 
10
9
  def initialize()
11
- # !expects IncompatibleArguments: receiver=::IncompatibleChild, method_type=(name: ::String) -> untyped
12
10
  super()
13
11
 
14
12
  super
@@ -0,0 +1,89 @@
1
+ ---
2
+ test:
3
+ a.rb:
4
+ diagnostics:
5
+ - |
6
+ a.rb:8:9: [error] Method parameters are incompatible with declaration `() -> ::String`
7
+ │ Diagnostic ID: Ruby::MethodArityMismatch
8
+
9
+ └ def bar(y)
10
+ ~~~
11
+ - |
12
+ a.rb:13:2: [error] Cannot allow method body have type `::Integer` because declared as type `::String`
13
+ │ ::Integer <: ::String
14
+ │ ::Numeric <: ::String
15
+ │ ::Object <: ::String
16
+ │ ::BasicObject <: ::String
17
+
18
+ │ Diagnostic ID: Ruby::MethodBodyTypeMismatch
19
+
20
+ └ def to_s
21
+ ~~~~~~~~
22
+ - |
23
+ a.rb:22:2: [error] Cannot allow method body have type `::String` because declared as type `::Integer`
24
+ │ ::String <: ::Integer
25
+ │ ::Object <: ::Integer
26
+ │ ::BasicObject <: ::Integer
27
+
28
+ │ Diagnostic ID: Ruby::MethodBodyTypeMismatch
29
+
30
+ └ def self.baz
31
+ ~~~~~~~~~~~~
32
+ b.rb:
33
+ diagnostics: []
34
+ c.rb:
35
+ diagnostics:
36
+ - |
37
+ c.rb:1:6: [error] @dynamic annotation contains unknown method name `type`
38
+ │ Diagnostic ID: Ruby::UnexpectedDynamicMethod
39
+
40
+ └ class B
41
+ ~
42
+ f.rb:
43
+ diagnostics:
44
+ - |
45
+ f.rb:9:0: [error] Cannot assign a value of type `::_E` to a variable of type `::D`
46
+ │ ::_E <: ::D
47
+
48
+ │ Diagnostic ID: Ruby::IncompatibleAssignment
49
+
50
+ └ d = e
51
+ ~~~~~
52
+ g.rb:
53
+ diagnostics:
54
+ - |
55
+ g.rb:1:6: [error] Cannot find implementation of method `::B#name`
56
+ │ Diagnostic ID: Ruby::MethodDefinitionMissing
57
+
58
+ └ class B
59
+ ~
60
+ - |
61
+ g.rb:4:6: [error] Cannot find implementation of method `::B#name`
62
+ │ Diagnostic ID: Ruby::MethodDefinitionMissing
63
+
64
+ └ class C
65
+ ~
66
+ h.rb:
67
+ diagnostics: []
68
+ i.rb:
69
+ diagnostics:
70
+ - |
71
+ i.rb:4:4: [error] Cannot assign a value of type `::Integer` to a variable of type `::Symbol`
72
+ │ ::Integer <: ::Symbol
73
+ │ ::Numeric <: ::Symbol
74
+ │ ::Object <: ::Symbol
75
+ │ ::BasicObject <: ::Symbol
76
+
77
+ │ Diagnostic ID: Ruby::IncompatibleAssignment
78
+
79
+ └ x = super()
80
+ ~~~~~~~~~~~
81
+ - |
82
+ i.rb:10:4: [error] Cannot find method `initialize` of type `::IncompatibleChild` with compatible arity
83
+ │ Method types:
84
+ │ def initialize: (name: ::String) -> untyped
85
+
86
+ │ Diagnostic ID: Ruby::IncompatibleArguments
87
+
88
+ └ super()
89
+ ~~~~~~~
@@ -1,7 +1,6 @@
1
1
  # @type const A: Integer
2
2
  # @type var x: String
3
3
 
4
- # !expects IncompatibleAssignment: lhs_type=::String, rhs_type=::Integer
5
4
  x = A
6
5
 
7
6
  x = B
@@ -12,7 +11,6 @@ module X
12
11
  def foo
13
12
  # @type var x: String
14
13
 
15
- # !expects IncompatibleAssignment: lhs_type=::String, rhs_type=::Integer
16
14
  x = A
17
15
 
18
16
  x = B
@@ -22,7 +20,6 @@ end
22
20
 
23
21
  # @type const Foo::Bar::Baz: Integer
24
22
 
25
- # !expects IncompatibleAssignment: lhs_type=::String, rhs_type=::Integer
26
23
  x = Foo::Bar::Baz
27
24
 
28
25
  z = Foo
@@ -0,0 +1,7 @@
1
+ module Foo
2
+ module Bar
3
+ Baz = "Hello"
4
+
5
+ Baz2 = "World"
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ module Foo
2
+ module Bar
3
+ Baz: Integer
4
+ end
5
+ end
@@ -0,0 +1,96 @@
1
+ ---
2
+ test:
3
+ a.rb:
4
+ diagnostics:
5
+ - |
6
+ a.rb:4:0: [error] Cannot assign a value of type `::Integer` to a variable of type `::String`
7
+ │ ::Integer <: ::String
8
+ │ ::Numeric <: ::String
9
+ │ ::Object <: ::String
10
+ │ ::BasicObject <: ::String
11
+
12
+ │ Diagnostic ID: Ruby::IncompatibleAssignment
13
+
14
+ └ x = A
15
+ ~~~~~
16
+ - |
17
+ a.rb:6:4: [error] Cannot detect the type of the expression
18
+ │ Diagnostic ID: Ruby::FallbackAny
19
+
20
+ └ x = B
21
+ ~
22
+ - |
23
+ a.rb:8:7: [error] Cannot detect the type of the expression
24
+ │ Diagnostic ID: Ruby::FallbackAny
25
+
26
+ └ module X
27
+ ~
28
+ - |
29
+ a.rb:14:4: [error] Cannot assign a value of type `::Integer` to a variable of type `::String`
30
+ │ ::Integer <: ::String
31
+ │ ::Numeric <: ::String
32
+ │ ::Object <: ::String
33
+ │ ::BasicObject <: ::String
34
+
35
+ │ Diagnostic ID: Ruby::IncompatibleAssignment
36
+
37
+ └ x = A
38
+ ~~~~~
39
+ - |
40
+ a.rb:16:8: [error] Cannot detect the type of the expression
41
+ │ Diagnostic ID: Ruby::FallbackAny
42
+
43
+ └ x = B
44
+ ~
45
+ - |
46
+ a.rb:23:0: [error] Cannot assign a value of type `::Integer` to a variable of type `::String`
47
+ │ ::Integer <: ::String
48
+ │ ::Numeric <: ::String
49
+ │ ::Object <: ::String
50
+ │ ::BasicObject <: ::String
51
+
52
+ │ Diagnostic ID: Ruby::IncompatibleAssignment
53
+
54
+ └ x = Foo::Bar::Baz
55
+ ~~~~~~~~~~~~~~~~~
56
+ - |
57
+ a.rb:26:4: [error] Cannot detect the type of the expression
58
+ │ Diagnostic ID: Ruby::FallbackAny
59
+
60
+ └ x = z::Bar::Baz
61
+ ~~~~~~
62
+ - |
63
+ a.rb:26:4: [error] Cannot detect the type of the expression
64
+ │ Diagnostic ID: Ruby::FallbackAny
65
+
66
+ └ x = z::Bar::Baz
67
+ ~~~~~~~~~~~
68
+ - |
69
+ a.rb:27:0: [error] Cannot assign a value of type `::Integer` to a variable of type `::String`
70
+ │ ::Integer <: ::String
71
+ │ ::Numeric <: ::String
72
+ │ ::Object <: ::String
73
+ │ ::BasicObject <: ::String
74
+
75
+ │ Diagnostic ID: Ruby::IncompatibleAssignment
76
+
77
+ └ x = ::Foo::Bar::Baz
78
+ ~~~~~~~~~~~~~~~~~~~
79
+ b.rb:
80
+ diagnostics:
81
+ - |
82
+ b.rb:3:4: [error] Cannot assign a value of type `::String` to a constant of type `::Integer`
83
+ │ ::String <: ::Integer
84
+ │ ::Object <: ::Integer
85
+ │ ::BasicObject <: ::Integer
86
+
87
+ │ Diagnostic ID: Ruby::IncompatibleAssignment
88
+
89
+ └ Baz = "Hello"
90
+ ~~~~~~~~~~~~~
91
+ - |
92
+ b.rb:5:4: [error] Cannot find the declaration of constant `Baz2`
93
+ │ Diagnostic ID: Ruby::UnknownConstantAssigned
94
+
95
+ └ Baz2 = "World"
96
+ ~~~~
@@ -0,0 +1,5 @@
1
+ target :test do
2
+ typing_options :strict
3
+ check "*.rb"
4
+ signature "*.rbs"
5
+ end
@@ -0,0 +1,5 @@
1
+ class A
2
+ end
3
+
4
+ module A
5
+ end
@@ -0,0 +1,10 @@
1
+ ---
2
+ test:
3
+ a.rbs:
4
+ diagnostics:
5
+ - |
6
+ a.rbs:4:0: [error] Declaration of `::A` is duplicated
7
+ │ Diagnostic ID: Ruby::DuplicatedDeclaration
8
+
9
+ └ module A
10
+ ~~~~~~~~
@@ -0,0 +1,5 @@
1
+ target :test do
2
+ typing_options :strict
3
+ check "*.rb"
4
+ signature "*.rbs"
5
+ end
@@ -0,0 +1,20 @@
1
+ class DuplicatedMethodDefinitionError
2
+ def foo: () -> void
3
+ def foo: () -> Integer
4
+
5
+ interface _Hello
6
+ def f: () -> void
7
+
8
+ def f: () -> void
9
+ end
10
+
11
+ interface _A
12
+ def g: () -> void
13
+ end
14
+
15
+ class A
16
+ include _A
17
+
18
+ def g: () -> String
19
+ end
20
+ end
@@ -0,0 +1,7 @@
1
+ class GenericParameterMismatchError
2
+ class Foo[A]
3
+ end
4
+
5
+ class Foo[A, B]
6
+ end
7
+ end
@@ -0,0 +1,3 @@
1
+ class InvalidMethodOverload
2
+ def foo: () -> void | ...
3
+ end
@@ -0,0 +1,7 @@
1
+ class InvalidTypeApplication
2
+ type foo = Integer[3]
3
+
4
+ type bar = Array[1, 2]
5
+
6
+ type baz = Hash
7
+ end
@@ -0,0 +1,3 @@
1
+ class InvalidVarianceAnnotationError[out A]
2
+ def foo: (A) -> void
3
+ end
@@ -0,0 +1,5 @@
1
+ class RecursiveAlias
2
+ alias foo bar
3
+ alias bar baz
4
+ alias baz foo
5
+ end
@@ -0,0 +1,8 @@
1
+ class Foo < Bar
2
+ end
3
+
4
+ class Bar < Baz
5
+ end
6
+
7
+ class Baz < Foo
8
+ end
@@ -0,0 +1,7 @@
1
+ class SuperclassMismatch
2
+ class Foo < String
3
+ end
4
+
5
+ class Foo < Integer
6
+ end
7
+ end
@@ -0,0 +1,142 @@
1
+ ---
2
+ test:
3
+ duplicated-method-definition.rbs:
4
+ diagnostics:
5
+ - |
6
+ duplicated-method-definition.rbs:2:2: [error] Non-overloading method definition of `foo` in `::DuplicatedMethodDefinitionError` cannot be duplicated
7
+ │ Diagnostic ID: Ruby::DuplicatedMethodDefinition
8
+
9
+ └ def foo: () -> void
10
+ ~~~~~~~~~~~~~~~~~~~
11
+ - |
12
+ duplicated-method-definition.rbs:18:4: [error] Non-overloading method definition of `g` in `::DuplicatedMethodDefinitionError::A` cannot be duplicated
13
+ │ Diagnostic ID: Ruby::DuplicatedMethodDefinition
14
+
15
+ └ def g: () -> String
16
+ ~~~~~~~~~~~~~~~~~~~
17
+ - |
18
+ duplicated-method-definition.rbs:6:4: [error] Non-overloading method definition of `f` in `::DuplicatedMethodDefinitionError::_Hello` cannot be duplicated
19
+ │ Diagnostic ID: Ruby::DuplicatedMethodDefinition
20
+
21
+ └ def f: () -> void
22
+ ~~~~~~~~~~~~~~~~~
23
+ generic-parameter-mismatch.rbs:
24
+ diagnostics:
25
+ - |
26
+ generic-parameter-mismatch.rbs:5:2: [error] Different generic parameters are specified across definitions of `::GenericParameterMismatchError::Foo`
27
+ │ Diagnostic ID: Ruby::GenericParameterMismatch
28
+
29
+ └ class Foo[A, B]
30
+ ~~~~~~~~~~~~~~~
31
+ invalid-method-overload.rbs:
32
+ diagnostics:
33
+ - |
34
+ invalid-method-overload.rbs:2:2: [error] Cannot find a non-overloading definition of `foo` in `::InvalidMethodOverload`
35
+ │ Diagnostic ID: Ruby::InvalidMethodOverload
36
+
37
+ └ def foo: () -> void | ...
38
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
39
+ invalid-type-application.rbs:
40
+ diagnostics:
41
+ - |
42
+ invalid-type-application.rbs:2:13: [error] Type `::Integer` is not generic but used as a generic type with 1 arguments
43
+ │ Diagnostic ID: Ruby::InvalidTypeApplication
44
+
45
+ └ type foo = Integer[3]
46
+ ~~~~~~~~~~
47
+ - |
48
+ invalid-type-application.rbs:4:13: [error] Type `::Array` expects 1 arguments, but 2 arguments are given
49
+ │ Diagnostic ID: Ruby::InvalidTypeApplication
50
+
51
+ └ type bar = Array[1, 2]
52
+ ~~~~~~~~~~~
53
+ - |
54
+ invalid-type-application.rbs:6:13: [error] Type `::Hash` is generic but used as a non generic type
55
+ │ Diagnostic ID: Ruby::InvalidTypeApplication
56
+
57
+ └ type baz = Hash
58
+ ~~~~
59
+ invalid_variance_annotation.rbs:
60
+ diagnostics:
61
+ - |
62
+ invalid_variance_annotation.rbs:2:11: [error] The variance of type parameter `A` is covariant, but used in incompatible position here
63
+ │ Diagnostic ID: Ruby::InvalidVarianceAnnotation
64
+
65
+ └ def foo: (A) -> void
66
+ ~~~~~~~~~~~
67
+ recursive-alias.rbs:
68
+ diagnostics:
69
+ - |
70
+ recursive-alias.rbs:2:2: [error] Circular method alias is detected in `::RecursiveAlias`: foo -> bar -> baz
71
+ │ Diagnostic ID: Ruby::RecursiveAlias
72
+
73
+ └ alias foo bar
74
+ ~~~~~~~~~~~~~
75
+ recursive-class.rbs:
76
+ diagnostics:
77
+ - |
78
+ recursive-class.rbs:1:0: [error] Circular inheritance/mix-in is detected: ::Foo <: ::Bar <: ::Baz <: ::Foo
79
+ │ Diagnostic ID: Ruby::RecursiveAncestor
80
+
81
+ └ class Foo < Bar
82
+ ~~~~~~~~~~~~~~~
83
+ - |
84
+ recursive-class.rbs:4:0: [error] Circular inheritance/mix-in is detected: ::Bar <: ::Baz <: ::Foo <: ::Bar
85
+ │ Diagnostic ID: Ruby::RecursiveAncestor
86
+
87
+ └ class Bar < Baz
88
+ ~~~~~~~~~~~~~~~
89
+ - |
90
+ recursive-class.rbs:7:0: [error] Circular inheritance/mix-in is detected: ::Baz <: ::Foo <: ::Bar <: ::Baz
91
+ │ Diagnostic ID: Ruby::RecursiveAncestor
92
+
93
+ └ class Baz < Foo
94
+ ~~~~~~~~~~~~~~~
95
+ superclass-mismatch.rbs:
96
+ diagnostics:
97
+ - |
98
+ superclass-mismatch.rbs:2:2: [error] Different superclasses are specified for `::SuperclassMismatch::Foo`
99
+ │ Diagnostic ID: Ruby::SuperclassMismatch
100
+
101
+ └ class Foo < String
102
+ ~~~~~~~~~~~~~~~~~~
103
+ unknown-method-alias.rbs:
104
+ diagnostics:
105
+ - |
106
+ unknown-method-alias.rbs:2:2: [error] Cannot find the original method `bar` in `::UnknownMethodAlias`
107
+ │ Diagnostic ID: Ruby::UnknownMethodAlias
108
+
109
+ └ alias foo bar
110
+ ~~~~~~~~~~~~~
111
+ unknown-type-name.rbs:
112
+ diagnostics:
113
+ - |
114
+ unknown-type-name.rbs:6:2: [error] Cannot find type `World`
115
+ │ Diagnostic ID: Ruby::UnknownTypeName
116
+
117
+ └ include World
118
+ ~~~~~~~~~~~~~
119
+ - |
120
+ unknown-type-name.rbs:8:2: [error] Cannot find type `ABC`
121
+ │ Diagnostic ID: Ruby::UnknownTypeName
122
+
123
+ └ class Foo < ABC
124
+ ~~~~~~~~~~~~~~~
125
+ - |
126
+ unknown-type-name.rbs:11:15: [error] Cannot find type `ZZZ`
127
+ │ Diagnostic ID: Ruby::UnknownTypeName
128
+
129
+ └ module Bar : ZZZ
130
+ ~~~
131
+ - |
132
+ unknown-type-name.rbs:4:9: [error] Cannot find type `::World`
133
+ │ Diagnostic ID: Ruby::UnknownTypeName
134
+
135
+ └ Hello: World
136
+ ~~~~~
137
+ - |
138
+ unknown-type-name.rbs:2:13: [error] Cannot find type `::bar`
139
+ │ Diagnostic ID: Ruby::UnknownTypeName
140
+
141
+ └ type foo = bar
142
+ ~~~