C/C++ の関数実装を抽出する軽量 CLI
Project description
cifter
cifter は、C/C++ の関数実装を機械的かつ高速に抽出する CLI です。
tree-sitter で構文を捉え、行番号付き text として返します。重い意味解析や LLM 連携は行いません。
概要
- 単一の
--sourceファイルから抽出します - 公開サブコマンドは
function/flow/pathの 3 つです - 出力は元ソースと対応付け可能な行番号付き text です
-D NAME[=VALUE]により条件分岐前処理を評価できます
Why cifter
- 関数全体をそのまま抜き出したい
- 分岐の骨格だけを見たい
- 特定の route だけを細く追いたい
- 元の行番号を失わずにレビューや調査へ貼りたい
Installation
PyPI から install:
python -m pip install cifter-cli
最小確認:
cift --help
python -m cifter --help
GitHub Release の wheel / sdist から install することもできます。
python -m pip install ./cifter_cli-0.1.0-py3-none-any.whl
開発用:
uv sync
uv run cift --help
Quick Start
サンプルソース:
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: }
Commands
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'
Preprocessor / Track / Route
-D:
条件分岐前処理の評価に使うマクロを追加します。
cift function --name FooFunction --source examples/demo.c -D DEF_FOO -D ENABLE_BAR=1
--track:
flow で保持したいアクセスパスです。構文上の完全一致だけを扱います。
statectx->statea->b.c
--route:
path で辿る最小 DSL です。
case CMD_HOGEcase CMD_HOGE > if ret == OKcase CMD_HOGE > else if errno == EINTdefaultelse
Limitations
- 対象は C/C++ のみです
- 入力は単一ファイルのみです
- 出力形式は text のみです
- 入力文字コードは UTF-8 前提です
.hは現状 C 扱いです--routeはcase/default/if/else/else ifのみ対応です--trackは名前解決やスコープ解析を行いません- ループ経路、
goto横断、意味解析、CFG 構築、JSON 出力は対象外です
Examples
リポジトリには 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'
Development
開発者向け文書は docs/ にまとめています。
- docs/overview.md
- docs/cli.md
- docs/output-format.md
- docs/pipeline.md
- docs/data-model.md
- docs/architecture.md
- docs/release.md
仕様の正本は docs/specs/ にあります。
License
MIT License で配布します。詳細は LICENSE を参照してください。
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cifter_cli-0.1.0.tar.gz.
File metadata
- Download URL: cifter_cli-0.1.0.tar.gz
- Upload date:
- Size: 11.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ff7c1c4d068ece8a2eda9b330f91a081bcacd67c449cd6f1fc4125c9dd175d71
|
|
| MD5 |
324ca05146569255c5d51af21bfa462d
|
|
| BLAKE2b-256 |
2580183877d466dbb2e4d49f5b1c722fef5c7ee85cb27626ade659f669f5b736
|
File details
Details for the file cifter_cli-0.1.0-py3-none-any.whl.
File metadata
- Download URL: cifter_cli-0.1.0-py3-none-any.whl
- Upload date:
- Size: 15.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
389ca2fd1fc9af01c28f3858f9c196ff1aa5e6a6dba43fbefa3cfe03c7245263
|
|
| MD5 |
06496812d139f16cf38d27d2b3736a08
|
|
| BLAKE2b-256 |
143fbdc7fbde31da5f2cf462fe4cb93aeff8022ca3ea2da9b615aea5b517354a
|