diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 7b6d49cf8f9c4..33f2f6c58ffd3 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -42379,6 +42379,12 @@ m2: ${(this.mapper2 as unknown as DebugTypeMapper).__debugToString().split("\n") return resolveJSDocMemberName(name, /*ignoreErrors*/ false, getSymbolOfNode(container)); } } + if (result && isJSDoc) { + const container = getJSDocHost(name); + if (container && isEnumMember(container) && container === result.valueDeclaration) { + return resolveEntityName(name, meaning, /*ignoreErrors*/ true, /* dontResolveAlias */ true, getSourceFileOfNode(container)) || result; + } + } return result; } else if (isPrivateIdentifier(name)) { diff --git a/tests/baselines/reference/findAllReferencesFromLinkTagReference1.baseline.jsonc b/tests/baselines/reference/findAllReferencesFromLinkTagReference1.baseline.jsonc new file mode 100644 index 0000000000000..9fc705112fb73 --- /dev/null +++ b/tests/baselines/reference/findAllReferencesFromLinkTagReference1.baseline.jsonc @@ -0,0 +1,85 @@ +// === /tests/cases/fourslash/findAllReferencesFromLinkTagReference1.ts === +// enum E { +// /** {@link /*FIND ALL REFS*/[|A|]} */ +// [|A|] +// } + +[ + { + "definition": { + "containerKind": "", + "containerName": "", + "fileName": "/tests/cases/fourslash/findAllReferencesFromLinkTagReference1.ts", + "kind": "enum member", + "name": "(enum member) E.A = 0", + "textSpan": { + "start": 34, + "length": 1 + }, + "displayParts": [ + { + "text": "(", + "kind": "punctuation" + }, + { + "text": "enum member", + "kind": "text" + }, + { + "text": ")", + "kind": "punctuation" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "E", + "kind": "enumName" + }, + { + "text": ".", + "kind": "punctuation" + }, + { + "text": "A", + "kind": "enumMemberName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "=", + "kind": "operator" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "0", + "kind": "numericLiteral" + } + ] + }, + "references": [ + { + "textSpan": { + "start": 24, + "length": 1 + }, + "fileName": "/tests/cases/fourslash/findAllReferencesFromLinkTagReference1.ts", + "isWriteAccess": false + }, + { + "textSpan": { + "start": 34, + "length": 1 + }, + "fileName": "/tests/cases/fourslash/findAllReferencesFromLinkTagReference1.ts", + "isWriteAccess": true + } + ] + } +] \ No newline at end of file diff --git a/tests/baselines/reference/findAllReferencesFromLinkTagReference2.baseline.jsonc b/tests/baselines/reference/findAllReferencesFromLinkTagReference2.baseline.jsonc new file mode 100644 index 0000000000000..f897a6e5d5769 --- /dev/null +++ b/tests/baselines/reference/findAllReferencesFromLinkTagReference2.baseline.jsonc @@ -0,0 +1,64 @@ +// === /a.ts === +// enum E { +// /** {@link /*FIND ALL REFS*/[|Foo|]} */ +// Foo +// } +// interface [|Foo|] { +// foo: E.Foo; +// } + +[ + { + "definition": { + "containerKind": "", + "containerName": "", + "fileName": "/a.ts", + "kind": "interface", + "name": "interface Foo", + "textSpan": { + "start": 52, + "length": 3 + }, + "displayParts": [ + { + "text": "interface", + "kind": "keyword" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "Foo", + "kind": "interfaceName" + } + ], + "contextSpan": { + "start": 42, + "length": 33 + } + }, + "references": [ + { + "textSpan": { + "start": 24, + "length": 3 + }, + "fileName": "/a.ts", + "isWriteAccess": false + }, + { + "textSpan": { + "start": 52, + "length": 3 + }, + "fileName": "/a.ts", + "contextSpan": { + "start": 42, + "length": 33 + }, + "isWriteAccess": true + } + ] + } +] \ No newline at end of file diff --git a/tests/baselines/reference/findAllReferencesFromLinkTagReference3.baseline.jsonc b/tests/baselines/reference/findAllReferencesFromLinkTagReference3.baseline.jsonc new file mode 100644 index 0000000000000..5c9eefb255da2 --- /dev/null +++ b/tests/baselines/reference/findAllReferencesFromLinkTagReference3.baseline.jsonc @@ -0,0 +1,66 @@ +// === /tests/cases/fourslash/a.ts === +// interface [|Foo|] { +// foo: E.Foo; +// } + +// === /tests/cases/fourslash/b.ts === +// enum E { +// /** {@link /*FIND ALL REFS*/[|Foo|]} */ +// Foo +// } + +[ + { + "definition": { + "containerKind": "", + "containerName": "", + "fileName": "/tests/cases/fourslash/a.ts", + "kind": "interface", + "name": "interface Foo", + "textSpan": { + "start": 10, + "length": 3 + }, + "displayParts": [ + { + "text": "interface", + "kind": "keyword" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "Foo", + "kind": "interfaceName" + } + ], + "contextSpan": { + "start": 0, + "length": 33 + } + }, + "references": [ + { + "textSpan": { + "start": 10, + "length": 3 + }, + "fileName": "/tests/cases/fourslash/a.ts", + "contextSpan": { + "start": 0, + "length": 33 + }, + "isWriteAccess": true + }, + { + "textSpan": { + "start": 24, + "length": 3 + }, + "fileName": "/tests/cases/fourslash/b.ts", + "isWriteAccess": false + } + ] + } +] \ No newline at end of file diff --git a/tests/baselines/reference/findAllReferencesFromLinkTagReference4.baseline.jsonc b/tests/baselines/reference/findAllReferencesFromLinkTagReference4.baseline.jsonc new file mode 100644 index 0000000000000..b1dbc94dc7666 --- /dev/null +++ b/tests/baselines/reference/findAllReferencesFromLinkTagReference4.baseline.jsonc @@ -0,0 +1,86 @@ +// === /tests/cases/fourslash/findAllReferencesFromLinkTagReference4.ts === +// enum E { +// /** {@link /*FIND ALL REFS*/[|B|]} */ +// A, +// [|B|] +// } + +[ + { + "definition": { + "containerKind": "", + "containerName": "", + "fileName": "/tests/cases/fourslash/findAllReferencesFromLinkTagReference4.ts", + "kind": "enum member", + "name": "(enum member) E.B = 1", + "textSpan": { + "start": 41, + "length": 1 + }, + "displayParts": [ + { + "text": "(", + "kind": "punctuation" + }, + { + "text": "enum member", + "kind": "text" + }, + { + "text": ")", + "kind": "punctuation" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "E", + "kind": "enumName" + }, + { + "text": ".", + "kind": "punctuation" + }, + { + "text": "B", + "kind": "enumMemberName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "=", + "kind": "operator" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "1", + "kind": "numericLiteral" + } + ] + }, + "references": [ + { + "textSpan": { + "start": 24, + "length": 1 + }, + "fileName": "/tests/cases/fourslash/findAllReferencesFromLinkTagReference4.ts", + "isWriteAccess": false + }, + { + "textSpan": { + "start": 41, + "length": 1 + }, + "fileName": "/tests/cases/fourslash/findAllReferencesFromLinkTagReference4.ts", + "isWriteAccess": true + } + ] + } +] \ No newline at end of file diff --git a/tests/baselines/reference/findAllReferencesFromLinkTagReference5.baseline.jsonc b/tests/baselines/reference/findAllReferencesFromLinkTagReference5.baseline.jsonc new file mode 100644 index 0000000000000..c6f03b14a69d6 --- /dev/null +++ b/tests/baselines/reference/findAllReferencesFromLinkTagReference5.baseline.jsonc @@ -0,0 +1,85 @@ +// === /tests/cases/fourslash/findAllReferencesFromLinkTagReference5.ts === +// enum E { +// /** {@link E./*FIND ALL REFS*/[|A|]} */ +// [|A|] +// } + +[ + { + "definition": { + "containerKind": "", + "containerName": "", + "fileName": "/tests/cases/fourslash/findAllReferencesFromLinkTagReference5.ts", + "kind": "enum member", + "name": "(enum member) E.A = 0", + "textSpan": { + "start": 36, + "length": 1 + }, + "displayParts": [ + { + "text": "(", + "kind": "punctuation" + }, + { + "text": "enum member", + "kind": "text" + }, + { + "text": ")", + "kind": "punctuation" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "E", + "kind": "enumName" + }, + { + "text": ".", + "kind": "punctuation" + }, + { + "text": "A", + "kind": "enumMemberName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "=", + "kind": "operator" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "0", + "kind": "numericLiteral" + } + ] + }, + "references": [ + { + "textSpan": { + "start": 26, + "length": 1 + }, + "fileName": "/tests/cases/fourslash/findAllReferencesFromLinkTagReference5.ts", + "isWriteAccess": false + }, + { + "textSpan": { + "start": 36, + "length": 1 + }, + "fileName": "/tests/cases/fourslash/findAllReferencesFromLinkTagReference5.ts", + "isWriteAccess": true + } + ] + } +] \ No newline at end of file diff --git a/tests/baselines/reference/renameReferenceFromLinkTag1.baseline b/tests/baselines/reference/renameReferenceFromLinkTag1.baseline new file mode 100644 index 0000000000000..6a267b2d99745 --- /dev/null +++ b/tests/baselines/reference/renameReferenceFromLinkTag1.baseline @@ -0,0 +1,6 @@ +/*====== /tests/cases/fourslash/renameReferenceFromLinkTag1.ts ======*/ + +enum E { + /** {@link [|RENAME|]} */ + RENAME +} diff --git a/tests/baselines/reference/renameReferenceFromLinkTag2.baseline b/tests/baselines/reference/renameReferenceFromLinkTag2.baseline new file mode 100644 index 0000000000000..3da46e2bfff7d --- /dev/null +++ b/tests/baselines/reference/renameReferenceFromLinkTag2.baseline @@ -0,0 +1,9 @@ +/*====== /a.ts ======*/ + +enum E { + /** {@link [|RENAME|]} */ + Foo +} +interface RENAME { + foo: E.Foo; +} diff --git a/tests/baselines/reference/renameReferenceFromLinkTag3.baseline b/tests/baselines/reference/renameReferenceFromLinkTag3.baseline new file mode 100644 index 0000000000000..19e3ec871e420 --- /dev/null +++ b/tests/baselines/reference/renameReferenceFromLinkTag3.baseline @@ -0,0 +1,12 @@ +/*====== /tests/cases/fourslash/a.ts ======*/ + +interface RENAME { + foo: E.Foo; +} + +/*====== /tests/cases/fourslash/b.ts ======*/ + +enum E { + /** {@link RENAME} */ + Foo +} diff --git a/tests/baselines/reference/renameReferenceFromLinkTag4.baseline b/tests/baselines/reference/renameReferenceFromLinkTag4.baseline new file mode 100644 index 0000000000000..4020ebfd1dffa --- /dev/null +++ b/tests/baselines/reference/renameReferenceFromLinkTag4.baseline @@ -0,0 +1,7 @@ +/*====== /tests/cases/fourslash/renameReferenceFromLinkTag4.ts ======*/ + +enum E { + /** {@link [|RENAME|]} */ + A, + RENAME +} diff --git a/tests/baselines/reference/renameReferenceFromLinkTag5.baseline b/tests/baselines/reference/renameReferenceFromLinkTag5.baseline new file mode 100644 index 0000000000000..605869bd5e8cc --- /dev/null +++ b/tests/baselines/reference/renameReferenceFromLinkTag5.baseline @@ -0,0 +1,6 @@ +/*====== /tests/cases/fourslash/renameReferenceFromLinkTag5.ts ======*/ + +enum E { + /** {@link E.[|RENAME|]} */ + RENAME +} diff --git a/tests/cases/fourslash/findAllReferencesFromLinkTagReference1.ts b/tests/cases/fourslash/findAllReferencesFromLinkTagReference1.ts new file mode 100644 index 0000000000000..7265583f5ccce --- /dev/null +++ b/tests/cases/fourslash/findAllReferencesFromLinkTagReference1.ts @@ -0,0 +1,8 @@ +/// + +////enum E { +//// /** {@link /**/A} */ +//// A +////} + +verify.baselineFindAllReferences(""); diff --git a/tests/cases/fourslash/findAllReferencesFromLinkTagReference2.ts b/tests/cases/fourslash/findAllReferencesFromLinkTagReference2.ts new file mode 100644 index 0000000000000..eae6a3d09ceeb --- /dev/null +++ b/tests/cases/fourslash/findAllReferencesFromLinkTagReference2.ts @@ -0,0 +1,12 @@ +/// + +// @Filename: /a.ts +////enum E { +//// /** {@link /**/Foo} */ +//// Foo +////} +////interface Foo { +//// foo: E.Foo; +////} + +verify.baselineFindAllReferences(""); diff --git a/tests/cases/fourslash/findAllReferencesFromLinkTagReference3.ts b/tests/cases/fourslash/findAllReferencesFromLinkTagReference3.ts new file mode 100644 index 0000000000000..eb150a559647c --- /dev/null +++ b/tests/cases/fourslash/findAllReferencesFromLinkTagReference3.ts @@ -0,0 +1,14 @@ +/// + +// @filename: a.ts +////interface Foo { +//// foo: E.Foo; +////} + +// @Filename: b.ts +////enum E { +//// /** {@link /**/Foo} */ +//// Foo +////} + +verify.baselineFindAllReferences(""); diff --git a/tests/cases/fourslash/findAllReferencesFromLinkTagReference4.ts b/tests/cases/fourslash/findAllReferencesFromLinkTagReference4.ts new file mode 100644 index 0000000000000..869349e0b8b1e --- /dev/null +++ b/tests/cases/fourslash/findAllReferencesFromLinkTagReference4.ts @@ -0,0 +1,8 @@ +/// +////enum E { +//// /** {@link /**/B} */ +//// A, +//// B +////} + +verify.baselineFindAllReferences(""); diff --git a/tests/cases/fourslash/findAllReferencesFromLinkTagReference5.ts b/tests/cases/fourslash/findAllReferencesFromLinkTagReference5.ts new file mode 100644 index 0000000000000..8b9bee761743d --- /dev/null +++ b/tests/cases/fourslash/findAllReferencesFromLinkTagReference5.ts @@ -0,0 +1,8 @@ +/// + +////enum E { +//// /** {@link E./**/A} */ +//// A +////} + +verify.baselineFindAllReferences(""); diff --git a/tests/cases/fourslash/gotoDefinitionLinkTag2.ts b/tests/cases/fourslash/gotoDefinitionLinkTag2.ts new file mode 100644 index 0000000000000..ad463c51f791f --- /dev/null +++ b/tests/cases/fourslash/gotoDefinitionLinkTag2.ts @@ -0,0 +1,9 @@ +/// + +////enum E { +//// /** {@link /*1*/[|A|]} */ +//// [|/*2*/A|] +////} + +goTo.marker("1"); +verify.goToDefinitionIs("2"); diff --git a/tests/cases/fourslash/gotoDefinitionLinkTag3.ts b/tests/cases/fourslash/gotoDefinitionLinkTag3.ts new file mode 100644 index 0000000000000..8dc4105ae8cc2 --- /dev/null +++ b/tests/cases/fourslash/gotoDefinitionLinkTag3.ts @@ -0,0 +1,13 @@ +/// + +// @Filename: /a.ts +////enum E { +//// /** {@link /*1*/[|Foo|]} */ +//// Foo +////} +////interface [|/*2*/Foo|] { +//// foo: E.Foo; +////} + +goTo.marker("1"); +verify.goToDefinitionIs("2"); diff --git a/tests/cases/fourslash/gotoDefinitionLinkTag4.ts b/tests/cases/fourslash/gotoDefinitionLinkTag4.ts new file mode 100644 index 0000000000000..6df523b058e66 --- /dev/null +++ b/tests/cases/fourslash/gotoDefinitionLinkTag4.ts @@ -0,0 +1,15 @@ +/// + +// @filename: a.ts +////interface [|/*2*/Foo|] { +//// foo: E.Foo; +////} + +// @Filename: b.ts +////enum E { +//// /** {@link /*1*/[|Foo|]} */ +//// Foo +////} + +goTo.marker("1"); +verify.goToDefinitionIs("2"); diff --git a/tests/cases/fourslash/gotoDefinitionLinkTag5.ts b/tests/cases/fourslash/gotoDefinitionLinkTag5.ts new file mode 100644 index 0000000000000..8425653f41b91 --- /dev/null +++ b/tests/cases/fourslash/gotoDefinitionLinkTag5.ts @@ -0,0 +1,9 @@ +/// +////enum E { +//// /** {@link /*1*/[|B|]} */ +//// A, +//// [|/*2*/B|] +////} + +goTo.marker("1"); +verify.goToDefinitionIs("2"); diff --git a/tests/cases/fourslash/gotoDefinitionLinkTag6.ts b/tests/cases/fourslash/gotoDefinitionLinkTag6.ts new file mode 100644 index 0000000000000..c76fcb08fd8e8 --- /dev/null +++ b/tests/cases/fourslash/gotoDefinitionLinkTag6.ts @@ -0,0 +1,9 @@ +/// + +////enum E { +//// /** {@link E./*1*/[|A|]} */ +//// [|/*2*/A|] +////} + +goTo.marker("1"); +verify.goToDefinitionIs("2"); diff --git a/tests/cases/fourslash/renameReferenceFromLinkTag1.ts b/tests/cases/fourslash/renameReferenceFromLinkTag1.ts new file mode 100644 index 0000000000000..fe0e4c87b2073 --- /dev/null +++ b/tests/cases/fourslash/renameReferenceFromLinkTag1.ts @@ -0,0 +1,8 @@ +/// + +////enum E { +//// /** {@link /**/A} */ +//// A +////} + +verify.baselineRename("", {}); \ No newline at end of file diff --git a/tests/cases/fourslash/renameReferenceFromLinkTag2.ts b/tests/cases/fourslash/renameReferenceFromLinkTag2.ts new file mode 100644 index 0000000000000..330416ee17a66 --- /dev/null +++ b/tests/cases/fourslash/renameReferenceFromLinkTag2.ts @@ -0,0 +1,12 @@ +/// + +// @Filename: /a.ts +////enum E { +//// /** {@link /**/Foo} */ +//// Foo +////} +////interface Foo { +//// foo: E.Foo; +////} + +verify.baselineRename("", {}); diff --git a/tests/cases/fourslash/renameReferenceFromLinkTag3.ts b/tests/cases/fourslash/renameReferenceFromLinkTag3.ts new file mode 100644 index 0000000000000..439b48f584146 --- /dev/null +++ b/tests/cases/fourslash/renameReferenceFromLinkTag3.ts @@ -0,0 +1,14 @@ +/// + +// @filename: a.ts +////interface Foo { +//// foo: E.Foo; +////} + +// @Filename: b.ts +////enum E { +//// /** {@link /**/Foo} */ +//// Foo +////} + +verify.baselineRename("", {}); diff --git a/tests/cases/fourslash/renameReferenceFromLinkTag4.ts b/tests/cases/fourslash/renameReferenceFromLinkTag4.ts new file mode 100644 index 0000000000000..cda21943d6bce --- /dev/null +++ b/tests/cases/fourslash/renameReferenceFromLinkTag4.ts @@ -0,0 +1,8 @@ +/// +////enum E { +//// /** {@link /**/B} */ +//// A, +//// B +////} + +verify.baselineRename("", {}); diff --git a/tests/cases/fourslash/renameReferenceFromLinkTag5.ts b/tests/cases/fourslash/renameReferenceFromLinkTag5.ts new file mode 100644 index 0000000000000..bd80eb841eec3 --- /dev/null +++ b/tests/cases/fourslash/renameReferenceFromLinkTag5.ts @@ -0,0 +1,8 @@ +/// + +////enum E { +//// /** {@link E./**/A} */ +//// A +////} + +verify.baselineRename("", {});