Skip to content

Commit e2b6832

Browse files
committed
Add rename support
1 parent bd12cd4 commit e2b6832

File tree

13 files changed

+105
-45
lines changed

13 files changed

+105
-45
lines changed

src/compiler/checker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36374,7 +36374,7 @@ namespace ts {
3637436374
node = node.parent as PropertyAccessExpression;
3637536375
}
3637636376

36377-
return node.parent.kind === SyntaxKind.JSDocNameExpression;
36377+
return node.parent.kind === SyntaxKind.JSDocNameReference;
3637836378
}
3637936379

3638036380
function forEachEnclosingClass<T>(node: Node, callback: (node: Node) => T | undefined): T | undefined {

src/compiler/emitter.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1550,8 +1550,8 @@ namespace ts {
15501550
return emitJSDocSimpleTag(node as JSDocTag);
15511551
case SyntaxKind.JSDocSeeTag:
15521552
return emitJSDocSeeTag(node as JSDocSeeTag);
1553-
case SyntaxKind.JSDocNameExpression:
1554-
return emitJSDocNameExpression(node as JSDocNameExpression);
1553+
case SyntaxKind.JSDocNameReference:
1554+
return emitJSDocNameReference(node as JSDocNameReference);
15551555

15561556
case SyntaxKind.JSDocComment:
15571557
return emitJSDoc(node as JSDoc);
@@ -3513,7 +3513,7 @@ namespace ts {
35133513
emitJSDocComment(tag.comment);
35143514
}
35153515

3516-
function emitJSDocNameExpression(node: JSDocNameExpression) {
3516+
function emitJSDocNameReference(node: JSDocNameReference) {
35173517
writeSpace();
35183518
writePunctuation("{");
35193519
emit(node.name);

src/compiler/factory/nodeFactory.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -339,8 +339,8 @@ namespace ts {
339339
updateJSDocImplementsTag,
340340
createJSDocSeeTag,
341341
updateJSDocSeeTag,
342-
createJSDocNameExpression,
343-
updateJSDocNameExpression,
342+
createJSDocNameReference,
343+
updateJSDocNameReference,
344344
// lazily load factory members for JSDoc tags with similar structure
345345
get createJSDocTypeTag() { return getJSDocTypeLikeTagCreateFunction<JSDocTypeTag>(SyntaxKind.JSDocTypeTag); },
346346
get updateJSDocTypeTag() { return getJSDocTypeLikeTagUpdateFunction<JSDocTypeTag>(SyntaxKind.JSDocTypeTag); },
@@ -4262,14 +4262,14 @@ namespace ts {
42624262
}
42634263

42644264
// @api
4265-
function createJSDocSeeTag(tagName: Identifier | undefined, name: JSDocNameExpression | undefined, comment?: string): JSDocSeeTag {
4265+
function createJSDocSeeTag(tagName: Identifier | undefined, name: JSDocNameReference | undefined, comment?: string): JSDocSeeTag {
42664266
const node = createBaseJSDocTag<JSDocSeeTag>(SyntaxKind.JSDocSeeTag, tagName ?? createIdentifier("see"), comment);
42674267
node.name = name;
42684268
return node;
42694269
}
42704270

42714271
// @api
4272-
function updateJSDocSeeTag(node: JSDocSeeTag, tagName: Identifier | undefined, name: JSDocNameExpression | undefined, comment?: string): JSDocSeeTag {
4272+
function updateJSDocSeeTag(node: JSDocSeeTag, tagName: Identifier | undefined, name: JSDocNameReference | undefined, comment?: string): JSDocSeeTag {
42734273
return node.tagName !== tagName
42744274
|| node.name !== name
42754275
|| node.comment !== comment
@@ -4278,16 +4278,16 @@ namespace ts {
42784278
}
42794279

42804280
// @api
4281-
function createJSDocNameExpression(name: EntityName): JSDocNameExpression {
4282-
const node = createBaseNode<JSDocNameExpression>(SyntaxKind.JSDocNameExpression);
4281+
function createJSDocNameReference(name: EntityName): JSDocNameReference {
4282+
const node = createBaseNode<JSDocNameReference>(SyntaxKind.JSDocNameReference);
42834283
node.name = name;
42844284
return node;
42854285
}
42864286

42874287
// @api
4288-
function updateJSDocNameExpression(node: JSDocNameExpression, name: EntityName): JSDocNameExpression {
4288+
function updateJSDocNameReference(node: JSDocNameReference, name: EntityName): JSDocNameReference {
42894289
return node.name !== name
4290-
? update(createJSDocNameExpression(name), node)
4290+
? update(createJSDocNameReference(name), node)
42914291
: node;
42924292
}
42934293

src/compiler/factory/nodeTests.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -695,6 +695,10 @@ namespace ts {
695695
return node.kind === SyntaxKind.JSDocTypeExpression;
696696
}
697697

698+
export function isJSDocNameReference(node: Node): node is JSDocNameReference {
699+
return node.kind === SyntaxKind.JSDocNameReference;
700+
}
701+
698702
export function isJSDocAllType(node: Node): node is JSDocAllType {
699703
return node.kind === SyntaxKind.JSDocAllType;
700704
}

src/compiler/parser.ts

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -480,8 +480,8 @@ namespace ts {
480480
case SyntaxKind.JSDocSeeTag:
481481
return visitNode(cbNode, (node as JSDocSeeTag).tagName) ||
482482
visitNode(cbNode, (node as JSDocSeeTag).name);
483-
case SyntaxKind.JSDocNameExpression:
484-
return visitNode(cbNode, (node as JSDocNameExpression).name);
483+
case SyntaxKind.JSDocNameReference:
484+
return visitNode(cbNode, (node as JSDocNameReference).name);
485485
case SyntaxKind.JSDocParameterTag:
486486
case SyntaxKind.JSDocPropertyTag:
487487
return visitNode(cbNode, (node as JSDocTag).tagName) ||
@@ -7152,15 +7152,15 @@ namespace ts {
71527152
return finishNode(result, pos);
71537153
}
71547154

7155-
export function parseJSDocNameExpression(mayOmitBraces?: boolean): JSDocNameExpression {
7155+
export function parseJSDocNameReference(): JSDocNameReference {
71567156
const pos = getNodePos();
7157-
const hasBrace = (mayOmitBraces ? parseOptional : parseExpected)(SyntaxKind.OpenBraceToken);
7158-
const entityName = doInsideOfContext(NodeFlags.JSDoc, () => parseEntityName(/* allowReservedWords*/ false));
7159-
if (!mayOmitBraces || hasBrace) {
7157+
const hasBrace = parseOptional(SyntaxKind.OpenBraceToken);
7158+
const entityName = parseEntityName(/* allowReservedWords*/ false);
7159+
if (hasBrace) {
71607160
parseExpectedJSDoc(SyntaxKind.CloseBraceToken);
71617161
}
71627162

7163-
const result = factory.createJSDocNameExpression(entityName);
7163+
const result = factory.createJSDocNameReference(entityName);
71647164
fixupParentReferences(result);
71657165
return finishNode(result, pos);
71667166
}
@@ -7581,17 +7581,6 @@ namespace ts {
75817581
return token() === SyntaxKind.OpenBraceToken ? parseJSDocTypeExpression() : undefined;
75827582
}
75837583

7584-
function tryParseJSDocNameExpression(): JSDocNameExpression | undefined {
7585-
return isJSDocNameExpression() ? parseJSDocNameExpression() : undefined;
7586-
}
7587-
7588-
function isJSDocNameExpression(): boolean {
7589-
return lookAhead(() => {
7590-
parseOptional(SyntaxKind.OpenBraceToken);
7591-
return isIdentifier();
7592-
});
7593-
}
7594-
75957584
function parseBracketNameInPropertyAndParamTag(): { name: EntityName, isBracketed: boolean } {
75967585
// Looking for something like '[foo]', 'foo', '[foo.bar]' or 'foo.bar'
75977586
const isBracketed = parseOptionalJsdoc(SyntaxKind.OpenBracketToken);
@@ -7691,7 +7680,7 @@ namespace ts {
76917680
}
76927681

76937682
function parseSeeTag(start: number, tagName: Identifier, indent?: number, indentText?: string): JSDocSeeTag {
7694-
const nameExpression = tryParseJSDocNameExpression();
7683+
const nameExpression = parseJSDocNameReference();
76957684
const end = getNodePos();
76967685
const comments = indent !== undefined && indentText !== undefined ? parseTrailingTagComments(start, end, indent, indentText) : undefined;
76977686
return finishNode(factory.createJSDocSeeTag(tagName, nameExpression, comments), start, end);

src/compiler/types.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@ namespace ts {
357357

358358
// JSDoc nodes
359359
JSDocTypeExpression,
360-
JSDocNameExpression,
360+
JSDocNameReference,
361361
// The * type
362362
JSDocAllType,
363363
// The ? type
@@ -3057,8 +3057,8 @@ namespace ts {
30573057
readonly type: TypeNode;
30583058
}
30593059

3060-
export interface JSDocNameExpression extends Node {
3061-
readonly kind: SyntaxKind.JSDocNameExpression;
3060+
export interface JSDocNameReference extends Node {
3061+
readonly kind: SyntaxKind.JSDocNameReference;
30623062
readonly name: EntityName;
30633063
}
30643064

@@ -3188,7 +3188,7 @@ namespace ts {
31883188

31893189
export interface JSDocSeeTag extends JSDocTag {
31903190
readonly kind: SyntaxKind.JSDocSeeTag;
3191-
readonly name?: JSDocNameExpression;
3191+
readonly name?: JSDocNameReference;
31923192
}
31933193

31943194
export interface JSDocReturnTag extends JSDocTag {
@@ -6969,8 +6969,8 @@ namespace ts {
69696969
updateJSDocNamepathType(node: JSDocNamepathType, type: TypeNode): JSDocNamepathType;
69706970
createJSDocTypeExpression(type: TypeNode): JSDocTypeExpression;
69716971
updateJSDocTypeExpression(node: JSDocTypeExpression, type: TypeNode): JSDocTypeExpression;
6972-
createJSDocNameExpression(name: EntityName): JSDocNameExpression;
6973-
updateJSDocNameExpression(node: JSDocNameExpression, name: EntityName): JSDocNameExpression;
6972+
createJSDocNameReference(name: EntityName): JSDocNameReference;
6973+
updateJSDocNameReference(node: JSDocNameReference, name: EntityName): JSDocNameReference;
69746974
createJSDocTypeLiteral(jsDocPropertyTags?: readonly JSDocPropertyLikeTag[], isArrayType?: boolean): JSDocTypeLiteral;
69756975
updateJSDocTypeLiteral(node: JSDocTypeLiteral, jsDocPropertyTags: readonly JSDocPropertyLikeTag[] | undefined, isArrayType: boolean | undefined): JSDocTypeLiteral;
69766976
createJSDocSignature(typeParameters: readonly JSDocTemplateTag[] | undefined, parameters: readonly JSDocParameterTag[], type?: JSDocReturnTag): JSDocSignature;
@@ -6985,8 +6985,8 @@ namespace ts {
69856985
updateJSDocPropertyTag(node: JSDocPropertyTag, tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression: JSDocTypeExpression | undefined, isNameFirst: boolean, comment: string | undefined): JSDocPropertyTag;
69866986
createJSDocTypeTag(tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string): JSDocTypeTag;
69876987
updateJSDocTypeTag(node: JSDocTypeTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment: string | undefined): JSDocTypeTag;
6988-
createJSDocSeeTag(tagName: Identifier | undefined, nameExpression: JSDocNameExpression | undefined, comment?: string): JSDocSeeTag;
6989-
updateJSDocSeeTag(node: JSDocSeeTag, tagName: Identifier | undefined, nameExpression: JSDocNameExpression | undefined, comment?: string): JSDocSeeTag;
6988+
createJSDocSeeTag(tagName: Identifier | undefined, nameExpression: JSDocNameReference | undefined, comment?: string): JSDocSeeTag;
6989+
updateJSDocSeeTag(node: JSDocSeeTag, tagName: Identifier | undefined, nameExpression: JSDocNameReference | undefined, comment?: string): JSDocSeeTag;
69906990
createJSDocReturnTag(tagName: Identifier | undefined, typeExpression?: JSDocTypeExpression, comment?: string): JSDocReturnTag;
69916991
updateJSDocReturnTag(node: JSDocReturnTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression | undefined, comment: string | undefined): JSDocReturnTag;
69926992
createJSDocThisTag(tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string): JSDocThisTag;

src/services/utilities.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,9 @@ namespace ts {
105105
else if (isDeclarationName(node)) {
106106
return getMeaningFromDeclaration(node.parent);
107107
}
108+
else if (isEntityName(node) && isJSDocNameReference(node.parent)) {
109+
return SemanticMeaning.All;
110+
}
108111
else if (isTypeReference(node)) {
109112
return SemanticMeaning.Type;
110113
}

tests/baselines/reference/seeTag2.js

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,14 @@ const c = ""
1111
/** @see c without brace */
1212
const d = ""
1313

14-
/** @see ?????? */
14+
/** @see ?????? wowwwwww*/
1515
const e = ""
16+
17+
/** @see {}*/
18+
const f = ""
19+
20+
/** @see */
21+
const g = ""
1622

1723

1824
//// [seeTag2.js]
@@ -24,8 +30,12 @@ var b = "";
2430
var c = "";
2531
/** @see c without brace */
2632
var d = "";
27-
/** @see ?????? */
33+
/** @see ?????? wowwwwww*/
2834
var e = "";
35+
/** @see {}*/
36+
var f = "";
37+
/** @see */
38+
var g = "";
2939

3040

3141
//// [seeTag2.d.ts]
@@ -37,5 +47,9 @@ declare const b = "";
3747
declare const c = "";
3848
/** @see c without brace */
3949
declare const d = "";
40-
/** @see ?????? */
50+
/** @see ?????? wowwwwww*/
4151
declare const e = "";
52+
/** @see {}*/
53+
declare const f = "";
54+
/** @see */
55+
declare const g = "";

tests/baselines/reference/seeTag2.symbols

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,15 @@ const c = ""
1515
const d = ""
1616
>d : Symbol(d, Decl(seeTag2.ts, 10, 5))
1717

18-
/** @see ?????? */
18+
/** @see ?????? wowwwwww*/
1919
const e = ""
2020
>e : Symbol(e, Decl(seeTag2.ts, 13, 5))
2121

22+
/** @see {}*/
23+
const f = ""
24+
>f : Symbol(f, Decl(seeTag2.ts, 16, 5))
25+
26+
/** @see */
27+
const g = ""
28+
>g : Symbol(g, Decl(seeTag2.ts, 19, 5))
29+

tests/baselines/reference/seeTag2.types

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,18 @@ const d = ""
1919
>d : ""
2020
>"" : ""
2121

22-
/** @see ?????? */
22+
/** @see ?????? wowwwwww*/
2323
const e = ""
2424
>e : ""
2525
>"" : ""
2626

27+
/** @see {}*/
28+
const f = ""
29+
>f : ""
30+
>"" : ""
31+
32+
/** @see */
33+
const g = ""
34+
>g : ""
35+
>"" : ""
36+

tests/cases/conformance/jsdoc/seeTag2.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,11 @@ const c = ""
1212
/** @see c without brace */
1313
const d = ""
1414

15-
/** @see ?????? */
15+
/** @see ?????? wowwwwww*/
1616
const e = ""
17+
18+
/** @see {}*/
19+
const f = ""
20+
21+
/** @see */
22+
const g = ""

tests/cases/fourslash/jsDocSee3.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
///<reference path="fourslash.ts" />
2+
3+
//// interface [|/*def1*/A|] { }
4+
//// namespace [|/*def2*/A|] { }
5+
//// const [|/*def3*/A|] = 1;
6+
7+
//// /**
8+
//// * @see {/*use1*/[|A|]}
9+
//// */
10+
//// const v = 2;
11+
12+
13+
goTo.marker("use1");
14+
verify.goToDefinitionIs(["def1", "def2", "def3"]);
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/// <reference path='fourslash.ts'/>
2+
3+
//// [|interface [|{| "contextRangeIndex": 0 |}A|] {}|]
4+
//// /**
5+
//// * @see {[|A|]}
6+
//// */
7+
//// declare const a: [|A|]
8+
9+
10+
const [rDef, ...ranges] = test.ranges();
11+
verify.rangesAreRenameLocations({ findInComments: true, ranges });
12+

0 commit comments

Comments
 (0)