From 42e08f5578012b5eaa3875f81250d2eff1aad406 Mon Sep 17 00:00:00 2001 From: Andy Date: Wed, 28 Jun 2017 12:53:12 -0700 Subject: [PATCH] findAllRefs: Find string references inside of template strings (#16723) --- src/compiler/utilities.ts | 13 +++++++++++++ src/services/utilities.ts | 2 +- tests/cases/fourslash/renameCommentsAndStrings4.ts | 9 +++++++-- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index d9926204989..5f87dc7487f 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -4743,6 +4743,19 @@ namespace ts { || kind === SyntaxKind.TemplateTail; } + export function isStringTextContainingNode(node: Node) { + switch (node.kind) { + case SyntaxKind.StringLiteral: + case SyntaxKind.TemplateHead: + case SyntaxKind.TemplateMiddle: + case SyntaxKind.TemplateTail: + case SyntaxKind.NoSubstitutionTemplateLiteral: + return true; + default: + return false; + } + } + // Identifiers /* @internal */ diff --git a/src/services/utilities.ts b/src/services/utilities.ts index 1f137e8d3cd..089e2de2b29 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -787,7 +787,7 @@ namespace ts { export function isInString(sourceFile: SourceFile, position: number): boolean { const previousToken = findPrecedingToken(position, sourceFile); - if (previousToken && previousToken.kind === SyntaxKind.StringLiteral) { + if (previousToken && isStringTextContainingNode(previousToken)) { const start = previousToken.getStart(); const end = previousToken.getEnd(); diff --git a/tests/cases/fourslash/renameCommentsAndStrings4.ts b/tests/cases/fourslash/renameCommentsAndStrings4.ts index b3975209fc4..eab53149d6d 100644 --- a/tests/cases/fourslash/renameCommentsAndStrings4.ts +++ b/tests/cases/fourslash/renameCommentsAndStrings4.ts @@ -2,9 +2,14 @@ /////// -////function /**/[|Bar|]() { +////function [|Bar|]() { //// // This is a reference to [|Bar|] in a comment. -//// "this is a reference to [|Bar|] in a string" +//// "this is a reference to [|Bar|] in a string"; +//// `Foo [|Bar|] Baz.`; +//// { +//// const Bar = 0; +//// `[|Bar|] ba ${Bar} bara [|Bar|] berbobo ${Bar} araura [|Bar|] ara!`; +//// } ////} const ranges = test.ranges();