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) { autocomplete.is_restart_key = [this](guint keyval) {
auto iter = get_buffer()->get_insert()->get_iter(); auto iter = get_buffer()->get_insert()->get_iter();
iter.backward_chars(2); iter.backward_chars(2);
if(keyval == '.' || (keyval == ':' && *iter == ':') || (keyval == '>' && *iter == '-')) if(keyval == '.' || (*iter == ':' && keyval == ':') || (*iter == '-' && keyval == '>'))
return true; return true;
return false; return false;
}; };

12
src/source_language_protocol.cpp

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

Loading…
Cancel
Save