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, 云安全监控, 云资产清单, 代码审查, 代码提取, 代码浏览, 代码片段, 函数提取, 开发工具, 控制流, 文本处理, 文档结构分析, 无后门, 源码分析, 语法解析, 轻量级工具, 逆向工具, 逆向工程, 静态分析, 预处理器