mirror of
https://github.com/danog/psalm.git
synced 2024-11-27 04:45:20 +01:00
Fix #4410 - use better path normalisation
This commit is contained in:
parent
41e073dc05
commit
6ceedb0916
@ -85,6 +85,11 @@ use const LIBXML_NONET;
|
|||||||
use const PHP_EOL;
|
use const PHP_EOL;
|
||||||
use const SCANDIR_SORT_NONE;
|
use const SCANDIR_SORT_NONE;
|
||||||
use function array_map;
|
use function array_map;
|
||||||
|
use function rtrim;
|
||||||
|
use function str_replace;
|
||||||
|
use function array_shift;
|
||||||
|
use function array_pad;
|
||||||
|
use function implode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @psalm-suppress PropertyNotSetInConstructor
|
* @psalm-suppress PropertyNotSetInConstructor
|
||||||
@ -1295,9 +1300,38 @@ class Config
|
|||||||
return $fq_class_name;
|
return $fq_class_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function shortenFileName(string $file_name): string
|
public function shortenFileName(string $to): string
|
||||||
{
|
{
|
||||||
return preg_replace('/^' . preg_quote($this->base_dir, '/') . '/', '', $file_name);
|
$from = $this->base_dir;
|
||||||
|
|
||||||
|
// some compatibility fixes for Windows paths
|
||||||
|
$from = is_dir($from) ? rtrim($from, '\/') . '/' : $from;
|
||||||
|
$to = is_dir($to) ? rtrim($to, '\/') . '/' : $to;
|
||||||
|
$from = str_replace('\\', '/', $from);
|
||||||
|
$to = str_replace('\\', '/', $to);
|
||||||
|
|
||||||
|
$from = explode('/', $from);
|
||||||
|
$to = explode('/', $to);
|
||||||
|
$relPath = $to;
|
||||||
|
|
||||||
|
foreach ($from as $depth => $dir) {
|
||||||
|
// find first non-matching dir
|
||||||
|
if ($dir === $to[$depth]) {
|
||||||
|
// ignore this directory
|
||||||
|
array_shift($relPath);
|
||||||
|
} else {
|
||||||
|
// get number of remaining dirs to $from
|
||||||
|
$remaining = count($from) - $depth;
|
||||||
|
if ($remaining > 1) {
|
||||||
|
// add traversals up to first matching dir
|
||||||
|
$padLength = (count($relPath) + $remaining - 1) * -1;
|
||||||
|
$relPath = array_pad($relPath, $padLength, '..');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return implode('/', $relPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function reportIssueInFile(string $issue_type, string $file_path): bool
|
public function reportIssueInFile(string $issue_type, string $file_path): bool
|
||||||
|
Loading…
Reference in New Issue
Block a user