Skip to content

Commit e95f79b

Browse files
committed
Level 10 - checkImplicitMixed
1 parent 710e09c commit e95f79b

20 files changed

+430
-2
lines changed

changelog-2.0.md

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ When PHPStan 2.0 gets released, this will turn into [releases notes on GitHub](h
55
Major new features 🚀
66
=====================
77

8+
* **Level 10** - level 9 on steroids, treats all `mixed` types strictly, not just explicit `mixed`
89
* **Array `list` type** ([#1751](https://github.com/phpstan/phpstan-src/pull/1751)), #3311, #8185, #6243, thanks @rvanvelzen!
910
* Lists are arrays with sequential integer keys starting at 0
1011
* **Validate inline PHPDoc `@var` tag** type against native type (level 2) (https://github.com/phpstan/phpstan-src/commit/a69e3bc2f1e87f6da1e65d7935f1cc36bd5c42fe)

conf/config.level10.neon

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
includes:
2+
- config.level9.neon
3+
4+
parameters:
5+
checkImplicitMixed: true

conf/config.levelmax.neon

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
includes:
2-
- config.level9.neon
2+
- config.level10.neon

src/Testing/LevelsTestCase.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public function testLevels(
7171

7272
putenv('__PHPSTAN_FORCE_VALIDATE_STUB_FILES=1');
7373

74-
foreach (range(0, 9) as $level) {
74+
foreach (range(0, 10) as $level) {
7575
unset($outputLines);
7676
exec(sprintf('%s %s analyse --no-progress --error-format=prettyJson --level=%d %s %s %s', escapeshellarg(PHP_BINARY), $command, $level, $configPath !== null ? '--configuration ' . escapeshellarg($configPath) : '', $this->shouldAutoloadAnalysedFile() ? sprintf('--autoload-file %s', escapeshellarg($file)) : '', escapeshellarg($file)), $outputLines);
7777

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
[
2+
{
3+
"message": "Parameter #1 (mixed) of echo cannot be converted to string.",
4+
"line": 170,
5+
"ignorable": true
6+
},
7+
{
8+
"message": "Parameter #1 $closure of method Levels\\AcceptTypes\\ClosureAccepts::doBar() expects Closure(Levels\\AcceptTypes\\FooInterface, int): Levels\\AcceptTypes\\FooInterface, Closure(mixed): mixed given.",
9+
"line": 325,
10+
"ignorable": true
11+
},
12+
{
13+
"message": "Parameter #1 $callable of method Levels\\AcceptTypes\\ClosureAccepts::doBaz() expects callable(Levels\\AcceptTypes\\FooInterface, int): Levels\\AcceptTypes\\FooInterface, Closure(mixed): mixed given.",
14+
"line": 326,
15+
"ignorable": true
16+
}
17+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"message": "Cannot assign offset mixed to SplObjectStorage<object, mixed>.",
4+
"line": 43,
5+
"ignorable": true
6+
}
7+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
[
2+
{
3+
"message": "Parameter #1 (mixed) of echo cannot be converted to string.",
4+
"line": 14,
5+
"ignorable": true
6+
},
7+
{
8+
"message": "Parameter #1 (mixed) of echo cannot be converted to string.",
9+
"line": 21,
10+
"ignorable": true
11+
},
12+
{
13+
"message": "Parameter #1 (mixed) of echo cannot be converted to string.",
14+
"line": 27,
15+
"ignorable": true
16+
},
17+
{
18+
"message": "Parameter #1 (mixed) of echo cannot be converted to string.",
19+
"line": 28,
20+
"ignorable": true
21+
}
22+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[
2+
{
3+
"message": "Closure invoked with 0 parameters, 1 required.",
4+
"line": 37,
5+
"ignorable": true
6+
},
7+
{
8+
"message": "Trying to invoke int but it's not a callable.",
9+
"line": 43,
10+
"ignorable": true
11+
}
12+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[
2+
{
3+
"message": "Cannot clone non-object variable $nullableInt of type int.",
4+
"line": 34,
5+
"ignorable": true
6+
},
7+
{
8+
"message": "Cannot clone non-object variable $nullableUnion of type int|Levels\\Cloning\\Foo.",
9+
"line": 35,
10+
"ignorable": true
11+
}
12+
]
+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[
2+
{
3+
"message": "Cannot access property $bar on mixed.",
4+
"line": 6,
5+
"ignorable": true
6+
},
7+
{
8+
"message": "Parameter #1 (mixed) of echo cannot be converted to string.",
9+
"line": 11,
10+
"ignorable": true
11+
}
12+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
[
2+
{
3+
"message": "Access to undefined constant Levels\\ConstantAccesses\\Foo::BAR_CONSTANT.",
4+
"line": 53,
5+
"ignorable": true
6+
},
7+
{
8+
"message": "Access to undefined constant Levels\\ConstantAccesses\\Bar|Levels\\ConstantAccesses\\Foo::BAR_CONSTANT.",
9+
"line": 56,
10+
"ignorable": true
11+
},
12+
{
13+
"message": "Access to undefined constant Levels\\ConstantAccesses\\Bar|Levels\\ConstantAccesses\\Foo::FOO_CONSTANT.",
14+
"line": 55,
15+
"ignorable": true
16+
}
17+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
[
2+
{
3+
"message": "Parameter #1 (mixed) of echo cannot be converted to string.",
4+
"line": 6,
5+
"ignorable": true
6+
},
7+
{
8+
"message": "Parameter #1 (mixed) of echo cannot be converted to string.",
9+
"line": 17,
10+
"ignorable": true
11+
},
12+
{
13+
"message": "Parameter #1 (mixed) of echo cannot be converted to string.",
14+
"line": 18,
15+
"ignorable": true
16+
},
17+
{
18+
"message": "Parameter #1 (mixed) of echo cannot be converted to string.",
19+
"line": 20,
20+
"ignorable": true
21+
},
22+
{
23+
"message": "Parameter #1 (mixed) of echo cannot be converted to string.",
24+
"line": 23,
25+
"ignorable": true
26+
},
27+
{
28+
"message": "Parameter #1 (mixed) of echo cannot be converted to string.",
29+
"line": 49,
30+
"ignorable": true
31+
},
32+
{
33+
"message": "Parameter #1 (mixed) of echo cannot be converted to string.",
34+
"line": 50,
35+
"ignorable": true
36+
},
37+
{
38+
"message": "Parameter #1 (mixed) of echo cannot be converted to string.",
39+
"line": 52,
40+
"ignorable": true
41+
},
42+
{
43+
"message": "Parameter #1 (mixed) of echo cannot be converted to string.",
44+
"line": 53,
45+
"ignorable": true
46+
},
47+
{
48+
"message": "Parameter #1 (mixed) of echo cannot be converted to string.",
49+
"line": 55,
50+
"ignorable": true
51+
},
52+
{
53+
"message": "Parameter #1 (mixed) of echo cannot be converted to string.",
54+
"line": 56,
55+
"ignorable": true
56+
},
57+
{
58+
"message": "Parameter #1 (mixed) of echo cannot be converted to string.",
59+
"line": 58,
60+
"ignorable": true
61+
}
62+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
[
2+
{
3+
"message": "Parameter #1 (mixed) of echo cannot be converted to string.",
4+
"line": 15,
5+
"ignorable": true
6+
},
7+
{
8+
"message": "Parameter #1 (mixed) of echo cannot be converted to string.",
9+
"line": 16,
10+
"ignorable": true
11+
},
12+
{
13+
"message": "Parameter #1 (mixed) of echo cannot be converted to string.",
14+
"line": 18,
15+
"ignorable": true
16+
},
17+
{
18+
"message": "Parameter #1 (mixed) of echo cannot be converted to string.",
19+
"line": 19,
20+
"ignorable": true
21+
},
22+
{
23+
"message": "Parameter #1 (mixed) of echo cannot be converted to string.",
24+
"line": 20,
25+
"ignorable": true
26+
}
27+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
[
2+
{
3+
"message": "Method Levels\\MethodCalls\\Foo::doFoo() invoked with 0 parameters, 1 required.",
4+
"line": 53,
5+
"ignorable": true
6+
},
7+
{
8+
"message": "Method Levels\\MethodCalls\\Foo::doFoo() invoked with 0 parameters, 1 required.",
9+
"line": 56,
10+
"ignorable": true
11+
},
12+
{
13+
"message": "Method Levels\\MethodCalls\\Foo::doFoo() invoked with 0 parameters, 1 required.",
14+
"line": 59,
15+
"ignorable": true
16+
},
17+
{
18+
"message": "Method Levels\\MethodCalls\\Foo::doFoo() invoked with 0 parameters, 1 required.",
19+
"line": 162,
20+
"ignorable": true
21+
},
22+
{
23+
"message": "Method Levels\\MethodCalls\\Foo::doFoo() invoked with 0 parameters, 1 required.",
24+
"line": 166,
25+
"ignorable": true
26+
},
27+
{
28+
"message": "Method Levels\\MethodCalls\\Foo::doFoo() invoked with 0 parameters, 1 required.",
29+
"line": 170,
30+
"ignorable": true
31+
},
32+
{
33+
"message": "Call to an undefined method Levels\\MethodCalls\\Bar|Levels\\MethodCalls\\Foo::doFoo().",
34+
"line": 59,
35+
"ignorable": true
36+
},
37+
{
38+
"message": "Call to an undefined method Levels\\MethodCalls\\Bar|Levels\\MethodCalls\\Foo::doFoo().",
39+
"line": 60,
40+
"ignorable": true
41+
},
42+
{
43+
"message": "Call to an undefined method Levels\\MethodCalls\\Bar|Levels\\MethodCalls\\Foo::doFoo().",
44+
"line": 170,
45+
"ignorable": true
46+
},
47+
{
48+
"message": "Call to an undefined method Levels\\MethodCalls\\Bar|Levels\\MethodCalls\\Foo::doFoo().",
49+
"line": 171,
50+
"ignorable": true
51+
}
52+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
[
2+
{
3+
"message": "Call to an undefined method object::foo().",
4+
"line": 25,
5+
"ignorable": true
6+
},
7+
{
8+
"message": "Access to an undefined property object::$bar.",
9+
"line": 26,
10+
"ignorable": true
11+
},
12+
{
13+
"message": "Call to an undefined static method object::baz().",
14+
"line": 28,
15+
"ignorable": true
16+
},
17+
{
18+
"message": "Access to an undefined static property object::$dolor.",
19+
"line": 29,
20+
"ignorable": true
21+
}
22+
]
+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
[
2+
{
3+
"message": "Parameter #1 (mixed) of echo cannot be converted to string.",
4+
"line": 14,
5+
"ignorable": true
6+
},
7+
{
8+
"message": "Parameter #1 (mixed) of echo cannot be converted to string.",
9+
"line": 17,
10+
"ignorable": true
11+
},
12+
{
13+
"message": "Parameter #1 (mixed) of echo cannot be converted to string.",
14+
"line": 26,
15+
"ignorable": true
16+
},
17+
{
18+
"message": "Parameter #1 (mixed) of echo cannot be converted to string.",
19+
"line": 29,
20+
"ignorable": true
21+
},
22+
{
23+
"message": "Parameter #1 (mixed) of echo cannot be converted to string.",
24+
"line": 38,
25+
"ignorable": true
26+
},
27+
{
28+
"message": "Parameter #1 (mixed) of echo cannot be converted to string.",
29+
"line": 41,
30+
"ignorable": true
31+
}
32+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
[
2+
{
3+
"message": "Access to an undefined property Levels\\PropertyAccesses\\Foo::$bar.",
4+
"line": 61,
5+
"ignorable": true
6+
},
7+
{
8+
"message": "Access to an undefined property Levels\\PropertyAccesses\\Foo::$bar.",
9+
"line": 166,
10+
"ignorable": true
11+
},
12+
{
13+
"message": "Access to an undefined property Levels\\PropertyAccesses\\Bar|Levels\\PropertyAccesses\\Foo::$foo.",
14+
"line": 63,
15+
"ignorable": true
16+
},
17+
{
18+
"message": "Access to an undefined property Levels\\PropertyAccesses\\Bar|Levels\\PropertyAccesses\\Foo::$bar.",
19+
"line": 64,
20+
"ignorable": true
21+
},
22+
{
23+
"message": "Access to an undefined property Levels\\PropertyAccesses\\Bar|Levels\\PropertyAccesses\\Foo::$foo.",
24+
"line": 169,
25+
"ignorable": true
26+
},
27+
{
28+
"message": "Access to an undefined property Levels\\PropertyAccesses\\Bar|Levels\\PropertyAccesses\\Foo::$bar.",
29+
"line": 170,
30+
"ignorable": true
31+
}
32+
]

0 commit comments

Comments
 (0)