From ea01ad4cbdd84f3ccdf79e3843722c9d544211b5 Mon Sep 17 00:00:00 2001 From: Kanchalai Tanglertsampan Date: Thu, 16 Feb 2017 14:03:41 -0800 Subject: [PATCH 1/3] Check for conflict marker when trying to parse JSX child --- src/compiler/parser.ts | 3 +++ src/compiler/scanner.ts | 11 ++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index ebd4208832c..2aaf1cb4124 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3862,6 +3862,9 @@ namespace ts { parseErrorAtPosition(openingTagName.pos, openingTagName.end - openingTagName.pos, Diagnostics.JSX_element_0_has_no_corresponding_closing_tag, getTextOfNodeFromSourceText(sourceText, openingTagName)); break; } + else if (token() === SyntaxKind.ConflictMarkerTrivia) { + break; + } result.push(parseJsxChild()); } diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index 52c75a37005..54cd191b43d 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -1716,9 +1716,18 @@ namespace ts { while (pos < end) { pos++; char = text.charCodeAt(pos); - if ((char === CharacterCodes.openBrace) || (char === CharacterCodes.lessThan)) { + if (char === CharacterCodes.openBrace) { break; } + if (char === CharacterCodes.lessThan) { + if (isConflictMarkerTrivia(text, pos)) { + pos = scanConflictMarkerTrivia(text, pos, error); + return token = SyntaxKind.ConflictMarkerTrivia; + } + else { + break; + } + } } return token = SyntaxKind.JsxText; } From 8f79f9529f73cb34c75a39649650093ef34230e1 Mon Sep 17 00:00:00 2001 From: Kanchalai Tanglertsampan Date: Thu, 16 Feb 2017 14:03:59 -0800 Subject: [PATCH 2/3] Add tests and baselines --- .../reference/conflictMarkerTrivia3.errors.txt | 15 +++++++++++++++ .../baselines/reference/conflictMarkerTrivia3.js | 6 ++++++ .../reference/conflictMarkerTrivia4.errors.txt | 14 ++++++++++++++ .../baselines/reference/conflictMarkerTrivia4.js | 6 ++++++ tests/cases/compiler/conflictMarkerTrivia3.tsx | 2 ++ tests/cases/compiler/conflictMarkerTrivia4.ts | 2 ++ 6 files changed, 45 insertions(+) create mode 100644 tests/baselines/reference/conflictMarkerTrivia3.errors.txt create mode 100644 tests/baselines/reference/conflictMarkerTrivia3.js create mode 100644 tests/baselines/reference/conflictMarkerTrivia4.errors.txt create mode 100644 tests/baselines/reference/conflictMarkerTrivia4.js create mode 100644 tests/cases/compiler/conflictMarkerTrivia3.tsx create mode 100644 tests/cases/compiler/conflictMarkerTrivia4.ts diff --git a/tests/baselines/reference/conflictMarkerTrivia3.errors.txt b/tests/baselines/reference/conflictMarkerTrivia3.errors.txt new file mode 100644 index 00000000000..124201ce0ba --- /dev/null +++ b/tests/baselines/reference/conflictMarkerTrivia3.errors.txt @@ -0,0 +1,15 @@ +tests/cases/compiler/conflictMarkerTrivia3.tsx(1,11): error TS17004: Cannot use JSX unless the '--jsx' flag is provided. +tests/cases/compiler/conflictMarkerTrivia3.tsx(1,16): error TS1005: ' + ~~~~~ +!!! error TS17004: Cannot use JSX unless the '--jsx' flag is provided. + + <<<<<<< HEAD + ~~~~~~~~~~~~ +!!! error TS1005: ' +<<<<<<< HEAD + +//// [conflictMarkerTrivia3.js] +var x =
; diff --git a/tests/baselines/reference/conflictMarkerTrivia4.errors.txt b/tests/baselines/reference/conflictMarkerTrivia4.errors.txt new file mode 100644 index 00000000000..476dbbce6ce --- /dev/null +++ b/tests/baselines/reference/conflictMarkerTrivia4.errors.txt @@ -0,0 +1,14 @@ +tests/cases/compiler/conflictMarkerTrivia4.ts(1,12): error TS2304: Cannot find name 'div'. +tests/cases/compiler/conflictMarkerTrivia4.ts(2,1): error TS1185: Merge conflict marker encountered. +tests/cases/compiler/conflictMarkerTrivia4.ts(2,13): error TS1109: Expression expected. + + +==== tests/cases/compiler/conflictMarkerTrivia4.ts (3 errors) ==== + const x =
+ ~~~ +!!! error TS2304: Cannot find name 'div'. + <<<<<<< HEAD + ~~~~~~~ +!!! error TS1185: Merge conflict marker encountered. + +!!! error TS1109: Expression expected. \ No newline at end of file diff --git a/tests/baselines/reference/conflictMarkerTrivia4.js b/tests/baselines/reference/conflictMarkerTrivia4.js new file mode 100644 index 00000000000..945e82b2f2d --- /dev/null +++ b/tests/baselines/reference/conflictMarkerTrivia4.js @@ -0,0 +1,6 @@ +//// [conflictMarkerTrivia4.ts] +const x =
+<<<<<<< HEAD + +//// [conflictMarkerTrivia4.js] +var x = ; diff --git a/tests/cases/compiler/conflictMarkerTrivia3.tsx b/tests/cases/compiler/conflictMarkerTrivia3.tsx new file mode 100644 index 00000000000..21f83715ad0 --- /dev/null +++ b/tests/cases/compiler/conflictMarkerTrivia3.tsx @@ -0,0 +1,2 @@ +const x =
+<<<<<<< HEAD \ No newline at end of file diff --git a/tests/cases/compiler/conflictMarkerTrivia4.ts b/tests/cases/compiler/conflictMarkerTrivia4.ts new file mode 100644 index 00000000000..21f83715ad0 --- /dev/null +++ b/tests/cases/compiler/conflictMarkerTrivia4.ts @@ -0,0 +1,2 @@ +const x =
+<<<<<<< HEAD \ No newline at end of file From e66c824f31e01340af34e47417a224f8b9b721dd Mon Sep 17 00:00:00 2001 From: Kanchalai Tanglertsampan Date: Thu, 16 Feb 2017 14:07:27 -0800 Subject: [PATCH 3/3] Remove unnecessary else clause --- src/compiler/scanner.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index 54cd191b43d..82d75d2fa7c 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -1724,9 +1724,7 @@ namespace ts { pos = scanConflictMarkerTrivia(text, pos, error); return token = SyntaxKind.ConflictMarkerTrivia; } - else { - break; - } + break; } } return token = SyntaxKind.JsxText;