Skip to content

Commit c8d802a

Browse files
authored
Merge pull request #54 from gsteel/general-qa
Type inference improvements, baseline reduction
2 parents d063c77 + 537b489 commit c8d802a

15 files changed

+295
-355
lines changed

composer.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@
3737
},
3838
"require-dev": {
3939
"laminas/laminas-coding-standard": "~2.5.0",
40-
"laminas/laminas-diactoros": "^2.25 || ^3.3",
41-
"phpunit/phpunit": "^10.4.2",
42-
"psalm/plugin-phpunit": "^0.18.4",
43-
"vimeo/psalm": "^5.15.0"
40+
"laminas/laminas-diactoros": "^2.25 || ^3.3.1",
41+
"phpunit/phpunit": "^10.5.27",
42+
"psalm/plugin-phpunit": "^0.19.0",
43+
"vimeo/psalm": "^5.25.0"
4444
},
4545
"conflict": {
4646
"zendframework/zend-stratigility": "*"

composer.lock

Lines changed: 187 additions & 183 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

psalm-baseline.xml

Lines changed: 60 additions & 143 deletions
Original file line numberDiff line numberDiff line change
@@ -1,246 +1,163 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<files psalm-version="5.11.0@c9b192ab8400fdaf04b2b13d110575adc879aa90">
3-
<file src="src/Handler/NotFoundHandler.php">
4-
<MixedInferredReturnType>
5-
<code>ResponseInterface</code>
6-
</MixedInferredReturnType>
7-
<MixedMethodCall>
8-
<code>withStatus</code>
9-
</MixedMethodCall>
10-
<MixedReturnStatement>
11-
<code>$responseFactory()</code>
12-
</MixedReturnStatement>
13-
</file>
2+
<files psalm-version="5.25.0@01a8eb06b9e9cc6cfb6a320bf9fb14331919d505">
143
<file src="src/Middleware/DoublePassMiddlewareDecorator.php">
154
<MissingClosureParamType>
16-
<code>$request</code>
17-
<code>$response</code>
5+
<code><![CDATA[$request]]></code>
6+
<code><![CDATA[$response]]></code>
187
</MissingClosureParamType>
198
<MixedArgument>
20-
<code>$request</code>
9+
<code><![CDATA[$request]]></code>
2110
</MixedArgument>
2211
<UnusedClosureParam>
23-
<code>$response</code>
12+
<code><![CDATA[$response]]></code>
2413
</UnusedClosureParam>
2514
</file>
2615
<file src="src/Middleware/ErrorHandler.php">
2716
<MixedArgument>
28-
<code>$response</code>
17+
<code><![CDATA[$response]]></code>
2918
</MixedArgument>
3019
<MixedArgumentTypeCoercion>
3120
<code><![CDATA[$this->createErrorHandler()]]></code>
3221
</MixedArgumentTypeCoercion>
3322
<MixedAssignment>
34-
<code>$response</code>
23+
<code><![CDATA[$response]]></code>
3524
</MixedAssignment>
3625
<MixedInferredReturnType>
37-
<code>ResponseInterface</code>
26+
<code><![CDATA[ResponseInterface]]></code>
3827
</MixedInferredReturnType>
3928
<MixedReturnStatement>
40-
<code>$responseFactory()</code>
29+
<code><![CDATA[$responseFactory()]]></code>
4130
</MixedReturnStatement>
4231
</file>
4332
<file src="src/Middleware/ErrorResponseGenerator.php">
4433
<UnusedParam>
45-
<code>$request</code>
34+
<code><![CDATA[$request]]></code>
4635
</UnusedParam>
4736
</file>
4837
<file src="src/Middleware/HostMiddlewareDecorator.php">
4938
<PossiblyUnusedReturnValue>
50-
<code>ResponseInterface</code>
39+
<code><![CDATA[ResponseInterface]]></code>
5140
</PossiblyUnusedReturnValue>
5241
</file>
53-
<file src="src/Next.php">
54-
<MixedAssignment>
55-
<code>$middleware</code>
56-
</MixedAssignment>
57-
<MixedInferredReturnType>
58-
<code>ResponseInterface</code>
59-
</MixedInferredReturnType>
60-
<MixedMethodCall>
61-
<code>process</code>
62-
</MixedMethodCall>
63-
<MixedReturnStatement>
64-
<code><![CDATA[$middleware->process($request, $next)]]></code>
65-
</MixedReturnStatement>
66-
</file>
6742
<file src="src/functions/double-pass-middleware.legacy.php">
6843
<InvalidReturnStatement>
69-
<code>laminas_doublePassMiddleware(...func_get_args())</code>
44+
<code><![CDATA[laminas_doublePassMiddleware(...func_get_args())]]></code>
7045
</InvalidReturnStatement>
7146
<InvalidReturnType>
72-
<code>Middleware\DoublePassMiddlewareDecorator</code>
47+
<code><![CDATA[Middleware\DoublePassMiddlewareDecorator]]></code>
7348
</InvalidReturnType>
7449
<MixedArgument>
75-
<code>func_get_args()</code>
76-
<code>func_get_args()</code>
50+
<code><![CDATA[func_get_args()]]></code>
51+
<code><![CDATA[func_get_args()]]></code>
7752
</MixedArgument>
7853
<UndefinedClass>
79-
<code>Middleware\DoublePassMiddlewareDecorator</code>
54+
<code><![CDATA[Middleware\DoublePassMiddlewareDecorator]]></code>
8055
</UndefinedClass>
8156
</file>
8257
<file src="src/functions/host.legacy.php">
8358
<InvalidReturnStatement>
84-
<code>laminas_host(...func_get_args())</code>
59+
<code><![CDATA[laminas_host(...func_get_args())]]></code>
8560
</InvalidReturnStatement>
8661
<InvalidReturnType>
87-
<code>Middleware\HostMiddlewareDecorator</code>
62+
<code><![CDATA[Middleware\HostMiddlewareDecorator]]></code>
8863
</InvalidReturnType>
8964
<MixedArgument>
90-
<code>func_get_args()</code>
91-
<code>func_get_args()</code>
65+
<code><![CDATA[func_get_args()]]></code>
66+
<code><![CDATA[func_get_args()]]></code>
9267
</MixedArgument>
9368
<UndefinedClass>
94-
<code>Middleware\HostMiddlewareDecorator</code>
69+
<code><![CDATA[Middleware\HostMiddlewareDecorator]]></code>
9570
</UndefinedClass>
9671
</file>
9772
<file src="src/functions/middleware.legacy.php">
9873
<InvalidReturnStatement>
99-
<code>laminas_middleware(...func_get_args())</code>
74+
<code><![CDATA[laminas_middleware(...func_get_args())]]></code>
10075
</InvalidReturnStatement>
10176
<InvalidReturnType>
102-
<code>Middleware\CallableMiddlewareDecorator</code>
77+
<code><![CDATA[Middleware\CallableMiddlewareDecorator]]></code>
10378
</InvalidReturnType>
10479
<MixedArgument>
105-
<code>func_get_args()</code>
80+
<code><![CDATA[func_get_args()]]></code>
10681
</MixedArgument>
10782
<UndefinedClass>
108-
<code>Middleware\CallableMiddlewareDecorator</code>
83+
<code><![CDATA[Middleware\CallableMiddlewareDecorator]]></code>
10984
</UndefinedClass>
11085
</file>
11186
<file src="src/functions/path.legacy.php">
11287
<InvalidReturnStatement>
113-
<code>laminas_path(...func_get_args())</code>
88+
<code><![CDATA[laminas_path(...func_get_args())]]></code>
11489
</InvalidReturnStatement>
11590
<InvalidReturnType>
116-
<code>Middleware\PathMiddlewareDecorator</code>
91+
<code><![CDATA[Middleware\PathMiddlewareDecorator]]></code>
11792
</InvalidReturnType>
11893
<MixedArgument>
119-
<code>func_get_args()</code>
120-
<code>func_get_args()</code>
94+
<code><![CDATA[func_get_args()]]></code>
95+
<code><![CDATA[func_get_args()]]></code>
12196
</MixedArgument>
12297
<UndefinedClass>
123-
<code>Middleware\PathMiddlewareDecorator</code>
98+
<code><![CDATA[Middleware\PathMiddlewareDecorator]]></code>
12499
</UndefinedClass>
125100
</file>
126-
<file src="test/Exception/ExceptionTest.php">
127-
<MixedInferredReturnType>
128-
<code>Generator</code>
129-
</MixedInferredReturnType>
130-
<PossiblyFalseOperand>
131-
<code>strrpos(ExceptionInterface::class, '\\')</code>
132-
</PossiblyFalseOperand>
133-
</file>
134101
<file src="test/Middleware/CallableMiddlewareDecoratorTest.php">
135102
<MissingClosureParamType>
136-
<code>$handler</code>
137-
<code>$request</code>
103+
<code><![CDATA[$handler]]></code>
104+
<code><![CDATA[$request]]></code>
138105
</MissingClosureParamType>
139106
<UnusedClosureParam>
140-
<code>$handler</code>
141-
<code>$request</code>
107+
<code><![CDATA[$handler]]></code>
108+
<code><![CDATA[$request]]></code>
142109
</UnusedClosureParam>
143110
</file>
144111
<file src="test/Middleware/DoublePassMiddlewareDecoratorExceptionTest.php">
145112
<MissingClosureParamType>
146-
<code>$next</code>
147-
<code>$request</code>
113+
<code><![CDATA[$next]]></code>
114+
<code><![CDATA[$request]]></code>
148115
</MissingClosureParamType>
149116
<MixedArgument>
150-
<code>$autoloader</code>
117+
<code><![CDATA[$autoloader]]></code>
151118
</MixedArgument>
152119
<MixedAssignment>
153-
<code>$autoloader</code>
120+
<code><![CDATA[$autoloader]]></code>
154121
</MixedAssignment>
155122
<UnusedClosureParam>
156-
<code>$next</code>
123+
<code><![CDATA[$next]]></code>
157124
</UnusedClosureParam>
158125
</file>
159126
<file src="test/Middleware/DoublePassMiddlewareDecoratorTest.php">
160127
<MissingClosureParamType>
161-
<code>$next</code>
162-
<code>$next</code>
163-
<code>$next</code>
164-
<code>$next</code>
165-
<code>$request</code>
166-
<code>$request</code>
167-
<code>$request</code>
168-
<code>$request</code>
169-
<code>$response</code>
170-
<code>$response</code>
128+
<code><![CDATA[$next]]></code>
129+
<code><![CDATA[$next]]></code>
130+
<code><![CDATA[$next]]></code>
131+
<code><![CDATA[$next]]></code>
132+
<code><![CDATA[$request]]></code>
133+
<code><![CDATA[$request]]></code>
134+
<code><![CDATA[$request]]></code>
135+
<code><![CDATA[$request]]></code>
136+
<code><![CDATA[$response]]></code>
137+
<code><![CDATA[$response]]></code>
171138
</MissingClosureParamType>
172139
<UnusedClosureParam>
173-
<code>$next</code>
174-
<code>$next</code>
175-
<code>$next</code>
176-
<code>$next</code>
177-
<code>$request</code>
178-
<code>$request</code>
179-
<code>$response</code>
180-
<code>$response</code>
140+
<code><![CDATA[$next]]></code>
141+
<code><![CDATA[$next]]></code>
142+
<code><![CDATA[$next]]></code>
143+
<code><![CDATA[$next]]></code>
144+
<code><![CDATA[$request]]></code>
145+
<code><![CDATA[$request]]></code>
146+
<code><![CDATA[$response]]></code>
147+
<code><![CDATA[$response]]></code>
181148
</UnusedClosureParam>
182149
</file>
183150
<file src="test/Middleware/ErrorHandlerTest.php">
184151
<MixedArgument>
185-
<code>$listeners</code>
152+
<code><![CDATA[$listeners]]></code>
186153
</MixedArgument>
187154
<MixedAssignment>
188-
<code>$listeners</code>
155+
<code><![CDATA[$listeners]]></code>
189156
</MixedAssignment>
190157
</file>
191-
<file src="test/Middleware/HostMiddlewareDecoratorTest.php">
192-
<MixedInferredReturnType>
193-
<code>Generator</code>
194-
</MixedInferredReturnType>
195-
</file>
196158
<file src="test/Middleware/NotFoundHandlerTest.php">
197159
<DeprecatedClass>
198-
<code>new NotFoundHandler($responseFactory)</code>
160+
<code><![CDATA[new NotFoundHandler($responseFactory)]]></code>
199161
</DeprecatedClass>
200162
</file>
201-
<file src="test/Middleware/PathMiddlewareDecoratorIntegrationTest.php">
202-
<MixedAssignment>
203-
<code>$receivedUri</code>
204-
</MixedAssignment>
205-
<MixedMethodCall>
206-
<code>getPath</code>
207-
<code>getPath</code>
208-
<code>getUri</code>
209-
<code>getUri</code>
210-
</MixedMethodCall>
211-
<MixedOperand>
212-
<code>$path</code>
213-
</MixedOperand>
214-
</file>
215-
<file src="test/Middleware/PathMiddlewareDecoratorTest.php">
216-
<MixedMethodCall>
217-
<code>getPath</code>
218-
<code>getUri</code>
219-
</MixedMethodCall>
220-
<ParamNameMismatch>
221-
<code>$req</code>
222-
</ParamNameMismatch>
223-
</file>
224-
<file src="test/MiddlewarePipeTest.php">
225-
<ParamNameMismatch>
226-
<code>$req</code>
227-
<code>$req</code>
228-
</ParamNameMismatch>
229-
</file>
230-
<file src="test/NextTest.php">
231-
<ParamNameMismatch>
232-
<code>$req</code>
233-
<code>$req</code>
234-
</ParamNameMismatch>
235-
</file>
236-
<file src="test/TestAsset/DelegatingMiddleware.php">
237-
<ParamNameMismatch>
238-
<code>$req</code>
239-
</ParamNameMismatch>
240-
</file>
241-
<file src="test/TestAsset/ShortCircuitingMiddleware.php">
242-
<ParamNameMismatch>
243-
<code>$req</code>
244-
</ParamNameMismatch>
245-
</file>
246163
</files>

src/Handler/NotFoundHandler.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace Laminas\Stratigility\Handler;
66

7+
use Closure;
78
use Fig\Http\Message\StatusCodeInterface as StatusCode;
89
use Psr\Http\Message\ResponseInterface;
910
use Psr\Http\Message\ServerRequestInterface;
@@ -13,11 +14,11 @@
1314

1415
final class NotFoundHandler implements RequestHandlerInterface
1516
{
16-
/** @var callable */
17-
private $responseFactory;
17+
/** @var Closure(): ResponseInterface */
18+
private Closure $responseFactory;
1819

1920
/**
20-
* @param callable $responseFactory A factory capable of returning an
21+
* @param callable(): ResponseInterface $responseFactory A factory capable of returning an
2122
* empty ResponseInterface instance to update and return when returning
2223
* an 404 response.
2324
*/

src/Middleware/NotFoundHandler.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ final class NotFoundHandler implements MiddlewareInterface
1818
private NotFoundRequestHandler $notFoundHandler;
1919

2020
/**
21-
* @param callable $responseFactory A factory capable of returning an
21+
* @param callable(): ResponseInterface $responseFactory A factory capable of returning an
2222
* empty ResponseInterface instance to update and return when returning
2323
* an 404 response.
2424
*/

src/MiddlewarePipe.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,15 @@
2626
*/
2727
final class MiddlewarePipe implements MiddlewarePipeInterface
2828
{
29+
/** @var SplQueue<MiddlewareInterface> */
2930
private SplQueue $pipeline;
3031

3132
/**
3233
* Initializes the queue.
3334
*/
3435
public function __construct()
3536
{
37+
/** @psalm-var SplQueue<MiddlewareInterface> */
3638
$this->pipeline = new SplQueue();
3739
}
3840

src/Next.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Laminas\Stratigility\Exception\MiddlewarePipeNextHandlerAlreadyCalledException;
88
use Psr\Http\Message\ResponseInterface;
99
use Psr\Http\Message\ServerRequestInterface;
10+
use Psr\Http\Server\MiddlewareInterface;
1011
use Psr\Http\Server\RequestHandlerInterface;
1112
use SplQueue;
1213

@@ -17,11 +18,13 @@ final class Next implements RequestHandlerInterface
1718
{
1819
private RequestHandlerInterface $fallbackHandler;
1920

21+
/** @var SplQueue<MiddlewareInterface> */
2022
private ?SplQueue $queue;
2123

2224
/**
2325
* Clones the queue provided to allow re-use.
2426
*
27+
* @param SplQueue<MiddlewareInterface> $queue
2528
* @param RequestHandlerInterface $fallbackHandler Fallback handler to
2629
* invoke when the queue is exhausted.
2730
*/

0 commit comments

Comments
 (0)