Skip to content

Commit de52113

Browse files
authored
Merge pull request microsoft#14132 from Microsoft/master-fix12952
[Master] Fix 12952 : throw exception when parsing conflict marker in JSX
2 parents 7b04f1d + e66c824 commit de52113

File tree

8 files changed

+56
-1
lines changed

8 files changed

+56
-1
lines changed

src/compiler/parser.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3863,6 +3863,9 @@ namespace ts {
38633863
parseErrorAtPosition(openingTagName.pos, openingTagName.end - openingTagName.pos, Diagnostics.JSX_element_0_has_no_corresponding_closing_tag, getTextOfNodeFromSourceText(sourceText, openingTagName));
38643864
break;
38653865
}
3866+
else if (token() === SyntaxKind.ConflictMarkerTrivia) {
3867+
break;
3868+
}
38663869
result.push(parseJsxChild());
38673870
}
38683871

src/compiler/scanner.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1716,7 +1716,14 @@ namespace ts {
17161716
while (pos < end) {
17171717
pos++;
17181718
char = text.charCodeAt(pos);
1719-
if ((char === CharacterCodes.openBrace) || (char === CharacterCodes.lessThan)) {
1719+
if (char === CharacterCodes.openBrace) {
1720+
break;
1721+
}
1722+
if (char === CharacterCodes.lessThan) {
1723+
if (isConflictMarkerTrivia(text, pos)) {
1724+
pos = scanConflictMarkerTrivia(text, pos, error);
1725+
return token = SyntaxKind.ConflictMarkerTrivia;
1726+
}
17201727
break;
17211728
}
17221729
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
tests/cases/compiler/conflictMarkerTrivia3.tsx(1,11): error TS17004: Cannot use JSX unless the '--jsx' flag is provided.
2+
tests/cases/compiler/conflictMarkerTrivia3.tsx(1,16): error TS1005: '</' expected.
3+
tests/cases/compiler/conflictMarkerTrivia3.tsx(2,1): error TS1185: Merge conflict marker encountered.
4+
5+
6+
==== tests/cases/compiler/conflictMarkerTrivia3.tsx (3 errors) ====
7+
const x = <div>
8+
~~~~~
9+
!!! error TS17004: Cannot use JSX unless the '--jsx' flag is provided.
10+
11+
<<<<<<< HEAD
12+
~~~~~~~~~~~~
13+
!!! error TS1005: '</' expected.
14+
~~~~~~~
15+
!!! error TS1185: Merge conflict marker encountered.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
//// [conflictMarkerTrivia3.tsx]
2+
const x = <div>
3+
<<<<<<< HEAD
4+
5+
//// [conflictMarkerTrivia3.js]
6+
var x = <div></>;
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
tests/cases/compiler/conflictMarkerTrivia4.ts(1,12): error TS2304: Cannot find name 'div'.
2+
tests/cases/compiler/conflictMarkerTrivia4.ts(2,1): error TS1185: Merge conflict marker encountered.
3+
tests/cases/compiler/conflictMarkerTrivia4.ts(2,13): error TS1109: Expression expected.
4+
5+
6+
==== tests/cases/compiler/conflictMarkerTrivia4.ts (3 errors) ====
7+
const x = <div>
8+
~~~
9+
!!! error TS2304: Cannot find name 'div'.
10+
<<<<<<< HEAD
11+
~~~~~~~
12+
!!! error TS1185: Merge conflict marker encountered.
13+
14+
!!! error TS1109: Expression expected.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
//// [conflictMarkerTrivia4.ts]
2+
const x = <div>
3+
<<<<<<< HEAD
4+
5+
//// [conflictMarkerTrivia4.js]
6+
var x = ;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
const x = <div>
2+
<<<<<<< HEAD
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
const x = <div>
2+
<<<<<<< HEAD

0 commit comments

Comments
 (0)