From 480883b227c2cdebd138c56ff2160d8310272f07 Mon Sep 17 00:00:00 2001 From: Jason Freeman Date: Tue, 25 Nov 2014 14:08:21 -0800 Subject: [PATCH] Skip computed properties in the nav bar --- computed.txt | 12 ----------- src/services/navigationBar.ts | 15 +++++++++----- .../navigationItemsComputedProperties.ts | 20 +++++++++++++++++++ ...iptLexicalStructureItemsModuleVariables.ts | 1 - 4 files changed, 30 insertions(+), 18 deletions(-) delete mode 100644 computed.txt create mode 100644 tests/cases/fourslash/navigationItemsComputedProperties.ts diff --git a/computed.txt b/computed.txt deleted file mode 100644 index a8869ad7d9d..00000000000 --- a/computed.txt +++ /dev/null @@ -1,12 +0,0 @@ -Parse computed expressions and add tests -Disallow computed expressions in class instance properties -Disallow computed expressions in object literal properties, methods, or accessors -Disallow in interfaces - -Emit computed properties for classes and object literals -Discuss down level support for computed properties - -Tests that need to move: -tests\cases\conformance\parser\ecmascript5\IndexSignatures\parserIndexSignature4.ts -tests\cases\conformance\parser\ecmascript5\IndexSignatures\parserIndexSignature5.ts -tests\cases\conformance\parser\ecmascript5\IndexSignatures\parserIndexSignature11.ts \ No newline at end of file diff --git a/src/services/navigationBar.ts b/src/services/navigationBar.ts index 6e4303d0cd8..deb779bea2c 100644 --- a/src/services/navigationBar.ts +++ b/src/services/navigationBar.ts @@ -377,9 +377,10 @@ module ts.NavigationBar { // Add the constructor parameters in as children of the class (for property parameters). // Note that *all* parameters will be added to the nodes array, but parameters that // are not properties will be filtered out later by createChildItem. - var nodes: Node[] = constructor - ? node.members.concat(constructor.parameters) - : node.members; + var nodes: Node[] = removeComputedProperties(node); + if (constructor) { + nodes.push.apply(nodes, constructor.parameters); + } var childItems = getItemsWorker(sortNodes(nodes), createChildItem); } @@ -394,7 +395,7 @@ module ts.NavigationBar { } function createEnumItem(node: EnumDeclaration): ts.NavigationBarItem { - var childItems = getItemsWorker(sortNodes(node.members), createChildItem); + var childItems = getItemsWorker(sortNodes(removeComputedProperties(node)), createChildItem); return getNavigationBarItem( node.name.text, ts.ScriptElementKind.enumElement, @@ -405,7 +406,7 @@ module ts.NavigationBar { } function createIterfaceItem(node: InterfaceDeclaration): ts.NavigationBarItem { - var childItems = getItemsWorker(sortNodes(node.members), createChildItem); + var childItems = getItemsWorker(sortNodes(removeComputedProperties(node)), createChildItem); return getNavigationBarItem( node.name.text, ts.ScriptElementKind.interfaceElement, @@ -416,6 +417,10 @@ module ts.NavigationBar { } } + function removeComputedProperties(node: ClassDeclaration | InterfaceDeclaration | EnumDeclaration): Declaration[] { + return filter(node.members, member => member.name === undefined || member.name.kind !== SyntaxKind.ComputedPropertyName); + } + function getInnermostModule(node: ModuleDeclaration): ModuleDeclaration { while (node.body.kind === SyntaxKind.ModuleDeclaration) { node = node.body; diff --git a/tests/cases/fourslash/navigationItemsComputedProperties.ts b/tests/cases/fourslash/navigationItemsComputedProperties.ts new file mode 100644 index 00000000000..8a88966b2ef --- /dev/null +++ b/tests/cases/fourslash/navigationItemsComputedProperties.ts @@ -0,0 +1,20 @@ +/// + +////{| "itemName": "C", "kind": "class", "parentName": "" |} +////class C { +//// {| "itemName": "foo", "kind": "method", "parentName": "C" |} +//// foo() { } +//// ["hi" + "bye"]() { } +//// {| "itemName": "bar", "kind": "method", "parentName": "C" |} +//// bar() { } +////} + +test.markers().forEach(marker => { + verify.navigationItemsListContains( + marker.data.itemName, + marker.data.kind, + marker.data.itemName, + "exact", + marker.fileName, + marker.data.parentName); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/scriptLexicalStructureItemsModuleVariables.ts b/tests/cases/fourslash/scriptLexicalStructureItemsModuleVariables.ts index 481d67a4e28..85bf609105c 100644 --- a/tests/cases/fourslash/scriptLexicalStructureItemsModuleVariables.ts +++ b/tests/cases/fourslash/scriptLexicalStructureItemsModuleVariables.ts @@ -18,7 +18,6 @@ ////module Module1 { //// export var z = 0; ////} -debugger; goTo.marker("file1"); verify.getScriptLexicalStructureListContains("Module1", "module"); verify.getScriptLexicalStructureListContains("x", "var");