Каков самый простой способ переименовать все вхождения имени переменной с помощью clang libtooling и имея дескриптор namedDecl?

#c #clang #libclang

#c #clang #libclang

Вопрос:

Я хочу создать программу, которая создает абстрактные имена для всех функций, переменных, пространств имен… и заменяет текущие.Для этой цели я использовал документацию clang libtooling, а также их пример AST visitor. Я нашел другие полезные руководства в Интернете, такие как: Этот пример инструмента, который переименовывает функцию ; Этот пример того, как написать средство сопоставления и замены. В моем коде много подобных средств поиска на первом веб-сайте :

   virtual bool VisitVarDecl(VarDecl *func) {
errs() << func->getNameAsString()<<" ";
auto a = func->getType();
errs() << a.getAsString()<<"space";
//also tried this with no success
Twine a = Twine("works");
 func->setName(a);
return true;
  

}

Итак, вопрос в том, как мне заменить все вхождения этого имени в контексте этого имени: например, немой заменитель, основанный на регулярном выражении, заменил бы глобальную и локальную переменные с тем же именем, но использование дескриптора namedDecl должно дать мне только ту, которая обнаружена посетителем?

Комментарии:

1. Я бы не стал внедрять visitor для этого. clang-rename достаточно хорошо для того, что вы описали. проверку clang.llvm.org/extra/clang-rename.html

2. если вам нужна некоторая гибкость, я думаю, что ast matcher — это правильный путь.