mirror of
https://github.com/danog/psalm.git
synced 2024-11-27 04:45:20 +01:00
Merge branch '5.x' into upstream-master
This commit is contained in:
commit
82a1806102
@ -568,8 +568,6 @@
|
||||
<file src="src/Psalm/Type/Reconciler.php">
|
||||
<PossiblyUndefinedIntArrayOffset>
|
||||
<code>$const_name</code>
|
||||
<code>$type[0]</code>
|
||||
<code>$type[0][0]</code>
|
||||
</PossiblyUndefinedIntArrayOffset>
|
||||
</file>
|
||||
<file src="src/Psalm/Type/TypeNode.php">
|
||||
|
@ -2238,6 +2238,10 @@ class Config
|
||||
$stubsDir . 'SPL.phpstub',
|
||||
];
|
||||
|
||||
if ($codebase->analysis_php_version_id >= 7_04_00) {
|
||||
$this->internal_stubs[] = $stubsDir . 'Php74.phpstub';
|
||||
}
|
||||
|
||||
if ($codebase->analysis_php_version_id >= 8_00_00) {
|
||||
$this->internal_stubs[] = $stubsDir . 'CoreGenericAttributes.phpstub';
|
||||
$this->internal_stubs[] = $stubsDir . 'Php80.phpstub';
|
||||
|
@ -200,6 +200,10 @@ class ProjectAnalyzer
|
||||
UnnecessaryVarAnnotation::class,
|
||||
];
|
||||
|
||||
private const PHP_VERSION_REGEX = '^(0|[1-9]\d*)\.(0|[1-9]\d*)(?:\..*)?$';
|
||||
|
||||
private const PHP_SUPPORTED_VERSIONS_REGEX = '^(5\.[456]|7\.[01234]|8\.[0123])(\..*)?$';
|
||||
|
||||
/**
|
||||
* @param array<ReportOptions> $generated_report_options
|
||||
*/
|
||||
@ -1179,8 +1183,16 @@ class ProjectAnalyzer
|
||||
*/
|
||||
public function setPhpVersion(string $version, string $source): void
|
||||
{
|
||||
if (!preg_match('/^(5\.[456]|7\.[01234]|8\.[012])(\..*)?$/', $version)) {
|
||||
throw new UnexpectedValueException('Expecting a version number in the format x.y');
|
||||
if (!preg_match('/' . self::PHP_VERSION_REGEX . '/', $version)) {
|
||||
throw new UnexpectedValueException('Expecting a version number in the format x.y or x.y.z');
|
||||
}
|
||||
|
||||
if (!preg_match('/' . self::PHP_SUPPORTED_VERSIONS_REGEX . '/', $version)) {
|
||||
throw new UnexpectedValueException(
|
||||
'Psalm supports PHP version ">=5.4". The specified version '
|
||||
. $version
|
||||
. " is either not supported or doesn't exist.",
|
||||
);
|
||||
}
|
||||
|
||||
[$php_major_version, $php_minor_version] = explode('.', $version);
|
||||
|
@ -12,6 +12,7 @@ use Psalm\Exception\ConfigNotFoundException;
|
||||
use Psalm\Internal\Analyzer\ProjectAnalyzer;
|
||||
use Psalm\Report;
|
||||
use RuntimeException;
|
||||
use UnexpectedValueException;
|
||||
|
||||
use function array_filter;
|
||||
use function array_key_exists;
|
||||
@ -485,7 +486,15 @@ final class CliUtils
|
||||
}
|
||||
|
||||
if ($version !== null && $source !== null) {
|
||||
$project_analyzer->setPhpVersion($version, $source);
|
||||
try {
|
||||
$project_analyzer->setPhpVersion($version, $source);
|
||||
} catch (UnexpectedValueException $e) {
|
||||
fwrite(
|
||||
STDERR,
|
||||
$e->getMessage() . PHP_EOL,
|
||||
);
|
||||
exit(2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -423,6 +423,10 @@ class Reconciler
|
||||
{
|
||||
foreach ($new_types as $nk => $type) {
|
||||
if (strpos($nk, '[') || strpos($nk, '->')) {
|
||||
$type = array_values($type);
|
||||
if (!isset($type[0][0])) {
|
||||
continue;
|
||||
}
|
||||
if ($type[0][0] instanceof IsEqualIsset
|
||||
|| $type[0][0] instanceof IsIsset
|
||||
|| $type[0][0] instanceof NonEmpty
|
||||
|
11
stubs/Php74.phpstub
Normal file
11
stubs/Php74.phpstub
Normal file
@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @psalm-pure
|
||||
*
|
||||
* @psalm-taint-escape html
|
||||
* @psalm-flow ($string) -> return
|
||||
*
|
||||
* @param null|string|array<array-key,string> $allowed_tags
|
||||
*/
|
||||
function strip_tags(string $string, null|string|array $allowed_tags = null) : string {}
|
Loading…
Reference in New Issue
Block a user