Skip to content

Commit 8b9ad1e

Browse files
authored
Merge pull request #9566 from DnwK98/handle-different-line-endings
Handle different line endings from baseline.
2 parents e2abc3e + 793b8d3 commit 8b9ad1e

5 files changed

Lines changed: 54 additions & 3 deletions

File tree

src/Psalm/ErrorBaseline.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ public static function read(FileProvider $fileProvider, string $baselineFile): a
118118

119119
foreach ($codeSamples as $codeSample) {
120120
$files[$fileName][$issueType]['o'] += 1;
121-
$files[$fileName][$issueType]['s'][] = trim($codeSample->textContent);
121+
$files[$fileName][$issueType]['s'][] = str_replace("\r\n", "\n", trim($codeSample->textContent));
122122
}
123123

124124
// TODO: Remove in Psalm 6

src/Psalm/Internal/LanguageServer/LanguageServer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -782,7 +782,7 @@ function (IssueData $issue_data): Diagnostic {
782782
if ($issue_baseline[$file][$type]['o'] === count($issue_baseline[$file][$type]['s'])) {
783783
/** @psalm-suppress MixedArrayAccess, MixedAssignment */
784784
$position = array_search(
785-
trim($issue_data->selected_text),
785+
str_replace("\r\n", "\n", trim($issue_data->selected_text)),
786786
$issue_baseline[$file][$type]['s'],
787787
true,
788788
);

src/Psalm/IssueBuffer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -592,7 +592,7 @@ public static function finish(
592592
if (isset($issue_baseline[$file][$type]) && $issue_baseline[$file][$type]['o'] > 0) {
593593
if ($issue_baseline[$file][$type]['o'] === count($issue_baseline[$file][$type]['s'])) {
594594
$position = array_search(
595-
trim($issue_data->selected_text),
595+
str_replace("\r\n", "\n", trim($issue_data->selected_text)),
596596
$issue_baseline[$file][$type]['s'],
597597
true,
598598
);

tests/ErrorBaselineTest.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,37 @@ public function testLoadShouldIgnoreLineEndingsInIssueSnippet(): void
9898
);
9999
}
100100

101+
public function testShouldIgnoreCarriageReturnInMultilineSnippets(): void
102+
{
103+
$baselineFilePath = 'baseline.xml';
104+
105+
$this->fileProvider->allows()->fileExists($baselineFilePath)->andReturns(true);
106+
$this->fileProvider->allows()->getContents($baselineFilePath)->andReturns(
107+
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>
108+
<files>
109+
<file src=\"sample/sample-file.php\">
110+
<MixedAssignment>
111+
<code>
112+
foo&#13;
113+
bar&#13;
114+
</code>
115+
</MixedAssignment>
116+
</file>
117+
</files>",
118+
);
119+
120+
$expectedParsedBaseline = [
121+
'sample/sample-file.php' => [
122+
'MixedAssignment' => ['o' => 1, 's' => ["foo\nbar"]],
123+
],
124+
];
125+
126+
$this->assertSame(
127+
$expectedParsedBaseline,
128+
ErrorBaseline::read($this->fileProvider, $baselineFilePath),
129+
);
130+
}
131+
101132
public function testLoadShouldThrowExceptionWhenFilesAreNotDefinedInBaselineFile(): void
102133
{
103134
$this->expectException(ConfigException::class);

tests/IssueBufferTest.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,31 @@ public function testFinishDoesNotCorruptInternalState(): void
7979
0,
8080
),
8181
],
82+
'/path/four.php' => [
83+
new IssueData(
84+
"error",
85+
0,
86+
0,
87+
"MissingPropertyType",
88+
'Message',
89+
"four.php",
90+
"/path/four.php",
91+
"snippet-4-multiline\r\nwith-carriage-return\r",
92+
"snippet-4-multiline\r\nwith-carriage-return\r",
93+
0,
94+
0,
95+
0,
96+
0,
97+
0,
98+
0,
99+
),
100+
],
82101
]);
83102
$baseline = [
84103
'one.php' => ['MissingPropertyType' => ['o' => 1, 's' => ['snippet-1']] ],
85104
'two.php' => ['MissingPropertyType' => ['o' => 1, 's' => ['snippet-2']] ],
86105
'three.php' => ['MissingPropertyType' => ['o' => 1, 's' => ['snippet-3-has-carriage-return']] ],
106+
'four.php' => ['MissingPropertyType' => ['o' => 1, 's' => ["snippet-4-multiline\nwith-carriage-return"]] ],
87107
];
88108

89109
$analyzer = $this->createMock(Analyzer::class);

0 commit comments

Comments
 (0)