fix code formatting, fix minor logic errors
Also changes struct and class calltips from `Something(T)` to `Something!(T)`
This commit is contained in:
parent
b2c60f24cd
commit
fa98057dcc
|
@ -141,7 +141,8 @@ public AutocompleteResponse complete(const AutocompleteRequest request,
|
||||||
|
|
||||||
final switch (calltipHint) with (CalltipHint) {
|
final switch (calltipHint) with (CalltipHint) {
|
||||||
case regularArguments, templateArguments, indexOperator:
|
case regularArguments, templateArguments, indexOperator:
|
||||||
return calltipCompletion(beforeTokens[0 .. parenIndex], tokenArray, request.cursorPosition, moduleCache, calltipHint);
|
return calltipCompletion(beforeTokens[0 .. parenIndex], tokenArray,
|
||||||
|
request.cursorPosition, moduleCache, calltipHint);
|
||||||
case none:
|
case none:
|
||||||
// could be import or dot completion
|
// could be import or dot completion
|
||||||
if (beforeTokens.length < 2){
|
if (beforeTokens.length < 2){
|
||||||
|
@ -251,6 +252,7 @@ AutocompleteResponse dotCompletion(T)(T beforeTokens, const(Token)[] tokenArray,
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
deprecated("Use `calltipCompletion` instead") alias parenCompletion = calltipCompletion;
|
||||||
/**
|
/**
|
||||||
* Handles calltip completion for function calls and some keywords
|
* Handles calltip completion for function calls and some keywords
|
||||||
* Params:
|
* Params:
|
||||||
|
@ -260,9 +262,9 @@ AutocompleteResponse dotCompletion(T)(T beforeTokens, const(Token)[] tokenArray,
|
||||||
* Returns:
|
* Returns:
|
||||||
* the autocompletion response
|
* the autocompletion response
|
||||||
*/
|
*/
|
||||||
deprecated("Use `calltipCompletion` instead") alias parenCompletion = calltipCompletion;
|
|
||||||
AutocompleteResponse calltipCompletion(T)(T beforeTokens,
|
AutocompleteResponse calltipCompletion(T)(T beforeTokens,
|
||||||
const(Token)[] tokenArray, size_t cursorPosition, ref ModuleCache moduleCache, CalltipHint calltipHint = CalltipHint.none)
|
const(Token)[] tokenArray, size_t cursorPosition, ref ModuleCache moduleCache,
|
||||||
|
CalltipHint calltipHint = CalltipHint.none)
|
||||||
{
|
{
|
||||||
AutocompleteResponse response;
|
AutocompleteResponse response;
|
||||||
immutable(ConstantCompletion)[] completions;
|
immutable(ConstantCompletion)[] completions;
|
||||||
|
@ -333,9 +335,11 @@ AutocompleteResponse calltipCompletion(T)(T beforeTokens,
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
IdType getSignificantTokenId(T)(T beforeTokens){
|
IdType getSignificantTokenId(T)(T beforeTokens)
|
||||||
|
{
|
||||||
auto significantTokenId = beforeTokens[$ - 2].type;
|
auto significantTokenId = beforeTokens[$ - 2].type;
|
||||||
if (beforeTokens.isTemplateBangParen) {
|
if (beforeTokens.isTemplateBangParen)
|
||||||
|
{
|
||||||
return beforeTokens[$ - 3].type;
|
return beforeTokens[$ - 3].type;
|
||||||
}
|
}
|
||||||
return significantTokenId;
|
return significantTokenId;
|
||||||
|
@ -346,33 +350,44 @@ IdType getSignificantTokenId(T)(T beforeTokens){
|
||||||
* beforeTokens = tokens before the cursor
|
* beforeTokens = tokens before the cursor
|
||||||
* Returns: calltipHint based of beforeTokens
|
* Returns: calltipHint based of beforeTokens
|
||||||
*/
|
*/
|
||||||
CalltipHint getCalltipHint(T)(T beforeTokens, out size_t parenIndex) {
|
CalltipHint getCalltipHint(T)(T beforeTokens, out size_t parenIndex)
|
||||||
if (beforeTokens.length < 2){
|
{
|
||||||
|
if (beforeTokens.length < 2)
|
||||||
|
{
|
||||||
return CalltipHint.none;
|
return CalltipHint.none;
|
||||||
}
|
}
|
||||||
|
|
||||||
parenIndex = beforeTokens.length;
|
parenIndex = beforeTokens.length;
|
||||||
// evaluate at comma case
|
// evaluate at comma case
|
||||||
if (beforeTokens.isComma){
|
if (beforeTokens.isComma)
|
||||||
|
{
|
||||||
parenIndex = beforeTokens.goBackToOpenParen;
|
parenIndex = beforeTokens.goBackToOpenParen;
|
||||||
// check if we are actually a "!("
|
// check if we are actually a "!("
|
||||||
if (beforeTokens[0 .. parenIndex].isTemplateBangParen){
|
if (beforeTokens[0 .. parenIndex].isTemplateBangParen)
|
||||||
|
{
|
||||||
return CalltipHint.templateArguments;
|
return CalltipHint.templateArguments;
|
||||||
}
|
}
|
||||||
|
else if (beforeTokens[0 .. parenIndex].isIndexOperator)
|
||||||
|
{
|
||||||
|
// we are inside `a[foo, bar]`, which is definitely a custom opIndex
|
||||||
|
return CalltipHint.indexOperator;
|
||||||
|
}
|
||||||
return CalltipHint.regularArguments;
|
return CalltipHint.regularArguments;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (beforeTokens.isOpenParen || beforeTokens.isOpenSquareBracket)
|
if (beforeTokens.isIndexOperator)
|
||||||
{
|
{
|
||||||
return CalltipHint.regularArguments;
|
|
||||||
}
|
|
||||||
if(beforeTokens.isIndexOperator){
|
|
||||||
return CalltipHint.indexOperator;
|
return CalltipHint.indexOperator;
|
||||||
}
|
}
|
||||||
|
else if (beforeTokens.isTemplateBang || beforeTokens.isTemplateBangParen)
|
||||||
if(beforeTokens.isTemplateBang || beforeTokens.isTemplateBangParen){
|
{
|
||||||
return CalltipHint.templateArguments;
|
return CalltipHint.templateArguments;
|
||||||
}
|
}
|
||||||
|
else if (beforeTokens.isOpenParen || beforeTokens.isOpenSquareBracket)
|
||||||
|
{
|
||||||
|
// open square bracket for literals: `foo([`
|
||||||
|
return CalltipHint.regularArguments;
|
||||||
|
}
|
||||||
|
|
||||||
return CalltipHint.none;
|
return CalltipHint.none;
|
||||||
}
|
}
|
||||||
|
@ -560,7 +575,8 @@ void setImportCompletions(T)(T tokens, ref AutocompleteResponse response,
|
||||||
*/
|
*/
|
||||||
void setCompletions(T)(ref AutocompleteResponse response,
|
void setCompletions(T)(ref AutocompleteResponse response,
|
||||||
Scope* completionScope, T tokens, size_t cursorPosition,
|
Scope* completionScope, T tokens, size_t cursorPosition,
|
||||||
CompletionType completionType, CalltipHint callTipHint = CalltipHint.none, string partial = null)
|
CompletionType completionType, CalltipHint callTipHint = CalltipHint.none,
|
||||||
|
string partial = null)
|
||||||
{
|
{
|
||||||
static void addSymToResponse(const(DSymbol)* s, ref AutocompleteResponse r, string p,
|
static void addSymToResponse(const(DSymbol)* s, ref AutocompleteResponse r, string p,
|
||||||
Scope* completionScope, size_t[] circularGuard = [])
|
Scope* completionScope, size_t[] circularGuard = [])
|
||||||
|
@ -623,7 +639,10 @@ void setCompletions(T)(ref AutocompleteResponse response,
|
||||||
cursorPosition, completionType);
|
cursorPosition, completionType);
|
||||||
|
|
||||||
// If calltipHint is templateArguments we ensure that the symbol is also templated
|
// If calltipHint is templateArguments we ensure that the symbol is also templated
|
||||||
if (callTipHint == CalltipHint.templateArguments && symbols.length >= 1 && symbols[0].qualifier != SymbolQualifier.templated){
|
if (callTipHint == CalltipHint.templateArguments
|
||||||
|
&& symbols.length >= 1
|
||||||
|
&& symbols[0].qualifier != SymbolQualifier.templated)
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -685,9 +704,11 @@ void setCompletions(T)(ref AutocompleteResponse response,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((symbols[0].kind == CompletionKind.structName || symbols[0].kind == CompletionKind.className))
|
if (symbols[0].kind == CompletionKind.structName
|
||||||
|
|| symbols[0].kind == CompletionKind.className)
|
||||||
{
|
{
|
||||||
if (callTipHint == CalltipHint.templateArguments) {
|
if (callTipHint == CalltipHint.templateArguments)
|
||||||
|
{
|
||||||
response.completionType = CompletionType.calltips;
|
response.completionType = CompletionType.calltips;
|
||||||
response.completions = [generateStructConstructorCalltip(symbols[0], callTipHint)];
|
response.completions = [generateStructConstructorCalltip(symbols[0], callTipHint)];
|
||||||
return;
|
return;
|
||||||
|
@ -711,7 +732,6 @@ void setCompletions(T)(ref AutocompleteResponse response,
|
||||||
goto setCallTips;
|
goto setCallTips;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
setCallTips:
|
setCallTips:
|
||||||
response.completionType = CompletionType.calltips;
|
response.completionType = CompletionType.calltips;
|
||||||
|
@ -742,7 +762,10 @@ bool mightBeRelevantInCompletionScope(const DSymbol* symbol, Scope* scope_)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AutocompleteResponse.Completion generateStructConstructorCalltip(const DSymbol* symbol, CalltipHint calltipHint = CalltipHint.regularArguments)
|
AutocompleteResponse.Completion generateStructConstructorCalltip(
|
||||||
|
const DSymbol* symbol,
|
||||||
|
CalltipHint calltipHint = CalltipHint.regularArguments
|
||||||
|
)
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
if (calltipHint == CalltipHint.regularArguments)
|
if (calltipHint == CalltipHint.regularArguments)
|
||||||
|
@ -752,7 +775,7 @@ in
|
||||||
}
|
}
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
string generatedStructConstructorCalltip = calltipHint == CalltipHint.regularArguments ? "this(" : symbol.name ~ "(";
|
string generatedStructConstructorCalltip = calltipHint == CalltipHint.regularArguments ? "this(" : symbol.name ~ "!(";
|
||||||
auto completionKindFilter = calltipHint == CalltipHint.regularArguments ? CompletionKind.variableName : CompletionKind.typeTmpParam;
|
auto completionKindFilter = calltipHint == CalltipHint.regularArguments ? CompletionKind.variableName : CompletionKind.typeTmpParam;
|
||||||
const(DSymbol)*[] fields =
|
const(DSymbol)*[] fields =
|
||||||
symbol.opSlice().filter!(a => a.kind == completionKindFilter).map!(a => cast(const(DSymbol)*) a).array();
|
symbol.opSlice().filter!(a => a.kind == completionKindFilter).map!(a => cast(const(DSymbol)*) a).array();
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
calltips
|
calltips
|
||||||
Wrapper(T)
|
Wrapper!(T)
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
calltips
|
calltips
|
||||||
Something(T, X)
|
Something!(T, X)
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
calltips
|
calltips
|
||||||
Something(T, X)
|
Something!(T, X)
|
||||||
|
|
Loading…
Reference in New Issue