From 93fcbc827bda3848500b364e144a8e488d25f024 Mon Sep 17 00:00:00 2001 From: bangbangsheshotmedown Date: Sun, 10 Nov 2024 17:34:28 +0000 Subject: [PATCH 1/3] Only filter out duplicates if they are of the same kind --- src/dcd/server/autocomplete/complete.d | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/dcd/server/autocomplete/complete.d b/src/dcd/server/autocomplete/complete.d index 66228906..32887ff1 100644 --- a/src/dcd/server/autocomplete/complete.d +++ b/src/dcd/server/autocomplete/complete.d @@ -592,7 +592,7 @@ void setCompletions(T)(ref AutocompleteResponse response, { if (sym.name !is null && sym.name.length > 0 && isPublicCompletionKind(sym.kind) && (p is null ? true : toUpper(sym.name.data).startsWith(toUpper(p))) - && !r.completions.canFind!(a => a.identifier == sym.name) + && !r.completions.canFind!(a => a.identifier == sym.name && a.kind == sym.kind) && sym.name[0] != '*' && mightBeRelevantInCompletionScope(sym, completionScope)) { @@ -610,6 +610,7 @@ void setCompletions(T)(ref AutocompleteResponse response, auto currentSymbols = completionScope.getSymbolsInCursorScope(cursorPosition); foreach (s; currentSymbols.filter!(a => isPublicCompletionKind(a.kind) && toUpper(a.name.data).startsWith(toUpper(partial)) + && !response.completions.canFind!(r => r.identifier == a.name && r.kind == a.kind) && mightBeRelevantInCompletionScope(a, completionScope))) { response.completions ~= makeSymbolCompletionInfo(s, s.kind); From 88f04e5d16ac302891c3e1379ea2cf0869410128 Mon Sep 17 00:00:00 2001 From: bangbangsheshotmedown Date: Sun, 10 Nov 2024 20:17:29 +0000 Subject: [PATCH 2/3] Also compare full definition if matches --- src/dcd/server/autocomplete/complete.d | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/dcd/server/autocomplete/complete.d b/src/dcd/server/autocomplete/complete.d index 32887ff1..a4b3eabb 100644 --- a/src/dcd/server/autocomplete/complete.d +++ b/src/dcd/server/autocomplete/complete.d @@ -592,7 +592,17 @@ void setCompletions(T)(ref AutocompleteResponse response, { if (sym.name !is null && sym.name.length > 0 && isPublicCompletionKind(sym.kind) && (p is null ? true : toUpper(sym.name.data).startsWith(toUpper(p))) - && !r.completions.canFind!(a => a.identifier == sym.name && a.kind == sym.kind) + && !r.completions.canFind!((a) { + // this filters out similar symbols + // this is needed because similar symbols can exist do to version conditionals + // fast check first, only compare full definition if it matches + bool same = a.identifier == sym.name && a.kind == sym.kind; + if (same) { + auto info = makeSymbolCompletionInfo(sym, sym.kind); + if (info.definition != a.definition) same = false; + } + return same; + }) && sym.name[0] != '*' && mightBeRelevantInCompletionScope(sym, completionScope)) { @@ -610,7 +620,17 @@ void setCompletions(T)(ref AutocompleteResponse response, auto currentSymbols = completionScope.getSymbolsInCursorScope(cursorPosition); foreach (s; currentSymbols.filter!(a => isPublicCompletionKind(a.kind) && toUpper(a.name.data).startsWith(toUpper(partial)) - && !response.completions.canFind!(r => r.identifier == a.name && r.kind == a.kind) + && !response.completions.canFind!((r) { + // this filters out similar symbols + // this is needed because similar symbols can exist do to version conditionals + // fast check first, only compare full definition if it matches + bool same = (r.identifier == a.name && r.kind == a.kind); + if (same) { + auto info = makeSymbolCompletionInfo(a, a.kind); + if (info.definition != r.definition) same = false; + } + return same; + }) && mightBeRelevantInCompletionScope(a, completionScope))) { response.completions ~= makeSymbolCompletionInfo(s, s.kind); From 5b95f7187f9573f1110d8897c7f87857169fd377 Mon Sep 17 00:00:00 2001 From: bangbangsheshotmedown Date: Sun, 10 Nov 2024 20:18:54 +0000 Subject: [PATCH 3/3] Update doc --- src/dcd/server/autocomplete/complete.d | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/dcd/server/autocomplete/complete.d b/src/dcd/server/autocomplete/complete.d index a4b3eabb..7679347c 100644 --- a/src/dcd/server/autocomplete/complete.d +++ b/src/dcd/server/autocomplete/complete.d @@ -594,7 +594,6 @@ void setCompletions(T)(ref AutocompleteResponse response, && (p is null ? true : toUpper(sym.name.data).startsWith(toUpper(p))) && !r.completions.canFind!((a) { // this filters out similar symbols - // this is needed because similar symbols can exist do to version conditionals // fast check first, only compare full definition if it matches bool same = a.identifier == sym.name && a.kind == sym.kind; if (same) { @@ -622,7 +621,6 @@ void setCompletions(T)(ref AutocompleteResponse response, && toUpper(a.name.data).startsWith(toUpper(partial)) && !response.completions.canFind!((r) { // this filters out similar symbols - // this is needed because similar symbols can exist do to version conditionals // fast check first, only compare full definition if it matches bool same = (r.identifier == a.name && r.kind == a.kind); if (same) {