GrepAI 支持的语言
本技能介绍 GrepAI 在索引和调用图分析方面所支持的编程语言。
何时使用本技能
- 检查你的语言是否受支持
- 配置语言相关设置
- 了解各语言的追踪能力
- 排查与语言相关的问题
支持语言概览
GrepAI 支持对所有基于文本的文件建立索引,但对特定编程语言提供增强支持。
完整支持(索引 + 追踪)
语言 | 扩展名 | 索引 | 追踪 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 | ✅ | ✅
仅索引(不追踪)
语言 | 扩展名 | 索引 | 追踪 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: - .go - .js - .ts - .jsx - .tsx - .py - .php - .rs - .c - .cpp - .cs - .java
排除特定扩展名
trace: enabled_languages: - .go # 有意排除 JavaScript # - .js
exclude_patterns: - "_test.go" - ".spec.ts"
各语言提示
Go
trace: enabled_languages: - .go exclude_patterns: - "test.go" - "mock.go" - "*_mock.go"
追踪准确度:极佳。Go 的显式语法使追踪非常可靠。
JavaScript/TypeScript
trace: enabled_languages: - .js - .jsx - .ts - .tsx exclude_patterns: - ".test.js" - ".spec.ts" - "*.d.ts" # 类型声明
追踪准确度:良好。某些动态模式可能会被遗漏。
Python
trace: enabled_languages: - .py exclude_patterns: - "test_.py" - "_test.py" - "conftest.py"
追踪准确度:良好。动态导入和装饰器可能会被遗漏。
C/C++
trace: enabled_languages: - .c - .h - .cpp - .hpp - .cc - .cxx exclude_patterns: - "*_test.cpp"
追踪准确度:良好。宏和模板可能影响准确性。
Rust
trace: enabled_languages: - .rs exclude_patterns: - "/tests/" - "/benches/"
追踪准确度:极佳。Rust 的显式语法有助于精确追踪。
PHP
trace: enabled_languages: - .php exclude_patterns: - "*Test.php" - "/tests/"
追踪准确度:良好。魔术方法可能无法被完全追踪。
Java
trace: enabled_languages: - .java exclude_patterns: - "*Test.java" - "/test/"
追踪准确度:良好。基于反射的调用可能会被遗漏。
C#
trace: enabled_languages: - .cs exclude_patterns: - "*Tests.cs" - "/Tests/"
追踪准确度:良好。委托和事件可能只能被部分追踪。
多语言项目
对于包含多种语言的项目:
trace: enabled_languages: # 后端(Go) - .go # 前端(TypeScript) - .ts - .tsx # 共享(SQL 等) - .sql # 仅索引
exclude_patterns: - "_test.go" - ".spec.ts"
索引与追踪说明
索引(语义搜索)
- 适用于任何文本文件
- 代码被分块并嵌入
- 支持语义搜索
- 无需语言特定解析
追踪(调用图)
- 需要语言特定解析
- 提取函数定义和调用
- 构建调用者/被调用者关系
- 使用正则(快速)或 tree-sitter(精确)
各语言追踪模式
语言 | 快速模式 | 精确模式 Go | ✅ | ✅ JavaScript | ✅ | ✅ TypeScript | ✅ | ✅ Python | ✅ | ✅ PHP | ✅ | ✅ C/C++ | ✅ | ✅ Rust | ✅ | ✅ Zig | ✅ | ✅ C# | ✅ | ✅ Java | ✅ | ✅ Pascal | ✅ | ⚠️ 有限
添加自定义扩展名
如果你有非标准扩展名,它们会被索引但不会被追踪:
自定义扩展名文件将被索引
ignore:
仅为你不想索引的文件添加模式
- "*.generated.go"
文件类型检测
GrepAI 使用文件扩展名进行检测。它不使用:
- Shebang(#!/usr/bin/env python)
- 文件内容分析
- .editorconfig
不支持追踪的语言(索引可用,无追踪)
这些语言可以为语义搜索建立索引,但不支持追踪:
Ruby、Swift、Kotlin、Scala、Elixir、Clojure、Haskell、OCaml、F#、Erlang、R、Julia、Perl、Groovy
变通方法:使用语义搜索查找代码,然后手动追踪。
最佳实践
- 仅启用需要的语言:加快追踪构建速度
- 排除测试文件:获得更清晰的追踪结果
- 使用精确模式提高准确性:当追踪结果似乎不完整时
- 匹配你的技术栈:根据实际使用的语言进行配置
检查语言支持
检查正在索引的内容
grepai status
将按类型显示文件数量
常见问题
❌ 问题:文件未被索引 ✅ 解决方案:检查文件是否在忽略模式中
❌ 问题:某语言缺少追踪 ✅ 解决方案:确保该语言在 enabled_languages 中
❌ 问题:检测到错误的语言 ✅ 解决方案:GrepAI 仅使用扩展名;如有需要请重命名文件
输出格式
语言支持摘要:
📚 GrepAI 语言支持
完整支持(索引 + 追踪):
- Go (.go)
- JavaScript (.js, .jsx)
- TypeScript (.ts, .tsx)
- Python (.py)
- PHP (.php)
- C/C++ (.c, .cpp, .h, .hpp)
- Rust (.rs)
- Zig (.zig)
- C# (.cs)
- Java (.java)
- Pascal (.pas, .dpr)
仅索引(无追踪):
- Ruby、Swift、Kotlin、Scala
- Shell 脚本、SQL、HTML、CSS
- 配置文件(YAML、JSON、TOML)
- 文档(Markdown)
你的配置为以下语言启用了追踪:
- .go, .js, .ts, .py