From 383f01dbf6c4f1f8f6d9dfcb9cc119bb8ffd39c6 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Mon, 30 Mar 2015 20:28:24 -0700 Subject: [PATCH] Handel export default declaration completions --- src/services/services.ts | 7 ++++++- tests/cases/fourslash/exportDefaultClass.ts | 12 ++++++++++++ tests/cases/fourslash/exportDefaultFunction.ts | 12 ++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/exportDefaultClass.ts create mode 100644 tests/cases/fourslash/exportDefaultFunction.ts diff --git a/src/services/services.ts b/src/services/services.ts index 41ffc04e5ae..4609c722786 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2404,6 +2404,11 @@ module ts { return undefined; } + // If this is the default export, get the name of the declaration if it exists + if (displayName === "default" && symbol.valueDeclaration && (symbol.valueDeclaration.flags & NodeFlags.Default) && symbol.valueDeclaration.localSymbol && symbol.valueDeclaration.localSymbol.name) { + displayName = symbol.valueDeclaration.localSymbol.name; + } + let firstCharCode = displayName.charCodeAt(0); // First check of the displayName is not external module; if it is an external module, it is not valid entry if ((symbol.flags & SymbolFlags.Namespace) && (firstCharCode === CharacterCodes.singleQuote || firstCharCode === CharacterCodes.doubleQuote)) { @@ -2620,7 +2625,7 @@ module ts { previousToken.getStart() : position; - let scopeNode = getScopeNode(contextToken, adjustedPosition, sourceFile); + let scopeNode = getScopeNode(contextToken, adjustedPosition, sourceFile) || sourceFile; /// TODO filter meaning based on the current context let symbolMeanings = SymbolFlags.Type | SymbolFlags.Value | SymbolFlags.Namespace | SymbolFlags.Alias; diff --git a/tests/cases/fourslash/exportDefaultClass.ts b/tests/cases/fourslash/exportDefaultClass.ts new file mode 100644 index 00000000000..04ab351ab36 --- /dev/null +++ b/tests/cases/fourslash/exportDefaultClass.ts @@ -0,0 +1,12 @@ +/// + +////export default class C { +//// method() { /*1*/ } +////} +//// /*2*/ + +goTo.marker('1'); +verify.completionListContains("C", "class C", /*documentation*/ undefined, "class"); + +goTo.marker('2'); +verify.completionListContains("C", "class C", /*documentation*/ undefined, "class"); \ No newline at end of file diff --git a/tests/cases/fourslash/exportDefaultFunction.ts b/tests/cases/fourslash/exportDefaultFunction.ts new file mode 100644 index 00000000000..859d9641acd --- /dev/null +++ b/tests/cases/fourslash/exportDefaultFunction.ts @@ -0,0 +1,12 @@ +/// + +////export default function func() { +//// /*1*/ +////} +//// /*2*/ + +goTo.marker('1'); +verify.completionListContains("func", "function func(): void", /*documentation*/ undefined, "function"); + +goTo.marker('2'); +verify.completionListContains("func", "function func(): void", /*documentation*/ undefined, "function"); \ No newline at end of file