生成用于大规模重构/重命名的 C++ 符号列表

kfm*_*e04 5 c++ refactoring c++11

背景

我继承了一个遗留的 60kloc g++ 项目,我想重构它以在整个项目中强制执行一致的命名约定。

是否有免费/开源静态分析工具可以生成以下列表:

  • 全局符号
  • 类名
  • 成员方法(公共/受保护/私有,如果可能)
  • 成员变量
  • 静态方法
  • 本地符号(可能会忽略这些)
  • 我可能错过的任何其他符号,但可能会影响代码阅读器

方法

我的意图是使用 vim 来编辑生成的符号列表,然后使用 Ruby 脚本对符号进行非常粗略的搜索和替换/映射,以便至少,命名约定是一致的。

这个过程有点难看,我预计初始编译会失败,但如果我可以有一组更具可读性的代码,我不介意手动解决问题。

大型 C++ 代码库的开发人员使用什么样的工具来进行这种重构?

And*_*zos 1

C++ 的自动重构非常困难,部分与预处理器(宏和文件包含)有关,但主要与解析、名称查找和语义分析阶段的其余部分(模板实例化、常量表达式、重载)之间的相互依赖性有关分辨率等)。在我工作过的非常大的C++代码库上,根本没有完成自动重构,并且由于固有的难度,重构工具的质量很差。

不过,自从 clang 出现以来,它特别具有模块化前端,因此您可以比其他工具更好地访问 AST,因此可能会有一些基于它的更好的重构工具- 但我不会屏住呼吸。

看一下 clang 的 AST 转储,也许您可​​以在 XML 上编写一个脚本来为您提供一个转储,该转储可能构成手动重构它的起点。