1
0
mirror of https://github.com/danog/psalm.git synced 2024-11-26 20:34:47 +01:00

Get rid of legacy 7.3 logic

This commit is contained in:
Daniil Gentili 2023-10-26 17:18:33 +02:00
parent 2726ad4d6f
commit 07b45b8116
4 changed files with 6 additions and 74 deletions

View File

@ -72,7 +72,6 @@ use function file_exists;
use function fwrite; use function fwrite;
use function implode; use function implode;
use function in_array; use function in_array;
use function ini_get;
use function is_dir; use function is_dir;
use function is_file; use function is_file;
use function microtime; use function microtime;
@ -86,11 +85,8 @@ use function strpos;
use function strtolower; use function strtolower;
use function substr; use function substr;
use function usort; use function usort;
use function version_compare;
use const PHP_EOL; use const PHP_EOL;
use const PHP_OS;
use const PHP_VERSION;
use const PSALM_VERSION; use const PSALM_VERSION;
use const STDERR; use const STDERR;
@ -391,21 +387,13 @@ class ProjectAnalyzer
$this->file_reference_provider->loadReferenceCache(); $this->file_reference_provider->loadReferenceCache();
$this->codebase->enterServerMode(); $this->codebase->enterServerMode();
if (ini_get('pcre.jit') === '1' $cpu_count = self::getCpuCount();
&& PHP_OS === 'Darwin'
&& version_compare(PHP_VERSION, '7.3.0') >= 0
&& version_compare(PHP_VERSION, '7.4.0') < 0
) {
// do nothing
} else {
$cpu_count = self::getCpuCount();
// let's not go crazy // let's not go crazy
$usable_cpus = $cpu_count - 2; $usable_cpus = $cpu_count - 2;
if ($usable_cpus > 1) { if ($usable_cpus > 1) {
$this->threads = $usable_cpus; $this->threads = $usable_cpus;
}
} }
$server->logInfo("Initializing: Initialize Plugins..."); $server->logInfo("Initializing: Initialize Plugins...");
@ -1356,15 +1344,6 @@ class ProjectAnalyzer
return 1; return 1;
} }
// PHP 7.3 with JIT on OSX is screwed for multi-threads
if (ini_get('pcre.jit') === '1'
&& PHP_OS === 'Darwin'
&& version_compare(PHP_VERSION, '7.3.0') >= 0
&& version_compare(PHP_VERSION, '7.4.0') < 0
) {
return 1;
}
if (!extension_loaded('pcntl')) { if (!extension_loaded('pcntl')) {
// Psalm requires pcntl for multi-threads support // Psalm requires pcntl for multi-threads support
return 1; return 1;

View File

@ -25,9 +25,6 @@ use function array_merge;
use function in_array; use function in_array;
use function is_string; use function is_string;
use function strtolower; use function strtolower;
use function version_compare;
use const PHP_VERSION;
/** /**
* @internal * @internal
@ -267,8 +264,7 @@ class TryAnalyzer
$fq_catch_class, $fq_catch_class,
false, false,
false, false,
version_compare(PHP_VERSION, '7.0.0dev', '>=') strtolower($fq_catch_class) !== 'throwable'
&& strtolower($fq_catch_class) !== 'throwable'
&& $codebase->interfaceExists($fq_catch_class) && $codebase->interfaceExists($fq_catch_class)
&& !$codebase->interfaceExtends($fq_catch_class, 'Throwable') && !$codebase->interfaceExtends($fq_catch_class, 'Throwable')
? ['Throwable' => new TNamedObject('Throwable')] ? ['Throwable' => new TNamedObject('Throwable')]

View File

@ -13,7 +13,6 @@ use Psalm\Internal\CliUtils;
use Psalm\Internal\Codebase\ReferenceMapGenerator; use Psalm\Internal\Codebase\ReferenceMapGenerator;
use Psalm\Internal\Composer; use Psalm\Internal\Composer;
use Psalm\Internal\ErrorHandler; use Psalm\Internal\ErrorHandler;
use Psalm\Internal\Fork\Pool;
use Psalm\Internal\Fork\PsalmRestarter; use Psalm\Internal\Fork\PsalmRestarter;
use Psalm\Internal\IncludeCollector; use Psalm\Internal\IncludeCollector;
use Psalm\Internal\Provider\ClassLikeStorageCacheProvider; use Psalm\Internal\Provider\ClassLikeStorageCacheProvider;
@ -73,15 +72,12 @@ use function str_replace;
use function strlen; use function strlen;
use function strpos; use function strpos;
use function substr; use function substr;
use function version_compare;
use const DIRECTORY_SEPARATOR; use const DIRECTORY_SEPARATOR;
use const JSON_THROW_ON_ERROR; use const JSON_THROW_ON_ERROR;
use const LC_CTYPE; use const LC_CTYPE;
use const PHP_EOL; use const PHP_EOL;
use const PHP_OS;
use const PHP_URL_SCHEME; use const PHP_URL_SCHEME;
use const PHP_VERSION;
use const STDERR; use const STDERR;
// phpcs:disable PSR1.Files.SideEffects // phpcs:disable PSR1.Files.SideEffects
@ -269,8 +265,6 @@ final class Psalm
$progress = self::initProgress($options, $config); $progress = self::initProgress($options, $config);
self::emitMacPcreWarning($options, $threads);
self::restart($options, $threads, $progress); self::restart($options, $threads, $progress);
if (isset($options['debug-emitted-issues'])) { if (isset($options['debug-emitted-issues'])) {
@ -865,24 +859,6 @@ final class Psalm
return $current_dir; return $current_dir;
} }
private static function emitMacPcreWarning(array $options, int $threads): void
{
if (!isset($options['threads'])
&& !isset($options['debug'])
&& $threads === 1
&& ini_get('pcre.jit') === '1'
&& PHP_OS === 'Darwin'
&& version_compare(PHP_VERSION, '7.3.0') >= 0
&& version_compare(PHP_VERSION, '7.4.0') < 0
) {
echo(
'If you want to run Psalm as a language server, or run Psalm with' . PHP_EOL
. 'multiple processes (--threads=4), beware:' . PHP_EOL
. Pool::MAC_PCRE_MESSAGE . PHP_EOL . PHP_EOL
);
}
}
private static function restart(array $options, int $threads, Progress $progress): void private static function restart(array $options, int $threads, Progress $progress): void
{ {
$ini_handler = new PsalmRestarter('PSALM'); $ini_handler = new PsalmRestarter('PSALM');

View File

@ -48,11 +48,8 @@ use function strpos;
use function substr; use function substr;
use function unserialize; use function unserialize;
use function usleep; use function usleep;
use function version_compare;
use const PHP_EOL; use const PHP_EOL;
use const PHP_OS;
use const PHP_VERSION;
use const SIGALRM; use const SIGALRM;
use const SIGTERM; use const SIGTERM;
use const STREAM_IPPROTO_IP; use const STREAM_IPPROTO_IP;
@ -88,12 +85,6 @@ class Pool
/** @var ?Closure(mixed): void */ /** @var ?Closure(mixed): void */
private ?Closure $task_done_closure = null; private ?Closure $task_done_closure = null;
public const MAC_PCRE_MESSAGE = 'Mac users: pcre.jit is set to 1 in your PHP config.' . PHP_EOL
. 'The pcre jit is known to cause segfaults in PHP 7.3 on Macs, and Psalm' . PHP_EOL
. 'will not execute in threaded mode to avoid indecipherable errors.' . PHP_EOL
. 'Consider adding pcre.jit=0 to your PHP config, or upgrade to PHP 7.4.' . PHP_EOL
. 'Relevant info: https://bugs.php.net/bug.php?id=77260';
/** /**
* @param array<int, array<int, mixed>> $process_task_data_iterator * @param array<int, array<int, mixed>> $process_task_data_iterator
* An array of task data items to be divided up among the * An array of task data items to be divided up among the
@ -141,16 +132,6 @@ class Pool
exit(1); exit(1);
} }
if (ini_get('pcre.jit') === '1'
&& PHP_OS === 'Darwin'
&& version_compare(PHP_VERSION, '7.3.0') >= 0
&& version_compare(PHP_VERSION, '7.4.0') < 0
) {
die(
self::MAC_PCRE_MESSAGE . PHP_EOL
);
}
// We'll keep track of if this is the parent process // We'll keep track of if this is the parent process
// so that we can tell who will be doing the waiting // so that we can tell who will be doing the waiting
$is_parent = false; $is_parent = false;