Skip to content

Commit 3e32a61

Browse files
author
Andy Hanson
committed
Include declaration expressions (class expressions and function expressions) in named declarations
1 parent cf74930 commit 3e32a61

File tree

2 files changed

+34
-5
lines changed

2 files changed

+34
-5
lines changed

src/services/services.ts

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -904,6 +904,7 @@ namespace ts {
904904
function visit(node: Node): void {
905905
switch (node.kind) {
906906
case SyntaxKind.FunctionDeclaration:
907+
case SyntaxKind.FunctionExpression:
907908
case SyntaxKind.MethodDeclaration:
908909
case SyntaxKind.MethodSignature:
909910
const functionDeclaration = <FunctionLikeDeclaration>node;
@@ -930,6 +931,7 @@ namespace ts {
930931
break;
931932

932933
case SyntaxKind.ClassDeclaration:
934+
case SyntaxKind.ClassExpression:
933935
case SyntaxKind.InterfaceDeclaration:
934936
case SyntaxKind.TypeAliasDeclaration:
935937
case SyntaxKind.EnumDeclaration:
@@ -967,11 +969,15 @@ namespace ts {
967969
}
968970
// fall through
969971
case SyntaxKind.VariableDeclaration:
970-
case SyntaxKind.BindingElement:
971-
if (isBindingPattern((<VariableDeclaration>node).name)) {
972-
forEachChild((<VariableDeclaration>node).name, visit);
972+
case SyntaxKind.BindingElement: {
973+
const decl = <VariableDeclaration> node;
974+
if (isBindingPattern(decl.name)) {
975+
forEachChild(decl.name, visit);
973976
break;
974977
}
978+
if (decl.initializer)
979+
visit(decl.initializer);
980+
}
975981
case SyntaxKind.EnumMember:
976982
case SyntaxKind.PropertyDeclaration:
977983
case SyntaxKind.PropertySignature:
@@ -2770,7 +2776,9 @@ namespace ts {
27702776
/* @internal */ export function getNodeKind(node: Node): string {
27712777
switch (node.kind) {
27722778
case SyntaxKind.ModuleDeclaration: return ScriptElementKind.moduleElement;
2773-
case SyntaxKind.ClassDeclaration: return ScriptElementKind.classElement;
2779+
case SyntaxKind.ClassDeclaration:
2780+
case SyntaxKind.ClassExpression:
2781+
return ScriptElementKind.classElement;
27742782
case SyntaxKind.InterfaceDeclaration: return ScriptElementKind.interfaceElement;
27752783
case SyntaxKind.TypeAliasDeclaration: return ScriptElementKind.typeElement;
27762784
case SyntaxKind.EnumDeclaration: return ScriptElementKind.enumElement;
@@ -2780,7 +2788,9 @@ namespace ts {
27802788
: isLet(node)
27812789
? ScriptElementKind.letElement
27822790
: ScriptElementKind.variableElement;
2783-
case SyntaxKind.FunctionDeclaration: return ScriptElementKind.functionElement;
2791+
case SyntaxKind.FunctionDeclaration:
2792+
case SyntaxKind.FunctionExpression:
2793+
return ScriptElementKind.functionElement;
27842794
case SyntaxKind.GetAccessor: return ScriptElementKind.memberGetAccessorElement;
27852795
case SyntaxKind.SetAccessor: return ScriptElementKind.memberSetAccessorElement;
27862796
case SyntaxKind.MethodDeclaration:
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/// <reference path="fourslash.ts"/>
2+
3+
////class A {}
4+
////const B = class C {
5+
//// public x;
6+
////};
7+
////function D() {}
8+
////const E = function F() {}
9+
10+
// Search for properties defined in the constructor, but not other constructor paramters
11+
var searchValue = "search";
12+
verify.navigationItemsListContains("A", "class", "A", "exact");
13+
verify.navigationItemsListContains("B", "const", "B", "exact");
14+
verify.navigationItemsListContains("C", "class", "C", "exact");
15+
verify.navigationItemsListContains("x", "property", "x", "exact");
16+
17+
verify.navigationItemsListContains("D", "function", "D", "exact");
18+
verify.navigationItemsListContains("E", "const", "E", "exact");
19+
verify.navigationItemsListContains("F", "function", "F", "exact")

0 commit comments

Comments
 (0)