diff --git a/src/dcd/server/autocomplete/ufcs.d b/dsymbol/src/dsymbol/ufcs.d similarity index 88% rename from src/dcd/server/autocomplete/ufcs.d rename to dsymbol/src/dsymbol/ufcs.d index 48d6cf2..6809290 100644 --- a/src/dcd/server/autocomplete/ufcs.d +++ b/dsymbol/src/dsymbol/ufcs.d @@ -1,9 +1,7 @@ -module dcd.server.autocomplete.ufcs; +module dsymbol.ufcs; -import dcd.server.autocomplete.util; import dsymbol.symbol; import dsymbol.scope_; -import dcd.common.messages; import std.functional : unaryFun; import std.algorithm; import std.array; @@ -28,21 +26,6 @@ enum string[string] INTEGER_PROMOTIONS = [ enum MAX_RECURSION_DEPTH = 50; -void lookupUFCS(Scope* completionScope, DSymbol* beforeDotSymbol, size_t cursorPosition, ref AutocompleteResponse response) -{ - // UFCS completion - DSymbol*[] ufcsSymbols = getSymbolsForUFCS(completionScope, beforeDotSymbol, cursorPosition); - response.completions ~= map!(s => createCompletionForUFCS(s))(ufcsSymbols).array; -} - -AutocompleteResponse.Completion createCompletionForUFCS(const DSymbol* symbol) -{ - return AutocompleteResponse.Completion(symbol.name, CompletionKind.ufcsName, symbol.callTip, symbol - .symbolFile, symbol - .location, symbol - .doc); -} - // Check if beforeDotSymbol is null or void bool isInvalidForUFCSCompletion(const(DSymbol)* beforeDotSymbol) { @@ -210,12 +193,6 @@ struct FilteredAppender(alias predicate, T: assert(app.data == [1, 3, 5, 7, 9]); } -bool doUFCSSearch(string beforeToken, string lastToken) -{ - // we do the search if they are different from eachother - return beforeToken != lastToken; -} - void getUFCSParenCompletion(ref DSymbol*[] symbols, Scope* completionScope, istring firstToken, istring nextToken, size_t cursorPosition) { DSymbol* firstSymbol = completionScope.getFirstSymbolByNameAndCursor( diff --git a/src/dcd/server/autocomplete/complete.d b/src/dcd/server/autocomplete/complete.d index b2ce3cc..aa86763 100644 --- a/src/dcd/server/autocomplete/complete.d +++ b/src/dcd/server/autocomplete/complete.d @@ -30,7 +30,6 @@ import std.string; import std.typecons; import dcd.server.autocomplete.util; -import dcd.server.autocomplete.ufcs; import dparse.lexer; import dparse.rollback_allocator; @@ -42,6 +41,7 @@ import dsymbol.modulecache; import dsymbol.scope_; import dsymbol.string_interning; import dsymbol.symbol; +import dsymbol.ufcs; import dcd.common.constants; import dcd.common.messages; diff --git a/src/dcd/server/autocomplete/util.d b/src/dcd/server/autocomplete/util.d index a50bea9..c0405e0 100644 --- a/src/dcd/server/autocomplete/util.d +++ b/src/dcd/server/autocomplete/util.d @@ -37,7 +37,7 @@ import dsymbol.modulecache; import dsymbol.scope_; import dsymbol.string_interning; import dsymbol.symbol; -import dcd.server.autocomplete.ufcs; +import dsymbol.ufcs; enum ImportKind : ubyte { @@ -772,3 +772,24 @@ AutocompleteResponse.Completion makeSymbolCompletionInfo(const DSymbol* symbol, return AutocompleteResponse.Completion(symbol.name, kind, definition, symbol.symbolFile, symbol.location, symbol.doc); } + +void lookupUFCS(Scope* completionScope, DSymbol* beforeDotSymbol, size_t cursorPosition, ref AutocompleteResponse response) +{ + // UFCS completion + DSymbol*[] ufcsSymbols = getSymbolsForUFCS(completionScope, beforeDotSymbol, cursorPosition); + response.completions ~= map!(s => createCompletionForUFCS(s))(ufcsSymbols).array; +} + +AutocompleteResponse.Completion createCompletionForUFCS(const DSymbol* symbol) +{ + return AutocompleteResponse.Completion(symbol.name, CompletionKind.ufcsName, symbol.callTip, symbol + .symbolFile, symbol + .location, symbol + .doc); +} + +bool doUFCSSearch(string beforeToken, string lastToken) +{ + // we do the search if they are different from eachother + return beforeToken != lastToken; +}