其他
使用 GrepAI 时按语言确认支持并配置索引与调用图追踪
当你使用 GrepAI 并需要确认语言支持、配置 trace 语言与排除模式,或排查语言相关索引和调用图追踪问题时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
使用 GrepAI 时按语言确认支持并配特定
解决思路
- GrepAI 可索引所有文本文件,但对特定编程语言有增强支持;先按语言支持级别判断是否启用 trace。
- 确认 Full Support(Index + Trace)语言及扩展名:Go(.go)、JavaScript(.js、.jsx)、TypeScript(.ts、.tsx)、Python(.py)、PHP(.php)、C(.c、.h)、C++(.cpp、.hpp、.cc、.cxx、.hh)、Rust(.rs)、Zig(.zig)、C#(.cs)、Java(.java)、Pascal/Delphi(.pas、.dpr)。
- 确认 Index Only(No Trace)语言及扩展名:Ruby(.rb)、Swift(.swift)、Kotlin(.kt、.kts)、Scala(.scala)、Lua(.lua)、Shell(.sh、.bash、.zsh)、SQL(.sql)、HTML(.html、.htm)、CSS(.css、.scss、.less)、Markdown(.md、.mdx)、YAML(.yaml、.yml)、JSON(.json)、TOML(.toml)、XML(.xml)。
- 在 .grepai/config.yaml 中通过 trace.enabled_languages 启用/禁用 trace 语言;示例启用 .go、.js、.ts、.jsx、.tsx、.py、.php、.rs、.c、.cpp、.cs、.java。
- 也可在 trace.enabled_languages 中注释或移除某扩展名来禁用该语言 trace,例如保留 .go 并注释掉 .js 来刻意排除 JavaScript。
- 在 trace.exclude_patterns 中排除文件,例如 `*_test.go`、`*.spec.ts`。
- Go:配置 trace.enabled_languages 包含 .go,并在 trace.exclude_patterns 中加入 `*_test.go`、`mock_*.go`、`*_mock.go`;Trace 准确率为 Excellent。
- JavaScript/TypeScript:配置 trace.enabled_languages 包含 .js、.jsx、.ts、.tsx;在 trace.exclude_patterns 中加入 `*.test.js`、`*.spec.ts`、`*.d.ts`;Trace 准确率为 Good,部分动态模式可能漏掉。
- Python:配置 trace.enabled_languages 包含 .py;在 trace.exclude_patterns 中加入 `test_*.py`、`*_test.py`、`conftest.py`;Trace 准确率为 Good,动态导入和装饰器可能漏掉。
- C/C++:配置 trace.enabled_languages 包含 .c、.h、.cpp、.hpp、.cc、.cxx;在 trace.exclude_patterns 中加入 `*_test.cpp`;Trace 准确率为 Good,宏和模板可能影响准确率。
- Rust:配置 trace.enabled_languages 包含 .rs;在 trace.exclude_patterns 中加入 `**/tests/**`、`**/benches/**`;Trace 准确率为 Excellent。
- PHP:配置 trace.enabled_languages 包含 .php;在 trace.exclude_patterns 中加入 `*Test.php`、`**/tests/**`;Trace 准确率为 Good,魔术方法可能无法完全追踪。
- Java:配置 trace.enabled_languages 包含 .java;在 trace.exclude_patterns 中加入 `*Test.java`、`**/test/**`;Trace 准确率为 Good,基于反射的调用可能漏掉。
- C#:配置 trace.enabled_languages 包含 .cs;在 trace.exclude_patterns 中加入 `*Tests.cs`、`**/Tests/**`;Trace 准确率为 Good,委托和事件可能部分追踪。
- 多语言项目:按技术栈配置 trace.enabled_languages,例如后端 .go、前端 .ts/.tsx、共享 .sql(仅索引);在 trace.exclude_patterns 中加入 `*_test.go`、`*.spec.ts`。
- 使用 Index 做语义搜索:任意文本文件都会被分块并嵌入,支持语义搜索,不需要语言特定解析。
- 使用 Trace 构建调用图:需要语言特定解析,提取函数定义和调用,构建调用者/被调用者关系,并使用 regex(快速)或 tree-sitter(精确)。
- 选择 trace 模式:Go、JavaScript、TypeScript、Python、PHP、C/C++、Rust、Zig、C#、Java 均支持 Fast 和 Precise;Pascal 支持 Fast,Precise 有限。
- 添加自定义扩展:非标准扩展会被索引但不会被 trace;在 .grepai/config.yaml 的 ignore 中只添加不想被索引的模式,例如 `*.generated.go`。
- 文件类型检测:GrepAI 只使用文件扩展名,不使用 shebang(如 `#!/usr/bin/env python`)、文件内容分析或 .editorconfig;若检测错误,重命名文件。
- 对不支持 trace 的语言(Ruby、Swift、Kotlin、Scala、Elixir、Clojure、Haskell、OCaml、F#、Erlang、R、Julia、Perl、Groovy),先用语义搜索找代码,再手动 trace。
- 最佳实践:只启用需要的语言,以加快 trace 构建。
- 最佳实践:排除测试文件,以获得更干净的 trace 结果。
- 最佳实践:trace 结果不完整时使用 precise mode 提高准确率。
- 最佳实践:根据实际技术栈配置语言。
- 检查语言支持:运行 `grepai status`,查看正在索引的内容和按类型统计的文件数。
- 排查文件未被索引:检查文件是否在 ignore 模式中。
- 排查某语言 trace 缺失:确保该语言扩展名在 trace.enabled_languages 中。
- 排查语言检测错误:GrepAI 只用扩展名;必要时重命名文件。
- 输出语言支持摘要时,列出 Full Support(Index + Trace)、Index Only(No Trace)以及你的配置启用 trace 的扩展名,例如 .go、.js、.ts、.py。
适用边界 · 注意事项
- 不使用 GrepAI 时不适用;这些配置、命令和语言支持表都依赖 GrepAI。
- 需要自动调用图 trace 但语言属于 Index Only(如 Ruby、Swift、Kotlin、Scala、Shell、SQL、HTML/CSS、Markdown、YAML/JSON/TOML/XML)或不在支持列表时,不能依赖 trace,只能语义搜索后手动追踪。
- 代码含大量动态特性时不要期望 trace 完全准确,例如 JS/TS 动态模式、Python 动态导入/装饰器、C/C++ 宏/模板、PHP 魔术方法、Java 反射、C# 委托/事件;Pascal 的 Precise 模式有限。