1
0
mirror of https://github.com/danog/psalm.git synced 2024-12-03 10:07:52 +01:00

restrictReturnTypes configuration

This commit is contained in:
Jack Worman 2022-12-24 08:57:00 -06:00
parent 8b05f2ead8
commit f9e9aad990
2 changed files with 57 additions and 5 deletions

View File

@ -435,6 +435,63 @@ Arrays bigger than this value (100 by default) will be transformed in a generic
Please note that changing this setting might introduce unwanted side effects and those side effects won't be considered as bugs. Please note that changing this setting might introduce unwanted side effects and those side effects won't be considered as bugs.
#### restrictReturnTypes
```xml
<psalm
restrictReturnTypes="true"
>
```
Emits `LessSpecificReturnType` when the declared return type is not as tight as
the inferred return type.
This code:
```php
function getOne(): int // declared type: int
{
return 1; // inferred type: 1 (int literal)
}
```
Will give this error: `LessSpecificReturnType - The inferred return type '1' for
a is more specific than the declared return type 'int'`
To fix the error, you should specify the more specific type in the doc-block:
```php
/**
* @return 1
*/
function getOne(): int
{
return 1;
}
```
**Warning**: Forcing a tighter type is not always the best course of action and
may cause unexpected results. The following code is invalid with
`restrictReturnTypes="true"`:
```php
class StandardCar {
/**
* @return list{'motor', 'brakes', 'wheels'}
*/
public function getSystems(): array {
return ['motor', 'brakes', 'wheels'];
}
}
class PremiumCar extends StandardCar {
/**
* @return list{'motor', 'brakes', 'wheels', 'rear parking sensor'}
*/
public function getSystems(): array {
return ['motor', 'brakes', 'wheels', 'rear parking sensor'];
}
}
```
`ImplementedReturnTypeMismatch - The inherited return type 'list{'motor', 'brakes', 'wheels'}' for StandardCar::getSystems is different to the implemented return type for PremiumCar::getsystems 'list{'motor', 'brakes', 'wheels', 'rear parking sensor'}'`
## Project settings ## Project settings
#### &lt;projectFiles&gt; #### &lt;projectFiles&gt;

View File

@ -3,16 +3,11 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="https://getpsalm.org/schema/config" xmlns="https://getpsalm.org/schema/config"
name="Psalm for Psalm" name="Psalm for Psalm"
useDocblockTypes="true"
errorLevel="1" errorLevel="1"
strictBinaryOperands="false"
rememberPropertyAssignmentsAfterCall="true"
checkForThrowsDocblock="false"
throwExceptionOnError="0" throwExceptionOnError="0"
findUnusedCode="true" findUnusedCode="true"
ensureArrayStringOffsetsExist="true" ensureArrayStringOffsetsExist="true"
ensureArrayIntOffsetsExist="true" ensureArrayIntOffsetsExist="true"
resolveFromConfigFile="true"
xsi:schemaLocation="https://getpsalm.org/schema/config config.xsd" xsi:schemaLocation="https://getpsalm.org/schema/config config.xsd"
limitMethodComplexity="true" limitMethodComplexity="true"
errorBaseline="psalm-baseline.xml" errorBaseline="psalm-baseline.xml"