From 45f0603439ed1c9747de6c3e08c3b152510df46a Mon Sep 17 00:00:00 2001 From: eidheim Date: Thu, 28 Dec 2017 09:53:37 +0100 Subject: [PATCH] Optimised autocomplete by only receive brief comments when needed --- src/autocomplete.cc | 6 +++--- src/autocomplete.h | 4 +++- src/source_clang.cc | 12 ++++++++---- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/autocomplete.cc b/src/autocomplete.cc index 7278d0c..de56923 100644 --- a/src/autocomplete.cc +++ b/src/autocomplete.cc @@ -101,8 +101,8 @@ void Autocomplete::run() { CompletionDialog::create(view, view->get_buffer()->create_mark(start_iter)); setup_dialog(); for(auto &row : rows) { - CompletionDialog::get()->add_row(row.first); - row.first.clear(); + CompletionDialog::get()->add_row(row); + row.clear(); } state = State::IDLE; @@ -150,7 +150,7 @@ void Autocomplete::setup_dialog() { on_changed(index, text); - auto tooltip = rows[index].second; + auto tooltip = get_tooltip(index); if(tooltip.empty()) tooltips.hide(); else { diff --git a/src/autocomplete.h b/src/autocomplete.h index 214ddb1..de27947 100644 --- a/src/autocomplete.h +++ b/src/autocomplete.h @@ -18,7 +18,7 @@ public: std::string prefix; std::mutex prefix_mutex; - std::vector> rows; + std::vector rows; Tooltips tooltips; std::atomic state; @@ -46,6 +46,8 @@ public: std::function on_hide = [] {}; std::function on_changed = [](unsigned int index, const std::string &text) {}; std::function on_select = [](unsigned int index, const std::string &text, bool hide_window) {}; + + std::function get_tooltip = [](unsigned int index) {return std::string();}; Autocomplete(Gtk::TextView *view, bool &interactive_completion, guint &last_keyval, bool strip_word); diff --git a/src/source_clang.cc b/src/source_clang.cc index f67dcfb..7f77acd 100644 --- a/src/source_clang.cc +++ b/src/source_clang.cc @@ -636,14 +636,14 @@ Source::ClangViewAutocomplete::ClangViewAutocomplete(const boost::filesystem::pa Recursive::f(result, text); if(!text.empty()) { bool already_added=false; - for(auto &pair: autocomplete.rows) { - if(pair.first==text) { + for(auto &row: autocomplete.rows) { + if(row==text) { already_added=true; break; } } if(!already_added) { - autocomplete.rows.emplace_back(std::move(text), result.get_brief_comment()); + autocomplete.rows.emplace_back(std::move(text)); completion_strings.emplace_back(result.cx_completion_string); } } @@ -670,7 +670,7 @@ Source::ClangViewAutocomplete::ClangViewAutocomplete(const boost::filesystem::pa if(match && !text.empty()) { if(!return_text.empty()) text+=return_text; - autocomplete.rows.emplace_back(std::move(text), result.get_brief_comment()); + autocomplete.rows.emplace_back(std::move(text)); completion_strings.emplace_back(result.cx_completion_string); } } @@ -779,6 +779,10 @@ Source::ClangViewAutocomplete::ClangViewAutocomplete(const boost::filesystem::pa } } }; + + autocomplete.get_tooltip = [this](unsigned int index) { + return clangmm::to_string(clang_getCompletionBriefComment(completion_strings[index])); + }; } bool Source::ClangViewAutocomplete::is_possible_parameter() {