语言支持
wescode 通过 CKG(代码知识图谱)和 tree-sitter 解析器提供深度的多语言支持。不同语言的支持深度取决于 CKG 的解析能力和语言特性。
支持级别
wescode 将语言支持分为三个级别:
| 级别 | 能力 | 语言 |
|---|---|---|
| 完整支持 | CKG 全量分析 + CSE 约束 + 深度重构 | Go, TypeScript/JavaScript |
| 标准支持 | CKG 基础分析 + 重构 + 测试生成 | Python, Java, Rust |
| 基础支持 | 语法高亮 + 通用 AI 辅助 | C/C++, C#, Ruby, PHP 等 |
Go
Go 是 wescode 支持最深入的语言,拥有完整的 CKG 分析能力。
CKG 能力
- 完整调用图:函数/方法间的调用关系追踪
- 接口实现追踪:自动发现接口的所有实现
- 包依赖图:import 关系和包级别依赖分析
- 结构体字段追踪:字段的定义、使用和传播路径
- goroutine 分析:并发启动点和 channel 通信模式
特有功能
# 查看接口的所有实现
/ckg implementations io.Reader
# 查看函数的完整调用链
/ckg callers HandleLogin --depth 3
# 包依赖分析
/ckg deps internal/service/ --direction both
# 检测循环依赖
/ckg cycles
Go 特有的智能辅助
- 错误处理:自动生成
if err != nil模式 - 接口满足:检查类型是否满足接口
- 结构体标签:自动生成 JSON/YAML/DB 标签
- 测试表驱动:生成表驱动测试模板
- Go Module:依赖管理和版本建议
Go 代码示例
在 Chat 面板中的 Go 特化功能:
# 生成接口 Mock
/mock generate UserRepository
# 分析并发安全性
/analyze concurrent internal/cache/
# 生成 Go struct 标签
/generate tags User --json --db
TypeScript/JavaScript
CKG 能力
- 模块依赖图:import/export 关系追踪
- 类型流分析:TypeScript 类型的传播和转换
- 组件树分析:React/Vue 组件层级关系
- 事件流追踪:事件发布/订阅关系
特有功能
# 分析 React 组件依赖
/ckg component-tree App
# 查看类型定义和使用
/ckg type-flow UserProps
# 检测未使用的导出
/ckg unused-exports src/utils/
TypeScript 智能辅助
- 类型推断增强:AI 辅助复杂类型定义
- 类型守卫生成:自动生成类型守卫函数
- React Hook 生成:生成自定义 Hook
- API 类型生成:从 OpenAPI/Swagger 生成类型
- Import 整理:自动整理和优化 import 语句
框架支持
| 框架 | 支持能力 |
|---|---|
| React | 组件分析、Hook 生成、状态追踪 |
| Vue | SFC 解析、组合式 API 支持 |
| Next.js | 路由分析、SSR/SSG 识别 |
| Express/Koa | 路由映射、中间件分析 |
| NestJS | 装饰器解析、依赖注入分析 |
Python
CKG 能力
- 模块依赖图:import 关系和包结构
- 类继承链:类的继承和 Mixin 关系
- 装饰器分析:装饰器的影响和调用链
- 类型注解追踪:PEP 484 类型注解分析
特有功能
# 分析类继承关系
/ckg class-hierarchy BaseHandler
# 查看装饰器影响
/ckg decorators @login_required
# 虚拟环境分析
/analyze venv
Python 智能辅助
- 类型注解生成:为无类型代码添加类型注解
- docstring 生成:生成 Google/NumPy/Sphinx 风格的文档字符串
- dataclass 转换:将普通类转换为 dataclass
- 异步改造:将同步代码转换为 async/await 模式
- 测试框架:支持 pytest、unittest 测试生成
框架支持
| 框架 | 支持能力 |
|---|---|
| Django | 模型分析、视图路由、ORM 查询 |
| FastAPI | 路由分析、Pydantic 模型 |
| Flask | 蓝图结构、路由映射 |
| SQLAlchemy | 模型关系、查询优化 |
Java
CKG 能力
- 类层次结构:继承、接口实现关系
- 注解处理:Spring 等框架注解的语义分析
- 依赖注入:Bean 定义和注入关系追踪
- 包结构分析:模块化和包依赖关系
特有功能
# 分析 Spring Bean 依赖
/ckg beans UserService
# 查看注解影响范围
/ckg annotations @Transactional
# 分析 Maven/Gradle 依赖
/analyze dependencies
Java 智能辅助
- Builder 模式生成:为复杂对象生成 Builder
- Lombok 支持:识别和生成 Lombok 注解
- Stream API:将循环转换为 Stream 操作
- Optional 改造:将空值检查转换为 Optional 模式
- JUnit 测试:生成 JUnit 5 测试模板
框架支持
| 框架 | 支持能力 |
|---|---|
| Spring Boot | Bean 分析、配置追踪、AOP 切面 |
| MyBatis | SQL 映射、Mapper 分析 |
| Hibernate/JPA | 实体关系、查询分析 |
Rust
CKG 能力
- Trait 实现追踪:trait 的所有实现者
- 生命周期分析:借用关系和生命周期标注
- Crate 依赖图:Cargo.toml 依赖分析
- 模块层次:mod 树结构和可见性
特有功能
# 分析 trait 实现
/ckg implementations Display
# 分析所有权转移
/analyze ownership handle_request
# Crate 依赖检查
/analyze deps --security
Rust 智能辅助
- 生命周期标注:AI 辅助推断和添加生命周期标注
- 错误类型生成:生成自定义错误类型和 From 实现
- derive 宏建议:推荐合适的 derive 宏
- unsafe 审查:特别关注 unsafe 代码块
- 测试生成:支持
#[test]和#[tokio::test]
其他语言
C/C++
基础支持,包含:
- 语法高亮和智能补全
- 头文件依赖分析
- 基本的代码审查
- 测试生成(Google Test / Catch2)
- CMake/Makefile 支持
C#
基础支持,包含:
- .NET 项目结构识别
- LINQ 查询优化建议
- NUnit/xUnit 测试生成
- NuGet 依赖分析
Ruby
基础支持,包含:
- Rails 项目结构识别
- RSpec 测试生成
- Gem 依赖分析
PHP
基础支持,包含:
- Composer 依赖分析
- Laravel/Symfony 框架识别
- PHPUnit 测试生成
Swift/Kotlin
基础支持,包含:
- 基本的代码分析和补全
- 移动端框架识别
- 测试生成
多语言项目
跨语言分析
对于包含多种语言的项目(如 Go 后端 + TypeScript 前端),wescode 支持:
- API 契约检查:前后端接口定义一致性验证
- 类型映射:Go struct ↔ TypeScript interface 对照
- 调用追踪:HTTP API 的前后端调用链
配置多语言项目
# .wescode/languages.yaml
languages:
# 主语言(影响 CKG 优先级)
primary: "go"
# 辅助语言
secondary:
- "typescript"
- "python"
# 语言特定配置
go:
build-tags: ["integration"]
test-flags: ["-race", "-count=1"]
typescript:
tsconfig: "tsconfig.json"
test-runner: "vitest"
# 排除目录
exclude:
- "vendor/"
- "node_modules/"
- "dist/"
索引性能
不同语言的 CKG 索引性能参考:
| 语言 | 10K 文件索引时间 | 增量更新 | 内存占用 |
|---|---|---|---|
| Go | ~30s | ~200ms | ~500MB |
| TypeScript | ~45s | ~300ms | ~600MB |
| Python | ~40s | ~250ms | ~450MB |
| Java | ~50s | ~350ms | ~700MB |
| Rust | ~35s | ~200ms | ~550MB |
以上数据为参考值,实际性能取决于项目规模和硬件配置。
常见问题
Q: 如何查看当前项目的语言识别结果?
A: 在状态栏点击语言指示器,或运行 /ckg status 查看索引状态和识别的语言分布。
Q: 某种语言的功能不工作?
A: 检查该语言的 tree-sitter 解析器是否正常加载。可以在开发者工具中查看日志,或运行 /ckg diagnose 进行诊断。
Q: 如何为不支持的语言添加基础支持?
A: wescode 基于 VSCode 扩展生态,可以安装对应语言的 LSP 扩展来获得基础的智能感知。AI 辅助功能可通过 Chat 面板使用,不受语言限制。