Skip to content

Commit 73b0f95

Browse files
authored
Upgrade Psalm to 6.13 (#1973)
* Use `get_debug_type` for error reporting * Harden code against error cases * Upgrade Psalm to 6.13
1 parent 9005112 commit 73b0f95

24 files changed

+179
-84
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
"nikic/php-parser": "^4.0",
2929
"nyholm/symfony-bundle-test": "^3.0",
3030
"phpstan/phpstan": "~2.0.0",
31-
"psalm/phar": "~5.14.1",
31+
"psalm/phar": "~6.13.1",
3232
"psr/cache": "^1.0 || ^2.0 || ^3.0",
3333
"swaggest/json-diff": "^3.7",
3434
"symfony/cache": "^4.4 || ^5.0 || ^6.0 || ^7.0 || ^8.0",

psalm.baseline.xml

Lines changed: 59 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<files psalm-version="5.14.1@b9d355e0829c397b9b3b47d0c0ed042a8a70284d">
3-
<file src="src/Core/src/AbstractApi.php">
4-
<UndefinedFunction>
5-
<code><![CDATA[trigger_deprecation('async-aws/core', '1.2', 'Extending "%s"" without overriding "%s" is deprecated. This method will be abstract in version 2.0.', __CLASS__, __FUNCTION__)]]></code>
6-
<code><![CDATA[trigger_deprecation('async-aws/core', '1.2', 'providing an endpoint with placeholder is deprecated and will be ignored in version 2.0. Provide full endpoint instead.')]]></code>
7-
</UndefinedFunction>
2+
<files psalm-version="6.13.1@1e3b7f0a8ab32b23197b91107adc0a7ed8a05b51">
3+
<file src="src/Core/src/Signer/SignerV4.php">
4+
<NoValue>
5+
<code><![CDATA[$values]]></code>
6+
</NoValue>
87
</file>
98
<file src="src/Core/src/Waiter.php">
9+
<InvalidOperand>
10+
<code><![CDATA[$delay * 1000000]]></code>
11+
</InvalidOperand>
1012
<PossiblyUndefinedVariable>
11-
<code>$exception</code>
13+
<code><![CDATA[$exception]]></code>
1214
</PossiblyUndefinedVariable>
1315
</file>
1416
<file src="src/Integration/Aws/SimpleS3/src/SimpleS3Client.php">
@@ -18,14 +20,14 @@
1820
</file>
1921
<file src="src/Integration/Laravel/Cache/src/ServiceProvider.php">
2022
<InvalidArgument>
21-
<code>$config</code>
23+
<code><![CDATA[$config]]></code>
2224
</InvalidArgument>
2325
<UndefinedInterfaceMethod>
2426
<code><![CDATA[$this->app]]></code>
2527
</UndefinedInterfaceMethod>
2628
<UndefinedMethod>
27-
<code>getPrefix</code>
28-
<code>repository</code>
29+
<code><![CDATA[getPrefix]]></code>
30+
<code><![CDATA[repository]]></code>
2931
</UndefinedMethod>
3032
</file>
3133
<file src="src/Integration/Laravel/Queue/src/ServiceProvider.php">
@@ -35,31 +37,26 @@
3537
</file>
3638
<file src="src/Integration/Monolog/CloudWatch/src/CloudWatchLogsHandler.php">
3739
<DeprecatedConstant>
38-
<code>Logger::DEBUG</code>
40+
<code><![CDATA[Logger::DEBUG]]></code>
3941
</DeprecatedConstant>
4042
<InvalidArgument>
41-
<code>$level</code>
43+
<code><![CDATA[$level]]></code>
4244
</InvalidArgument>
4345
<PossiblyInvalidArgument>
4446
<code><![CDATA[$record['formatted']]]></code>
4547
</PossiblyInvalidArgument>
4648
<PossiblyInvalidMethodCall>
47-
<code>format</code>
49+
<code><![CDATA[format]]></code>
4850
</PossiblyInvalidMethodCall>
4951
</file>
5052
<file src="src/Integration/Symfony/Bundle/src/DependencyInjection/Configuration.php">
5153
<UndefinedInterfaceMethod>
52-
<code>scalarNode</code>
54+
<code><![CDATA[scalarNode]]></code>
5355
</UndefinedInterfaceMethod>
5456
</file>
55-
<file src="src/Service/Athena/src/Result/GetQueryResultsOutput.php">
56-
<PossiblyNullReference>
57-
<code>getRows</code>
58-
</PossiblyNullReference>
59-
</file>
6057
<file src="src/Service/CloudFormation/src/Result/DescribeStacksOutput.php">
6158
<LessSpecificReturnStatement>
62-
<code>$items</code>
59+
<code><![CDATA[$items]]></code>
6360
</LessSpecificReturnStatement>
6461
<MoreSpecificReturnType>
6562
<code><![CDATA[list<Capability::*>]]></code>
@@ -75,82 +72,82 @@
7572
</file>
7673
<file src="src/Service/CodeBuild/src/Result/BatchGetBuildsOutput.php">
7774
<LessSpecificReturnStatement>
78-
<code>$items</code>
75+
<code><![CDATA[$items]]></code>
7976
</LessSpecificReturnStatement>
8077
<MoreSpecificReturnType>
8178
<code><![CDATA[list<CacheMode::*>]]></code>
8279
</MoreSpecificReturnType>
8380
</file>
8481
<file src="src/Service/CodeBuild/src/Result/StartBuildOutput.php">
8582
<LessSpecificReturnStatement>
86-
<code>$items</code>
83+
<code><![CDATA[$items]]></code>
8784
</LessSpecificReturnStatement>
8885
<MoreSpecificReturnType>
8986
<code><![CDATA[list<CacheMode::*>]]></code>
9087
</MoreSpecificReturnType>
9188
</file>
9289
<file src="src/Service/CodeBuild/src/Result/StopBuildOutput.php">
9390
<LessSpecificReturnStatement>
94-
<code>$items</code>
91+
<code><![CDATA[$items]]></code>
9592
</LessSpecificReturnStatement>
9693
<MoreSpecificReturnType>
9794
<code><![CDATA[list<CacheMode::*>]]></code>
9895
</MoreSpecificReturnType>
9996
</file>
10097
<file src="src/Service/CodeDeploy/src/Result/GetDeploymentOutput.php">
10198
<LessSpecificReturnStatement>
102-
<code>$items</code>
99+
<code><![CDATA[$items]]></code>
103100
</LessSpecificReturnStatement>
104101
<MoreSpecificReturnType>
105102
<code><![CDATA[list<AutoRollbackEvent::*>]]></code>
106103
</MoreSpecificReturnType>
107104
</file>
108105
<file src="src/Service/CognitoIdentityProvider/src/Result/AdminInitiateAuthResponse.php">
109106
<LessSpecificReturnStatement>
110-
<code>$items</code>
107+
<code><![CDATA[$items]]></code>
111108
</LessSpecificReturnStatement>
112109
<MoreSpecificReturnType>
113110
<code><![CDATA[list<ChallengeNameType::*>]]></code>
114111
</MoreSpecificReturnType>
115112
</file>
116113
<file src="src/Service/CognitoIdentityProvider/src/Result/InitiateAuthResponse.php">
117114
<LessSpecificReturnStatement>
118-
<code>$items</code>
115+
<code><![CDATA[$items]]></code>
119116
</LessSpecificReturnStatement>
120117
<MoreSpecificReturnType>
121118
<code><![CDATA[list<ChallengeNameType::*>]]></code>
122119
</MoreSpecificReturnType>
123120
</file>
124121
<file src="src/Service/Kinesis/src/Result/DescribeStreamOutput.php">
125122
<LessSpecificReturnStatement>
126-
<code>$items</code>
123+
<code><![CDATA[$items]]></code>
127124
</LessSpecificReturnStatement>
128125
<MoreSpecificReturnType>
129126
<code><![CDATA[list<MetricsName::*>]]></code>
130127
</MoreSpecificReturnType>
131128
</file>
132129
<file src="src/Service/Kinesis/src/Result/DescribeStreamSummaryOutput.php">
133130
<LessSpecificReturnStatement>
134-
<code>$items</code>
131+
<code><![CDATA[$items]]></code>
135132
</LessSpecificReturnStatement>
136133
<MoreSpecificReturnType>
137134
<code><![CDATA[list<MetricsName::*>]]></code>
138135
</MoreSpecificReturnType>
139136
</file>
140137
<file src="src/Service/Kinesis/src/Result/EnhancedMonitoringOutput.php">
141138
<LessSpecificReturnStatement>
142-
<code>$items</code>
139+
<code><![CDATA[$items]]></code>
143140
</LessSpecificReturnStatement>
144141
<MoreSpecificReturnType>
145142
<code><![CDATA[list<MetricsName::*>]]></code>
146143
</MoreSpecificReturnType>
147144
</file>
148145
<file src="src/Service/Kms/src/Result/CreateKeyResponse.php">
149146
<LessSpecificReturnStatement>
150-
<code>$items</code>
151-
<code>$items</code>
152-
<code>$items</code>
153-
<code>$items</code>
147+
<code><![CDATA[$items]]></code>
148+
<code><![CDATA[$items]]></code>
149+
<code><![CDATA[$items]]></code>
150+
<code><![CDATA[$items]]></code>
154151
</LessSpecificReturnStatement>
155152
<MoreSpecificReturnType>
156153
<code><![CDATA[list<EncryptionAlgorithmSpec::*>]]></code>
@@ -161,9 +158,9 @@
161158
</file>
162159
<file src="src/Service/Kms/src/Result/GetPublicKeyResponse.php">
163160
<LessSpecificReturnStatement>
164-
<code>$items</code>
165-
<code>$items</code>
166-
<code>$items</code>
161+
<code><![CDATA[$items]]></code>
162+
<code><![CDATA[$items]]></code>
163+
<code><![CDATA[$items]]></code>
167164
</LessSpecificReturnStatement>
168165
<MoreSpecificReturnType>
169166
<code><![CDATA[list<EncryptionAlgorithmSpec::*>]]></code>
@@ -173,24 +170,24 @@
173170
</file>
174171
<file src="src/Service/Lambda/src/Result/FunctionConfiguration.php">
175172
<LessSpecificReturnStatement>
176-
<code>$items</code>
173+
<code><![CDATA[$items]]></code>
177174
</LessSpecificReturnStatement>
178175
<MoreSpecificReturnType>
179176
<code><![CDATA[list<Architecture::*>]]></code>
180177
</MoreSpecificReturnType>
181178
</file>
182179
<file src="src/Service/Lambda/src/Result/ListFunctionsResponse.php">
183180
<LessSpecificReturnStatement>
184-
<code>$items</code>
181+
<code><![CDATA[$items]]></code>
185182
</LessSpecificReturnStatement>
186183
<MoreSpecificReturnType>
187184
<code><![CDATA[list<Architecture::*>]]></code>
188185
</MoreSpecificReturnType>
189186
</file>
190187
<file src="src/Service/Lambda/src/Result/ListLayerVersionsResponse.php">
191188
<LessSpecificReturnStatement>
192-
<code>$items</code>
193-
<code>$items</code>
189+
<code><![CDATA[$items]]></code>
190+
<code><![CDATA[$items]]></code>
194191
</LessSpecificReturnStatement>
195192
<MoreSpecificReturnType>
196193
<code><![CDATA[list<Architecture::*>]]></code>
@@ -199,16 +196,16 @@
199196
</file>
200197
<file src="src/Service/Lambda/src/Result/ListVersionsByFunctionResponse.php">
201198
<LessSpecificReturnStatement>
202-
<code>$items</code>
199+
<code><![CDATA[$items]]></code>
203200
</LessSpecificReturnStatement>
204201
<MoreSpecificReturnType>
205202
<code><![CDATA[list<Architecture::*>]]></code>
206203
</MoreSpecificReturnType>
207204
</file>
208205
<file src="src/Service/Lambda/src/Result/PublishLayerVersionResponse.php">
209206
<LessSpecificReturnStatement>
210-
<code>$items</code>
211-
<code>$items</code>
207+
<code><![CDATA[$items]]></code>
208+
<code><![CDATA[$items]]></code>
212209
</LessSpecificReturnStatement>
213210
<MoreSpecificReturnType>
214211
<code><![CDATA[list<Architecture::*>]]></code>
@@ -217,10 +214,10 @@
217214
</file>
218215
<file src="src/Service/MediaConvert/src/Result/CreateJobResponse.php">
219216
<LessSpecificReturnStatement>
220-
<code>$items</code>
221-
<code>$items</code>
222-
<code>$items</code>
223-
<code>$items</code>
217+
<code><![CDATA[$items]]></code>
218+
<code><![CDATA[$items]]></code>
219+
<code><![CDATA[$items]]></code>
220+
<code><![CDATA[$items]]></code>
224221
</LessSpecificReturnStatement>
225222
<MoreSpecificReturnType>
226223
<code><![CDATA[list<AudioChannelTag::*>]]></code>
@@ -231,10 +228,10 @@
231228
</file>
232229
<file src="src/Service/MediaConvert/src/Result/GetJobResponse.php">
233230
<LessSpecificReturnStatement>
234-
<code>$items</code>
235-
<code>$items</code>
236-
<code>$items</code>
237-
<code>$items</code>
231+
<code><![CDATA[$items]]></code>
232+
<code><![CDATA[$items]]></code>
233+
<code><![CDATA[$items]]></code>
234+
<code><![CDATA[$items]]></code>
238235
</LessSpecificReturnStatement>
239236
<MoreSpecificReturnType>
240237
<code><![CDATA[list<AudioChannelTag::*>]]></code>
@@ -245,10 +242,10 @@
245242
</file>
246243
<file src="src/Service/MediaConvert/src/Result/ListJobsResponse.php">
247244
<LessSpecificReturnStatement>
248-
<code>$items</code>
249-
<code>$items</code>
250-
<code>$items</code>
251-
<code>$items</code>
245+
<code><![CDATA[$items]]></code>
246+
<code><![CDATA[$items]]></code>
247+
<code><![CDATA[$items]]></code>
248+
<code><![CDATA[$items]]></code>
252249
</LessSpecificReturnStatement>
253250
<MoreSpecificReturnType>
254251
<code><![CDATA[list<AudioChannelTag::*>]]></code>
@@ -259,50 +256,47 @@
259256
</file>
260257
<file src="src/Service/Rekognition/src/Result/IndexFacesResponse.php">
261258
<LessSpecificReturnStatement>
262-
<code>$items</code>
259+
<code><![CDATA[$items]]></code>
263260
</LessSpecificReturnStatement>
264261
<MoreSpecificReturnType>
265262
<code><![CDATA[list<Reason::*>]]></code>
266263
</MoreSpecificReturnType>
267264
</file>
268265
<file src="src/Service/S3/src/Result/ListObjectVersionsOutput.php">
269266
<LessSpecificReturnStatement>
270-
<code>$items</code>
267+
<code><![CDATA[$items]]></code>
271268
</LessSpecificReturnStatement>
272269
<MoreSpecificReturnType>
273270
<code><![CDATA[list<ChecksumAlgorithm::*>]]></code>
274271
</MoreSpecificReturnType>
275272
</file>
276273
<file src="src/Service/S3/src/Result/ListObjectsV2Output.php">
277274
<LessSpecificReturnStatement>
278-
<code>$items</code>
275+
<code><![CDATA[$items]]></code>
279276
</LessSpecificReturnStatement>
280277
<MoreSpecificReturnType>
281278
<code><![CDATA[list<ChecksumAlgorithm::*>]]></code>
282279
</MoreSpecificReturnType>
283280
</file>
284281
<file src="src/Service/S3/src/Signer/SignerV4ForS3.php">
285282
<InvalidArgument>
286-
<code>array_keys($s3SignerOptions)</code>
283+
<code><![CDATA[array_keys($s3SignerOptions)]]></code>
287284
</InvalidArgument>
288285
<NoValue>
289-
<code>$s3SignerOptions</code>
286+
<code><![CDATA[$s3SignerOptions]]></code>
290287
</NoValue>
291-
<TypeDoesNotContainType>
292-
<code>empty($s3SignerOptions)</code>
293-
</TypeDoesNotContainType>
294288
</file>
295289
<file src="src/Service/Sqs/src/Result/GetQueueAttributesResult.php">
296290
<LessSpecificReturnStatement>
297-
<code>$items</code>
291+
<code><![CDATA[$items]]></code>
298292
</LessSpecificReturnStatement>
299293
<MoreSpecificReturnType>
300294
<code><![CDATA[array<QueueAttributeName::*, string>]]></code>
301295
</MoreSpecificReturnType>
302296
</file>
303297
<file src="src/Service/Sqs/src/Result/ReceiveMessageResult.php">
304298
<LessSpecificReturnStatement>
305-
<code>$items</code>
299+
<code><![CDATA[$items]]></code>
306300
</LessSpecificReturnStatement>
307301
<MoreSpecificReturnType>
308302
<code><![CDATA[array<MessageSystemAttributeName::*, string>]]></code>

psalm.xml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
cacheDirectory=".cache/psalm/"
99
findUnusedBaselineEntry="false"
1010
findUnusedCode="false"
11+
ensureOverrideAttribute="false"
1112
>
1213
<projectFiles>
1314
<directory name="src" />
@@ -48,5 +49,19 @@
4849

4950
<ArgumentTypeCoercion errorLevel="info" />
5051
<PropertyTypeCoercion errorLevel="info" />
52+
53+
<RiskyTruthyFalsyComparison errorLevel="info" />
54+
55+
<ParamNameMismatch errorLevel="info" />
56+
57+
<!-- SimpleXMLElement can return null values for not found elements, but we assume the structure of AWS responses is valid -->
58+
<PossiblyNullArgument errorLevel="info" />
59+
<PossiblyNullArrayAccess errorLevel="info" />
60+
<PossiblyNullIterator errorLevel="info" />
61+
<PossiblyNullPropertyFetch errorLevel="info" />
62+
<PossiblyNullReference errorLevel="info" />
63+
64+
<!-- We don't use @api to define our public API. Anything non-internal is public for us. Those rules break due to that. See https://github.com/vimeo/psalm/issues/11580 -->
65+
<ClassMustBeFinal errorLevel="suppress" />
5166
</issueHandlers>
5267
</psalm>

src/Core/CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@
1515

1616
- Apply new CodingStandard from latest php-cs-fixer.
1717
- Fix PHP 8.5 deprecation by avoiding using `null` as an array offset.
18+
- Harden code against error cases
1819

1920
### Fixed
2021

2122
- Buffer the response in temporary file to avoid issues when stream is used by another request's body
2223

23-
2424
## 1.27.1
2525

2626
### Fixed

0 commit comments

Comments
 (0)