|
|
|
|
@ -1943,7 +1943,7 @@ Source::ClangViewAutocomplete(file_path, project_path, language) {
|
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
get_token=[this]() -> std::pair<std::string, int> { |
|
|
|
|
get_token=[this]() -> Token { |
|
|
|
|
if(source_readable) { |
|
|
|
|
auto iter=get_buffer()->get_insert()->get_iter(); |
|
|
|
|
auto line=(unsigned)iter.get_line(); |
|
|
|
|
@ -1956,51 +1956,35 @@ Source::ClangViewAutocomplete(file_path, project_path, language) {
|
|
|
|
|
continue; |
|
|
|
|
auto referenced=cursor.get_referenced(); |
|
|
|
|
if(referenced) |
|
|
|
|
return {referenced.get_usr(), static_cast<int>(referenced.get_kind())}; |
|
|
|
|
return Token(static_cast<int>(referenced.get_kind()), token.get_spelling(), referenced.get_usr()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return {"", -1}; |
|
|
|
|
return Token(-1, "", ""); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
get_token_name=[this]() -> std::string { |
|
|
|
|
tag_similar_tokens=[this](const Token &token){ |
|
|
|
|
if(source_readable) { |
|
|
|
|
auto iter=get_buffer()->get_insert()->get_iter(); |
|
|
|
|
auto line=(unsigned)iter.get_line(); |
|
|
|
|
auto index=(unsigned)iter.get_line_index(); |
|
|
|
|
for(auto &token: *clang_tokens) { |
|
|
|
|
if(token.get_kind()==clang::Token_Identifier && token.get_cursor().has_type()) { |
|
|
|
|
if(line==token.offsets.first.line-1 && index>=token.offsets.first.index-1 && index <=token.offsets.second.index-1) { |
|
|
|
|
return token.get_spelling(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return ""; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
tag_similar_tokens=[this](const std::pair<std::string, int> &token){ |
|
|
|
|
if(source_readable) { |
|
|
|
|
if(token.second>=0 && token.first.size()>0 && last_similar_tokens_tagged!=token.first) { |
|
|
|
|
if(token.type>=0 && token.usr.size()>0 && last_similar_tokens_tagged!=token.usr) { |
|
|
|
|
get_buffer()->remove_tag(similar_tokens_tag, get_buffer()->begin(), get_buffer()->end()); |
|
|
|
|
auto offsets=clang_tokens->get_similar_token_offsets(token.first, static_cast<clang::CursorKind>(token.second)); |
|
|
|
|
auto offsets=clang_tokens->get_similar_token_offsets(static_cast<clang::CursorKind>(token.type), token.spelling, token.usr); |
|
|
|
|
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=token.first; |
|
|
|
|
last_similar_tokens_tagged=token.usr; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if(token.second<0 && token.first.size()==0 && last_similar_tokens_tagged!="") { |
|
|
|
|
if(token.type<0 && token.usr.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::pair<std::string, int> &token, const std::string &text) { |
|
|
|
|
rename_similar_tokens=[this](const Token &token, const std::string &text) { |
|
|
|
|
size_t number=0; |
|
|
|
|
if(source_readable) { |
|
|
|
|
auto offsets=clang_tokens->get_similar_token_offsets(token.first, static_cast<clang::CursorKind>(token.second)); |
|
|
|
|
auto offsets=clang_tokens->get_similar_token_offsets(static_cast<clang::CursorKind>(token.type), token.spelling, token.usr); |
|
|
|
|
std::vector<std::pair<Glib::RefPtr<Gtk::TextMark>, Glib::RefPtr<Gtk::TextMark> > > 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))); |
|
|
|
|
|