anatolykoptev/ox-codes

GitHub: anatolykoptev/ox-codes

将 ripgrep、tree-sitter 和 ast-grep 封装为统一 HTTP API 的代码智能服务,提供语言感知搜索、结构化重写和数据流分析能力。

Stars: 2 | Forks: 0

# ox-codes [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) [![Rust 1.97+](https://img.shields.io/badge/rust-1.97%2B-orange.svg)](https://www.rust-lang.org) [![Docker ready](https://img.shields.io/badge/docker-ready-2496ED.svg)](Dockerfile) 作为 HTTP 服务的代码搜索与结构化重写工具。将 [ripgrep](https://github.com/BurntSushi/ripgrep)、[tree-sitter](https://tree-sitter.github.io) 和 [ast-grep](https://ast-grep.github.io) 封装在一个 JSON API 之后,并在此基础上提供了一个过程内数据流引擎。 ## 为什么使用它 - **语言感知搜索** — 支持将正则匹配范围限定在函数体、类块或任何命名的 AST 区域,支持 15 种语言。 - **基于形态的查询** — 根据 AST 结构(如 `func $N($$$) error`)而非文本进行匹配,支持通配符捕获。 - **结构化重写** — 在 AST 层面进行搜索与替换;在应用前以统一 diff 进行预览。 - **数据流分析** — 检测死存储、未使用变量和污点数据流(source→sink),无需启动编译器。 - **零状态、零认证** — 无状态的 HTTP 服务;挂载需要分析的目录即可调用 API。 - **热缓存速度** — scoped-search 和 dataflow 结果按 repo 缓存,以每个文件的 mtime+size 为键,并在发生更改时失效,因此在未更改的树上重复查询将直接从缓存返回(亚毫秒级),而不是重新解析。 ## 快速开始 ``` git clone https://github.com/anatolykoptev/ox-codes cd ox-codes make build # cargo build --workspace (requires Rust 1.97+) make test # cargo test --workspace cargo run -p ox-codes -- --port 8902 # start the HTTP service ``` 然后发送一个搜索请求: ``` curl -s -X POST http://127.0.0.1:8902/search \ -H 'Content-Type: application/json' \ -d '{"root":"/path/to/repo","pattern":"TODO","language":"go"}' | jq . ``` 响应: ``` { "matches": [ { "file": "cmd/main.go", "line": 42, "text": "// TODO: handle error" } ], "total_matches": 1, "truncated": false, "duration_ms": 8 } ``` ## 端点 | 端点 | 引擎 | 用例 | |---|---|---| | `POST /search` | ripgrep | 跨目录树的类 Grep 文本/正则搜索 | | `POST /search/scoped` | tree-sitter + regex | 限制在命名 AST 区域(函数、类等)内的正则搜索 | | `POST /search/structural` | ast-grep | 通过带有 `$WILDCARD` 捕获的 AST 结构进行模式匹配 | | `POST /rewrite` | ast-grep | 结构化搜索与替换;按文件返回统一 diff | | `POST /dataflow/analyze` | 自定义 IL/CFG | 死存储、未使用变量(Go, Python) | | `POST /dataflow/taint` | 自定义 IL/CFG | 使用内置或自定义规则进行 source→sink 污点追踪 | | `GET /health` | — | 存活探针 | | `GET /cache/stats` | — | scoped 和 dataflow 结果缓存的命中/未命中计数器及条目数 | 所有搜索端点均支持 `expand`(`"none"` / `"function"` / `"block"`)和 `max_tokens` 参数,用于返回完整的封闭 AST 块,而不是单行匹配结果。 ## 文档 - **[`docs/API.md`](docs/API.md)** — 每个端点的完整请求/响应 schema 及示例。 - **[`docs/EXAMPLES.md`](docs/EXAMPLES.md)** — 端到端使用场景:认证函数发现、错误模式重构、未使用变量清理、污点追踪。 - **[`docs/INTEGRATION.md`](docs/INTEGRATION.md)** — 消费者契约:文件系统挂载规范、路径陷阱、Docker 卷配置。 - **[`docs/ROADMAP.md`](docs/ROADMAP.md)** — 阶段状态;已完成的工作及后续计划。 ## 支持的语言 Scoped 和 structural 搜索:Go, Python, TypeScript, JavaScript, Rust, Java, C, C++, Ruby, C#, PHP, Svelte, Astro, Bash, Lua。 Dataflow(analyze + taint):Go, Python。其他语言的支持进度见 [`docs/ROADMAP.md`](docs/ROADMAP.md)。 ## Crate 结构 | Crate | 角色 | |---|---| | [`crates/core`](crates/core) | 搜索引擎:grep, scoped, structural, rewrite, expand | | [`crates/langs`](crates/langs) | Tree-sitter 语言范围(15 种语言) | | [`crates/dataflow`](crates/dataflow) | IL 构建器, CFG, def-use 链, 污点引擎 | | [`crates/server`](crates/server) | axum HTTP handlers | | [`src/`](src) | 二进制入口点(`ox-codes` CLI) | ## 贡献 请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。请遵循[行为准则](CODE_OF_CONDUCT.md)。 ## 许可证 MIT — 详见 [LICENSE](LICENSE)。
标签:AST解析, Rust, XSS注入, 代码搜索, 可视化界面, 结构化重写, 网络流量审计, 请求拦截, 通知系统, 错误基检测, 静态代码分析