From 7e598ae91a5c4be5b01a4029a057f1f102c82032 Mon Sep 17 00:00:00 2001 From: eidheim Date: Sun, 29 Nov 2015 21:14:59 +0100 Subject: [PATCH] Cleanup of soft_reparse uses, and fixed a bug where implementation files were not correctly reparsed after using rename that included a header file. --- src/notebook.cc | 18 ++++++++---------- src/notebook.h | 2 +- src/source.h | 4 ++-- src/source_clang.cc | 2 ++ src/window.cc | 9 +++++---- 5 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/notebook.cc b/src/notebook.cc index a6c04ae..510088b 100644 --- a/src/notebook.cc +++ b/src/notebook.cc @@ -164,7 +164,7 @@ void Notebook::configure(int view_nr) { #endif } -bool Notebook::save(int page, bool reparse_needed) { +bool Notebook::save(int page) { JDEBUG("start"); if(page>=size()) { JDEBUG("end false"); @@ -199,14 +199,12 @@ bool Notebook::save(int page, bool reparse_needed) { } if(filesystem::write(view->file_path, view->get_buffer())) { - if(reparse_needed) { - if(auto clang_view=dynamic_cast(view)) { - if(clang_view->language->get_id()=="chdr" || clang_view->language->get_id()=="cpphdr") { - for(auto a_view: source_views) { - if(auto a_clang_view=dynamic_cast(a_view)) { - if(clang_view!=a_clang_view) - a_clang_view->soft_reparse_needed=true; - } + if(auto clang_view=dynamic_cast(view)) { + if(clang_view->language->get_id()=="chdr" || clang_view->language->get_id()=="cpphdr") { + for(auto a_view: source_views) { + if(auto a_clang_view=dynamic_cast(a_view)) { + if(clang_view!=a_clang_view) + a_clang_view->soft_reparse_needed=true; } } } @@ -248,7 +246,7 @@ bool Notebook::save(int page, bool reparse_needed) { bool Notebook::save_current() { if(get_current_page()==-1) return false; - return save(get_current_page(), true); + return save(get_current_page()); } bool Notebook::close_current_page() { diff --git a/src/notebook.h b/src/notebook.h index 15e9cd1..4abf709 100644 --- a/src/notebook.h +++ b/src/notebook.h @@ -18,7 +18,7 @@ public: Source::View* get_current_view(); bool close_current_page(); void open(const boost::filesystem::path &file_path); - bool save(int page, bool reparse_needed=false); + bool save(int page); bool save_current(); void configure(int view_nr); boost::filesystem::path get_current_folder(); diff --git a/src/source.h b/src/source.h index d2046a0..54a3951 100644 --- a/src/source.h +++ b/src/source.h @@ -104,8 +104,8 @@ namespace Source { bool soft_reparse_needed=false; bool full_reparse_needed=false; - virtual void soft_reparse() {} - virtual bool full_reparse() {return true;} + virtual void soft_reparse() {soft_reparse_needed=false;} + virtual bool full_reparse() {full_reparse_needed=false; return true;} protected: bool parsed=false; Tooltips diagnostic_tooltips; diff --git a/src/source_clang.cc b/src/source_clang.cc index 324e842..9727400 100644 --- a/src/source_clang.cc +++ b/src/source_clang.cc @@ -164,6 +164,7 @@ void Source::ClangViewParse::parse_initialize() { } void Source::ClangViewParse::soft_reparse() { + soft_reparse_needed=false; parsed=false; if(parse_state!=ParseState::PROCESSING) return; @@ -922,6 +923,7 @@ void Source::ClangViewAutocomplete::async_delete() { } bool Source::ClangViewAutocomplete::full_reparse() { + full_reparse_needed=false; if(!full_reparse_running) { auto expected=ParseState::PROCESSING; if(!parse_state.compare_exchange_strong(expected, ParseState::RESTARTING)) { diff --git a/src/window.cc b/src/window.cc index 7b812bd..17de97a 100644 --- a/src/window.cc +++ b/src/window.cc @@ -96,12 +96,9 @@ Window::Window() : compiling(false) { if(view->full_reparse_needed) { if(!view->full_reparse()) Singleton::terminal->async_print("Error: failed to reparse "+view->file_path.string()+". Please reopen the file manually.\n", true); - view->full_reparse_needed=false; } - else if(view->soft_reparse_needed) { + else if(view->soft_reparse_needed) view->soft_reparse(); - view->soft_reparse_needed=false; - } view->set_status(view->status); view->set_info(view->info); @@ -884,6 +881,7 @@ void Window::rename_token_entry() { label_it->update(0, ""); entry_box.entries.emplace_back(token->spelling, [this, token](const std::string& content){ if(notebook.get_current_page()!=-1 && content!=token->spelling) { + std::vector modified_pages; for(int c=0;crename_similar_tokens) { @@ -891,9 +889,12 @@ void Window::rename_token_entry() { if(number>0) { Singleton::terminal->print("Replaced "+std::to_string(number)+" occurrences in file "+view->file_path.string()+"\n"); notebook.save(c); + modified_pages.emplace_back(c); } } } + for(auto &page: modified_pages) + notebook.get_view(page)->soft_reparse_needed=false; entry_box.hide(); } });