moving ufcs logic to dsymbol
This commit is contained in:
parent
1b67f493d4
commit
c336004ed8
|
@ -1,9 +1,7 @@
|
||||||
module dcd.server.autocomplete.ufcs;
|
module dsymbol.ufcs;
|
||||||
|
|
||||||
import dcd.server.autocomplete.util;
|
|
||||||
import dsymbol.symbol;
|
import dsymbol.symbol;
|
||||||
import dsymbol.scope_;
|
import dsymbol.scope_;
|
||||||
import dcd.common.messages;
|
|
||||||
import std.functional : unaryFun;
|
import std.functional : unaryFun;
|
||||||
import std.algorithm;
|
import std.algorithm;
|
||||||
import std.array;
|
import std.array;
|
||||||
|
@ -28,21 +26,6 @@ enum string[string] INTEGER_PROMOTIONS = [
|
||||||
|
|
||||||
enum MAX_RECURSION_DEPTH = 50;
|
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
|
// Check if beforeDotSymbol is null or void
|
||||||
bool isInvalidForUFCSCompletion(const(DSymbol)* beforeDotSymbol)
|
bool isInvalidForUFCSCompletion(const(DSymbol)* beforeDotSymbol)
|
||||||
{
|
{
|
||||||
|
@ -210,12 +193,6 @@ struct FilteredAppender(alias predicate, T:
|
||||||
assert(app.data == [1, 3, 5, 7, 9]);
|
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)
|
void getUFCSParenCompletion(ref DSymbol*[] symbols, Scope* completionScope, istring firstToken, istring nextToken, size_t cursorPosition)
|
||||||
{
|
{
|
||||||
DSymbol* firstSymbol = completionScope.getFirstSymbolByNameAndCursor(
|
DSymbol* firstSymbol = completionScope.getFirstSymbolByNameAndCursor(
|
|
@ -30,7 +30,6 @@ import std.string;
|
||||||
import std.typecons;
|
import std.typecons;
|
||||||
|
|
||||||
import dcd.server.autocomplete.util;
|
import dcd.server.autocomplete.util;
|
||||||
import dcd.server.autocomplete.ufcs;
|
|
||||||
|
|
||||||
import dparse.lexer;
|
import dparse.lexer;
|
||||||
import dparse.rollback_allocator;
|
import dparse.rollback_allocator;
|
||||||
|
@ -42,6 +41,7 @@ import dsymbol.modulecache;
|
||||||
import dsymbol.scope_;
|
import dsymbol.scope_;
|
||||||
import dsymbol.string_interning;
|
import dsymbol.string_interning;
|
||||||
import dsymbol.symbol;
|
import dsymbol.symbol;
|
||||||
|
import dsymbol.ufcs;
|
||||||
|
|
||||||
import dcd.common.constants;
|
import dcd.common.constants;
|
||||||
import dcd.common.messages;
|
import dcd.common.messages;
|
||||||
|
|
|
@ -37,7 +37,7 @@ import dsymbol.modulecache;
|
||||||
import dsymbol.scope_;
|
import dsymbol.scope_;
|
||||||
import dsymbol.string_interning;
|
import dsymbol.string_interning;
|
||||||
import dsymbol.symbol;
|
import dsymbol.symbol;
|
||||||
import dcd.server.autocomplete.ufcs;
|
import dsymbol.ufcs;
|
||||||
|
|
||||||
enum ImportKind : ubyte
|
enum ImportKind : ubyte
|
||||||
{
|
{
|
||||||
|
@ -772,3 +772,24 @@ AutocompleteResponse.Completion makeSymbolCompletionInfo(const DSymbol* symbol,
|
||||||
return AutocompleteResponse.Completion(symbol.name, kind, definition,
|
return AutocompleteResponse.Completion(symbol.name, kind, definition,
|
||||||
symbol.symbolFile, symbol.location, symbol.doc);
|
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;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue