diff --git a/src/source_clang.cc b/src/source_clang.cc index a2fd301..0ca7ed5 100644 --- a/src/source_clang.cc +++ b/src/source_clang.cc @@ -1290,33 +1290,38 @@ Source::ClangViewRefactor::ClangViewRefactor(const boost::filesystem::path &file method.erase(pos, 1); method+=" "; } + method+=cursor.get_display_name(); - std::string parent_str; + std::string prefix; auto parent=cursor.get_semantic_parent(); while(parent && parent.get_kind()!=clangmm::Cursor::Kind::TranslationUnit) { - parent_str.insert(0, parent.get_display_name()+"::"); + prefix.insert(0, parent.get_display_name()+(prefix.empty()?"":"::")); parent=parent.get_semantic_parent(); } - method+=parent_str+cursor.get_display_name(); - - std::string row=std::to_string(offset.line)+": "+Glib::Markup::escape_text(method); + method=Glib::Markup::escape_text(method); //Add bold method token - size_t token_end_pos=row.find('('); - if(token_end_pos==0 || token_end_pos==std::string::npos) + size_t token_end_pos=method.find('('); + if(token_end_pos==std::string::npos) continue; - auto pos=token_end_pos; - do { - pos--; - } while(row[pos]!=':' && row[pos]!=' ' && pos!=std::string::npos); - row.insert(token_end_pos, ""); - row.insert(pos+1, ""); - methods.emplace_back(Offset(offset.line-1, offset.index-1), row); + auto token_start_pos=token_end_pos; + while(token_start_pos!=0 && method[token_start_pos]!=' ') + --token_start_pos; + method.insert(token_end_pos, ""); + method.insert(token_start_pos, ""); + + if(!prefix.empty()) + prefix+=':'; + prefix+=std::to_string(offset.line)+": "; + prefix=Glib::Markup::escape_text(prefix); + + methods.emplace_back(Offset(offset.line-1, offset.index-1), prefix+method); } } } if(methods.empty()) Info::get().print("No methods found in current buffer"); + return methods; };