From 1c1cd9b08d8bf1c77abb57d195cc6d79b1093390 Mon Sep 17 00:00:00 2001 From: Oleksandr T Date: Fri, 11 Dec 2020 19:00:05 +0200 Subject: [PATCH] fix(37539): extend scope for function expressions to include JSDoc (#41364) --- src/compiler/utilities.ts | 2 +- src/services/findAllReferences.ts | 7 ++++++- .../reference/renameFunctionParameter1.baseline | 10 ++++++++++ .../reference/renameFunctionParameter2.baseline | 8 ++++++++ tests/cases/fourslash/renameFunctionParameter1.ts | 12 ++++++++++++ tests/cases/fourslash/renameFunctionParameter2.ts | 10 ++++++++++ 6 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 tests/baselines/reference/renameFunctionParameter1.baseline create mode 100644 tests/baselines/reference/renameFunctionParameter2.baseline create mode 100644 tests/cases/fourslash/renameFunctionParameter1.ts create mode 100644 tests/cases/fourslash/renameFunctionParameter2.ts diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index ee9db727dd4..012bf374614 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -2569,7 +2569,7 @@ namespace ts { return result || emptyArray; } - function getNextJSDocCommentLocation(node: Node) { + export function getNextJSDocCommentLocation(node: Node) { const parent = node.parent; if (parent.kind === SyntaxKind.PropertyAssignment || parent.kind === SyntaxKind.ExportAssignment || diff --git a/src/services/findAllReferences.ts b/src/services/findAllReferences.ts index bc6e1f4cb80..7a77ae6ca2e 100644 --- a/src/services/findAllReferences.ts +++ b/src/services/findAllReferences.ts @@ -1206,8 +1206,13 @@ namespace ts.FindAllReferences { return undefined; } - // The search scope is the container node scope = container; + if (isFunctionExpression(scope)) { + let next: Node | undefined; + while (next = getNextJSDocCommentLocation(scope)) { + scope = next; + } + } } // If symbol.parent, this means we are in an export of an external module. (Otherwise we would have returned `undefined` above.) diff --git a/tests/baselines/reference/renameFunctionParameter1.baseline b/tests/baselines/reference/renameFunctionParameter1.baseline new file mode 100644 index 00000000000..796e07862e2 --- /dev/null +++ b/tests/baselines/reference/renameFunctionParameter1.baseline @@ -0,0 +1,10 @@ +/*====== /tests/cases/fourslash/renameFunctionParameter1.ts ======*/ + +function Foo() { + /** + * @param {number} RENAME + */ + this.foo = function foo([|RENAME|]) { + return RENAME; + } +} diff --git a/tests/baselines/reference/renameFunctionParameter2.baseline b/tests/baselines/reference/renameFunctionParameter2.baseline new file mode 100644 index 00000000000..efa65398688 --- /dev/null +++ b/tests/baselines/reference/renameFunctionParameter2.baseline @@ -0,0 +1,8 @@ +/*====== /tests/cases/fourslash/renameFunctionParameter2.ts ======*/ + +/** + * @param {number} RENAME + */ +const foo = function foo([|RENAME|]) { + return RENAME; +} diff --git a/tests/cases/fourslash/renameFunctionParameter1.ts b/tests/cases/fourslash/renameFunctionParameter1.ts new file mode 100644 index 00000000000..b3a6cc456c8 --- /dev/null +++ b/tests/cases/fourslash/renameFunctionParameter1.ts @@ -0,0 +1,12 @@ +/// + +////function Foo() { +//// /** +//// * @param {number} p +//// */ +//// this.foo = function foo(p/**/) { +//// return p; +//// } +////} + +verify.baselineRename("", {}); diff --git a/tests/cases/fourslash/renameFunctionParameter2.ts b/tests/cases/fourslash/renameFunctionParameter2.ts new file mode 100644 index 00000000000..0fd5556d0df --- /dev/null +++ b/tests/cases/fourslash/renameFunctionParameter2.ts @@ -0,0 +1,10 @@ +/// + +/////** +//// * @param {number} p +//// */ +////const foo = function foo(p/**/) { +//// return p; +////} + +verify.baselineRename("", {});