Skip to content

Commit 8721701

Browse files
author
Andy
authored
Add 'nameSpan' property to NavigationTree (microsoft#24698)
1 parent d2be8dd commit 8721701

9 files changed

Lines changed: 21 additions & 9 deletions

File tree

src/harness/fourslash.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2869,6 +2869,7 @@ Actual: ${stringify(fullActual)}`);
28692869
function replacer(key: string, value: any) {
28702870
switch (key) {
28712871
case "spans":
2872+
case "nameSpan":
28722873
return options && options.checkSpans ? value : undefined;
28732874
case "start":
28742875
case "length":

src/server/client.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,7 @@ namespace ts.server {
451451
kind: tree.kind,
452452
kindModifiers: tree.kindModifiers,
453453
spans: tree.spans.map(span => this.decodeSpan(span, fileName, lineMap)),
454+
nameSpan: tree.nameSpan && this.decodeSpan(tree.nameSpan, fileName, lineMap),
454455
childItems: map(tree.childItems, item => this.decodeNavigationTree(item, fileName, lineMap))
455456
};
456457
}

src/server/protocol.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2555,6 +2555,7 @@ namespace ts.server.protocol {
25552555
kind: ScriptElementKind;
25562556
kindModifiers: string;
25572557
spans: TextSpan[];
2558+
nameSpan: TextSpan | undefined;
25582559
childItems?: NavigationTree[];
25592560
}
25602561

src/server/session.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1507,6 +1507,7 @@ namespace ts.server {
15071507
kind: tree.kind,
15081508
kindModifiers: tree.kindModifiers,
15091509
spans: tree.spans.map(span => this.toLocationTextSpan(span, scriptInfo)),
1510+
nameSpan: tree.nameSpan && this.toLocationTextSpan(tree.nameSpan, scriptInfo),
15101511
childItems: map(tree.childItems, item => this.toLocationNavigationTree(item, scriptInfo))
15111512
};
15121513
}

src/services/navigationBar.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ namespace ts.NavigationBar {
3636
*/
3737
interface NavigationBarNode {
3838
node: Node;
39+
name: DeclarationName | undefined;
3940
additionalNodes: Node[] | undefined;
4041
parent: NavigationBarNode | undefined; // Present for all but root node
4142
children: NavigationBarNode[] | undefined;
@@ -91,7 +92,7 @@ namespace ts.NavigationBar {
9192

9293
function rootNavigationBarNode(sourceFile: SourceFile): NavigationBarNode {
9394
Debug.assert(!parentsStack.length);
94-
const root: NavigationBarNode = { node: sourceFile, additionalNodes: undefined, parent: undefined, children: undefined, indent: 0 };
95+
const root: NavigationBarNode = { node: sourceFile, name: undefined, additionalNodes: undefined, parent: undefined, children: undefined, indent: 0 };
9596
parent = root;
9697
for (const statement of sourceFile.statements) {
9798
addChildrenRecursively(statement);
@@ -108,6 +109,7 @@ namespace ts.NavigationBar {
108109
function emptyNavigationBarNode(node: Node): NavigationBarNode {
109110
return {
110111
node,
112+
name: isDeclaration(node) || isExpression(node) ? getNameOfDeclaration(node) : undefined,
111113
additionalNodes: undefined,
112114
parent,
113115
children: undefined,
@@ -420,12 +422,11 @@ namespace ts.NavigationBar {
420422
}
421423
}
422424

423-
function getItemName(node: Node): string {
425+
function getItemName(node: Node, name: Node | undefined): string {
424426
if (node.kind === SyntaxKind.ModuleDeclaration) {
425427
return getModuleName(<ModuleDeclaration>node);
426428
}
427429

428-
const name = getNameOfDeclaration(<Declaration>node);
429430
if (name) {
430431
const text = nodeText(name);
431432
if (text.length > 0) {
@@ -534,17 +535,18 @@ namespace ts.NavigationBar {
534535

535536
function convertToTree(n: NavigationBarNode): NavigationTree {
536537
return {
537-
text: getItemName(n.node),
538+
text: getItemName(n.node, n.name),
538539
kind: getNodeKind(n.node),
539540
kindModifiers: getModifiers(n.node),
540541
spans: getSpans(n),
542+
nameSpan: n.name && getNodeSpan(n.name),
541543
childItems: map(n.children, convertToTree)
542544
};
543545
}
544546

545547
function convertToTopLevelItem(n: NavigationBarNode): NavigationBarItem {
546548
return {
547-
text: getItemName(n.node),
549+
text: getItemName(n.node, n.name),
548550
kind: getNodeKind(n.node),
549551
kindModifiers: getModifiers(n.node),
550552
spans: getSpans(n),
@@ -556,7 +558,7 @@ namespace ts.NavigationBar {
556558

557559
function convertToChildItem(n: NavigationBarNode): NavigationBarItem {
558560
return {
559-
text: getItemName(n.node),
561+
text: getItemName(n.node, n.name),
560562
kind: getNodeKind(n.node),
561563
kindModifiers: getNodeModifiers(n.node),
562564
spans: getSpans(n),

src/services/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,7 @@ namespace ts {
425425
* There will be more than one if this is the result of merging.
426426
*/
427427
spans: TextSpan[];
428+
nameSpan: TextSpan | undefined;
428429
/** Present if non-empty */
429430
childItems?: NavigationTree[];
430431
}

tests/baselines/reference/api/tsserverlibrary.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4657,6 +4657,7 @@ declare namespace ts {
46574657
* There will be more than one if this is the result of merging.
46584658
*/
46594659
spans: TextSpan[];
4660+
nameSpan: TextSpan | undefined;
46604661
/** Present if non-empty */
46614662
childItems?: NavigationTree[];
46624663
}
@@ -7532,6 +7533,7 @@ declare namespace ts.server.protocol {
75327533
kind: ScriptElementKind;
75337534
kindModifiers: string;
75347535
spans: TextSpan[];
7536+
nameSpan: TextSpan | undefined;
75357537
childItems?: NavigationTree[];
75367538
}
75377539
type TelemetryEventName = "telemetry";

tests/baselines/reference/api/typescript.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4657,6 +4657,7 @@ declare namespace ts {
46574657
* There will be more than one if this is the result of merging.
46584658
*/
46594659
spans: TextSpan[];
4660+
nameSpan: TextSpan | undefined;
46604661
/** Present if non-empty */
46614662
childItems?: NavigationTree[];
46624663
}

tests/cases/fourslash/navigationBarInitializerSpans.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
/// <reference path="fourslash.ts" />
22

3-
////const [|x = () => 0|];
4-
////const f = [|function f() {}|];
3+
////const [|[|x|] = () => 0|];
4+
////const f = [|function [|f|]() {}|];
55

6-
const [s0, s1] = test.spans();
6+
const [s0, s0Name, s1, s1Name] = test.spans();
77
const sGlobal = { start: 0, length: 45 };
88

99
verify.navigationTree({
@@ -15,11 +15,13 @@ verify.navigationTree({
1515
text: "f",
1616
kind: "function",
1717
spans: [s1],
18+
nameSpan: s1Name,
1819
},
1920
{
2021
text: "x",
2122
kind: "const",
2223
spans: [s0],
24+
nameSpan: s0Name,
2325
},
2426
]
2527
}, { checkSpans: true });

0 commit comments

Comments
 (0)