是否有作为一组Clang工具实现的C++重构模式?

8

所以我发现了Clang工具链的优秀视频...不禁想知道:是否有适用于整个项目美化和清理(类似于C# Resharper)的示例代码库/编译工具套件? 例如项目规模的代码格式化,如行末的额外空格、成员/类命名的统一性,if后面放置{}括号等方式?


我猜这将是下一个版本的XCode。 - Carl
1个回答

7

Clang的libtooling相对较新,因此目前没有太多基于它的东西。

根据我的经验,链接时很麻烦(没有clang版本的llvm-config,在tutorials中,开发人员似乎认为人们会在完整的clang repo内构建他们的工具,而不是作为好的单独项目。Ubuntu版本的clang只包括libtooling作为静态.a文件,没有.so文件。Ubuntu的官方LLVM每夜构建似乎根本不包含静态的libclangTooling.a。

include-what-you-use,旨在删除未使用的头文件。

clReflect生成反射绑定。(不确定这实际上是否使用了libtooling或仅使用了libclang,但它是同样的东西。)

还有refactorial支持一些其他操作。

有一些工具包含在clang的一部分中。最值得注意的是一个c++11迁移工具。还有一个模块化工具(这是C++未来版本正在研究的一个功能)。

一旦这些工具起作用,它们应该非常有用和强大。

就个人而言,我正在尝试(目前不成功)构建一个简单的CLI重构工具cppmv,它旨在让您只需重命名类、函数、变量、移动它们到其他命名空间等,同时保持它们的使用同步,但我现在没有可用的东西。其他工具可以是cppls(列出命名空间、类函数等)。也许是cppcp,如果您想复制某些内容(例如,您可以有一个“模板”类),但它似乎不太有用。

我还想制作一个FUSE用户空间文件系统,让您可以挂载和浏览您的项目,以便使用传统的'mv'和'cp'命令,但这更多是为了学习FUSE而不是因为以这种方式进行操作会有用。虽然可能可以编辑特定类和函数的源代码,放在它们自己的独立个体'文件'中,但对于像IDE这样的许多东西来说并没有用处,因为您将失去有关标头等信息的信息。
同时,拥有基于ASTMatcher的实时“编辑即可查看”工具或一些简单的重构脚本语言绑定也很好。
编辑: 现在还有clang-format用于代码样式格式化,以及(从3.4开始)用于Vim集成的clang-format.py脚本。clang-apply-replacements "找到包含序列化替换的文件,并在去重和检测冲突后应用这些更改。"
值得一看的是this video,其中演示了一些这方面的内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接