Browse Source

Cleanup of soft_reparse uses, and fixed a bug where implementation files were not correctly reparsed after using rename that included a header file.

merge-requests/365/head
eidheim 10 years ago
parent
commit
7e598ae91a
  1. 6
      src/notebook.cc
  2. 2
      src/notebook.h
  3. 4
      src/source.h
  4. 2
      src/source_clang.cc
  5. 9
      src/window.cc

6
src/notebook.cc

@ -164,7 +164,7 @@ void Notebook::configure(int view_nr) {
#endif #endif
} }
bool Notebook::save(int page, bool reparse_needed) { bool Notebook::save(int page) {
JDEBUG("start"); JDEBUG("start");
if(page>=size()) { if(page>=size()) {
JDEBUG("end false"); JDEBUG("end false");
@ -199,7 +199,6 @@ bool Notebook::save(int page, bool reparse_needed) {
} }
if(filesystem::write(view->file_path, view->get_buffer())) { if(filesystem::write(view->file_path, view->get_buffer())) {
if(reparse_needed) {
if(auto clang_view=dynamic_cast<Source::ClangView*>(view)) { if(auto clang_view=dynamic_cast<Source::ClangView*>(view)) {
if(clang_view->language->get_id()=="chdr" || clang_view->language->get_id()=="cpphdr") { if(clang_view->language->get_id()=="chdr" || clang_view->language->get_id()=="cpphdr") {
for(auto a_view: source_views) { for(auto a_view: source_views) {
@ -210,7 +209,6 @@ bool Notebook::save(int page, bool reparse_needed) {
} }
} }
} }
}
view->get_buffer()->set_modified(false); view->get_buffer()->set_modified(false);
@ -248,7 +246,7 @@ bool Notebook::save(int page, bool reparse_needed) {
bool Notebook::save_current() { bool Notebook::save_current() {
if(get_current_page()==-1) if(get_current_page()==-1)
return false; return false;
return save(get_current_page(), true); return save(get_current_page());
} }
bool Notebook::close_current_page() { bool Notebook::close_current_page() {

2
src/notebook.h

@ -18,7 +18,7 @@ public:
Source::View* get_current_view(); Source::View* get_current_view();
bool close_current_page(); bool close_current_page();
void open(const boost::filesystem::path &file_path); void open(const boost::filesystem::path &file_path);
bool save(int page, bool reparse_needed=false); bool save(int page);
bool save_current(); bool save_current();
void configure(int view_nr); void configure(int view_nr);
boost::filesystem::path get_current_folder(); boost::filesystem::path get_current_folder();

4
src/source.h

@ -104,8 +104,8 @@ namespace Source {
bool soft_reparse_needed=false; bool soft_reparse_needed=false;
bool full_reparse_needed=false; bool full_reparse_needed=false;
virtual void soft_reparse() {} virtual void soft_reparse() {soft_reparse_needed=false;}
virtual bool full_reparse() {return true;} virtual bool full_reparse() {full_reparse_needed=false; return true;}
protected: protected:
bool parsed=false; bool parsed=false;
Tooltips diagnostic_tooltips; Tooltips diagnostic_tooltips;

2
src/source_clang.cc

@ -164,6 +164,7 @@ void Source::ClangViewParse::parse_initialize() {
} }
void Source::ClangViewParse::soft_reparse() { void Source::ClangViewParse::soft_reparse() {
soft_reparse_needed=false;
parsed=false; parsed=false;
if(parse_state!=ParseState::PROCESSING) if(parse_state!=ParseState::PROCESSING)
return; return;
@ -922,6 +923,7 @@ void Source::ClangViewAutocomplete::async_delete() {
} }
bool Source::ClangViewAutocomplete::full_reparse() { bool Source::ClangViewAutocomplete::full_reparse() {
full_reparse_needed=false;
if(!full_reparse_running) { if(!full_reparse_running) {
auto expected=ParseState::PROCESSING; auto expected=ParseState::PROCESSING;
if(!parse_state.compare_exchange_strong(expected, ParseState::RESTARTING)) { if(!parse_state.compare_exchange_strong(expected, ParseState::RESTARTING)) {

9
src/window.cc

@ -96,12 +96,9 @@ Window::Window() : compiling(false) {
if(view->full_reparse_needed) { if(view->full_reparse_needed) {
if(!view->full_reparse()) if(!view->full_reparse())
Singleton::terminal->async_print("Error: failed to reparse "+view->file_path.string()+". Please reopen the file manually.\n", true); 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();
view->soft_reparse_needed=false;
}
view->set_status(view->status); view->set_status(view->status);
view->set_info(view->info); view->set_info(view->info);
@ -884,6 +881,7 @@ void Window::rename_token_entry() {
label_it->update(0, ""); label_it->update(0, "");
entry_box.entries.emplace_back(token->spelling, [this, token](const std::string& content){ entry_box.entries.emplace_back(token->spelling, [this, token](const std::string& content){
if(notebook.get_current_page()!=-1 && content!=token->spelling) { if(notebook.get_current_page()!=-1 && content!=token->spelling) {
std::vector<int> modified_pages;
for(int c=0;c<notebook.size();c++) { for(int c=0;c<notebook.size();c++) {
auto view=notebook.get_view(c); auto view=notebook.get_view(c);
if(view->rename_similar_tokens) { if(view->rename_similar_tokens) {
@ -891,9 +889,12 @@ void Window::rename_token_entry() {
if(number>0) { if(number>0) {
Singleton::terminal->print("Replaced "+std::to_string(number)+" occurrences in file "+view->file_path.string()+"\n"); Singleton::terminal->print("Replaced "+std::to_string(number)+" occurrences in file "+view->file_path.string()+"\n");
notebook.save(c); notebook.save(c);
modified_pages.emplace_back(c);
} }
} }
} }
for(auto &page: modified_pages)
notebook.get_view(page)->soft_reparse_needed=false;
entry_box.hide(); entry_box.hide();
} }
}); });

Loading…
Cancel
Save