diff --git a/src/services/symbolDisplay.ts b/src/services/symbolDisplay.ts index 1b77f23fa33..c88202b8dbe 100644 --- a/src/services/symbolDisplay.ts +++ b/src/services/symbolDisplay.ts @@ -2,24 +2,25 @@ namespace ts.SymbolDisplay { // TODO(drosen): use contextual SemanticMeaning. export function getSymbolKind(typeChecker: TypeChecker, symbol: Symbol, location: Node): ScriptElementKind { - const flags = getCombinedLocalAndExportSymbolFlags(symbol); + const result = getSymbolKindOfConstructorPropertyMethodAccessorFunctionOrVar(typeChecker, symbol, location); + if (result !== ScriptElementKind.unknown) { + return result; + } + const flags = getCombinedLocalAndExportSymbolFlags(symbol); if (flags & SymbolFlags.Class) { return getDeclarationOfKind(symbol, SyntaxKind.ClassExpression) ? - ScriptElementKind.localClassElement : ScriptElementKind.classElement; + ScriptElementKind.localClassElement : ScriptElementKind.classElement; } if (flags & SymbolFlags.Enum) return ScriptElementKind.enumElement; if (flags & SymbolFlags.TypeAlias) return ScriptElementKind.typeElement; if (flags & SymbolFlags.Interface) return ScriptElementKind.interfaceElement; if (flags & SymbolFlags.TypeParameter) return ScriptElementKind.typeParameterElement; - const result = getSymbolKindOfConstructorPropertyMethodAccessorFunctionOrVar(typeChecker, symbol, location); - if (result === ScriptElementKind.unknown) { - if (flags & SymbolFlags.TypeParameter) return ScriptElementKind.typeParameterElement; - if (flags & SymbolFlags.EnumMember) return ScriptElementKind.enumMemberElement; - if (flags & SymbolFlags.Alias) return ScriptElementKind.alias; - if (flags & SymbolFlags.Module) return ScriptElementKind.moduleElement; - } + if (flags & SymbolFlags.TypeParameter) return ScriptElementKind.typeParameterElement; + if (flags & SymbolFlags.EnumMember) return ScriptElementKind.enumMemberElement; + if (flags & SymbolFlags.Alias) return ScriptElementKind.alias; + if (flags & SymbolFlags.Module) return ScriptElementKind.moduleElement; return result; } diff --git a/tests/cases/fourslash/completionOfInterfaceAndVar.ts b/tests/cases/fourslash/completionOfInterfaceAndVar.ts new file mode 100644 index 00000000000..be1a1546d0b --- /dev/null +++ b/tests/cases/fourslash/completionOfInterfaceAndVar.ts @@ -0,0 +1,17 @@ +/// + +////interface AnalyserNode { +////} +////declare var AnalyserNode: { +//// prototype: AnalyserNode; +//// new(): AnalyserNode; +////}; +/////**/ + +goTo.marker(); +verify.completionListContains("AnalyserNode", /*text*/ undefined, /*documentation*/ undefined, "var"); +verify.completionEntryDetailIs("AnalyserNode", `interface AnalyserNode +var AnalyserNode: { + new (): AnalyserNode; + prototype: AnalyserNode; +}`, /*documentation*/ undefined, "var") \ No newline at end of file