diff --git a/src/services/documentHighlights.ts b/src/services/documentHighlights.ts index 84ef457310e..dd5281f15bc 100644 --- a/src/services/documentHighlights.ts +++ b/src/services/documentHighlights.ts @@ -200,7 +200,8 @@ namespace ts.DocumentHighlights { } function getNodesToSearchForModifier(declaration: Node, modifierFlag: ModifierFlags): ReadonlyArray { - const container = declaration.parent; + // Types of node whose children might have modifiers. + const container = declaration.parent as ModuleBlock | SourceFile | Block | CaseClause | DefaultClause | ConstructorDeclaration | MethodDeclaration | FunctionDeclaration | ClassLikeDeclaration; switch (container.kind) { case SyntaxKind.ModuleBlock: case SyntaxKind.SourceFile: @@ -212,18 +213,21 @@ namespace ts.DocumentHighlights { return [...declaration.members, declaration]; } else { - return (container).statements; + return container.statements; } case SyntaxKind.Constructor: - return [...(container).parameters, ...(container.parent).members]; + case SyntaxKind.MethodDeclaration: + case SyntaxKind.FunctionDeclaration: { + return [...container.parameters, ...(isClassLike(container.parent) ? container.parent.members : [])]; + } case SyntaxKind.ClassDeclaration: case SyntaxKind.ClassExpression: - const nodes = (container).members; + const nodes = container.members; // If we're an accessibility modifier, we're in an instance member and should search // the constructor's parameter list for instance members as well. if (modifierFlag & ModifierFlags.AccessibilityModifier) { - const constructor = find((container).members, isConstructorDeclaration); + const constructor = find(container.members, isConstructorDeclaration); if (constructor) { return [...nodes, ...constructor.parameters]; } @@ -233,7 +237,7 @@ namespace ts.DocumentHighlights { } return nodes; default: - Debug.fail("Invalid container kind."); + Debug.assertNever(container, "Invalid container kind."); } } diff --git a/tests/cases/fourslash/documentHighlightsInvalidModifierLocations.ts b/tests/cases/fourslash/documentHighlightsInvalidModifierLocations.ts new file mode 100644 index 00000000000..f008e632464 --- /dev/null +++ b/tests/cases/fourslash/documentHighlightsInvalidModifierLocations.ts @@ -0,0 +1,10 @@ +/// + +////class C { +//// m([|readonly|] p) {} +////} +////function f([|readonly|] p) {} + +for (const r of test.ranges()) { + verify.documentHighlightsOf(r, [r]); +}