使用旧的 Rust 2015
0.1.0 |
|
---|
#32 在 #clang
13KB
215 代码行
clang-typecheck
一个命令行工具,用于使用 clang 编译数据库对 C++ 源文件进行类型检查。
数据库包含项目的所有源文件的编译命令 - 包括所有标志、定义和包含 -。获取数据库的最简单方法是为 cmake 建设项目调用 cmake
并使用选项 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
。项目完全重建后,构建目录的根目录将包含一个名为 compile_commands.json
的数据库。
clang-typecheck
从数据库中提取给定源文件的编译命令,执行它并输出编译器的输出。
clang-typecheck
的设计是为了获得最简化的程序,该程序不需要任何配置并且应该可以直接工作。
有多个程序与数据库一起运行并执行类型检查,例如 rtags 或 YouComplete,但它们要么在 rtags 的情况下异步执行类型检查,这使得它们难以集成到多个编辑器中,要么在 YouCompleteMe 的情况下相当重,配置起来更困难,并且大大减慢了 vim 的速度。
另一个问题是,这些程序有时使用 clang 而不是数据库中使用的编译器进行类型检查,这可能会导致类型检查和构建时出现不同的警告。
clang-typecheck
并不适合实时类型检查 - 在这种情况下,异步解决方案更为合适 - 它旨在进行同步按需类型检查 - 通过按某个编辑器快捷键 - 配置最简单。
安装
clang-typecheck
使用 Rust 构建,因此至少需要 rustc
和 cargo
来构建它。
获取两者的最简单方法是使用 rustup
$> curl https://sh.rustup.rs -sSf | sh
在此调用后,你应该可以在 rustc
和 cargo
二进制文件在 ~/.cargo/bin/
中可用,因此将此路径添加到 PATH
环境变量中是可取的。
对于非 Unix 类平台,请参阅此处。
现在构建和安装 clang-typecheck
$> cargo install clang-typecheck
构建的二进制文件将位于 ~/.cargo/bin/clang-typecheck
。
用法
使用数据库进行源文件的类型检查
$> clang-typecheck /absolute_path_to/SomeSource.cpp path_to/compile_commands.json
这将查找 SomeSource.cpp
在 compile_commands.json,执行编译器命令并输出编译器的输出。
这使得将 clang-typecheck
作为编译器在解析编译器输出并显示错误的编辑器中的替代品成为可能。
文本编辑器集成
可能的问题
源文件的编译器命令被缓存在 ~/.clang_typecheck/cache/cmds
中,这样就不需要再次在数据库中查找相同的源文件的类型检查命令。通常这不应该是一个问题,因为数据库中的命令很少改变,这会影响类型检查,但如果出现问题,则可以清除 ~/.clang_typecheck/cache/cmds
中的缓存。
目前仅支持 gcc 和 clang 编译器,因为为了防止创建对象文件,仅应用类型检查,将在编译器命令中附加标志 -fsyntax-only
,这两个都了解。
依赖关系
~2.5MB
~44K SLoC