项目分析
wescode 提供全面的项目分析能力,帮助你快速理解代码库结构、依赖关系、架构质量和技术债务。
功能概览
| 能力 | 说明 |
|---|---|
| 代码统计 | 文件数量、代码行数、语言分布 |
| 依赖关系 | 包依赖、模块依赖、循环依赖检测 |
| 调用图可视化 | 交互式 D3 调用图,支持多级展开 |
| 架构检查 | 分层架构合规、边界违规检测 |
| 技术债评估 | 复杂度分析、重复代码、过时依赖 |
代码统计
项目概览面板
点击左侧活动栏的「项目概览」图标,进入三区域布局面板:
- 上方区域:代码统计概要(文件数、代码行数、语言分布饼图)
- 中间区域:交互式调用图(D3 渲染)
- 下方区域:模块列表与依赖关系
统计维度
| 指标 | 说明 |
|---|---|
| 总代码行数 | 不含空行和注释 |
| 文件总数 | 按语言/目录分组 |
| 语言分布 | Go / TypeScript / Python 等占比 |
| 包/模块数 | Go packages、npm packages 等 |
| 测试覆盖率 | 从测试运行结果中提取 |
使用方式
用户:分析这个项目的代码规模
AI:项目统计:
语言分布:Go 78% | TypeScript 15% | SQL 4% | Other 3%
代码行数:约 45,000 行(不含测试)
测试代码:约 12,000 行
Go 包数量:67 个
主要目录:
cmd/ — 入口(3 个子命令)
internal/ — 业务逻辑(42 个包)
pkg/ — 公共库(8 个包)
web/ — 前端(React)
依赖关系
包依赖分析
wescode 通过 CKG 构建完整的包依赖图:
用户:分析 internal/service 的依赖关系
AI:internal/service 依赖分析:
直接依赖(8个):
← internal/repository (数据访问)
← internal/model (领域模型)
← internal/config (配置)
← pkg/logger (日志)
...
被依赖(3个):
→ internal/handler (HTTP handler)
→ internal/middleware (中间件)
→ cmd/server (主入口)
⚠ 无循环依赖
循环依赖检测
CKG 会自动检测并报告循环依赖:
⚠ 循环依赖检测到:
internal/auth → internal/user → internal/auth
建议:提取公共接口到 internal/types 打破循环
外部依赖审计
用户:检查第三方依赖的安全性
AI:依赖审计报告:
总依赖数:45 个(直接 12 + 间接 33)
⚠ 需要关注:
- golang.org/x/crypto v0.14.0 — 存在已知漏洞 CVE-2024-xxxx
建议升级到 v0.21.0+
- github.com/dgrijalva/jwt-go — 已弃用
建议迁移到 github.com/golang-jwt/jwt/v5
✓ 其余依赖无已知安全问题
调用图可视化
交互式调用图
项目概览面板中的调用图基于 CKG 构建,支持:
- 多级展开:点击节点展开/折叠子调用
- 搜索定位:快速跳转到指定函数
- 过滤筛选:按包、文件、访问级别过滤
- 高亮路径:选中函数后高亮其所有调用者和被调用者
调用图操作
| 操作 | 说明 |
|---|---|
| 单击节点 | 展开/折叠子调用 |
| 双击节点 | 跳转到源代码 |
| 右键节点 | 查看详细信息(入参、返回值、调用次数) |
| 鼠标悬停 | 显示函数签名和文档注释 |
| 滚轮缩放 | 调整视图层级 |
| 拖拽移动 | 平移调用图 |
在 Chat 中使用
用户:画出 HandleCreateOrder 的调用链
AI:HandleCreateOrder 调用链:
HandleCreateOrder (handler/order.go)
├── ValidateOrder (service/order.go)
│ ├── CheckInventory (service/inventory.go)
│ └── ValidatePayment (service/payment.go)
├── CreateOrder (service/order.go)
│ ├── SaveOrder (repository/order.go)
│ └── PublishEvent (event/publisher.go)
└── SendNotification (service/notification.go)
架构检查
分层架构合规
wescode 的 CSE(约束满足引擎)可以检查代码是否遵循预定的架构规则:
用户:检查分层架构是否有违规
AI:架构合规检查结果:
✓ handler → service → repository 层次正确
✗ 违规 1:handler/user.go 直接调用 repository/user.go
→ handler 层不应绕过 service 层直接访问 repository
✗ 违规 2:service/order.go 导入 handler/dto 包
→ service 层不应依赖 handler 层的数据结构
建议:
1. handler/user.go 的数据库操作移到 service/user.go
2. service/order.go 使用自己的领域模型替代 handler/dto
边界违规检测
CSE 通过 13 个 Checker 检测各类架构约束:
- 依赖方向:低层模块不应反向依赖高层模块
- 包边界:internal 包不应被外部 import
- 接口契约:实现类必须满足所有接口方法
- 命名规范:包名、函数名是否符合项目惯例
自定义规则
可以在项目根目录创建 .wescode/constraints.yaml 定义自定义约束:
rules:
- name: "handler-no-direct-db"
description: "Handler 层禁止直接访问数据库"
deny:
from: "internal/handler/**"
to: "internal/repository/**"
- name: "no-global-state"
description: "禁止使用全局可变状态"
deny:
pattern: "var.*=.*sync\\.Map|var.*=.*make\\(map"
技术债评估
复杂度分析
用户:找出项目中最复杂的函数
AI:圈复杂度 Top 5:
1. processPayment (service/payment.go) — 复杂度 32
→ 建议拆分为 validatePayment + executePayment + handleResult
2. parseConfig (config/loader.go) — 复杂度 28
→ 建议使用策略模式替代 switch-case
3. renderTemplate (template/engine.go) — 复杂度 24
→ 建议将模板类型处理拆分为独立函数
4. handleWebhook (handler/webhook.go) — 复杂度 21
5. migrateDatabase (db/migration.go) — 复杂度 19
重复代码检测
用户:检查重复代码
AI:重复代码检测结果:
发现 6 处重复代码块:
1. handler/user.go:45-62 ≈ handler/order.go:30-47
→ 错误处理逻辑重复,建议提取为 handleError 中间件
2. service/email.go:100-130 ≈ service/sms.go:80-110
→ 通知发送逻辑重复,建议抽象为 Notifier 接口
...
过时依赖检查
用户:哪些依赖需要更新?
AI:依赖更新建议:
⬆ 需要更新(5个):
github.com/gin-gonic/gin 1.9.1 → 1.10.0(安全修复)
google.golang.org/grpc 1.58.0 → 1.64.0(性能优化)
...
⚠ 已弃用(1个):
github.com/pkg/errors → 建议迁移到标准库 errors
✓ 已是最新(39个)
项目健康度报告
生成综合报告
用户:生成项目健康度报告
AI:📊 项目健康度报告
━━━━━━━━━━━━━━━━━━━━━━━━━━
总体评分:B+(78/100)
✓ 代码质量:85/100
- 测试覆盖率 72%
- 平均圈复杂度 8.2
- lint 通过率 96%
⚠ 架构健康:70/100
- 2 处分层违规
- 1 处循环依赖
- 3 处跨模块耦合
⚠ 依赖管理:75/100
- 1 个已弃用依赖
- 2 个需安全更新
- 间接依赖过多(33个)
✓ 文档完整性:82/100
- API 文档覆盖率 85%
- README 完整
- 缺少架构决策记录
注意事项
- CKG 索引在首次打开 workspace 时自动构建,大型项目可能需要数分钟
- 索引进度可在状态栏查看(「AI 理解度」指示器)
- 调用图数据存储在当前 workspace 的 Cell 中(
cells/ws-{hash}/index/) - 切换 workspace = 切换 Cell = 分析数据独立
- 分析结果不会跨 workspace 共享