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

Trim code snippets on both sides when comparing current issues against baseline

Should fix issue #5979

We could also trim code issues when writing to baseline, but I think
that's a minor BC break, so probably shouldn't happen until Psalm 9.
This commit is contained in:
Barney Laurance 2021-06-26 21:59:40 +01:00
parent 19cc4cb4ee
commit 0722401aaf
4 changed files with 58 additions and 3 deletions

View File

@ -19,6 +19,7 @@ use function phpversion;
use function preg_replace_callback;
use function str_replace;
use function strpos;
use function trim;
use function usort;
use const LIBXML_NOBLANKS;
@ -115,7 +116,7 @@ class ErrorBaseline
$codeSamples = $issue->getElementsByTagName('code');
foreach ($codeSamples as $codeSample) {
$files[$fileName][$issueType]['s'][] = $codeSample->textContent;
$files[$fileName][$issueType]['s'][] = trim($codeSample->textContent);
}
}
}
@ -273,6 +274,10 @@ class ErrorBaseline
foreach ($existingIssueType['s'] as $selection) {
$codeNode = $baselineDoc->createElement('code');
/** @todo in major version release (e.g. 5.0.0) replace $selection with trim($selection)
* This will be a minor BC break as baselines generated will then not be compatible with Psalm
* versions from before PR https://github.com/vimeo/psalm/pull/6000
*/
$codeNode->textContent = $selection;
$issueNode->appendChild($codeNode);
}

View File

@ -2,6 +2,8 @@
namespace Psalm\Internal\Analyzer;
use function trim;
class IssueData
{
/**
@ -154,7 +156,7 @@ class IssueData
$this->file_name = $file_name;
$this->file_path = $file_path;
$this->snippet = $snippet;
$this->selected_text = $selected_text;
$this->selected_text = trim($selected_text);
$this->from = $from;
$this->to = $to;
$this->snippet_from = $snippet_from;

View File

@ -67,6 +67,34 @@ class ErrorBaselineTest extends TestCase
);
}
public function testLoadShouldIgnoreLineEndingsInIssueSnippet(): void
{
$baselineFilePath = 'baseline.xml';
$this->fileProvider->fileExists($baselineFilePath)->willReturn(true);
$this->fileProvider->getContents($baselineFilePath)->willReturn(
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<files>
<file src=\"sample/sample-file.php\">
<MixedAssignment occurrences=\"1\">
<code>foo\r</code>
</MixedAssignment>
</file>
</files>"
);
$expectedParsedBaseline = [
'sample/sample-file.php' => [
'MixedAssignment' => ['o' => 1, 's' => ['foo']],
],
];
$this->assertSame(
$expectedParsedBaseline,
ErrorBaseline::read($this->fileProvider->reveal(), $baselineFilePath)
);
}
/**
* @return void
*/

View File

@ -54,11 +54,31 @@ class IssueBufferTest extends TestCase
0,
0
)
]
],
'/path/three.php' => [
new \Psalm\Internal\Analyzer\IssueData(
"error",
0,
0,
"MissingPropertyType",
'Message',
"three.php",
"/path/three.php",
"snippet-3-has-carriage-return" . "\r",
"snippet-3-has-carriage-return" . "\r",
0,
0,
0,
0,
0,
0
)
],
]);
$baseline = [
'one.php' => ['MissingPropertyType' => ['o' => 1, 's' => ['snippet-1']] ],
'two.php' => ['MissingPropertyType' => ['o' => 1, 's' => ['snippet-2']] ],
'three.php' => ['MissingPropertyType' => ['o' => 1, 's' => ['snippet-3-has-carriage-return']] ],
];
$analyzer = $this->createMock(Analyzer::class);