多语言支持
wescode 基于 tree-sitter 解析器和 CKG(代码知识图谱),为主流编程语言提供深度的 AI 辅助能力。不仅支持单语言内的智能分析,还能理解跨语言的代码交互。
支持的编程语言
一级支持
以下语言获得完整的 CKG 索引、调用图分析、CSE 约束检查和全部 AI 辅助功能:
| 语言 | CKG 索引 | 调用图 | 符号提取 | 多态分析 |
|---|---|---|---|---|
| Go | ✅ | ✅ | ✅ | ✅ |
| TypeScript | ✅ | ✅ | ✅ | ✅ |
| JavaScript | ✅ | ✅ | ✅ | ✅ |
| Python | ✅ | ✅ | ✅ | ✅ |
| Java | ✅ | ✅ | ✅ | ✅ |
| Rust | ✅ | ✅ | ✅ | ✅ |
| C/C++ | ✅ | ✅ | ✅ | ✅ |
二级支持
以下语言支持基础的 AI 辅助(代码补全、对话、编辑),但 CKG 深度分析功能有限:
- C#
- Ruby
- PHP
- Swift
- Kotlin
- Scala
- Dart
- Lua
- Shell/Bash
- SQL
配置与标记语言
以下格式支持语法高亮和基础理解:
- JSON / YAML / TOML
- HTML / CSS / SCSS
- Markdown
- Dockerfile
- Makefile
- Protocol Buffers
- GraphQL
语言特定功能
Go
wescode 对 Go 项目提供深度支持:
- 包级分析:理解 Go 的包结构和导出规则
- 接口实现:自动追踪哪些类型实现了哪些接口
- goroutine 分析:识别并发模式和潜在的竞态
- 错误处理:检查
error返回值是否被正确处理 - Go 惯例:遵循 Effective Go 和社区最佳实践
分析这个 Go 项目的接口实现关系
TypeScript/JavaScript
- 类型分析:理解 TypeScript 类型系统
- 模块解析:支持各种模块系统(ESM、CJS、AMD)
- 框架感知:理解 React、Vue、Angular 等框架的模式
- JSX/TSX:完整支持 JSX 语法
- 装饰器:理解 TypeScript 装饰器模式
分析这个 React 组件的 props 和状态管理
Python
- 动态类型推断:通过上下文推断变量类型
- 虚拟环境:感知 venv、conda 等环境
- 框架集成:理解 Django、Flask、FastAPI 等
- 类型注解:利用 type hints 增强分析
- Magic Methods:理解 Python 特殊方法
检查这个 Django 视图的安全性
Java
- 注解处理:理解 Spring、JPA 等注解
- 泛型分析:处理复杂的泛型类型
- 继承层次:分析类继承树
- 设计模式:识别常见的 Java 设计模式
- 构建工具:理解 Maven/Gradle 配置
分析这个 Spring Boot 项目的依赖注入关系
Rust
- 所有权分析:理解 Rust 的所有权和借用规则
- Trait 实现:追踪 trait 实现关系
- 生命周期:分析生命周期注解
- 宏展开:理解常见宏的展开结果
- unsafe 检查:标记和审查 unsafe 代码块
检查这段 Rust 代码有没有生命周期问题
跨语言代码理解
全栈项目分析
wescode 能够理解全栈项目中不同语言之间的交互:
分析这个项目的前后端数据流
例如在一个 Go 后端 + TypeScript 前端的项目中:
- API 边界:识别后端定义的 API 接口
- 类型对齐:检查前后端的数据类型是否匹配
- 调用追踪:从前端请求追踪到后端处理
- 错误传播:跟踪错误从后端到前端的传播路径
FFI 调用
对于使用 FFI(Foreign Function Interface)的项目:
分析 Python 调用 C 扩展的接口
检查这个 CGo 调用的参数是否正确
RPC/API 边界
检查 gRPC proto 文件和生成的代码是否一致
分析这个 REST API 的 OpenAPI 规范和实现是否匹配
多态分派解析
CKG 多态分析
wescode 的 CKG 能够解析跨语言的多态分派关系,这对于理解大型项目中"点击一个方法,实际执行的是哪个实现"至关重要。
接口多态(Go)
type Handler interface {
Handle(ctx context.Context, req Request) error
}
找出所有实现了 Handler 接口的类型
CKG 会建立 IMPLEMENTS 关系边,让你一键找到所有实现。
继承多态(Java/TypeScript)
这个抽象方法有哪些具体实现?运行时会调用哪一个?
CKG 建立 OVERRIDES 关系边,追踪方法覆盖链。
动态分派(Python)
对于 Python 等动态语言,CKG 通过类型推断和调用上下文分析提供近似的多态解析:
这个 process 方法在不同子类中的行为分别是什么?
跨包多态
当多态涉及跨包/模块的类型时,CKG 提供三级回退解析:
- 精确匹配:类型.方法 精确匹配
- 包路径匹配:通过包路径缩小范围
- 裸名匹配:全局唯一方法名直接绑定
对于歧义情况,CKG 会展示所有候选实现供开发者选择。
语言检测
自动检测
wescode 自动检测文件的编程语言:
- 基于文件扩展名
- 基于文件内容(shebang 行、语法特征)
- 基于项目配置文件
混合语言文件
wescode 支持在同一文件中混合多种语言的场景:
- HTML + JS + CSS:Web 文件
- Markdown + 代码块:文档中的代码
- 模板语言:Go template、Jinja2 等
- 嵌入式 SQL:代码中的 SQL 字符串
分析这个 HTML 文件中嵌入的 JavaScript 代码
语言切换
对于同一项目中使用多种语言的情况,AI 会根据当前文件自动切换语言上下文:
在 Go 文件中问问题 → AI 用 Go 的思维回答
切换到 TypeScript 文件 → AI 自动切换到 TypeScript 上下文
配置
语言偏好
在 config.yaml 中可以配置语言相关的偏好:
# 优先使用的语言(影响 AI 回复中代码示例的语言)
model:
preferred_language: go
# CKG 索引排除的文件模式
agent:
ignore_patterns:
- "vendor/**"
- "node_modules/**"
- "*.min.js"
禁用特定语言的 CKG
如果某些语言的文件不需要深度分析,可以排除以减少索引时间:
agent:
ckg:
exclude_languages:
- sql
- markdown
注意事项
- 解析器依赖:tree-sitter 解析器随 wescode 安装自动包含,无需额外安装
- 大文件处理:超过 1MB 的单个文件不会被 CKG 索引
- 动态语言限制:Python、JavaScript 等动态语言的类型推断基于静态分析,可能不完全准确
- 生成代码:自动生成的代码(如 protobuf 生成的文件)建议排除出索引
- 工作区隔离:CKG 索引独立于每个 workspace Cell,切换工作区即切换分析上下文
相关文档
- CKG 代码知识图谱 — CKG 的详细介绍
- 项目分析 — 项目分析功能
- AI 对话 — 对话式编程
- 性能优化 — 索引与性能调优