diff --git a/src/source.cc b/src/source.cc index dbdb456..a73af94 100644 --- a/src/source.cc +++ b/src/source.cc @@ -1789,7 +1789,7 @@ Source::ClangViewAutocomplete(file_path, project_path, language) { } }); - get_token=[this]() -> std::string { + get_token=[this]() -> std::pair { if(source_readable) { auto iter=get_buffer()->get_insert()->get_iter(); auto line=(unsigned)iter.get_line(); @@ -1799,12 +1799,12 @@ Source::ClangViewAutocomplete(file_path, project_path, language) { if(line==token.offsets.first.line-1 && index>=token.offsets.first.index-1 && index <=token.offsets.second.index-1) { auto referenced=token.get_cursor().get_referenced(); if(referenced) - return referenced.get_usr(); + return {referenced.get_usr(), static_cast(referenced.get_kind())}; } } } } - return ""; + return {"", -1}; }; get_token_name=[this]() -> std::string { @@ -1823,27 +1823,27 @@ Source::ClangViewAutocomplete(file_path, project_path, language) { return ""; }; - tag_similar_tokens=[this](const std::string &usr){ + tag_similar_tokens=[this](const std::pair &token){ if(source_readable) { - if(usr.size()>0 && last_similar_tokens_tagged!=usr) { + if(token.second!=0 && token.first.size()>0 && last_similar_tokens_tagged!=token.first) { get_buffer()->remove_tag(similar_tokens_tag, get_buffer()->begin(), get_buffer()->end()); - auto offsets=clang_tokens->get_similar_token_offsets(usr); + auto offsets=clang_tokens->get_similar_token_offsets(token.first, static_cast(token.second)); for(auto &offset: offsets) { get_buffer()->apply_tag(similar_tokens_tag, get_buffer()->get_iter_at_line_index(offset.first.line-1, offset.first.index-1), get_buffer()->get_iter_at_line_index(offset.second.line-1, offset.second.index-1)); } - last_similar_tokens_tagged=usr; + last_similar_tokens_tagged=token.first; } } - if(usr.size()==0 && last_similar_tokens_tagged!="") { + if(token.second!=0 && token.first.size()==0 && last_similar_tokens_tagged!="") { get_buffer()->remove_tag(similar_tokens_tag, get_buffer()->begin(), get_buffer()->end()); last_similar_tokens_tagged=""; } }; - rename_similar_tokens=[this](const std::string &usr, const std::string &text) { + rename_similar_tokens=[this](const std::pair &token, const std::string &text) { size_t number=0; if(source_readable) { - auto offsets=clang_tokens->get_similar_token_offsets(usr); + auto offsets=clang_tokens->get_similar_token_offsets(token.first, static_cast(token.second)); std::vector, Glib::RefPtr > > marks; for(auto &offset: offsets) { marks.emplace_back(get_buffer()->create_mark(get_buffer()->get_iter_at_line_index(offset.first.line-1, offset.first.index-1)), get_buffer()->create_mark(get_buffer()->get_iter_at_line_index(offset.second.line-1, offset.second.index-1))); @@ -1867,8 +1867,8 @@ Source::ClangViewAutocomplete(file_path, project_path, language) { if(mark->get_name()=="insert") { delayed_tag_similar_tokens_connection.disconnect(); delayed_tag_similar_tokens_connection=Glib::signal_timeout().connect([this]() { - auto usr=get_token(); - tag_similar_tokens(usr); + auto token=get_token(); + tag_similar_tokens(token); return false; }, 100); } diff --git a/src/source.h b/src/source.h index 6b81963..a77bd10 100644 --- a/src/source.h +++ b/src/source.h @@ -69,10 +69,10 @@ namespace Source { std::function()> get_declaration_location; std::function goto_method; - std::function get_token; + std::function()> get_token; std::function get_token_name; - std::function tag_similar_tokens; - std::function rename_similar_tokens; + std::function &token)> tag_similar_tokens; + std::function &token, const std::string &text)> rename_similar_tokens; std::function on_update_status; std::function on_update_info; diff --git a/src/window.cc b/src/window.cc index 13bfa5a..6fe14c8 100644 --- a/src/window.cc +++ b/src/window.cc @@ -675,8 +675,8 @@ void Window::rename_token_entry() { entry_box.clear(); if(notebook.get_current_page()!=-1) { if(notebook.get_current_view()->get_token && notebook.get_current_view()->get_token_name) { - auto token=std::make_shared(notebook.get_current_view()->get_token()); - if(token->size()>0 && notebook.get_current_view()->get_token_name) { + auto token=std::make_shared >(notebook.get_current_view()->get_token()); + if(token->second!=0 && token->first.size()>0 && notebook.get_current_view()->get_token_name) { auto token_name=std::make_shared(notebook.get_current_view()->get_token_name()); for(int c=0;ctag_similar_tokens) {