From f1895bfcd44bec278aa8c64c19397f8a89f12d36 Mon Sep 17 00:00:00 2001 From: Alexander T Date: Wed, 3 Jun 2020 17:55:03 +0300 Subject: [PATCH] fix(38785): include in NavigationBar child items from default exported functions --- src/services/navigationBar.ts | 6 +- .../navigationItemsExportDefaultExpression.ts | 56 +++++++++++++++++- .../navigationItemsExportEqualsExpression.ts | 58 ++++++++++++++++++- 3 files changed, 115 insertions(+), 5 deletions(-) diff --git a/src/services/navigationBar.ts b/src/services/navigationBar.ts index be623e7911873..393efc63a47a6 100644 --- a/src/services/navigationBar.ts +++ b/src/services/navigationBar.ts @@ -310,9 +310,11 @@ namespace ts.NavigationBar { case SyntaxKind.ExportAssignment: { const expression = (node).expression; - if (isObjectLiteralExpression(expression)) { + const child = isObjectLiteralExpression(expression) ? expression : + isArrowFunction(expression) || isFunctionExpression(expression) ? expression.body : undefined; + if (child) { startNode(node); - addChildrenRecursively(expression); + addChildrenRecursively(child); endNode(); } else { diff --git a/tests/cases/fourslash/navigationItemsExportDefaultExpression.ts b/tests/cases/fourslash/navigationItemsExportDefaultExpression.ts index c3059d50c0369..23ba0d74dce34 100644 --- a/tests/cases/fourslash/navigationItemsExportDefaultExpression.ts +++ b/tests/cases/fourslash/navigationItemsExportDefaultExpression.ts @@ -1,8 +1,24 @@ /// -//// const abc = 12; //// export default function () {} +//// export default function () { +//// return class Foo { +//// } +//// } +//// //// export default () => "" +//// export default () => { +//// return class Foo { +//// } +//// } +//// +//// export default function f1() {} +//// export default function f2() { +//// return class Foo { +//// } +//// } +//// +//// const abc = 12; //// export default abc; //// export default class AB {} //// export default { @@ -22,11 +38,33 @@ verify.navigationTree({ "kind": "function", "kindModifiers": "export" }, + { + "text": "default", + "kind": "function", + "kindModifiers": "export", + "childItems": [ + { + "text": "Foo", + "kind": "class" + } + ] + }, { "text": "default", "kind": "function", "kindModifiers": "export" }, + { + "text": "default", + "kind": "function", + "kindModifiers": "export", + "childItems": [ + { + "text": "Foo", + "kind": "class" + } + ] + }, { "text": "default", "kind": "const", @@ -65,6 +103,22 @@ verify.navigationTree({ "text": "default", "kind": "const", "kindModifiers": "export" + }, + { + "text": "f1", + "kind": "function", + "kindModifiers": "export" + }, + { + "text": "f2", + "kind": "function", + "kindModifiers": "export", + "childItems": [ + { + "text": "Foo", + "kind": "class" + } + ] } ] }); diff --git a/tests/cases/fourslash/navigationItemsExportEqualsExpression.ts b/tests/cases/fourslash/navigationItemsExportEqualsExpression.ts index f63db161b092a..68bc12716731e 100644 --- a/tests/cases/fourslash/navigationItemsExportEqualsExpression.ts +++ b/tests/cases/fourslash/navigationItemsExportEqualsExpression.ts @@ -1,10 +1,26 @@ // 35477 /// -//// const abc = 12; -//// export = abc; //// export = function () {} +//// export = function () { +//// return class Foo { +//// } +//// } +//// //// export = () => "" +//// export = () => { +//// return class Foo { +//// } +//// } +//// +//// export = function f1() {} +//// export = function f2() { +//// return class Foo { +//// } +//// } +//// +//// const abc = 12; +//// export = abc; //// export = class AB {} //// export = { //// a: 1, @@ -23,11 +39,49 @@ verify.navigationTree({ "kind": "function", "kindModifiers": "export" }, + { + "text": "export=", + "kind": "function", + "kindModifiers": "export", + "childItems": [ + { + "text": "Foo", + "kind": "class" + } + ] + }, + { + "text": "export=", + "kind": "function", + "kindModifiers": "export" + }, + { + "text": "export=", + "kind": "function", + "kindModifiers": "export", + "childItems": [ + { + "text": "Foo", + "kind": "class" + } + ] + }, { "text": "export=", "kind": "function", "kindModifiers": "export" }, + { + "text": "export=", + "kind": "function", + "kindModifiers": "export", + "childItems": [ + { + "text": "Foo", + "kind": "class" + } + ] + }, { "text": "export=", "kind": "class",