From 156908deb9cba274158300a99bb68be646466533 Mon Sep 17 00:00:00 2001 From: Hackerpilot Date: Sat, 7 Sep 2013 18:49:40 +0000 Subject: [PATCH] Fix #32 --- acvisitor.d | 50 ++++++++++++++++++++------- autocomplete.d | 2 +- editors/textadept/modules/dmd/dcd.lua | 2 +- 3 files changed, 40 insertions(+), 14 deletions(-) diff --git a/acvisitor.d b/acvisitor.d index 5592d5c..469042b 100644 --- a/acvisitor.d +++ b/acvisitor.d @@ -330,8 +330,7 @@ class AutocompleteVisitor : ASTVisitor else if (dec.hasRef) returnType = "ref"; } - symbol.calltip = format("%s %s%s", formatNode(dec.returnType), - dec.name.value, formatNode(dec.parameters)); + symbol.calltip = formatCalltip(dec.returnType, dec.name.value, dec.parameters); } auto p = parentSymbol; parentSymbol = symbol; @@ -376,9 +375,8 @@ class AutocompleteVisitor : ASTVisitor { TypeSuffix suffix = dec.type.typeSuffixes[$ - 1]; dec.type.typeSuffixes = dec.type.typeSuffixes[0 .. $ - 1]; - symbol.calltip = "%s %s%s".format(formatNode(dec.type), - suffix.delegateOrFunction.value, - formatNode(suffix.parameters)); + symbol.calltip = formatCalltip(dec.type, + suffix.delegateOrFunction.value, suffix.parameters); } symbol.kind = CompletionKind.variableName; @@ -407,9 +405,7 @@ class AutocompleteVisitor : ASTVisitor { TypeSuffix suffix = aliasPart.type.typeSuffixes[$ - 1]; aliasPart.type.typeSuffixes = aliasPart.type.typeSuffixes[0 .. $ - 1]; - aliasSymbol.calltip = "%s %s%s".format(formatNode(dec.type), - suffix.delegateOrFunction.value, - formatNode(suffix.parameters)); + aliasSymbol.calltip = formatCalltip(dec.type, suffix.delegateOrFunction.value, suffix.parameters); } if (parentSymbol is null) symbols ~= aliasSymbol; @@ -456,9 +452,33 @@ class AutocompleteVisitor : ASTVisitor if (dec.importBindings !is null && dec.importBindings.singleImport.identifierChain !is null) { - scope_.symbols ~= ModuleCache.getSymbolsInModule( - convertChainToImportPath( - dec.importBindings.singleImport.identifierChain)); + ACSymbol[] importedSymbols = ModuleCache.getSymbolsInModule( + convertChainToImportPath(dec.importBindings.singleImport.identifierChain)); + foreach (ImportBind b; dec.importBindings.importBinds) + { + if (b.right == TokenType.invalid) + { + // Selecive import + importedSymbols.filter!(a => a.name == b.left).copy(scope_.symbols); + } + else + { + // renamed selective import + foreach (ACSymbol symbol; importedSymbols.filter!(a => a.name == b.right)) + { + ACSymbol s = new ACSymbol; + s.kind = symbol.kind; + s.location = symbol.location; + s.name = b.left.value; + s.parts = symbol.parts; + s.qualifier = symbol.qualifier; + s.resolvedType = symbol.resolvedType; + s.superClasses = symbol.superClasses; + s.type = symbol.type; + scope_.symbols ~= s; + } + } + } } } @@ -510,7 +530,13 @@ class AutocompleteVisitor : ASTVisitor private: - string formatNode(T)(T node) const + static string formatCalltip(Type returnType, string name, Parameters parameters, + string doc = null) + { + return "%s %s%s".format(formatNode(returnType), name, formatNode(parameters)); + } + + static string formatNode(T)(T node) { if (node is null) return ""; import formatter; diff --git a/autocomplete.d b/autocomplete.d index 29ff200..5d8cf30 100644 --- a/autocomplete.d +++ b/autocomplete.d @@ -308,7 +308,7 @@ void setCompletions(T)(ref AutocompleteResponse response, p.setTokens(tokens[h .. i].array()); if (!p.isSliceExpression()) { - symbols = symbols[0].resolvedType is null ? [] :[symbols[0].resolvedType]; + symbols = symbols[0].resolvedType is null ? [] : [symbols[0].resolvedType]; } } else if (symbols[0].qualifier == SymbolQualifier.assocArray) diff --git a/editors/textadept/modules/dmd/dcd.lua b/editors/textadept/modules/dmd/dcd.lua index 2234f42..c90e2b2 100644 --- a/editors/textadept/modules/dmd/dcd.lua +++ b/editors/textadept/modules/dmd/dcd.lua @@ -71,7 +71,7 @@ end local function showCurrentCallTip() local tip = calltips[currentCalltip] buffer:call_tip_show(buffer:word_start_position(buffer.current_pos), - string.format("overload %d of %d\1\2\n%s", currentCalltip, #calltips, + string.format("%d of %d\1\2\n%s", currentCalltip, #calltips, calltips[currentCalltip])) end