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; return;
stop_parse(); stop_parse();
auto &buffer_raw = const_cast<std::string &>(buffer.raw());
rows.clear(); 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]() { dispatcher.post([this]() {
after_add_rows(); after_add_rows();
if(state == State::restarting) { if(state == State::restarting) {

4
src/autocomplete.hpp

@ -42,8 +42,8 @@ public:
std::function<void()> after_add_rows = [] {}; std::function<void()> after_add_rows = [] {};
std::function<void()> on_add_rows_error = [] {}; std::function<void()> on_add_rows_error = [] {};
/// The handler is not run in the main loop. /// The handler is not run in the main loop. Should return false on error.
std::function<void(std::string &buffer, int line_number, int column)> add_rows = [](std::string &, int, int) {}; 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_show = [] {};
std::function<void()> on_hide = [] {}; 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")) if(this->language && (this->language->get_id() == "chdr" || this->language->get_id() == "cpphdr"))
clangmm::remove_include_guard(buffer); clangmm::remove_include_guard(buffer);
code_complete_results = std::make_unique<clangmm::CodeCompleteResults>(clang_tu->get_code_completions(buffer, line_number, column)); code_complete_results = std::make_unique<clangmm::CodeCompleteResults>(clang_tu->get_code_completions(buffer, line_number, column));
if(!code_complete_results->cx_results) { if(!code_complete_results->cx_results)
auto expected = ParseState::processing; return false;
parse_state.compare_exchange_strong(expected, ParseState::restarting);
return;
}
if(autocomplete.state == Autocomplete::State::starting) { if(autocomplete.state == Autocomplete::State::starting) {
std::string prefix; std::string prefix;
@ -1011,6 +1008,7 @@ Source::ClangViewAutocomplete::ClangViewAutocomplete(const boost::filesystem::pa
} }
} }
} }
return true;
}; };
autocomplete.on_show = [this] { autocomplete.on_show = [this] {

6
src/source_generic.cpp

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

7
src/source_language_protocol.cpp

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

Loading…
Cancel
Save