Skip to content

Commit

Permalink
Merge pull request #6000 from bdsl/ignore-line-endings-in-baseline
Browse files Browse the repository at this point in the history
  • Loading branch information
weirdan authored Jun 27, 2021
2 parents 74ec3af + 140cf01 commit 8c13752
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 3 deletions.
7 changes: 6 additions & 1 deletion src/Psalm/ErrorBaseline.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
use function preg_replace_callback;
use function str_replace;
use function strpos;
use function trim;
use function usort;

use const LIBXML_NOBLANKS;
Expand Down Expand Up @@ -115,7 +116,7 @@ public static function read(FileProvider $fileProvider, string $baselineFile): a
$codeSamples = $issue->getElementsByTagName('code');

foreach ($codeSamples as $codeSample) {
$files[$fileName][$issueType]['s'][] = $codeSample->textContent;
$files[$fileName][$issueType]['s'][] = trim($codeSample->textContent);
}
}
}
Expand Down Expand Up @@ -273,6 +274,10 @@ function (string $extension) : string {
foreach ($existingIssueType['s'] as $selection) {
$codeNode = $baselineDoc->createElement('code');

/** @todo in major version release (e.g. Psalm 5) 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);
}
Expand Down
3 changes: 2 additions & 1 deletion src/Psalm/IssueBuffer.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
use function sprintf;
use function str_repeat;
use function str_replace;
use function trim;
use function usort;

use const DEBUG_BACKTRACE_IGNORE_ARGS;
Expand Down Expand Up @@ -518,7 +519,7 @@ function (IssueData $d1, IssueData $d2) : int {
if (isset($issue_baseline[$file][$type]) && $issue_baseline[$file][$type]['o'] > 0) {
if ($issue_baseline[$file][$type]['o'] === count($issue_baseline[$file][$type]['s'])) {
$position = array_search(
$issue_data->selected_text,
trim($issue_data->selected_text),
$issue_baseline[$file][$type]['s'],
true
);
Expand Down
28 changes: 28 additions & 0 deletions tests/ErrorBaselineTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,34 @@ public function testLoadShouldParseXmlBaselineToPhpArray()
);
}

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
*/
Expand Down
22 changes: 21 additions & 1 deletion tests/IssueBufferTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,31 @@ public function testFinishDoesNotCorruptInternalState(): void
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);
Expand Down

0 comments on commit 8c13752

Please sign in to comment.