name: analyze-rust-ffi-crate-surface description: 确定C代码库的哪些部分使用Rust定义的C符号。
分析Rust FFI Crate表面
编译给定Rust FFI crate或文件中定义的所有C可见符号列表(例如,带有#[unsafe(no_mangle)]注释的extern "C" fn或类型定义)。
然后确定C代码库的哪些部分使用这些符号。
参数
<path>: Rust crate或文件的路径。<path 1> <path 2>: 多个Rust crates/文件。
如果路径不以src/开头,假设它在src/redisearch_rs/c_entrypoint目录中。例如,numeric_range_tree_ffi变为src/redisearch_rs/numeric_range_tree_ffi。
如果路径指向一个目录,则审查该目录中所有Rust文件的文档。
指令
- 读取相关的Rust源文件。
- 编译它们暴露的所有FFI符号列表(例如,带有
#[unsafe(no_mangle)]注释的extern "C" fn或类型定义)。 您可以使用src/redisearch_rs/headers中相应的自动生成头文件,如果有帮助的话。 - 对于每个符号,确定C代码库中哪些模块使用它:
- 对于函数,在C代码库中查找对该函数的调用。
- 对于类型,检查它们是否用作函数参数、字段类型或在类型转换中。
发出报告,列出每个符号的以下信息:
- 符号名称。
- C代码库中使用它的模块。
- 符号的类型(函数、类型等)。
- 是否仅在C/C++单元测试中使用(即,在
tests/下)。
自动生成的头文件
每个*_ffi Rust crate在src/redisearch_rs/headers中都有一个相应的自动生成头文件,由build.rs脚本通过cbindgen创建。
自动生成的头文件包括Rust crate定义的所有FFI符号,无论它们定义在哪个子模块中。