Skip to main content

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 で保持したいアクセスパスです。構文上の完全一致だけを扱います。

  • 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

Limitations

  • 対象は C/C++ のみです
  • 入力は単一ファイルのみです
  • 出力形式は text のみです
  • 入力文字コードは UTF-8 前提です
  • .h は現状 C 扱いです
  • --routecase / 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/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

cifter_cli-0.1.0.tar.gz (11.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cifter_cli-0.1.0-py3-none-any.whl (15.9 kB view details)

Uploaded Python 3

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

Hashes for cifter_cli-0.1.0.tar.gz
Algorithm Hash digest
SHA256 ff7c1c4d068ece8a2eda9b330f91a081bcacd67c449cd6f1fc4125c9dd175d71
MD5 324ca05146569255c5d51af21bfa462d
BLAKE2b-256 2580183877d466dbb2e4d49f5b1c722fef5c7ee85cb27626ade659f669f5b736

See more details on using hashes here.

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

Hashes for cifter_cli-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 389ca2fd1fc9af01c28f3858f9c196ff1aa5e6a6dba43fbefa3cfe03c7245263
MD5 06496812d139f16cf38d27d2b3736a08
BLAKE2b-256 143fbdc7fbde31da5f2cf462fe4cb93aeff8022ca3ea2da9b615aea5b517354a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page