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. 18
      src/notebook.cc
  2. 2
      src/notebook.h
  3. 4
      src/source.h
  4. 2
      src/source_clang.cc
  5. 9
      src/window.cc

18
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<Source::ClangView*>(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<Source::ClangView*>(a_view)) {
if(clang_view!=a_clang_view)
a_clang_view->soft_reparse_needed=true;
}
if(auto clang_view=dynamic_cast<Source::ClangView*>(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<Source::ClangView*>(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() {

2
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();

4
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;

2
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)) {

9
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<int> modified_pages;
for(int c=0;c<notebook.size();c++) {
auto view=notebook.get_view(c);
if(view->rename_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();
}
});

Loading…
Cancel
Save