所以我发现了关于 Clang 工具的精彩视频......并且不禁想知道:是否有任何用于完整项目美化和清理的示例代码库/编译工具套件(类似于 C# resharper)?项目规模的代码格式,例如:行尾的额外空间、成员/类命名的统一、{}
括号后放置的方式if
等?
1 回答
Clang 的 libtooling 是相当新的,因此目前没有太多基于它的工具。
同样根据我的经验,链接起来很痛苦(没有llvm-config的clang版本,并且在教程中,开发人员似乎认为人们会在完整的clang repo中构建他们的工具,而不是作为很好的单独项目。Ubuntu构建clang 仅包含 libtooling 作为静态 .a,没有 .so。Ubuntu 的官方 LLVM 每晚构建似乎根本不包含静态 libclangTooling.a。
include-what-you-use旨在删除未使用的头文件。
有clReflect可以生成反射绑定。(不确定这实际上是使用 libtooling 还是仅仅使用 libclang,但它是同一种东西。)
还有支持一些其他操作的重构。
有一些工具包含在 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 “查找包含序列化替换的文件,并在重复数据删除和检测冲突后应用这些更改。 ”
可能值得一看这个视频,其中一些东西被演示了。