From 5390cfc5a489bce158f46330ca8e094ea1618d7c Mon Sep 17 00:00:00 2001 From: eidheim Date: Tue, 18 Jun 2019 09:16:57 +0200 Subject: [PATCH] Language protocol: no longer show completion window when no completion items match completion prefix in source buffer --- src/source_language_protocol.cc | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/source_language_protocol.cc b/src/source_language_protocol.cc index db0422a..a62dfb6 100644 --- a/src/source_language_protocol.cc +++ b/src/source_language_protocol.cc @@ -1414,14 +1414,21 @@ void Source::LanguageProtocolView::setup_autocomplete() { } } if(!label.empty()) { - autocomplete.rows.emplace_back(std::move(label)); - autocomplete_comment.emplace_back(std::move(detail)); - if(!documentation.empty() && documentation != autocomplete_comment.back()) { - if(!autocomplete_comment.back().empty()) - autocomplete_comment.back() += "\n\n"; - autocomplete_comment.back() += documentation; + std::string prefix; + { + std::lock_guard lock(autocomplete.prefix_mutex); + prefix = autocomplete.prefix; + } + if(prefix.compare(0, prefix.size(), label, 0, prefix.size()) == 0) { + autocomplete.rows.emplace_back(std::move(label)); + autocomplete_comment.emplace_back(std::move(detail)); + if(!documentation.empty() && documentation != autocomplete_comment.back()) { + if(!autocomplete_comment.back().empty()) + autocomplete_comment.back() += "\n\n"; + autocomplete_comment.back() += documentation; + } + autocomplete_insert.emplace_back(std::move(insert)); } - autocomplete_insert.emplace_back(std::move(insert)); } }