t-kenji/cifter

GitHub: t-kenji/cifter

基于tree-sitter的轻量级C/C++函数提取CLI工具,支持按函数名、控制流骨架或执行路径精准提取代码并保留原始行号。

Stars: 0 | Forks: 0

# cifter `cifter` 是一个能够机械且快速提取 C/C++ 函数实现的 CLI 工具。 它利用 `tree-sitter` 解析语法,并返回带有行号的文本。不进行复杂的语义分析或 LLM 集成。 ## 概述 - 从单个 `--source` 文件中提取 - 公开的子命令有 `function` / `flow` / `path` 三个 - 输出是与源代码对应的带行号文本 - 可通过 `-D NAME[=VALUE]` 评估条件分支预处理 ## 为什么选择 cifter - 想要原封不动地提取整个函数 - 只想查看分支的骨架结构 - 想要深入追踪特定的 route - 希望保留原始行号以便粘贴到审查或调查中 ## 安装 从 PyPI 安装: ``` python -m pip install cifter-cli ``` 最小化验证: ``` cift --help python -m cifter --help ``` 也可以从 GitHub Release 的 `wheel` / `sdist` 安装。 ``` python -m pip install ./cifter_cli-0.1.0-py3-none-any.whl ``` 用于开发: ``` uv sync uv run cift --help ``` ## 快速开始 示例源码: ``` int FooFunction(int x) { if (x > 0) { return 1; } return 0; } ``` 提取整个函数: ``` cift function --name FooFunction --source foo.c ``` 输出: ``` 1: int FooFunction(int x) 2: { 3: if (x > 0) { 4: return 1; 5: } 6: 7: return 0; 8: } ``` ## 命令 `function`: 原封不动地提取指定函数的完整实现。适合作为审查对象的最小提取单元。 ``` cift function --name FooFunction --source examples/demo.c ``` `flow`: 仅保留控制结构的骨架。如果加上 `--track`,则会额外保留包含完全匹配访问路径的语句。 ``` cift flow --function FooFunction --source examples/demo.c --track state cift flow --function FooFunction --source examples/demo.c --track 'ctx->state' ``` `path`: 仅细致提取指定的 route。保留父结构,对于到达 route 终点的容器,其后续的常规语句也会保留。 ``` cift path --function FooFunction --source examples/demo.c --route 'case CMD_HOGE > if ret == OK' cift path --function FooFunction --source examples/demo.c --route 'case CMD_HOGE > else if errno == EINT' cift path --function ElseRoute --source examples/demo.c --route 'else' ``` ## 预处理器 / Track / Route `-D`: 添加用于评估条件分支预处理的宏。 ``` cift function --name FooFunction --source examples/demo.c -D DEF_FOO -D ENABLE_BAR=1 ``` `--track`: 希望在 `flow` 中保留的访问路径。仅处理语法上的完全匹配。 - `state` - `ctx->state` - `a->b.c` `--route`: 用于 `path` 遍历的微型 DSL。 - `case CMD_HOGE` - `case CMD_HOGE > if ret == OK` - `case CMD_HOGE > else if errno == EINT` - `default` - `else` ## 限制 - 目标仅限 C/C++ - 输入仅限单个文件 - 输出格式仅限 text - 假设输入字符编码为 UTF-8 - `.h` 目前被视为 C 处理 - `--route` 仅支持 `case` / `default` / `if` / `else` / `else if` - `--track` 不进行名称解析或作用域分析 - 循环路径、跨 `goto`、语义分析、CFG 构建、JSON 输出均不在支持范围内 ## 示例 代码库中包含 `examples/demo.c`。 ``` cift function --name FooFunction --source examples/demo.c cift flow --function FooFunction --source examples/demo.c --track 'ctx->state' cift path --function FooFunction --source examples/demo.c --route 'case CMD_LOOP > if ret == OK' ``` ## 开发 面向开发者的文档汇总在 `docs/` 中。 - [docs/overview.md](/home/tkenji/Repos/cifter/docs/overview.md) - [docs/cli.md](/home/tkenji/Repos/cifter/docs/cli.md) - [docs/output-format.md](/home/tkenji/Repos/cifter/docs/output-format.md) - [docs/pipeline.md](/home/tkenji/Repos/cifter/docs/pipeline.md) - [docs/data-model.md](/home/tkenji/Repos/cifter/docs/data-model.md) - [docs/architecture.md](/home/tkenji/Repos/cifter/docs/architecture.md) - [docs/release.md](/home/tkenji/Repos/cifter/docs/release.md) 规范的正本位于 `docs/specs/`。 ## 许可证 以 MIT License 发布。详情请参照 `LICENSE`。
标签:C/C++, PyPI, Python, SOC Prime, Tree-sitter, 事务性I/O, 云安全监控, 云资产清单, 代码审查, 代码提取, 代码浏览, 代码片段, 函数提取, 开发工具, 控制流, 文本处理, 文档结构分析, 无后门, 源码分析, 语法解析, 轻量级工具, 逆向工具, 逆向工程, 静态分析, 预处理器