From 0f92a13d2c437d5450f838075cbe9aedc898eb0d Mon Sep 17 00:00:00 2001 From: Oleksandr T Date: Tue, 4 Oct 2022 11:40:38 +0300 Subject: [PATCH] Add test for find-all-refs on string literal types in JsDoc for TypeScript files --- src/services/findAllReferences.ts | 3 ++ src/services/utilities.ts | 2 - ...ndAllRefsForStringLiteral1.baseline.jsonc} | 0 ...indAllRefsForStringLiteral2.baseline.jsonc | 38 +++++++++++++++++++ ...ral.ts => findAllRefsForStringLiteral1.ts} | 0 .../fourslash/findAllRefsForStringLiteral2.ts | 9 +++++ 6 files changed, 50 insertions(+), 2 deletions(-) rename tests/baselines/reference/{findAllRefsForStringLiteral.baseline.jsonc => findAllRefsForStringLiteral1.baseline.jsonc} (100%) create mode 100644 tests/baselines/reference/findAllRefsForStringLiteral2.baseline.jsonc rename tests/cases/fourslash/{findAllRefsForStringLiteral.ts => findAllRefsForStringLiteral1.ts} (100%) create mode 100644 tests/cases/fourslash/findAllRefsForStringLiteral2.ts diff --git a/src/services/findAllReferences.ts b/src/services/findAllReferences.ts index d11a447b142..e15b35af515 100644 --- a/src/services/findAllReferences.ts +++ b/src/services/findAllReferences.ts @@ -2090,6 +2090,9 @@ namespace ts.FindAllReferences { cancellationToken.throwIfCancellationRequested(); return mapDefined(getPossibleSymbolReferenceNodes(sourceFile, node.text), ref => { if (isStringLiteralLike(ref) && ref.text === node.text) { + if (ref.flags & (NodeFlags.JSDoc & ~NodeFlags.JavaScriptFile)) { + return undefined; + } if (type) { const refType = getContextualTypeFromParentOrAncestorTypeNode(ref, checker); if (type !== checker.getStringType() && type === refType) { diff --git a/src/services/utilities.ts b/src/services/utilities.ts index 58d1b1cbca1..4d24e57d051 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -790,8 +790,6 @@ namespace ts { } export function getContextualTypeFromParentOrAncestorTypeNode(node: Expression, checker: TypeChecker): Type | undefined { - if (node.flags & (NodeFlags.JSDoc & ~NodeFlags.JavaScriptFile)) return undefined; - const contextualType = getContextualTypeFromParent(node, checker); if (contextualType) return contextualType; diff --git a/tests/baselines/reference/findAllRefsForStringLiteral.baseline.jsonc b/tests/baselines/reference/findAllRefsForStringLiteral1.baseline.jsonc similarity index 100% rename from tests/baselines/reference/findAllRefsForStringLiteral.baseline.jsonc rename to tests/baselines/reference/findAllRefsForStringLiteral1.baseline.jsonc diff --git a/tests/baselines/reference/findAllRefsForStringLiteral2.baseline.jsonc b/tests/baselines/reference/findAllRefsForStringLiteral2.baseline.jsonc new file mode 100644 index 00000000000..e316226b879 --- /dev/null +++ b/tests/baselines/reference/findAllRefsForStringLiteral2.baseline.jsonc @@ -0,0 +1,38 @@ +// === /a.ts === +// /** +// * @type {"foo" | "bar"} +// */ +// let x = "[|foo|]"/*FIND ALL REFS*/ + +[ + { + "definition": { + "containerKind": "", + "containerName": "", + "fileName": "/a.ts", + "kind": "var", + "name": "foo", + "textSpan": { + "start": 42, + "length": 3 + }, + "displayParts": [ + { + "text": "\"foo\"", + "kind": "stringLiteral" + } + ] + }, + "references": [ + { + "textSpan": { + "start": 42, + "length": 3 + }, + "fileName": "/a.ts", + "isWriteAccess": false, + "isInString": true + } + ] + } +] \ No newline at end of file diff --git a/tests/cases/fourslash/findAllRefsForStringLiteral.ts b/tests/cases/fourslash/findAllRefsForStringLiteral1.ts similarity index 100% rename from tests/cases/fourslash/findAllRefsForStringLiteral.ts rename to tests/cases/fourslash/findAllRefsForStringLiteral1.ts diff --git a/tests/cases/fourslash/findAllRefsForStringLiteral2.ts b/tests/cases/fourslash/findAllRefsForStringLiteral2.ts new file mode 100644 index 00000000000..80d978e1d35 --- /dev/null +++ b/tests/cases/fourslash/findAllRefsForStringLiteral2.ts @@ -0,0 +1,9 @@ +/// + +// @filename: /a.ts +/////** +//// * @type {"foo" | "bar"} +//// */ +////let x = "foo"/**/ + +verify.baselineFindAllReferences("");