mirror of
https://github.com/danog/psalm.git
synced 2024-12-03 10:07:52 +01:00
restrictReturnTypes configuration
This commit is contained in:
parent
8b05f2ead8
commit
f9e9aad990
@ -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
|
||||||
|
|
||||||
#### <projectFiles>
|
#### <projectFiles>
|
||||||
|
@ -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"
|
||||||
|
Loading…
Reference in New Issue
Block a user