外部 Clang 示例

简介

此页面提供了一些人们使用 Clang 做过的事情的示例,这些示例可能作为有用的指南(或起点)来开发您自己的工具。 即使对于像构建集成 Clang 这样微不足道(但必要)的事情,它们也可能有所帮助。

Clang 的基于库的设计旨在促进外部项目使用,我们一直致力于改进 Clang 以更好地服务于我们的外部用户。 Clang 被用于的一些典型应用程序类别是

  • 静态分析。

  • 文档/交叉引用生成。

如果您知道(或编写了!)使用 Clang 的工具或项目,请在 Discourse 论坛(Clang 前端类别) 上发布,以便将其添加进去。(或者,如果您已经是 Clang 贡献者,请随时直接提交添加内容)。由于此页面的主要目的是提供可以帮助开发人员的示例,因此通常必须提供代码。

项目和工具列表

https://github.com/Andersbakken/rtags/

“RTags 是一个客户端/服务器应用程序,它索引 c/c++ 代码并维护一个持久化的内存中数据库,其中包含引用、符号名称、代码补全等。”

https://rprichard.github.io/CxxCodeBrowser/

“一个 C/C++ 源代码索引器和导航器。”

https://github.com/etaoins/qconnectlint

“qconnectlint 是一个 Clang 工具,用于静态验证使用 Qt 的 QObject::connect 进行的信号和槽连接的一致性。”

https://github.com/woboq/woboq_codebrowser

“Woboq 代码浏览器是一个基于 Web 的 C/C++ 项目代码浏览器。 请查看 https://code.woboq.org/ 以获取示例!”

https://github.com/mozilla/dxr

“DXR 是一个源代码交叉引用工具,它使用由工具化编译器收集的静态分析数据。”

https://github.com/eschulte/clang-mutate

“此工具对 C 语言源文件执行许多操作。”

https://github.com/gmarpons/Crisp

“一个用于 LLVM/clang 的编码规则验证插件。 Crisp 规则是用 Prolog 编写的。 一个用于轻松编写新规则的高级声明式 DSL 正在开发中。 它将被称为 CRISP,是 Coding Rules in Sugared Prolog 的缩写。”

https://github.com/drothlis/clang-ctags

“为 C++ 源代码生成标签文件。”

https://github.com/exclipy/clang_indexer

“这是一个基于 libclang 库的 C 和 C++ 索引器。”

https://github.com/holtgrewe/linty

“Linty - 使用 Python 和 libclang 进行 C/C++ 风格检查。”

https://github.com/axw/cmonster

“cmonster 是 Clang C++ 解析器的 Python 包装器。”

https://github.com/rizsotto/Constantine

“Constantine 是一个学习如何编写 clang 插件的玩具项目。 实现伪常量分析。 生成关于未声明为 const 限定符的变量的警告。”

https://github.com/jessevdk/cldoc

“cldoc 是一个基于 Clang 的 C 和 C++ 文档生成器。 cldoc 试图通过一种现代、非侵入式和稳健的方式解决编写 C/C++ 软件文档的问题。”

https://github.com/AlexDenisov/ToyClangPlugin

“最简单的 Clang 插件,它为 Objective-C 实现语义检查。 此示例展示了如何使用 DiagnosticsEngine(发出警告、错误、修复建议)。 另请参阅 http://l.rw.rw/clang_plugin 以获取分步说明。”

https://phabricator.kde.org/source/clazy

“clazy 是一个编译器插件,它允许 clang 理解 Qt 语义。 您将获得超过 50 个与 Qt 相关的编译器警告,从不必要的内存分配到 API 的误用,包括用于自动重构的修复建议。”

https://gerrit.libreoffice.org/gitweb?p=core.git;a=blob_plain;f=compilerplugins/README;hb=HEAD

“LibreOffice 使用 Clang 插件基础设施在构建过程中检查各种内容,有些更具体,有些更少具体地针对 LibreOffice 源代码。 目前有大约 50 个这样的检查器,从标记 C 样式强制转换和保留标识符的使用到确保代码遵守特定 LibreOffice 类别的生命周期协议。 它们可以作为编写基于 RecursiveASTVisitor 的插件的示例。”

https://github.com/banach-space/clang-tutor

“一个用于教学和学习的树外 Clang 插件集合。”