Skip to content

Commit

Permalink
Cherry-pick PR #47395 into release-4.5 (#47421)
Browse files Browse the repository at this point in the history
Component commits:
f230a5a Add failing test.

3ba8469 Guard against undefined module bodies in navbar/navtree.

Co-authored-by: Daniel Rosenwasser <drosen@microsoft.com>
  • Loading branch information
TypeScript Bot and DanielRosenwasser authored Jan 13, 2022
1 parent 0854a93 commit 14016a7
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 1 deletion.
5 changes: 4 additions & 1 deletion src/services/navigationBar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -650,7 +650,10 @@ namespace ts.NavigationBar {
// We use 1 NavNode to represent 'A.B.C', but there are multiple source nodes.
// Only merge module nodes that have the same chain. Don't merge 'A.B.C' with 'A'!
function areSameModule(a: ModuleDeclaration, b: ModuleDeclaration): boolean {
return a.body!.kind === b.body!.kind && (a.body!.kind !== SyntaxKind.ModuleDeclaration || areSameModule(a.body as ModuleDeclaration, b.body as ModuleDeclaration));
if (!a.body || !b.body) {
return a.body === b.body;
}
return a.body.kind === b.body.kind && (a.body.kind !== SyntaxKind.ModuleDeclaration || areSameModule(a.body as ModuleDeclaration, b.body as ModuleDeclaration));
}

/** Merge source into target. Source should be thrown away after this is called. */
Expand Down
24 changes: 24 additions & 0 deletions tests/cases/fourslash/navbarForDoubleAmbientModules01.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/// <reference path="./fourslash.ts" />

//// declare module "foo";
//// declare module "foo";

verify.navigationBar([
{
"text": "<global>",
"kind": "script",
"childItems": [
{
"text": "\"foo\"",
"kind": "module",
"kindModifiers": "declare"
}
]
},
{
"text": "\"foo\"",
"kind": "module",
"kindModifiers": "declare",
"indent": 1
}
]);

0 comments on commit 14016a7

Please sign in to comment.