diff --git a/Jakefile.js b/Jakefile.js index 0da8e524686a4..ebea337599415 100644 --- a/Jakefile.js +++ b/Jakefile.js @@ -962,6 +962,7 @@ function lintFileAsync(options, path, cb) { var servicesLintTargets = [ "navigateTo.ts", + "navigationBar.ts", "outliningElementsCollector.ts", "patternMatcher.ts", "services.ts", diff --git a/src/services/navigationBar.ts b/src/services/navigationBar.ts index 0efdaf70954f8..2cd93d3856c2f 100644 --- a/src/services/navigationBar.ts +++ b/src/services/navigationBar.ts @@ -46,7 +46,7 @@ namespace ts.NavigationBar { } function getChildNodes(nodes: Node[]): Node[] { - let childNodes: Node[] = []; + const childNodes: Node[] = []; function visit(node: Node) { switch (node.kind) { @@ -109,7 +109,7 @@ namespace ts.NavigationBar { } } - //for (let i = 0, n = nodes.length; i < n; i++) { + // for (let i = 0, n = nodes.length; i < n; i++) { // let node = nodes[i]; // if (node.kind === SyntaxKind.ClassDeclaration || @@ -123,13 +123,13 @@ namespace ts.NavigationBar { // else if (node.kind === SyntaxKind.VariableStatement) { // childNodes.push.apply(childNodes, (node).declarations); // } - //} + // } forEach(nodes, visit); return sortNodes(childNodes); } function getTopLevelNodes(node: SourceFile): Node[] { - let topLevelNodes: Node[] = []; + const topLevelNodes: Node[] = []; topLevelNodes.push(node); addTopLevelNodes(node.statements, topLevelNodes); @@ -157,7 +157,7 @@ namespace ts.NavigationBar { function addTopLevelNodes(nodes: Node[], topLevelNodes: Node[]): void { nodes = sortNodes(nodes); - for (let node of nodes) { + for (const node of nodes) { switch (node.kind) { case SyntaxKind.ClassDeclaration: topLevelNodes.push(node); @@ -198,7 +198,7 @@ namespace ts.NavigationBar { } function hasNamedFunctionDeclarations(nodes: NodeArray): boolean { - for (let s of nodes) { + for (const s of nodes) { if (s.kind === SyntaxKind.FunctionDeclaration && !isEmpty((s).name.text)) { return true; } @@ -238,17 +238,17 @@ namespace ts.NavigationBar { } function getItemsWorker(nodes: Node[], createItem: (n: Node) => ts.NavigationBarItem): ts.NavigationBarItem[] { - let items: ts.NavigationBarItem[] = []; + const items: ts.NavigationBarItem[] = []; - let keyToItem: Map = {}; + const keyToItem: Map = {}; - for (let child of nodes) { - let item = createItem(child); + for (const child of nodes) { + const item = createItem(child); if (item !== undefined) { if (item.text.length > 0) { - let key = item.text + "-" + item.kind + "-" + item.indent; + const key = item.text + "-" + item.kind + "-" + item.indent; - let itemWithSameName = keyToItem[key]; + const itemWithSameName = keyToItem[key]; if (itemWithSameName) { // We had an item with the same name. Merge these items together. merge(itemWithSameName, item); @@ -275,8 +275,8 @@ namespace ts.NavigationBar { // Next, recursively merge or add any children in the source as appropriate. outer: - for (let sourceChild of source.childItems) { - for (let targetChild of target.childItems) { + for (const sourceChild of source.childItems) { + for (const targetChild of target.childItems) { if (targetChild.text === sourceChild.text && targetChild.kind === sourceChild.kind) { // Found a match. merge them. merge(targetChild, sourceChild); @@ -383,7 +383,7 @@ namespace ts.NavigationBar { return !text || text.trim() === ""; } - function getNavigationBarItem(text: string, kind: string, kindModifiers: string, spans: TextSpan[], childItems: NavigationBarItem[] = [], indent: number = 0): NavigationBarItem { + function getNavigationBarItem(text: string, kind: string, kindModifiers: string, spans: TextSpan[], childItems: NavigationBarItem[] = [], indent = 0): NavigationBarItem { if (isEmpty(text)) { return undefined; } @@ -437,7 +437,7 @@ namespace ts.NavigationBar { } // Otherwise, we need to aggregate each identifier to build up the qualified name. - let result: string[] = []; + const result: string[] = []; result.push(moduleDeclaration.name.text); @@ -451,9 +451,9 @@ namespace ts.NavigationBar { } function createModuleItem(node: ModuleDeclaration): NavigationBarItem { - let moduleName = getModuleName(node); + const moduleName = getModuleName(node); - let childItems = getItemsWorker(getChildNodes((getInnermostModule(node).body).statements), createChildItem); + const childItems = getItemsWorker(getChildNodes((getInnermostModule(node).body).statements), createChildItem); return getNavigationBarItem(moduleName, ts.ScriptElementKind.moduleElement, @@ -465,9 +465,9 @@ namespace ts.NavigationBar { function createFunctionItem(node: FunctionDeclaration): ts.NavigationBarItem { if (node.body && node.body.kind === SyntaxKind.Block) { - let childItems = getItemsWorker(sortNodes((node.body).statements), createChildItem); + const childItems = getItemsWorker(sortNodes((node.body).statements), createChildItem); - return getNavigationBarItem(!node.name ? "default": node.name.text, + return getNavigationBarItem(!node.name ? "default" : node.name.text, ts.ScriptElementKind.functionElement, getNodeModifiers(node), [getNodeSpan(node)], @@ -489,7 +489,7 @@ namespace ts.NavigationBar { function createMemberFunctionLikeItem(node: MethodDeclaration | ConstructorDeclaration): ts.NavigationBarItem { if (node.body && node.body.kind === SyntaxKind.Block) { - let childItems = getItemsWorker(sortNodes((node.body).statements), createChildItem); + const childItems = getItemsWorker(sortNodes((node.body).statements), createChildItem); let scriptElementKind: string; let memberFunctionName: string; if (node.kind === SyntaxKind.MethodDeclaration) { @@ -513,16 +513,16 @@ namespace ts.NavigationBar { } function createSourceFileItem(node: SourceFile): ts.NavigationBarItem { - let childItems = getItemsWorker(getChildNodes(node.statements), createChildItem); + const childItems = getItemsWorker(getChildNodes(node.statements), createChildItem); if (childItems === undefined || childItems.length === 0) { return undefined; } hasGlobalNode = true; - let rootName = isExternalModule(node) + const rootName = isExternalModule(node) ? "\"" + escapeString(getBaseFileName(removeFileExtension(normalizePath(node.fileName)))) + "\"" - : "" + : ""; return getNavigationBarItem(rootName, ts.ScriptElementKind.moduleElement, @@ -535,14 +535,14 @@ namespace ts.NavigationBar { let childItems: NavigationBarItem[]; if (node.members) { - let constructor = forEach(node.members, member => { + const constructor = forEach(node.members, member => { return member.kind === SyntaxKind.Constructor && member; }); // Add the constructor parameters in as children of the class (for property parameters). // Note that *all non-binding pattern named* parameters will be added to the nodes array, but parameters that // are not properties will be filtered out later by createChildItem. - let nodes: Node[] = removeDynamicallyNamedProperties(node); + const nodes: Node[] = removeDynamicallyNamedProperties(node); if (constructor) { addRange(nodes, filter(constructor.parameters, p => !isBindingPattern(p.name))); } @@ -550,7 +550,7 @@ namespace ts.NavigationBar { childItems = getItemsWorker(sortNodes(nodes), createChildItem); } - var nodeName = !node.name ? "default" : node.name.text; + const nodeName = !node.name ? "default" : node.name.text; return getNavigationBarItem( nodeName, @@ -562,7 +562,7 @@ namespace ts.NavigationBar { } function createEnumItem(node: EnumDeclaration): ts.NavigationBarItem { - let childItems = getItemsWorker(sortNodes(removeComputedProperties(node)), createChildItem); + const childItems = getItemsWorker(sortNodes(removeComputedProperties(node)), createChildItem); return getNavigationBarItem( node.name.text, ts.ScriptElementKind.enumElement, @@ -573,7 +573,7 @@ namespace ts.NavigationBar { } function createInterfaceItem(node: InterfaceDeclaration): ts.NavigationBarItem { - let childItems = getItemsWorker(sortNodes(removeDynamicallyNamedProperties(node)), createChildItem); + const childItems = getItemsWorker(sortNodes(removeDynamicallyNamedProperties(node)), createChildItem); return getNavigationBarItem( node.name.text, ts.ScriptElementKind.interfaceElement, @@ -591,7 +591,7 @@ namespace ts.NavigationBar { /** * Like removeComputedProperties, but retains the properties with well known symbol names */ - function removeDynamicallyNamedProperties(node: ClassDeclaration | InterfaceDeclaration): Declaration[]{ + function removeDynamicallyNamedProperties(node: ClassDeclaration | InterfaceDeclaration): Declaration[] { return filter(node.members, member => !hasDynamicName(member)); } @@ -619,11 +619,11 @@ namespace ts.NavigationBar { const anonClassText = ""; let indent = 0; - let rootName = isExternalModule(sourceFile) ? + const rootName = isExternalModule(sourceFile) ? "\"" + escapeString(getBaseFileName(removeFileExtension(normalizePath(sourceFile.fileName)))) + "\"" : ""; - let sourceFileItem = getNavBarItem(rootName, ScriptElementKind.moduleElement, [getNodeSpan(sourceFile)]); + const sourceFileItem = getNavBarItem(rootName, ScriptElementKind.moduleElement, [getNodeSpan(sourceFile)]); let topItem = sourceFileItem; // Walk the whole file, because we want to also find function expressions - which may be in variable initializer, @@ -656,12 +656,12 @@ namespace ts.NavigationBar { } } - function createNavBarItem(node: Node) : NavigationBarItem { + function createNavBarItem(node: Node): NavigationBarItem { switch (node.kind) { case SyntaxKind.VariableDeclaration: // Only add to the navbar if at the top-level of the file // Note: "const" and "let" are also SyntaxKind.VariableDeclarations - if(node.parent/*VariableDeclarationList*/.parent/*VariableStatement*/ + if (node.parent/*VariableDeclarationList*/.parent/*VariableStatement*/ .parent/*SourceFile*/.kind !== SyntaxKind.SourceFile) { return undefined; } @@ -724,7 +724,7 @@ namespace ts.NavigationBar { function getNavBarItem(text: string, kind: string, spans: TextSpan[], kindModifiers = ScriptElementKindModifier.none): NavigationBarItem { return { text, kind, kindModifiers, spans, childItems: [], indent, bolded: false, grayed: false - } + }; } function getDefineModuleItem(node: Node): NavigationBarItem { @@ -737,7 +737,7 @@ namespace ts.NavigationBar { return undefined; } const callExpr = node.parent as CallExpression; - if (callExpr.expression.kind !== SyntaxKind.Identifier || callExpr.expression.getText() !== 'define') { + if (callExpr.expression.kind !== SyntaxKind.Identifier || callExpr.expression.getText() !== "define") { return undefined; }