Browse Source

Language client: improvement to autocomplete after arrow and for servers that include seperation characters to the completion items

master
eidheim 2 months ago
parent
commit
bea59efc1c
  1. 2
      src/source_clang.cpp
  2. 12
      src/source_language_protocol.cpp

2
src/source_clang.cpp

@ -893,7 +893,7 @@ Source::ClangViewAutocomplete::ClangViewAutocomplete(const boost::filesystem::pa
autocomplete.is_restart_key = [this](guint keyval) {
auto iter = get_buffer()->get_insert()->get_iter();
iter.backward_chars(2);
if(keyval == '.' || (keyval == ':' && *iter == ':') || (keyval == '>' && *iter == '-'))
if(keyval == '.' || (*iter == ':' && keyval == ':') || (*iter == '-' && keyval == '>'))
return true;
return false;
};

12
src/source_language_protocol.cpp

@ -1610,7 +1610,7 @@ void Source::LanguageProtocolView::setup_autocomplete() {
autocomplete->is_restart_key = [this](guint keyval) {
auto iter = get_buffer()->get_insert()->get_iter();
iter.backward_chars(2);
if(keyval == '.' || (keyval == ':' && *iter == ':'))
if(keyval == '.' || (*iter == ':' && keyval == ':') || (*iter == '-' && keyval == '>'))
return true;
return false;
};
@ -1657,7 +1657,7 @@ void Source::LanguageProtocolView::setup_autocomplete() {
}
return true;
}
else if(prevprev.backward_char() && *prevprev == ':' && *prev == ':') {
else if(prevprev.backward_char() && ((*prevprev == ':' && *prev == ':') || (*prevprev == '-' && *prev == '>'))) {
{
LockGuard lock(autocomplete->prefix_mutex);
autocomplete->prefix = get_buffer()->get_text(prefix_start, prefix_end);
@ -1689,7 +1689,7 @@ void Source::LanguageProtocolView::setup_autocomplete() {
autocomplete->prefix = get_buffer()->get_text(prefix_start, prefix_end);
}
auto prevprev = prev;
autocomplete_enable_snippets = !(*prev == '.' || (prevprev.backward_char() && *prevprev == ':' && *prev == ':'));
autocomplete_enable_snippets = !(*prev == '.' || (prevprev.backward_char() && ((*prevprev == ':' && *prev == ':') || (*prevprev == '-' && *prev == '>'))));
return true;
}
@ -1809,6 +1809,12 @@ void Source::LanguageProtocolView::setup_autocomplete() {
}
for(auto &item : items) {
auto label = item.string_or("filterText", item.string_or("label", ""));
if(!label.empty()) {
if(starts_with(label, "."))
label.erase(0, 1);
else if(starts_with(label, "::") || starts_with(label, "->"))
label.erase(0, 2);
}
if(starts_with(label, prefix)) {
auto detail = item.string_or("detail", "");
LanguageProtocol::Documentation documentation(item.child_optional("documentation"));

Loading…
Cancel
Save