diff --git a/src/messages/textDocument_completion.cc b/src/messages/textDocument_completion.cc index aef6c179..6f85303c 100644 --- a/src/messages/textDocument_completion.cc +++ b/src/messages/textDocument_completion.cc @@ -79,19 +79,6 @@ ParseIncludeLineResult ParseIncludeLine(const std::string &line) { return {ok, match[3], match[5], match[6], match}; } -template char *tofixedbase64(T input, char *out) { - const char *digits = "./0123456789" - "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "abcdefghijklmnopqrstuvwxyz"; - int len = (sizeof(T) * 8 - 1) / 6 + 1; - for (int i = len - 1; i >= 0; i--) { - out[i] = digits[input % 64]; - input /= 64; - } - out[len] = '\0'; - return out; -} - // Pre-filters completion responses before sending to vscode. This results in a // significantly snappier completion experience as vscode is easily overloaded // when given 1000+ completion items. @@ -118,6 +105,7 @@ void FilterCandidates(lsCompletionList &result, result.isIncomplete = true; } + std::string sort(4, ' '); for (auto &item : items) { item.textEdit.range = lsRange{begin_pos, end_pos}; if (has_open_paren && item.filterText) @@ -137,15 +125,12 @@ void FilterCandidates(lsCompletionList &result, } edits.erase(edits.begin()); } + for (auto i = sort.size(); i && ++sort[i - 1] == 'A';) + sort[--i] = ' '; + item.sortText = sort; // Compatibility item.insertText = item.textEdit.newText; } - - // Set sortText. Note that this happens after resizing - we could do it - // before, but then we should also sort by priority. - char buf[16]; - for (size_t i = 0; i < items.size(); ++i) - items[i].sortText = tofixedbase64(i, buf); }; // No complete text; don't run any filtering logic except to trim the items.