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:
parent
19cc4cb4ee
commit
0722401aaf
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
*/
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user