Browse Source

C/C++: corrected reparse after autocomplete error

pipelines/235045657
eidheim 5 years ago
parent
commit
ed292c8c89
  1. 8
      src/autocomplete.cpp
  2. 4
      src/autocomplete.hpp
  3. 8
      src/source_clang.cpp
  4. 6
      src/source_generic.cpp
  5. 7
      src/source_language_protocol.cpp

8
src/autocomplete.cpp

@ -76,11 +76,13 @@ void Autocomplete::run() {
return;
stop_parse();
auto &buffer_raw = const_cast<std::string &>(buffer.raw());
rows.clear();
add_rows(buffer_raw, line_nr, column_nr);
auto &buffer_raw = const_cast<std::string &>(buffer.raw());
bool success = add_rows(buffer_raw, line_nr, column_nr);
if(!is_processing())
return;
if(is_processing()) {
if(success) {
dispatcher.post([this]() {
after_add_rows();
if(state == State::restarting) {

4
src/autocomplete.hpp

@ -42,8 +42,8 @@ public:
std::function<void()> after_add_rows = [] {};
std::function<void()> on_add_rows_error = [] {};
/// The handler is not run in the main loop.
std::function<void(std::string &buffer, int line_number, int column)> add_rows = [](std::string &, int, int) {};
/// The handler is not run in the main loop. Should return false on error.
std::function<bool(std::string &buffer, int line_number, int column)> add_rows = [](std::string &, int, int) { return true; };
std::function<void()> on_show = [] {};
std::function<void()> on_hide = [] {};

8
src/source_clang.cpp

@ -919,11 +919,8 @@ Source::ClangViewAutocomplete::ClangViewAutocomplete(const boost::filesystem::pa
if(this->language && (this->language->get_id() == "chdr" || this->language->get_id() == "cpphdr"))
clangmm::remove_include_guard(buffer);
code_complete_results = std::make_unique<clangmm::CodeCompleteResults>(clang_tu->get_code_completions(buffer, line_number, column));
if(!code_complete_results->cx_results) {
auto expected = ParseState::processing;
parse_state.compare_exchange_strong(expected, ParseState::restarting);
return;
}
if(!code_complete_results->cx_results)
return false;
if(autocomplete.state == Autocomplete::State::starting) {
std::string prefix;
@ -1011,6 +1008,7 @@ Source::ClangViewAutocomplete::ClangViewAutocomplete(const boost::filesystem::pa
}
}
}
return true;
};
autocomplete.on_show = [this] {

6
src/source_generic.cpp

@ -245,11 +245,6 @@ void Source::GenericView::setup_autocomplete() {
update_status_state(this);
};
autocomplete.on_add_rows_error = [this] {
autocomplete_comment.clear();
autocomplete_insert.clear();
};
autocomplete.add_rows = [this](std::string &buffer, int line_number, int column) {
if(autocomplete.state == Autocomplete::State::starting) {
autocomplete_comment.clear();
@ -290,6 +285,7 @@ void Source::GenericView::setup_autocomplete() {
}
}
}
return true;
};
autocomplete.on_show = [this] {

7
src/source_language_protocol.cpp

@ -1526,17 +1526,13 @@ void Source::LanguageProtocolView::setup_autocomplete() {
update_status_state(this);
};
autocomplete->on_add_rows_error = [this] {
autocomplete_rows.clear();
};
autocomplete->add_rows = [this](std::string &buffer, int line_number, int column) {
if(autocomplete->state == Autocomplete::State::starting) {
autocomplete_rows.clear();
std::promise<void> result_processed;
if(autocomplete_show_arguments) {
if(!capabilities.signature_help)
return;
return true;
dispatcher.post([this, line_number, column, &result_processed] {
// Find current parameter number and previously used named parameters
unsigned current_parameter_position = 0;
@ -1681,6 +1677,7 @@ void Source::LanguageProtocolView::setup_autocomplete() {
}
result_processed.get_future().get();
}
return true;
};
autocomplete->on_show = [this] {

Loading…
Cancel
Save