Skip to content

Commit

Permalink
Allow PHPStan 2.x
Browse files Browse the repository at this point in the history
Co-authored-by: Jordi Boggiano <[email protected]>
  • Loading branch information
SchmidtClaudia and Seldaek authored Nov 12, 2024
1 parent 2227127 commit ebb81df
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 22 deletions.
4 changes: 2 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@
},
"require-dev": {
"phpunit/phpunit": "^8 || ^9",
"phpstan/phpstan": "^1.11.10",
"phpstan/phpstan-strict-rules": "^1.1"
"phpstan/phpstan": "^1.12 || ^2",
"phpstan/phpstan-strict-rules": "^1 || ^2"
},
"conflict": {
"phpstan/phpstan": "<1.11.10"
Expand Down
72 changes: 52 additions & 20 deletions phpstan-baseline.neon
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ parameters:
path: src/Preg.php

-
message: "#^Creating new PHPStan\\\\Reflection\\\\Native\\\\NativeParameterReflection is not covered by backward compatibility promise\\. The class might change in a minor PHPStan version\\.$#"
message: '#^Creating new PHPStan\\Reflection\\Native\\NativeParameterReflection is not covered by backward compatibility promise\. The class might change in a minor PHPStan version\.$#'
identifier: phpstanApi.constructor
count: 1
path: src/PHPStan/PregReplaceCallbackClosureTypeExtension.php

Expand All @@ -20,102 +21,133 @@ parameters:
count: 2
path: src/Preg.php

-
message: '#^Parameter \#2 \$callback of function preg_replace_callback expects callable\(array\<string\>\)\: string, \(callable\(array\<int\|string, array\{string\|null, int\<\-1, max\>\}\>\)\: string\)\|\(callable\(array\<int\|string, string\|null\>\)\: string\) given\.$#'
identifier: argument.type
count: 2
path: src/Preg.php

-
message: "#^Parameter &\\$matches @param\\-out type of method Composer\\\\Pcre\\\\Preg\\:\\:matchAllWithOffsets\\(\\) expects array\\<int\\|string, list\\<array\\{string\\|null, int\\<\\-1, max\\>\\}\\>\\>, array given\\.$#"
count: 1
path: src/Preg.php

-
message: "#^Parameter &\\$matches @param\\-out type of method Composer\\\\Pcre\\\\Preg\\:\\:matchWithOffsets\\(\\) expects array\\<int\\|string, array\\{string\\|null, int\\<\\-1, max\\>\\}\\>, array\\<int\\|string, string\\|null\\> given\\.$#"
message: '#^Parameter &\$matches @param\-out type of method Composer\\Pcre\\Preg\:\:matchAllWithOffsets\(\) expects array\<int\|string, list\<array\{string\|null, int\<\-1, max\>\}\>\>, array\<mixed\> given\.$#'
identifier: paramOut.type
count: 1
path: src/Preg.php

-
message: '#^Parameter &\$matches @param\-out type of method Composer\\Pcre\\Preg\:\:matchWithOffsets\(\) expects array\<int\|string, array\{string\|null, int\<\-1, max\>\}\>, array\<int\|string, string\|null\> given\.$#'
identifier: paramOut.type
count: 1
path: src/Preg.php

-
message: "#^Regex pattern is invalid\\: No ending matching delimiter '\\}' found$#"
message: '#^Regex pattern is invalid\: No ending matching delimiter ''\}'' found$#'
identifier: regexp.pattern
count: 2
path: tests/PregTests/GrepTest.php

-
message: "#^Regex pattern is invalid\\: No ending matching delimiter '\\}' found$#"
message: '#^Regex pattern is invalid\: No ending matching delimiter ''\}'' found$#'
identifier: regexp.pattern
count: 2
path: tests/PregTests/IsMatchAllTest.php

-
message: "#^Regex pattern is invalid\\: No ending matching delimiter '\\}' found$#"
message: '#^Regex pattern is invalid\: No ending matching delimiter ''\}'' found$#'
identifier: regexp.pattern
count: 2
path: tests/PregTests/IsMatchAllWithOffsetsTest.php

-
message: "#^Regex pattern is invalid\\: No ending matching delimiter '\\}' found$#"
message: '#^Regex pattern is invalid\: No ending matching delimiter ''\}'' found$#'
identifier: regexp.pattern
count: 2
path: tests/PregTests/IsMatchTest.php

-
message: "#^Regex pattern is invalid\\: No ending matching delimiter '\\}' found$#"
message: '#^Regex pattern is invalid\: No ending matching delimiter ''\}'' found$#'
identifier: regexp.pattern
count: 2
path: tests/PregTests/IsMatchWithOffsetsTest.php

-
message: "#^Regex pattern is invalid\\: No ending matching delimiter '\\}' found$#"
message: '#^Regex pattern is invalid\: No ending matching delimiter ''\}'' found$#'
identifier: regexp.pattern
count: 2
path: tests/PregTests/MatchAllTest.php

-
message: "#^Regex pattern is invalid\\: No ending matching delimiter '\\}' found$#"
message: '#^Regex pattern is invalid\: No ending matching delimiter ''\}'' found$#'
identifier: regexp.pattern
count: 2
path: tests/PregTests/MatchTest.php

-
message: "#^Regex pattern is invalid\\: No ending matching delimiter '\\}' found$#"
message: '#^Regex pattern is invalid\: No ending matching delimiter ''\}'' found$#'
identifier: regexp.pattern
count: 2
path: tests/PregTests/ReplaceCallbackArrayTest.php

-
message: "#^Regex pattern is invalid\\: No ending matching delimiter '\\}' found$#"
message: '#^Regex pattern is invalid\: No ending matching delimiter ''\}'' found$#'
identifier: regexp.pattern
count: 2
path: tests/PregTests/ReplaceCallbackTest.php

-
message: "#^Regex pattern is invalid\\: No ending matching delimiter '\\}' found$#"
message: '#^Regex pattern is invalid\: No ending matching delimiter ''\}'' found$#'
identifier: regexp.pattern
count: 2
path: tests/PregTests/ReplaceTest.php

-
message: "#^Regex pattern is invalid\\: No ending matching delimiter '\\}' found$#"
message: '#^Regex pattern is invalid\: No ending matching delimiter ''\}'' found$#'
identifier: regexp.pattern
count: 2
path: tests/PregTests/SplitTest.php

-
message: "#^Regex pattern is invalid\\: No ending matching delimiter '\\}' found$#"
message: '#^Regex pattern is invalid\: No ending matching delimiter ''\}'' found$#'
identifier: regexp.pattern
count: 2
path: tests/PregTests/SplitWithOffsetsTest.php

-
message: "#^Regex pattern is invalid\\: No ending matching delimiter '\\}' found$#"
message: '#^Regex pattern is invalid\: No ending matching delimiter ''\}'' found$#'
identifier: regexp.pattern
count: 2
path: tests/RegexTests/IsMatchTest.php

-
message: "#^Regex pattern is invalid\\: No ending matching delimiter '\\}' found$#"
message: '#^Regex pattern is invalid\: No ending matching delimiter ''\}'' found$#'
identifier: regexp.pattern
count: 2
path: tests/RegexTests/MatchAllTest.php

-
message: "#^Regex pattern is invalid\\: No ending matching delimiter '\\}' found$#"
message: '#^Regex pattern is invalid\: No ending matching delimiter ''\}'' found$#'
identifier: regexp.pattern
count: 2
path: tests/RegexTests/MatchTest.php

-
message: "#^Regex pattern is invalid\\: No ending matching delimiter '\\}' found$#"
message: '#^Regex pattern is invalid\: No ending matching delimiter ''\}'' found$#'
identifier: regexp.pattern
count: 2
path: tests/RegexTests/ReplaceCallbackArrayTest.php

-
message: "#^Regex pattern is invalid\\: No ending matching delimiter '\\}' found$#"
message: '#^Regex pattern is invalid\: No ending matching delimiter ''\}'' found$#'
identifier: regexp.pattern
count: 2
path: tests/RegexTests/ReplaceCallbackTest.php

-
message: "#^Regex pattern is invalid\\: No ending matching delimiter '\\}' found$#"
message: '#^Regex pattern is invalid\: No ending matching delimiter ''\}'' found$#'
identifier: regexp.pattern
count: 2
path: tests/RegexTests/ReplaceTest.php
16 changes: 16 additions & 0 deletions src/PHPStan/PregMatchTypeSpecifyingExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -93,10 +93,26 @@ public function specifyTypes(MethodReflection $methodReflection, StaticCall $nod
$context = $context->negate();
}

// @phpstan-ignore function.alreadyNarrowedType, function.impossibleType
if (method_exists('PHPStan\Analyser\SpecifiedTypes', 'setRootExpr')) {
// @phpstan-ignore method.notFound
$typeSpecifier = $this->typeSpecifier->create(
$matchesArg->value,
$matchedType,
$context,
// @phpstan-ignore argument.type
$scope
)->setRootExpr($node);

return $overwrite ? $typeSpecifier->setAlwaysOverwriteTypes() : $typeSpecifier;
}

// @phpstan-ignore arguments.count
return $this->typeSpecifier->create(
$matchesArg->value,
$matchedType,
$context,
// @phpstan-ignore argument.type
$overwrite,
$scope,
$node
Expand Down

0 comments on commit ebb81df

Please sign in to comment.