steep 0.40.0 → 0.41.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 (92) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/bin/output_rebaseline.rb +15 -30
  4. data/bin/output_test.rb +17 -57
  5. data/lib/steep.rb +4 -0
  6. data/lib/steep/cli.rb +9 -3
  7. data/lib/steep/drivers/check.rb +106 -14
  8. data/lib/steep/drivers/diagnostic_printer.rb +11 -11
  9. data/lib/steep/expectations.rb +159 -0
  10. data/lib/steep/project.rb +6 -0
  11. data/lib/steep/version.rb +1 -1
  12. data/smoke/alias/test_expectations.yml +96 -0
  13. data/smoke/and/test_expectations.yml +31 -0
  14. data/smoke/array/test_expectations.yml +103 -0
  15. data/smoke/block/test_expectations.yml +125 -0
  16. data/smoke/case/test_expectations.yml +47 -0
  17. data/smoke/class/test_expectations.yml +120 -0
  18. data/smoke/const/test_expectations.yml +139 -0
  19. data/smoke/diagnostics-rbs-duplicated/test_expectations.yml +13 -0
  20. data/smoke/diagnostics-rbs/test_expectations.yml +229 -0
  21. data/smoke/diagnostics/test_expectations.yml +477 -0
  22. data/smoke/dstr/test_expectations.yml +13 -0
  23. data/smoke/ensure/test_expectations.yml +62 -0
  24. data/smoke/enumerator/test_expectations.yml +135 -0
  25. data/smoke/extension/test_expectations.yml +61 -0
  26. data/smoke/hash/test_expectations.yml +81 -0
  27. data/smoke/hello/test_expectations.yml +25 -0
  28. data/smoke/if/test_expectations.yml +34 -0
  29. data/smoke/implements/test_expectations.yml +23 -0
  30. data/smoke/initialize/test_expectations.yml +1 -0
  31. data/smoke/integer/test_expectations.yml +101 -0
  32. data/smoke/interface/test_expectations.yml +23 -0
  33. data/smoke/kwbegin/test_expectations.yml +17 -0
  34. data/smoke/lambda/test_expectations.yml +39 -0
  35. data/smoke/literal/test_expectations.yml +106 -0
  36. data/smoke/map/test_expectations.yml +1 -0
  37. data/smoke/method/test_expectations.yml +90 -0
  38. data/smoke/module/test_expectations.yml +75 -0
  39. data/smoke/regexp/test_expectations.yml +615 -0
  40. data/smoke/regression/test_expectations.yml +43 -0
  41. data/smoke/rescue/test_expectations.yml +79 -0
  42. data/smoke/self/test_expectations.yml +23 -0
  43. data/smoke/skip/test_expectations.yml +23 -0
  44. data/smoke/stdout/test_expectations.yml +1 -0
  45. data/smoke/super/test_expectations.yml +79 -0
  46. data/smoke/toplevel/test_expectations.yml +15 -0
  47. data/smoke/tsort/test_expectations.yml +43 -0
  48. data/smoke/type_case/test_expectations.yml +48 -0
  49. data/smoke/yield/test_expectations.yml +68 -0
  50. metadata +41 -44
  51. data/smoke/alias/test.yaml +0 -73
  52. data/smoke/and/test.yaml +0 -24
  53. data/smoke/array/test.yaml +0 -80
  54. data/smoke/block/test.yaml +0 -96
  55. data/smoke/broken/Steepfile +0 -5
  56. data/smoke/broken/broken.rb +0 -0
  57. data/smoke/broken/broken.rbs +0 -0
  58. data/smoke/broken/test.yaml +0 -6
  59. data/smoke/case/test.yaml +0 -36
  60. data/smoke/class/test.yaml +0 -89
  61. data/smoke/const/test.yaml +0 -96
  62. data/smoke/diagnostics-rbs-duplicated/test.yaml +0 -10
  63. data/smoke/diagnostics-rbs/test.yaml +0 -142
  64. data/smoke/diagnostics/test.yaml +0 -333
  65. data/smoke/dstr/test.yaml +0 -10
  66. data/smoke/ensure/test.yaml +0 -47
  67. data/smoke/enumerator/test.yaml +0 -100
  68. data/smoke/extension/test.yaml +0 -50
  69. data/smoke/hash/test.yaml +0 -62
  70. data/smoke/hello/test.yaml +0 -18
  71. data/smoke/if/test.yaml +0 -27
  72. data/smoke/implements/test.yaml +0 -16
  73. data/smoke/initialize/test.yaml +0 -4
  74. data/smoke/integer/test.yaml +0 -66
  75. data/smoke/interface/test.yaml +0 -16
  76. data/smoke/kwbegin/test.yaml +0 -14
  77. data/smoke/lambda/test.yaml +0 -28
  78. data/smoke/literal/test.yaml +0 -79
  79. data/smoke/map/test.yaml +0 -4
  80. data/smoke/method/test.yaml +0 -71
  81. data/smoke/module/test.yaml +0 -51
  82. data/smoke/regexp/test.yaml +0 -372
  83. data/smoke/regression/test.yaml +0 -38
  84. data/smoke/rescue/test.yaml +0 -60
  85. data/smoke/self/test.yaml +0 -16
  86. data/smoke/skip/test.yaml +0 -16
  87. data/smoke/stdout/test.yaml +0 -4
  88. data/smoke/super/test.yaml +0 -52
  89. data/smoke/toplevel/test.yaml +0 -12
  90. data/smoke/tsort/test.yaml +0 -32
  91. data/smoke/type_case/test.yaml +0 -33
  92. data/smoke/yield/test.yaml +0 -49
data/smoke/dstr/test.yaml DELETED
@@ -1,10 +0,0 @@
1
- ---
2
- test:
3
- a.rb:
4
- diagnostics:
5
- - |
6
- a.rb:5:15: [error] Type `::Integer` does not have method `foo`
7
- │ Diagnostic ID: Ruby::NoMethod
8
-
9
- └ b = "Hello #{a.foo} world!"
10
- ~~~
@@ -1,47 +0,0 @@
1
- ---
2
- test:
3
- a.rb:
4
- diagnostics:
5
- - |
6
- a.rb:7:6: [error] Cannot assign a value of type `::Symbol` to a variable of type `::Integer`
7
- │ ::Symbol <: ::Integer
8
- │ ::Object <: ::Integer
9
- │ ::BasicObject <: ::Integer
10
-
11
- │ Diagnostic ID: Ruby::IncompatibleAssignment
12
-
13
- └ b = :foo
14
- ~~~~~~~~
15
- - |
16
- a.rb:4:0: [error] Cannot assign a value of type `::String` to a variable of type `::Integer`
17
- │ ::String <: ::Integer
18
- │ ::Object <: ::Integer
19
- │ ::BasicObject <: ::Integer
20
-
21
- │ Diagnostic ID: Ruby::IncompatibleAssignment
22
-
23
- └ a = begin
24
- ~~~~~~~~~
25
- - |
26
- a.rb:16:2: [error] Cannot find compatible overloading of method `+` of type `::Integer`
27
- │ Method types:
28
- │ def +: (::Integer) -> ::Integer
29
- │ | (::Float) -> ::Float
30
- │ | (::Rational) -> ::Rational
31
- │ | (::Complex) -> ::Complex
32
-
33
- │ Diagnostic ID: Ruby::UnresolvedOverloading
34
-
35
- └ 1 + '1'
36
- ~~~~~~~
37
- - |
38
- a.rb:13:0: [error] Cannot allow method body have type `::Integer` because declared as type `::String`
39
- │ ::Integer <: ::String
40
- │ ::Numeric <: ::String
41
- │ ::Object <: ::String
42
- │ ::BasicObject <: ::String
43
-
44
- │ Diagnostic ID: Ruby::MethodBodyTypeMismatch
45
-
46
- └ def foo(a)
47
- ~~~~~~~~~~
@@ -1,100 +0,0 @@
1
- ---
2
- test:
3
- a.rb:
4
- diagnostics:
5
- - |
6
- a.rb:6:2: [error] Cannot assign a value of type `::Integer` to a variable of type `::Hash[::Symbol, ::String]`
7
- │ ::Integer <: ::Hash[::Symbol, ::String]
8
- │ ::Numeric <: ::Hash[::Symbol, ::String]
9
- │ ::Object <: ::Hash[::Symbol, ::String]
10
- │ ::BasicObject <: ::Hash[::Symbol, ::String]
11
-
12
- │ Diagnostic ID: Ruby::IncompatibleAssignment
13
-
14
- └ hash = x
15
- ~~~~~~~~
16
- - |
17
- a.rb:7:2: [error] Cannot assign a value of type `::String` to a variable of type `::Hash[::Symbol, ::String]`
18
- │ ::String <: ::Hash[::Symbol, ::String]
19
- │ ::Object <: ::Hash[::Symbol, ::String]
20
- │ ::BasicObject <: ::Hash[::Symbol, ::String]
21
-
22
- │ Diagnostic ID: Ruby::IncompatibleAssignment
23
-
24
- └ hash = y
25
- ~~~~~~~~
26
- - |
27
- a.rb:5:0: [error] Cannot assign a value of type `::String` to a variable of type `::Hash[::Symbol, ::String]`
28
- │ ::String <: ::Hash[::Symbol, ::String]
29
- │ ::Object <: ::Hash[::Symbol, ::String]
30
- │ ::BasicObject <: ::Hash[::Symbol, ::String]
31
-
32
- │ Diagnostic ID: Ruby::IncompatibleAssignment
33
-
34
- └ hash = a.each.with_object("") do |x, y|
35
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
36
- - |
37
- a.rb:11:2: [error] Cannot assign a value of type `::Integer` to a variable of type `::Hash[::Symbol, ::String]`
38
- │ ::Integer <: ::Hash[::Symbol, ::String]
39
- │ ::Numeric <: ::Hash[::Symbol, ::String]
40
- │ ::Object <: ::Hash[::Symbol, ::String]
41
- │ ::BasicObject <: ::Hash[::Symbol, ::String]
42
-
43
- │ Diagnostic ID: Ruby::IncompatibleAssignment
44
-
45
- └ hash = x
46
- ~~~~~~~~
47
- - |
48
- a.rb:12:2: [error] Cannot assign a value of type `::Integer` to a variable of type `::Hash[::Symbol, ::String]`
49
- │ ::Integer <: ::Hash[::Symbol, ::String]
50
- │ ::Numeric <: ::Hash[::Symbol, ::String]
51
- │ ::Object <: ::Hash[::Symbol, ::String]
52
- │ ::BasicObject <: ::Hash[::Symbol, ::String]
53
-
54
- │ Diagnostic ID: Ruby::IncompatibleAssignment
55
-
56
- └ hash = y
57
- ~~~~~~~~
58
- - |
59
- a.rb:10:0: [error] Cannot assign a value of type `::Array[::Integer]` to a variable of type `::Hash[::Symbol, ::String]`
60
- │ ::Array[::Integer] <: ::Hash[::Symbol, ::String]
61
- │ ::Object <: ::Hash[::Symbol, ::String]
62
- │ ::BasicObject <: ::Hash[::Symbol, ::String]
63
-
64
- │ Diagnostic ID: Ruby::IncompatibleAssignment
65
-
66
- └ hash = a.each.with_index do |x, y|
67
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
68
- b.rb:
69
- diagnostics:
70
- - |
71
- b.rb:6:4: [error] Cannot find compatible overloading of method `with_object` of type `::Enumerator[::Integer, ::Array[::Integer]]`
72
- │ Method types:
73
- │ def with_object: [U] (U) { (::Integer, U) -> untyped } -> U
74
- │ | [U] (U) -> ::Enumerator[[::Integer, U], ::Array[::Integer]]
75
-
76
- │ Diagnostic ID: Ruby::UnresolvedOverloading
77
-
78
- └ b = a.each.with_object([]) do |i, xs|
79
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
80
- - |
81
- b.rb:11:0: [error] Cannot assign a value of type `::Array[::String]` to a variable of type `::Array[::Integer]`
82
- │ ::Array[::String] <: ::Array[::Integer]
83
- │ ::String <: ::Integer
84
- │ ::Object <: ::Integer
85
- │ ::BasicObject <: ::Integer
86
-
87
- │ Diagnostic ID: Ruby::IncompatibleAssignment
88
-
89
- └ c = a.each.with_object([]) do |i, xs|
90
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
91
- - |
92
- b.rb:17:0: [error] Cannot assign a value of type `::Array[untyped]` to a variable of type `::String`
93
- │ ::Array[untyped] <: ::String
94
- │ ::Object <: ::String
95
- │ ::BasicObject <: ::String
96
-
97
- │ Diagnostic ID: Ruby::IncompatibleAssignment
98
-
99
- └ d = a.each.with_object([]) do |i, xs|
100
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -1,50 +0,0 @@
1
- ---
2
- test:
3
- a.rb:
4
- diagnostics:
5
- - |
6
- a.rb:8:2: [error] Cannot assign a value of type `::Foo` to a variable of type `::String`
7
- │ ::Foo <: ::String
8
- │ ::Object <: ::String
9
- │ ::BasicObject <: ::String
10
-
11
- │ Diagnostic ID: Ruby::IncompatibleAssignment
12
-
13
- └ string = x
14
- ~~~~~~~~~~
15
- b.rb:
16
- diagnostics:
17
- - |
18
- b.rb:7:0: [error] Cannot assign a value of type `::String` to a variable of type `::Integer`
19
- │ ::String <: ::Integer
20
- │ ::Object <: ::Integer
21
- │ ::BasicObject <: ::Integer
22
-
23
- │ Diagnostic ID: Ruby::IncompatibleAssignment
24
-
25
- └ integer = foo.f()
26
- ~~~~~~~~~~~~~~~~~
27
- - |
28
- b.rb:10:0: [error] Cannot assign a value of type `::Object` to a variable of type `::Integer`
29
- │ ::Object <: ::Integer
30
- │ ::BasicObject <: ::Integer
31
-
32
- │ Diagnostic ID: Ruby::IncompatibleAssignment
33
-
34
- └ integer = "".f()
35
- ~~~~~~~~~~~~~~~~
36
- c.rb:
37
- diagnostics:
38
- - |
39
- c.rb:6:4: [error] Cannot assign a value of type `::Object` to a variable of type `::String`
40
- │ ::Object <: ::String
41
- │ ::BasicObject <: ::String
42
-
43
- │ Diagnostic ID: Ruby::IncompatibleAssignment
44
-
45
- └ string = super()
46
- ~~~~~~~~~~~~~~~~
47
- d.rb:
48
- diagnostics: []
49
- e.rb:
50
- diagnostics: []
data/smoke/hash/test.yaml DELETED
@@ -1,62 +0,0 @@
1
- ---
2
- test:
3
- a.rb:
4
- diagnostics: []
5
- b.rb:
6
- diagnostics:
7
- - |
8
- b.rb:6:0: [error] Cannot assign a value of type `::Hash[::Symbol, ::Integer]` to a variable of type `::Hash[::Symbol, (::String | nil)]`
9
- │ ::Hash[::Symbol, ::Integer] <: ::Hash[::Symbol, (::String | nil)]
10
- │ ::Integer <: (::String | nil)
11
- │ ::Integer <: ::String
12
- │ ::Numeric <: ::String
13
- │ ::Object <: ::String
14
- │ ::BasicObject <: ::String
15
-
16
- │ Diagnostic ID: Ruby::IncompatibleAssignment
17
-
18
- └ x = { foo: 3 }
19
- ~~~~~~~~~~~~~~
20
- c.rb:
21
- diagnostics:
22
- - |
23
- c.rb:5:3: [error] Type `::Integer` does not have method `abcdefg`
24
- │ Diagnostic ID: Ruby::NoMethod
25
-
26
- └ id.abcdefg
27
- ~~~~~~~
28
- - |
29
- c.rb:8:5: [error] Type `::String` does not have method `abcdefg`
30
- │ Diagnostic ID: Ruby::NoMethod
31
-
32
- └ name.abcdefg
33
- ~~~~~~~
34
- - |
35
- c.rb:10:30: [error] Type `(::Integer | ::String)` does not have method `abcdefg`
36
- │ Diagnostic ID: Ruby::NoMethod
37
-
38
- └ params[(_=nil) ? :id : :name].abcdefg
39
- ~~~~~~~
40
- d.rb:
41
- diagnostics:
42
- - |
43
- d.rb:5:0: [error] Cannot assign a value of type `{ :email => ::String, :id => ::String, :name => ::String }` to a variable of type `{ :id => ::Integer, :name => ::String }`
44
- │ { :email => ::String, :id => ::String, :name => ::String } <: { :id => ::Integer, :name => ::String }
45
- │ ::String <: ::Integer
46
- │ ::Object <: ::Integer
47
- │ ::BasicObject <: ::Integer
48
-
49
- │ Diagnostic ID: Ruby::IncompatibleAssignment
50
-
51
- └ params = { id: "30", name: "foo", email: "matsumoto@soutaro.com" }
52
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
53
- e.rb:
54
- diagnostics:
55
- - |
56
- e.rb:1:24: [error] Type `::Integer` does not have method `fffffffffffff`
57
- │ Diagnostic ID: Ruby::NoMethod
58
-
59
- └ Foo.new.get({ foo: 3 }).fffffffffffff
60
- ~~~~~~~~~~~~~
61
- f.rb:
62
- diagnostics: []
@@ -1,18 +0,0 @@
1
- ---
2
- test:
3
- hello.rb:
4
- diagnostics:
5
- - |
6
- hello.rb:9:6: [error] Type `::_Bar` does not have method `foo`
7
- │ Diagnostic ID: Ruby::NoMethod
8
-
9
- └ b = y.foo
10
- ~~~
11
- - |
12
- hello.rb:11:0: [error] Cannot assign a value of type `::_Bar` to a variable of type `::_Foo`
13
- │ ::_Bar <: ::_Foo
14
-
15
- │ Diagnostic ID: Ruby::IncompatibleAssignment
16
-
17
- └ x = y
18
- ~~~~~
data/smoke/if/test.yaml DELETED
@@ -1,27 +0,0 @@
1
- ---
2
- test:
3
- a.rb:
4
- diagnostics:
5
- - |
6
- a.rb:5:0: [error] Cannot assign a value of type `(::Symbol | nil)` to a variable of type `::String`
7
- │ (::Symbol | nil) <: ::String
8
- │ ::Symbol <: ::String
9
- │ ::Object <: ::String
10
- │ ::BasicObject <: ::String
11
-
12
- │ Diagnostic ID: Ruby::IncompatibleAssignment
13
-
14
- └ a = if x
15
- ~~~~~~~~
16
- - |
17
- a.rb:15:0: [error] Cannot assign a value of type `(::String | ::Integer)` to a variable of type `::String`
18
- │ (::String | ::Integer) <: ::String
19
- │ ::Integer <: ::String
20
- │ ::Numeric <: ::String
21
- │ ::Object <: ::String
22
- │ ::BasicObject <: ::String
23
-
24
- │ Diagnostic ID: Ruby::IncompatibleAssignment
25
-
26
- └ a = if z
27
- ~~~~~~~~
@@ -1,16 +0,0 @@
1
- ---
2
- test:
3
- a.rb:
4
- diagnostics:
5
- - |
6
- a.rb:1:6: [error] Cannot find implementation of method `::A#baz`
7
- │ Diagnostic ID: Ruby::MethodDefinitionMissing
8
-
9
- └ class A
10
- ~
11
- - |
12
- a.rb:1:6: [error] Cannot find implementation of method `::A.bar`
13
- │ Diagnostic ID: Ruby::MethodDefinitionMissing
14
-
15
- └ class A
16
- ~
@@ -1,4 +0,0 @@
1
- ---
2
- test:
3
- a.rb:
4
- diagnostics: []
@@ -1,66 +0,0 @@
1
- ---
2
- test:
3
- a.rb:
4
- diagnostics:
5
- - |
6
- a.rb:4:10: [error] Type `::Integer` does not have method `foo`
7
- │ Diagnostic ID: Ruby::NoMethod
8
-
9
- └ integer_1.foo
10
- ~~~
11
- - |
12
- a.rb:7:10: [error] Type `::Integer` does not have method `foo`
13
- │ Diagnostic ID: Ruby::NoMethod
14
-
15
- └ integer_2.foo
16
- ~~~
17
- - |
18
- a.rb:12:20: [error] Cannot detect the type of the expression
19
- │ Diagnostic ID: Ruby::FallbackAny
20
-
21
- └ integer_3 = Integer(WithToInt.new)
22
- ~~~~~~~~~
23
- - |
24
- a.rb:13:10: [error] Type `::Integer` does not have method `foo`
25
- │ Diagnostic ID: Ruby::NoMethod
26
-
27
- └ integer_3.foo
28
- ~~~
29
- - |
30
- a.rb:18:20: [error] Cannot detect the type of the expression
31
- │ Diagnostic ID: Ruby::FallbackAny
32
-
33
- └ integer_4 = Integer(WithToI.new)
34
- ~~~~~~~
35
- - |
36
- a.rb:19:10: [error] Type `::Integer` does not have method `foo`
37
- │ Diagnostic ID: Ruby::NoMethod
38
-
39
- └ integer_4.foo
40
- ~~~
41
- - |
42
- a.rb:22:10: [error] Type `::Integer` does not have method `foo`
43
- │ Diagnostic ID: Ruby::NoMethod
44
-
45
- └ integer_5.foo
46
- ~~~
47
- - |
48
- a.rb:24:0: [error] Cannot find compatible overloading of method `Integer` of type `::Object`
49
- │ Method types:
50
- │ def Integer: ((::Numeric | ::String), ?exception: bool) -> ::Integer
51
- │ | (::String, ?::Integer, ?exception: bool) -> ::Integer
52
-
53
- │ Diagnostic ID: Ruby::UnresolvedOverloading
54
-
55
- └ Integer(Object.new)
56
- ~~~~~~~~~~~~~~~~~~~
57
- - |
58
- a.rb:26:0: [error] Cannot find compatible overloading of method `Integer` of type `::Object`
59
- │ Method types:
60
- │ def Integer: ((::Numeric | ::String), ?exception: bool) -> ::Integer
61
- │ | (::String, ?::Integer, ?exception: bool) -> ::Integer
62
-
63
- │ Diagnostic ID: Ruby::UnresolvedOverloading
64
-
65
- └ Integer(nil)
66
- ~~~~~~~~~~~~
@@ -1,16 +0,0 @@
1
- ---
2
- test:
3
- a.rb:
4
- diagnostics:
5
- - |
6
- a.rb:5:12: [error] Type `::A::Object` does not have method `bar`
7
- │ Diagnostic ID: Ruby::NoMethod
8
-
9
- └ foo.foo.bar
10
- ~~~
11
- - |
12
- a.rb:10:11: [error] Type `::Object` does not have method `object?`
13
- │ Diagnostic ID: Ruby::NoMethod
14
-
15
- └ object.object?
16
- ~~~~~~~
@@ -1,14 +0,0 @@
1
- ---
2
- test:
3
- a.rb:
4
- diagnostics:
5
- - |
6
- a.rb:3:0: [error] Cannot assign a value of type `::String` to a variable of type `::Integer`
7
- │ ::String <: ::Integer
8
- │ ::Object <: ::Integer
9
- │ ::BasicObject <: ::Integer
10
-
11
- │ Diagnostic ID: Ruby::IncompatibleAssignment
12
-
13
- └ a = begin
14
- ~~~~~~~~~