diff --git a/src/services/documentHighlights.ts b/src/services/documentHighlights.ts index ca4bb861c7d..bb64ee32685 100644 --- a/src/services/documentHighlights.ts +++ b/src/services/documentHighlights.ts @@ -302,12 +302,15 @@ namespace ts.DocumentHighlights { switch (container.kind) { case SyntaxKind.ModuleBlock: case SyntaxKind.SourceFile: + case SyntaxKind.Block: + case SyntaxKind.CaseClause: + case SyntaxKind.DefaultClause: // Container is either a class declaration or the declaration is a classDeclaration if (modifierFlag & ModifierFlags.Abstract) { nodes = [...(declaration).members, declaration]; } else { - nodes = (container).statements; + nodes = (container).statements; } break; case SyntaxKind.Constructor: diff --git a/tests/cases/fourslash/getOccurrencesAbstract03.ts b/tests/cases/fourslash/getOccurrencesAbstract03.ts new file mode 100644 index 00000000000..29bdb3c2257 --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesAbstract03.ts @@ -0,0 +1,21 @@ +/// + +// Tests that we don't crash when encountering an abstract class in these scopes: + +////function f() { +//// [|abstract|] class A { +//// [|abstract|] m(): void; +//// } +//// abstract class B {} +////} +////switch (0) { +//// case 0: +//// [|abstract|] class A { [|abstract|] m(): void; } +//// default: +//// [|abstract|] class B { [|abstract|] m(): void; } +////} + +const [r0, r1, r2, r3, r4, r5] = test.ranges(); +verify.rangesAreDocumentHighlights([r0, r1]); +verify.rangesAreDocumentHighlights([r2, r3]); +verify.rangesAreDocumentHighlights([r4, r5]);