1
0
mirror of https://github.com/danog/psalm.git synced 2024-11-30 04:39:00 +01:00

Don’t skip correct methods in non-diff mode

This commit is contained in:
Brown 2018-10-08 19:41:32 -04:00
parent 99eb903b0d
commit 6a2add9398
2 changed files with 38 additions and 18 deletions

View File

@ -979,7 +979,8 @@ class ClassChecker extends ClassLikeChecker
$trait_safe_method_id $trait_safe_method_id
); );
if ($is_method_correct if ($project_checker->diff_methods
&& $is_method_correct
&& !$class_context->collect_initializations && !$class_context->collect_initializations
&& !$class_context->collect_mutations && !$class_context->collect_mutations
&& !$is_fake && !$is_fake

View File

@ -21,7 +21,7 @@ class ParserCacheProvider
* *
* @var array<string, string>|null * @var array<string, string>|null
*/ */
protected $file_content_hashes = null; protected $file_content_hashes = [];
/** @var bool */ /** @var bool */
public $use_igbinary = false; public $use_igbinary = false;
@ -49,18 +49,20 @@ class ParserCacheProvider
$cache_location = $parser_cache_directory . DIRECTORY_SEPARATOR . $file_cache_key; $cache_location = $parser_cache_directory . DIRECTORY_SEPARATOR . $file_cache_key;
if (isset($file_content_hashes[$file_cache_key]) && if (isset($file_content_hashes[$file_cache_key])
$file_content_hash === $file_content_hashes[$file_cache_key] && && $file_content_hash === $file_content_hashes[$file_cache_key]
is_readable($cache_location) && && is_readable($cache_location)
filemtime($cache_location) > $file_modified_time && filemtime($cache_location) > $file_modified_time
) { ) {
if ($this->use_igbinary) { if ($this->use_igbinary) {
/** @var array<int, \PhpParser\Node\Stmt> */ /** @var array<int, \PhpParser\Node\Stmt> */
return igbinary_unserialize((string)file_get_contents($cache_location)) ?: null; $stmts = igbinary_unserialize((string)file_get_contents($cache_location));
} else {
/** @var array<int, \PhpParser\Node\Stmt> */
$stmts = unserialize((string)file_get_contents($cache_location));
} }
/** @var array<int, \PhpParser\Node\Stmt> */ return $stmts;
return unserialize((string)file_get_contents($cache_location)) ?: null;
} }
} }
@ -124,13 +126,26 @@ class ParserCacheProvider
$config = Config::getInstance(); $config = Config::getInstance();
$root_cache_directory = $config->getCacheDirectory(); $root_cache_directory = $config->getCacheDirectory();
if ($this->file_content_hashes === null || !$config->cache_file_hashes_during_run) { if (!$this->file_content_hashes || !$config->cache_file_hashes_during_run) {
$file_hashes_path = $root_cache_directory . DIRECTORY_SEPARATOR . self::FILE_HASHES; $file_hashes_path = $root_cache_directory . DIRECTORY_SEPARATOR . self::FILE_HASHES;
/** @var array<string, string> */
$this->file_content_hashes = if ($root_cache_directory && is_readable($file_hashes_path)) {
$root_cache_directory && is_readable($file_hashes_path) $hashes_encoded = (string) file_get_contents($file_hashes_path);
? json_decode((string)file_get_contents($file_hashes_path), true)
: []; if (!$hashes_encoded) {
return $this->file_content_hashes;
error_log('Unexpected value when loading from file content hashes');
}
$hashes_decoded = json_decode($hashes_encoded, true);
if (!is_array($hashes_decoded)) {
return $this->file_content_hashes;
error_log('Unexpected value ' . gettype($hashes_decoded));
}
$this->file_content_hashes = $hashes_decoded;
}
} }
return $this->file_content_hashes; return $this->file_content_hashes;
@ -171,11 +186,15 @@ class ParserCacheProvider
file_put_contents($cache_location, serialize($stmts)); file_put_contents($cache_location, serialize($stmts));
} }
$this->file_content_hashes[$file_cache_key] = $file_content_hash; $file_content_hashes = $this->getFileContentHashes();
$file_content_hashes[$file_cache_key] = $file_content_hash;
$file_hashes_path = $root_cache_directory . DIRECTORY_SEPARATOR . self::FILE_HASHES;
file_put_contents( file_put_contents(
$root_cache_directory . DIRECTORY_SEPARATOR . self::FILE_HASHES, $file_hashes_path,
json_encode($this->file_content_hashes) json_encode($file_content_hashes)
); );
} }
} }