From ce4c4b618330aa5cd2209091de314efa3804f288 Mon Sep 17 00:00:00 2001 From: Alexander T Date: Sat, 18 Jan 2020 00:24:46 +0200 Subject: [PATCH] fix(36023): fix crash in document highlight service (#36233) --- src/services/documentHighlights.ts | 8 ++++++-- .../fourslash/documentHighlightDefaultInKeyword.ts | 8 ++++++++ .../fourslash/documentHighlightDefaultInSwitch.ts | 13 +++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 tests/cases/fourslash/documentHighlightDefaultInKeyword.ts create mode 100644 tests/cases/fourslash/documentHighlightDefaultInSwitch.ts diff --git a/src/services/documentHighlights.ts b/src/services/documentHighlights.ts index d3a165f3b8d..37873914411 100644 --- a/src/services/documentHighlights.ts +++ b/src/services/documentHighlights.ts @@ -66,8 +66,12 @@ namespace ts { case SyntaxKind.SwitchKeyword: return useParent(node.parent, isSwitchStatement, getSwitchCaseDefaultOccurrences); case SyntaxKind.CaseKeyword: - case SyntaxKind.DefaultKeyword: - return useParent(node.parent.parent.parent, isSwitchStatement, getSwitchCaseDefaultOccurrences); + case SyntaxKind.DefaultKeyword: { + if (isDefaultClause(node.parent) || isCaseClause(node.parent)) { + return useParent(node.parent.parent.parent, isSwitchStatement, getSwitchCaseDefaultOccurrences); + } + return undefined; + } case SyntaxKind.BreakKeyword: case SyntaxKind.ContinueKeyword: return useParent(node.parent, isBreakOrContinueStatement, getBreakOrContinueStatementOccurrences); diff --git a/tests/cases/fourslash/documentHighlightDefaultInKeyword.ts b/tests/cases/fourslash/documentHighlightDefaultInKeyword.ts new file mode 100644 index 00000000000..98d45f88ceb --- /dev/null +++ b/tests/cases/fourslash/documentHighlightDefaultInKeyword.ts @@ -0,0 +1,8 @@ +/// + +////[|case|] +////[|default|] + +const [defaultKeywordRange, caseKeywordRange] = test.ranges(); +verify.noDocumentHighlights(defaultKeywordRange); +verify.noDocumentHighlights(caseKeywordRange); diff --git a/tests/cases/fourslash/documentHighlightDefaultInSwitch.ts b/tests/cases/fourslash/documentHighlightDefaultInSwitch.ts new file mode 100644 index 00000000000..e30366bcf27 --- /dev/null +++ b/tests/cases/fourslash/documentHighlightDefaultInSwitch.ts @@ -0,0 +1,13 @@ +/// + +////const foo = 'foo'; +////[|switch|] (foo) { +//// [|case|] 'foo': +//// [|break|]; +//// [|default|]: +//// [|break|]; +////} + +const [r0, r1, r2, r3, r4] = test.ranges(); +verify.documentHighlightsOf(r1, [r0, r1, r2, r3, r4]); +verify.documentHighlightsOf(r4, [r0, r1, r2, r3, r4]);