Skip to content

Commit

Permalink
Merge tag '5.24.0' into fix-core-function-flow
Browse files Browse the repository at this point in the history
  • Loading branch information
mmcev106 committed Jun 3, 2024
2 parents e9db96e + 462c80e commit 4c159f3
Show file tree
Hide file tree
Showing 98 changed files with 2,503 additions and 257 deletions.
1 change: 1 addition & 0 deletions config.xsd
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,7 @@
<xs:element name="MismatchingDocblockParamType" type="IssueHandlerType" minOccurs="0" />
<xs:element name="MismatchingDocblockPropertyType" type="IssueHandlerType" minOccurs="0" />
<xs:element name="MismatchingDocblockReturnType" type="IssueHandlerType" minOccurs="0" />
<xs:element name="MissingClassConstType" type="IssueHandlerType" minOccurs="0" />
<xs:element name="MissingClosureParamType" type="IssueHandlerType" minOccurs="0" />
<xs:element name="MissingClosureReturnType" type="IssueHandlerType" minOccurs="0" />
<xs:element name="MissingConstructor" type="IssueHandlerType" minOccurs="0" />
Expand Down
54 changes: 27 additions & 27 deletions dictionaries/CallMap.php
Original file line number Diff line number Diff line change
Expand Up @@ -1142,17 +1142,17 @@
'crash' => [''],
'crc32' => ['int', 'string'=>'string'],
'crypt' => ['string', 'string'=>'string', 'salt'=>'string'],
'ctype_alnum' => ['bool', 'text'=>'string|int'],
'ctype_alpha' => ['bool', 'text'=>'string|int'],
'ctype_cntrl' => ['bool', 'text'=>'string|int'],
'ctype_digit' => ['bool', 'text'=>'string|int'],
'ctype_graph' => ['bool', 'text'=>'string|int'],
'ctype_lower' => ['bool', 'text'=>'string|int'],
'ctype_print' => ['bool', 'text'=>'string|int'],
'ctype_punct' => ['bool', 'text'=>'string|int'],
'ctype_space' => ['bool', 'text'=>'string|int'],
'ctype_upper' => ['bool', 'text'=>'string|int'],
'ctype_xdigit' => ['bool', 'text'=>'string|int'],
'ctype_alnum' => ['bool', 'text'=>'string'],
'ctype_alpha' => ['bool', 'text'=>'string'],
'ctype_cntrl' => ['bool', 'text'=>'string'],
'ctype_digit' => ['bool', 'text'=>'string'],
'ctype_graph' => ['bool', 'text'=>'string'],
'ctype_lower' => ['bool', 'text'=>'string'],
'ctype_print' => ['bool', 'text'=>'string'],
'ctype_punct' => ['bool', 'text'=>'string'],
'ctype_space' => ['bool', 'text'=>'string'],
'ctype_upper' => ['bool', 'text'=>'string'],
'ctype_xdigit' => ['bool', 'text'=>'string'],
'cubrid_affected_rows' => ['int', 'req_identifier='=>''],
'cubrid_bind' => ['bool', 'req_identifier'=>'resource', 'bind_param'=>'int', 'bind_value'=>'mixed', 'bind_value_type='=>'string'],
'cubrid_client_encoding' => ['string', 'conn_identifier='=>''],
Expand Down Expand Up @@ -1293,7 +1293,7 @@
'CURLFile::setMimeType' => ['void', 'mime_type'=>'string'],
'CURLFile::setPostFilename' => ['void', 'posted_filename'=>'string'],
'CURLStringFile::__construct' => ['void', 'data'=>'string', 'postname'=>'string', 'mime='=>'string'],
'current' => ['mixed|false', 'array'=>'array|object'],
'current' => ['mixed|false', 'array'=>'array'],
'cyrus_authenticate' => ['void', 'connection'=>'resource', 'mechlist='=>'string', 'service='=>'string', 'user='=>'string', 'minssf='=>'int', 'maxssf='=>'int', 'authname='=>'string', 'password='=>'string'],
'cyrus_bind' => ['bool', 'connection'=>'resource', 'callbacks'=>'array'],
'cyrus_close' => ['bool', 'connection'=>'resource'],
Expand Down Expand Up @@ -3269,7 +3269,7 @@
'get_call_stack' => [''],
'get_called_class' => ['class-string'],
'get_cfg_var' => ['string|false', 'option'=>'string'],
'get_class' => ['class-string', 'object='=>'object'],
'get_class' => ['class-string', 'object'=>'object'],
'get_class_methods' => ['list<non-falsy-string>', 'object_or_class'=>'object|class-string'],
'get_class_vars' => ['array<non-falsy-string,mixed>', 'class'=>'string'],
'get_current_user' => ['string'],
Expand All @@ -3290,7 +3290,7 @@
'get_magic_quotes_runtime' => ['int|false'],
'get_meta_tags' => ['array', 'filename'=>'string', 'use_include_path='=>'bool'],
'get_object_vars' => ['array<string,mixed>', 'object'=>'object'],
'get_parent_class' => ['class-string|false', 'object_or_class='=>'object|class-string'],
'get_parent_class' => ['class-string|false', 'object_or_class'=>'object|class-string'],
'get_required_files' => ['list<string>'],
'get_resource_id' => ['int', 'resource'=>'resource'],
'get_resource_type' => ['string', 'resource'=>'resource'],
Expand All @@ -3307,7 +3307,7 @@
'getimagesize' => ['array{0:int, 1: int, 2: int, 3: string, mime: string, channels?: 3|4, bits?: int}|false', 'filename'=>'string', '&w_image_info='=>'array'],
'getimagesizefromstring' => ['array{0:int, 1: int, 2: int, 3: string, mime: string, channels?: 3|4, bits?: int}|false', 'string'=>'string', '&w_image_info='=>'array'],
'getlastmod' => ['int|false'],
'getmxrr' => ['bool', 'hostname'=>'string', '&w_hosts'=>'array', '&w_weights='=>'array'],
'getmxrr' => ['bool', 'hostname'=>'string', '&w_hosts'=>'array<int, string>', '&w_weights='=>'array<int, int>'],
'getmygid' => ['int|false'],
'getmyinode' => ['int|false'],
'getmypid' => ['int|false'],
Expand Down Expand Up @@ -6198,7 +6198,7 @@
'kadm5_get_principals' => ['array', 'handle'=>'resource'],
'kadm5_init_with_password' => ['resource', 'admin_server'=>'string', 'realm'=>'string', 'principal'=>'string', 'password'=>'string'],
'kadm5_modify_principal' => ['bool', 'handle'=>'resource', 'principal'=>'string', 'options'=>'array'],
'key' => ['int|string|null', 'array'=>'array|object'],
'key' => ['int|string|null', 'array'=>'array'],
'key_exists' => ['bool', 'key'=>'string|int', 'array'=>'array'],
'krsort' => ['true', '&rw_array'=>'array', 'flags='=>'int'],
'ksort' => ['true', '&rw_array'=>'array', 'flags='=>'int'],
Expand Down Expand Up @@ -6598,7 +6598,7 @@
'mapObj::zoomScale' => ['int', 'nScaleDenom'=>'float', 'oPixelPos'=>'pointObj', 'nImageWidth'=>'int', 'nImageHeight'=>'int', 'oGeorefExt'=>'rectObj', 'oMaxGeorefExt'=>'rectObj'],
'max' => ['mixed', 'value'=>'non-empty-array'],
'max\'1' => ['mixed', 'value'=>'', 'values'=>'', '...args='=>''],
'mb_check_encoding' => ['bool', 'value='=>'array|string|null', 'encoding='=>'string|null'],
'mb_check_encoding' => ['bool', 'value'=>'array|string', 'encoding='=>'string|null'],
'mb_chr' => ['non-empty-string|false', 'codepoint'=>'int', 'encoding='=>'string|null'],
'mb_convert_case' => ['string', 'string'=>'string', 'mode'=>'int', 'encoding='=>'string|null'],
'mb_convert_encoding' => ['string|false', 'string'=>'string', 'to_encoding'=>'string', 'from_encoding='=>'array|string|null'],
Expand Down Expand Up @@ -8149,7 +8149,7 @@
'newrelic_set_appname' => ['bool', 'name'=>'string', 'license='=>'string', 'xmit='=>'bool'],
'newrelic_set_user_attributes' => ['bool', 'user'=>'string', 'account'=>'string', 'product'=>'string'],
'newrelic_start_transaction' => ['bool', 'appname'=>'string', 'license='=>'string'],
'next' => ['mixed', '&r_array'=>'array|object'],
'next' => ['mixed', '&r_array'=>'array'],
'ngettext' => ['string', 'singular'=>'string', 'plural'=>'string', 'count'=>'int'],
'nl2br' => ['string', 'string'=>'string', 'use_xhtml='=>'bool'],
'nl_langinfo' => ['string|false', 'item'=>'int'],
Expand Down Expand Up @@ -9429,7 +9429,7 @@
'preg_replace_callback_array\'1' => ['string[]|null', 'pattern'=>'array<string,callable(array):string>', 'subject'=>'string[]', 'limit='=>'int', '&w_count='=>'int', 'flags='=>'int'],
'preg_split' => ['list<string>|false', 'pattern'=>'string', 'subject'=>'string', 'limit'=>'int', 'flags='=>'null'],
'preg_split\'1' => ['list<string>|list<list<string|int>>|false', 'pattern'=>'string', 'subject'=>'string', 'limit='=>'int', 'flags='=>'int'],
'prev' => ['mixed', '&r_array'=>'array|object'],
'prev' => ['mixed', '&r_array'=>'array'],
'print' => ['int', 'arg'=>'string'],
'print_r' => ['string', 'value'=>'mixed'],
'print_r\'1' => ['true', 'value'=>'mixed', 'return='=>'bool'],
Expand Down Expand Up @@ -10699,7 +10699,7 @@
'register_tick_function' => ['bool', 'callback'=>'callable():void', '...args='=>'mixed'],
'rename' => ['bool', 'from'=>'string', 'to'=>'string', 'context='=>'resource'],
'rename_function' => ['bool', 'original_name'=>'string', 'new_name'=>'string'],
'reset' => ['mixed|false', '&r_array'=>'array|object'],
'reset' => ['mixed|false', '&r_array'=>'array'],
'ResourceBundle::__construct' => ['void', 'locale'=>'?string', 'bundle'=>'?string', 'fallback='=>'bool'],
'ResourceBundle::count' => ['int'],
'ResourceBundle::create' => ['?ResourceBundle', 'locale'=>'?string', 'bundle'=>'?string', 'fallback='=>'bool'],
Expand Down Expand Up @@ -11100,7 +11100,7 @@
'session_destroy' => ['bool'],
'session_encode' => ['string|false'],
'session_gc' => ['int|false'],
'session_get_cookie_params' => ['array'],
'session_get_cookie_params' => ['array{lifetime:?int,path:?string,domain:?string,secure:?bool,httponly:?bool,samesite:?string}'],
'session_id' => ['string|false', 'id='=>'?string'],
'session_is_registered' => ['bool', 'name'=>'string'],
'session_module_name' => ['string|false', 'module='=>'?string'],
Expand Down Expand Up @@ -12825,9 +12825,9 @@
'str_split' => ['list<non-empty-string>', 'string'=>'string', 'length='=>'positive-int'],
'str_starts_with' => ['bool', 'haystack'=>'string', 'needle'=>'string'],
'str_word_count' => ['array<int, string>|int', 'string'=>'string', 'format='=>'int', 'characters='=>'?string'],
'strcasecmp' => ['int', 'string1'=>'string', 'string2'=>'string'],
'strcasecmp' => ['int<-1,1>', 'string1'=>'string', 'string2'=>'string'],
'strchr' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool'],
'strcmp' => ['int', 'string1'=>'string', 'string2'=>'string'],
'strcmp' => ['int<-1,1>', 'string1'=>'string', 'string2'=>'string'],
'strcoll' => ['int', 'string1'=>'string', 'string2'=>'string'],
'strcspn' => ['int', 'string'=>'string', 'characters'=>'string', 'offset='=>'int', 'length='=>'?int'],
'stream_bucket_append' => ['void', 'brigade'=>'resource', 'bucket'=>'object'],
Expand Down Expand Up @@ -12910,10 +12910,10 @@
'stripslashes' => ['string', 'string'=>'string'],
'stristr' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool'],
'strlen' => ['0|positive-int', 'string'=>'string'],
'strnatcasecmp' => ['int', 'string1'=>'string', 'string2'=>'string'],
'strnatcmp' => ['int', 'string1'=>'string', 'string2'=>'string'],
'strncasecmp' => ['int', 'string1'=>'string', 'string2'=>'string', 'length'=>'int'],
'strncmp' => ['int', 'string1'=>'string', 'string2'=>'string', 'length'=>'int'],
'strnatcasecmp' => ['int<-1,1>', 'string1'=>'string', 'string2'=>'string'],
'strnatcmp' => ['int<-1,1>', 'string1'=>'string', 'string2'=>'string'],
'strncasecmp' => ['int<-1,1>', 'string1'=>'string', 'string2'=>'string', 'length'=>'positive-int|0'],
'strncmp' => ['int<-1,1>', 'string1'=>'string', 'string2'=>'string', 'length'=>'positive-int|0'],
'strpbrk' => ['string|false', 'string'=>'string', 'characters'=>'string'],
'strpos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int'],
'strptime' => ['array|false', 'timestamp'=>'string', 'format'=>'string'],
Expand Down
4 changes: 4 additions & 0 deletions dictionaries/CallMap_73_delta.php
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,10 @@
'old' => ['bool', 'directory'=>'string', 'permissions='=>'int', 'recursive='=>'bool', 'context='=>'resource'],
'new' => ['bool', 'directory'=>'string', 'permissions='=>'int', 'recursive='=>'bool', 'context='=>'null|resource'],
],
'session_get_cookie_params' => [
'old' => ['array{lifetime:?int,path:?string,domain:?string,secure:?bool,httponly:?bool}'],
'new' => ['array{lifetime:?int,path:?string,domain:?string,secure:?bool,httponly:?bool,samesite:?string}'],
]
],
'removed' => [
],
Expand Down
68 changes: 68 additions & 0 deletions dictionaries/CallMap_81_delta.php
Original file line number Diff line number Diff line change
Expand Up @@ -1211,6 +1211,74 @@
'old' => ['int|false', '&rw_read'=>'?resource[]', '&rw_write'=>'?resource[]', '&rw_except'=>'?resource[]', 'seconds'=>'?int', 'microseconds='=>'int'],
'new' => ['int|false', '&rw_read'=>'?resource[]', '&rw_write'=>'?resource[]', '&rw_except'=>'?resource[]', 'seconds'=>'?int', 'microseconds='=>'?int'],
],
'mb_check_encoding' => [
'old' => ['bool', 'value='=>'array|string|null', 'encoding='=>'string|null'],
'new' => ['bool', 'value'=>'array|string', 'encoding='=>'string|null'],
],
'ctype_alnum' => [
'old' => ['bool', 'text'=>'string|int'],
'new' => ['bool', 'text'=>'string'],
],
'ctype_alpha' => [
'old' => ['bool', 'text'=>'string|int'],
'new' => ['bool', 'text'=>'string'],
],
'ctype_cntrl' => [
'old' => ['bool', 'text'=>'string|int'],
'new' => ['bool', 'text'=>'string'],
],
'ctype_digit' => [
'old' => ['bool', 'text'=>'string|int'],
'new' => ['bool', 'text'=>'string'],
],
'ctype_graph' => [
'old' => ['bool', 'text'=>'string|int'],
'new' => ['bool', 'text'=>'string'],
],
'ctype_lower' => [
'old' => ['bool', 'text'=>'string|int'],
'new' => ['bool', 'text'=>'string'],
],
'ctype_print' => [
'old' => ['bool', 'text'=>'string|int'],
'new' => ['bool', 'text'=>'string'],
],
'ctype_punct' => [
'old' => ['bool', 'text'=>'string|int'],
'new' => ['bool', 'text'=>'string'],
],
'ctype_space' => [
'old' => ['bool', 'text'=>'string|int'],
'new' => ['bool', 'text'=>'string'],
],
'ctype_upper' => [
'old' => ['bool', 'text'=>'string|int'],
'new' => ['bool', 'text'=>'string'],
],
'ctype_xdigit' => [
'old' => ['bool', 'text'=>'string|int'],
'new' => ['bool', 'text'=>'string'],
],
'key' => [
'old' => ['int|string|null', 'array'=>'array|object'],
'new' => ['int|string|null', 'array'=>'array'],
],
'current' => [
'old' => ['mixed|false', 'array'=>'array|object'],
'new' => ['mixed|false', 'array'=>'array'],
],
'next' => [
'old' => ['mixed', '&r_array'=>'array|object'],
'new' => ['mixed', '&r_array'=>'array'],
],
'prev' => [
'old' => ['mixed', '&r_array'=>'array|object'],
'new' => ['mixed', '&r_array'=>'array'],
],
'reset' => [
'old' => ['mixed|false', '&r_array'=>'array|object'],
'new' => ['mixed|false', '&r_array'=>'array'],
],
],

'removed' => [
Expand Down
24 changes: 24 additions & 0 deletions dictionaries/CallMap_82_delta.php
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,30 @@
'old' => ['array|string|int|false', 'type='=>'string'],
'new' => ['array|string|int|false|null', 'type='=>'string'],
],
'strcmp' => [
'old' => ['int', 'string1' => 'string', 'string2' => 'string'],
'new' => ['int<-1,1>', 'string1' => 'string', 'string2' => 'string'],
],
'strcasecmp' => [
'old' => ['int', 'string1' => 'string', 'string2' => 'string'],
'new' => ['int<-1,1>', 'string1' => 'string', 'string2' => 'string'],
],
'strnatcasecmp' => [
'old' => ['int', 'string1' => 'string', 'string2' => 'string'],
'new' => ['int<-1,1>', 'string1' => 'string', 'string2' => 'string'],
],
'strnatcmp' => [
'old' => ['int', 'string1' => 'string', 'string2' => 'string'],
'new' => ['int<-1,1>', 'string1' => 'string', 'string2' => 'string'],
],
'strncmp' => [
'old' => ['int', 'string1'=>'string', 'string2'=>'string', 'length'=>'int'],
'new' => ['int<-1,1>', 'string1' => 'string', 'string2' => 'string', 'length'=>'positive-int|0'],
],
'strncasecmp' => [
'old' => ['int', 'string1'=>'string', 'string2'=>'string', 'length'=>'int'],
'new' => ['int<-1,1>', 'string1' => 'string', 'string2' => 'string', 'length'=>'positive-int|0'],
],
],

'removed' => [
Expand Down
8 changes: 8 additions & 0 deletions dictionaries/CallMap_83_delta.php
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,14 @@
'old' => ['string|false', 'haystack'=>'string', 'needle'=>'string'],
'new' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool'],
],
'get_class' => [
'old' => ['class-string', 'object='=>'object'],
'new' => ['class-string', 'object'=>'object'],
],
'get_parent_class' => [
'old' => ['class-string|false', 'object_or_class='=>'object|class-string'],
'new' => ['class-string|false', 'object_or_class'=>'object|class-string'],
],
],

'removed' => [
Expand Down
4 changes: 2 additions & 2 deletions dictionaries/CallMap_historical.php
Original file line number Diff line number Diff line change
Expand Up @@ -10671,7 +10671,7 @@
'getimagesize' => ['array{0:int, 1: int, 2: int, 3: string, mime: string, channels?: 3|4, bits?: int}|false', 'filename'=>'string', '&w_image_info='=>'array'],
'getimagesizefromstring' => ['array{0:int, 1: int, 2: int, 3: string, mime: string, channels?: 3|4, bits?: int}|false', 'string'=>'string', '&w_image_info='=>'array'],
'getlastmod' => ['int|false'],
'getmxrr' => ['bool', 'hostname'=>'string', '&w_hosts'=>'array', '&w_weights='=>'array'],
'getmxrr' => ['bool', 'hostname'=>'string', '&w_hosts'=>'array<int, string>', '&w_weights='=>'array<int, int>'],
'getmygid' => ['int|false'],
'getmyinode' => ['int|false'],
'getmypid' => ['int|false'],
Expand Down Expand Up @@ -13840,7 +13840,7 @@
'session_decode' => ['bool', 'data'=>'string'],
'session_destroy' => ['bool'],
'session_encode' => ['string|false'],
'session_get_cookie_params' => ['array'],
'session_get_cookie_params' => ['array{lifetime:?int,path:?string,domain:?string,secure:?bool,httponly:?bool}'],
'session_id' => ['string|false', 'id='=>'string'],
'session_is_registered' => ['bool', 'name'=>'string'],
'session_module_name' => ['string|false', 'module='=>'string'],
Expand Down
5 changes: 5 additions & 0 deletions dictionaries/ImpureFunctionsList.php
Original file line number Diff line number Diff line change
Expand Up @@ -254,4 +254,9 @@
'openssl_pkcs12_export_to_file' => true,
'openssl_pkey_export_to_file' => true,
'openssl_x509_export_to_file' => true,
// xml
'xml_parser_set_option' => true,
'xml_parser_free' => true,
// mail
'mail' => true,
];
40 changes: 35 additions & 5 deletions docs/annotating_code/supported_annotations.md
Original file line number Diff line number Diff line change
Expand Up @@ -252,9 +252,10 @@ $b = $a->bar(); // this call fails

### `@psalm-internal`

Used to mark a class, property or function as internal to a given namespace. Psalm treats this slightly differently to
the PHPDoc `@internal` tag. For `@internal`, an issue is raised if the calling code is in a namespace completely
unrelated to the namespace of the calling code, i.e. not sharing the first element of the namespace.
Used to mark a class, property or function as internal to a given namespace or class or even method.
Psalm treats this slightly differently to the PHPDoc `@internal` tag. For `@internal`,
an issue is raised if the calling code is in a namespace completely unrelated to the namespace of the calling code,
i.e. not sharing the first element of the namespace.

In contrast for `@psalm-internal`, the docblock line must specify a namespace. An issue is raised if the calling code
is not within the given namespace.
Expand All @@ -272,15 +273,44 @@ namespace A\B {
namespace A\B\C {
class Bat {
public function batBat(): void {
$a = new \A\B\Foo(); // this is fine
$a = new \A\B\Foo(); // this is fine
}
}
}

namespace A {
class B {
public function batBat(): void {
$a = new \A\B\Foo(); // this is fine
}
}
}

namespace A\C {
class Bat {
public function batBat(): void {
$a = new \A\B\Foo(); // error
$a = new \A\B\Foo(); // error
}
}
}

namespace X {
class Foo {
/**
* @psalm-internal Y\Bat::batBat
*/
public static function barBar(): void {
}
}
}

namespace Y {
class Bat {
public function batBat() : void {
\X\Foo::barBar(); // this is fine
}
public function fooFoo(): void {
\X\Foo::barBar(); // error
}
}
}
Expand Down
1 change: 1 addition & 0 deletions docs/running_psalm/error_levels.md
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,7 @@ Level 5 and above allows a more non-verifiable code, and higher levels are even
- [InvalidDocblockParamName](issues/InvalidDocblockParamName.md)
- [InvalidFalsableReturnType](issues/InvalidFalsableReturnType.md)
- [InvalidStringClass](issues/InvalidStringClass.md)
- [MissingClassConstType](issues/MissingClassConstType.md)
- [MissingClosureParamType](issues/MissingClosureParamType.md)
- [MissingClosureReturnType](issues/MissingClosureReturnType.md)
- [MissingConstructor](issues/MissingConstructor.md)
Expand Down
1 change: 1 addition & 0 deletions docs/running_psalm/issues.md
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@
- [MismatchingDocblockParamType](issues/MismatchingDocblockParamType.md)
- [MismatchingDocblockPropertyType](issues/MismatchingDocblockPropertyType.md)
- [MismatchingDocblockReturnType](issues/MismatchingDocblockReturnType.md)
- [MissingClassConstType](issues/MissingClassConstType.md)
- [MissingClosureParamType](issues/MissingClosureParamType.md)
- [MissingClosureReturnType](issues/MissingClosureReturnType.md)
- [MissingConstructor](issues/MissingConstructor.md)
Expand Down
2 changes: 1 addition & 1 deletion docs/running_psalm/issues/ConstructorSignatureMismatch.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Emitted when a constructor parameter differs from a parent constructor parameter
* @psalm-consistent-constructor
*/
class A {
public function __construct(int $i) {}
public function __construct(int $s) {}
}
class B extends A {
public function __construct(string $s) {}
Expand Down
Loading

0 comments on commit 4c159f3

Please sign in to comment.