Add language service support for const

This commit is contained in:
Mohamed Hegazy 2014-10-16 10:28:00 -07:00
parent e15f4e6d34
commit 60bb37be60
5 changed files with 40 additions and 3 deletions

View file

@ -233,7 +233,12 @@ module ts.NavigationBar {
return createItem(node, getTextOfNode((<FunctionDeclaration>node).name), ts.ScriptElementKind.functionElement);
case SyntaxKind.VariableDeclaration:
return createItem(node, getTextOfNode((<VariableDeclaration>node).name), ts.ScriptElementKind.variableElement);
if (node.flags & NodeFlags.Const) {
return createItem(node, getTextOfNode((<VariableDeclaration>node).name), ts.ScriptElementKind.constantElement);
}
else {
return createItem(node, getTextOfNode((<VariableDeclaration>node).name), ts.ScriptElementKind.variableElement);
}
case SyntaxKind.Constructor:
return createItem(node, "constructor", ts.ScriptElementKind.constructorImplementationElement);

View file

@ -1235,7 +1235,9 @@ module ts {
static label = "label";
static alias = "alias"
static alias = "alias";
static constantElement = "constant";
}
export class ScriptElementKindModifier {
@ -2720,6 +2722,9 @@ module ts {
if (isFirstDeclarationOfSymbolParameter(symbol)) {
return ScriptElementKind.parameterElement;
}
else if(forEach(symbol.declarations, d => d.flags & NodeFlags.Const)) {
return ScriptElementKind.constantElement;
}
return isLocalVariableOrFunction(symbol) ? ScriptElementKind.localVariableElement : ScriptElementKind.variableElement;
}
if (flags & SymbolFlags.Function) return isLocalVariableOrFunction(symbol) ? ScriptElementKind.localFunctionElement : ScriptElementKind.functionElement;
@ -2751,7 +2756,7 @@ module ts {
case SyntaxKind.ClassDeclaration: return ScriptElementKind.classElement;
case SyntaxKind.InterfaceDeclaration: return ScriptElementKind.interfaceElement;
case SyntaxKind.EnumDeclaration: return ScriptElementKind.enumElement;
case SyntaxKind.VariableDeclaration: return ScriptElementKind.variableElement;
case SyntaxKind.VariableDeclaration: return node.flags & NodeFlags.Const ? ScriptElementKind.constantElement: ScriptElementKind.variableElement;
case SyntaxKind.FunctionDeclaration: return ScriptElementKind.functionElement;
case SyntaxKind.GetAccessor: return ScriptElementKind.memberGetAccessorElement;
case SyntaxKind.SetAccessor: return ScriptElementKind.memberSetAccessorElement;
@ -2840,6 +2845,7 @@ module ts {
switch (symbolKind) {
case ScriptElementKind.memberVariableElement:
case ScriptElementKind.variableElement:
case ScriptElementKind.constantElement:
case ScriptElementKind.parameterElement:
case ScriptElementKind.localVariableElement:
// If it is call or construct signature of lambda's write type name

View file

@ -0,0 +1,7 @@
///<reference path="fourslash.ts" />
////const c = "s";
/////**/
goTo.marker();
verify.completionListContains("c", /*text*/ undefined, /*documentation*/ undefined, "constant");

View file

@ -0,0 +1,13 @@
/// <reference path="fourslash.ts" />
//// {| "itemName": "c", "kind": "constant", "parentName": "" |}const c = 0;
test.markers().forEach(marker => {
verify.getScriptLexicalStructureListContains(
marker.data.itemName,
marker.data.kind,
marker.fileName,
marker.data.parentName,
marker.data.isAdditionalRange,
marker.position);
});

View file

@ -0,0 +1,6 @@
/// <reference path='fourslash.ts' />
////const /**/c = 0 ;
goTo.marker();
verify.quickInfoIs("(constant) c: number");