vcode-analysis 0.3.0__tar.gz → 0.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. {vcode_analysis-0.3.0/vcode_analysis.egg-info → vcode_analysis-0.5.0}/PKG-INFO +159 -20
  2. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/README.md +154 -15
  3. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/analyzers/__init__.py +3 -0
  4. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/analyzers/architecture.py +11 -1
  5. vcode_analysis-0.5.0/analyzers/code_review.py +307 -0
  6. vcode_analysis-0.5.0/analyzers/context_builder.py +453 -0
  7. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/analyzers/security.py +12 -1
  8. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/cli.py +434 -82
  9. vcode_analysis-0.5.0/core/__init__.py +33 -0
  10. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/core/analyzer.py +53 -14
  11. vcode_analysis-0.5.0/core/batch_analyzer.py +452 -0
  12. vcode_analysis-0.5.0/core/batch_planner.py +168 -0
  13. vcode_analysis-0.5.0/core/cache_manager.py +347 -0
  14. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/core/config.py +29 -3
  15. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/core/ignore.py +4 -0
  16. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/core/llm_client.py +19 -3
  17. vcode_analysis-0.5.0/core/token_estimator.py +94 -0
  18. vcode_analysis-0.5.0/docs/PPT/345/244/247/347/272/262-VCode_Analysis_/346/231/272/350/203/275/344/273/243/347/240/201/345/210/206/346/236/220/345/267/245/345/205/267/345/210/206/344/272/253.md +363 -0
  19. vcode_analysis-0.5.0/docs/PPT/347/224/237/346/210/220/346/217/220/347/244/272/350/257/215-VCode_Analysis/345/210/206/344/272/253.md +354 -0
  20. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/docs/USER_MANUAL.md +1 -1
  21. vcode_analysis-0.5.0/docs/design/batch-cache-optimization.md +195 -0
  22. vcode_analysis-0.3.0/docs/design/code-analysis-tool.md → vcode_analysis-0.5.0/docs/design/vcode-analysis-tool.md +7 -7
  23. vcode_analysis-0.5.0/docs/security-sharing-article.md +176 -0
  24. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/pyproject.toml +9 -5
  25. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0/vcode_analysis.egg-info}/PKG-INFO +159 -20
  26. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/vcode_analysis.egg-info/SOURCES.txt +10 -1
  27. vcode_analysis-0.3.0/analyzers/code_review.py +0 -150
  28. vcode_analysis-0.3.0/core/__init__.py +0 -17
  29. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/LICENSE +0 -0
  30. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/MANIFEST.in +0 -0
  31. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/analyzers/directory.py +0 -0
  32. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/analyzers/documentation.py +0 -0
  33. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/core/git_handler.py +0 -0
  34. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/docs/design/c-parser-design.md +0 -0
  35. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/docs/design/kotlin-parser-design.md +0 -0
  36. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/parsers/__init__.py +0 -0
  37. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/parsers/c/__init__.py +0 -0
  38. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/parsers/c/ast_parser.py +0 -0
  39. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/parsers/c/models.py +0 -0
  40. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/parsers/c/patterns.py +0 -0
  41. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/parsers/c/regex_parser.py +0 -0
  42. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/parsers/c_parser.py +0 -0
  43. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/parsers/java_parser.py +0 -0
  44. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/parsers/javascript_parser.py +0 -0
  45. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/parsers/kotlin/__init__.py +0 -0
  46. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/parsers/kotlin/ast_parser.py +0 -0
  47. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/parsers/kotlin/models.py +0 -0
  48. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/parsers/kotlin/patterns.py +0 -0
  49. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/parsers/kotlin/regex_parser.py +0 -0
  50. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/parsers/kotlin_parser.py +0 -0
  51. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/parsers/python_parser.py +0 -0
  52. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/parsers/typescript_parser.py +0 -0
  53. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/requirements.txt +0 -0
  54. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/setup.cfg +0 -0
  55. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/tests/test_batch_operations.py +0 -0
  56. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/tests/test_c_parser.py +0 -0
  57. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/tests/test_kotlin_parser.py +0 -0
  58. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/tests/test_security_rules.py +0 -0
  59. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/vcode_analysis.egg-info/dependency_links.txt +0 -0
  60. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/vcode_analysis.egg-info/entry_points.txt +0 -0
  61. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/vcode_analysis.egg-info/requires.txt +0 -0
  62. {vcode_analysis-0.3.0 → vcode_analysis-0.5.0}/vcode_analysis.egg-info/top_level.txt +0 -0
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vcode-analysis
3
- Version: 0.3.0
3
+ Version: 0.5.0
4
4
  Summary: 基于大模型的智能代码分析工具,支持代码审查、文档生成、架构分析和安全扫描
5
5
  Author-email: Wellchang <2483808264@qq.com>
6
6
  License: MIT
7
- Project-URL: Homepage, https://gitcode.com/wellchang/code-analysis
8
- Project-URL: Repository, https://gitcode.com/wellchang/code-analysis
9
- Project-URL: Documentation, https://gitcode.com/wellchang/code-analysis/blob/master/docs/USER_MANUAL.md
10
- Project-URL: Bug Tracker, https://gitcode.com/wellchang/code-analysis/issues
7
+ Project-URL: Homepage, https://xxxxxx
8
+ Project-URL: Repository, https://xxxxxx
9
+ Project-URL: Documentation, https://xxxxxx
10
+ Project-URL: Bug Tracker, https://xxxxxx
11
11
  Keywords: vcode-analysis,llm,code-review,documentation
12
12
  Classifier: Development Status :: 4 - Beta
13
13
  Classifier: Environment :: Console
@@ -54,11 +54,13 @@ Dynamic: license-file
54
54
  | 📝 **文档生成** | 自动生成模块文档、API 文档 |
55
55
  | 🏗️ **架构分析** | 分析项目结构、依赖关系、代码度量 |
56
56
  | 🔒 **安全扫描** | 检测常见安全漏洞和风险代码 |
57
+ | 🔗 **上下文增强** | 解析项目依赖关系,提供关联文件上下文给 LLM |
57
58
  | ⚡ **并发分析** | 支持多线程并发分析,默认 5 个线程 |
58
59
  | 📦 **批量操作** | 批量克隆、批量 Git 操作、多仓库管理 |
59
60
  | 📂 **目录分析** | 扫描项目结构、识别技术栈 |
60
- | 🌐 **多语言支持** | Python, Java, Kotlin, C, JavaScript, TypeScript 等 |
61
+ | 🌐 **多语言支持** | Python, Java, Kotlin, C/C++, JavaScript, TypeScript, Vue 等 |
61
62
  | 🤖 **私有化部署** | 兼容 OpenAI API 格式,支持任何私有化 LLM |
63
+ | 🌍 **环境变量** | 支持环境变量配置,方便 CI/CD 集成 |
62
64
 
63
65
  ## 🚀 快速开始
64
66
 
@@ -80,11 +82,21 @@ pip install vcode-analysis[parsers,rich]
80
82
  **方式二:从源码安装**
81
83
 
82
84
  ```bash
83
- git clone https://gitcode.com/wellchang/code-analysis.git
85
+ git clone
84
86
  cd code-analysis
85
87
  pip install -e .
86
88
  ```
87
89
 
90
+ **方式三:离线安装**
91
+
92
+ ```bash
93
+ # Windows
94
+ install_offline.bat
95
+
96
+ # Linux/macOS
97
+ bash install_offline.sh
98
+ ```
99
+
88
100
  ### 配置
89
101
 
90
102
  ```bash
@@ -98,7 +110,7 @@ vcode-analysis config --init
98
110
  ### 使用
99
111
 
100
112
  ```bash
101
- # 代码审查(结果自动保存到 result/目录名_review_时间戳.md)
113
+ # 代码审查(默认启用批量分析和缓存,大幅减少 API 调用)
102
114
  vcode-analysis review ./src
103
115
 
104
116
  # 架构分析
@@ -110,10 +122,43 @@ vcode-analysis security ./src --deep
110
122
  # 使用 10 个并发线程加速分析
111
123
  vcode-analysis review ./src --workers 10
112
124
 
125
+ # 禁用缓存(强制重新分析)
126
+ vcode-analysis review ./src --no-cache
127
+
128
+ # 禁用批量分析(逐文件分析)
129
+ vcode-analysis review ./src --no-batch
130
+
131
+ # 启用上下文增强(提供项目结构和依赖关系)
132
+ vcode-analysis review ./src --context
133
+
134
+ # 输出 JSON 格式
135
+ vcode-analysis review ./src --format json
136
+
113
137
  # 目录扫描
114
138
  vcode-analysis scan-dir ./project
139
+
140
+ # 目录扫描(指定深度)
141
+ vcode-analysis scan-dir ./project --depth 3
115
142
  ```
116
143
 
144
+ ## ⚡ 性能优化
145
+
146
+ ### 批量分析 + 缓存(v0.4.0 新增)
147
+
148
+ **默认启用**,可大幅提升分析效率:
149
+
150
+ | 场景 | 原方式 | 优化后 | 提升 |
151
+ |------|--------|--------|------|
152
+ | 首次分析 100 个文件 | 100 次 API 调用 | ~15 次 | 减少 85% |
153
+ | 二次分析(仅 10 个文件变更) | 100 次 API 调用 | ~2 次 | 减少 98% |
154
+
155
+ **优化原理**:
156
+ - **智能合并**:按语言类型分组,动态估算 Token 数,多文件合并为一次 API 调用
157
+ - **双层缓存**:内存缓存(快速)+ 磁盘缓存(持久化),基于内容哈希
158
+ - **增量分析**:自动跳过未变更的文件
159
+
160
+ **缓存位置**:`~/.code-analysis/cache/`
161
+
117
162
  ## 📖 命令概览
118
163
 
119
164
  ```bash
@@ -129,6 +174,27 @@ Commands:
129
174
  git-status 查看多仓库状态
130
175
  scan-dir 扫描目录结构
131
176
  config 配置管理
177
+
178
+ Options:
179
+ -c, --config <file> 配置文件路径
180
+ --base-url <url> LLM API 地址
181
+ --api-key <key> API 密钥
182
+ -m, --model <name> 模型名称
183
+ --max-tokens <n> 最大输出 Token 数 (默认: 4096)
184
+ --timeout <n> 请求超时时间/秒 (默认: 180)
185
+ -o, --output <file> 输出文件路径
186
+ -f, --format <format> 输出格式 (markdown/json)
187
+ -w, --workers <n> 并发线程数 (默认: 5)
188
+ --context 启用上下文增强分析
189
+ --no-cache 禁用缓存(默认启用缓存)
190
+ --no-batch 禁用批量分析(默认启用批量合并)
191
+ --deep 深度扫描 (安全扫描)
192
+ --branch <name> 克隆的分支名
193
+ --analyze 克隆后自动分析
194
+ --parallel 并行克隆
195
+ --repos <names> 指定仓库名列表(逗号分隔)
196
+ --depth <n> 扫描深度
197
+ --type <type> 文档类型 (module/api)
132
198
  ```
133
199
 
134
200
  ## 🌍 支持的语言
@@ -139,12 +205,17 @@ Commands:
139
205
  | Java | `.java` | AST |
140
206
  | Kotlin | `.kt`, `.kts` | 双模式 |
141
207
  | C | `.c`, `.h` | 双模式 |
208
+ | C++ | `.cpp`, `.hpp`, `.cc`, `.cxx` | 正则 |
142
209
  | JavaScript | `.js`, `.jsx` | 正则 |
143
210
  | TypeScript | `.ts`, `.tsx` | 正则 |
211
+ | Vue | `.vue` | 正则 |
212
+
213
+ > 此外还支持配置文件(`.json`、`.yaml`、`.yml`)和文档(`.md`)的分析
144
214
 
145
215
  ## 📚 文档
146
216
 
147
217
  - [完整使用手册](docs/USER_MANUAL.md)
218
+ - [批量分析与缓存优化设计](docs/design/batch-cache-optimization.md)
148
219
  - [Kotlin 解析器设计](docs/design/kotlin-parser-design.md)
149
220
  - [C 解析器设计](docs/design/c-parser-design.md)
150
221
 
@@ -158,18 +229,25 @@ code-analysis/
158
229
  │ ├── llm_client.py # LLM 客户端
159
230
  │ ├── git_handler.py # Git 操作 + 批量操作
160
231
  │ ├── config.py # 配置管理
161
- └── ignore.py # 统一过滤规则
232
+ ├── ignore.py # 统一过滤规则
233
+ │ ├── token_estimator.py # Token 估算模块
234
+ │ ├── batch_planner.py # 批量分析规划器
235
+ │ ├── batch_analyzer.py # 批量分析器
236
+ │ └── cache_manager.py # 缓存管理器
162
237
  ├── analyzers/
163
238
  │ ├── code_review.py # 代码审查
164
239
  │ ├── documentation.py # 文档生成
165
240
  │ ├── architecture.py # 架构分析
166
241
  │ ├── security.py # 安全扫描
167
- └── directory.py # 目录分析
242
+ ├── directory.py # 目录分析
243
+ │ └── context_builder.py # 上下文构建器
168
244
  └── parsers/
169
245
  ├── python_parser.py # Python AST 解析器
170
246
  ├── java_parser.py # Java AST 解析器
171
247
  ├── kotlin_parser.py # Kotlin 解析器(双模式)
172
248
  ├── c_parser.py # C 语言解析器(双模式)
249
+ ├── javascript_parser.py # JavaScript 解析器
250
+ ├── typescript_parser.py # TypeScript 解析器
173
251
  └── ...
174
252
  ```
175
253
 
@@ -187,8 +265,30 @@ vcode-analysis review ./src --workers 10
187
265
  # 自定义输出路径
188
266
  vcode-analysis review ./src --output custom_report.md
189
267
 
268
+ # 输出 JSON 格式
269
+ vcode-analysis review ./src --format json
270
+
271
+ # 启用上下文增强(提供项目依赖关系和关联文件信息)
272
+ vcode-analysis review ./src --context
273
+
190
274
  # 审查最新提交
191
275
  vcode-analysis review-commit HEAD
276
+
277
+ # 审查指定提交
278
+ vcode-analysis review-commit abc1234 --path ./src
279
+ ```
280
+
281
+ ### 文档生成
282
+
283
+ ```bash
284
+ # 生成模块文档(默认)
285
+ vcode-analysis doc ./src
286
+
287
+ # 生成 API 文档
288
+ vcode-analysis doc ./src --type api
289
+
290
+ # 自定义输出路径
291
+ vcode-analysis doc ./src --output docs.md
192
292
  ```
193
293
 
194
294
  ### 安全扫描
@@ -207,6 +307,18 @@ vcode-analysis security ./src
207
307
  # 批量克隆(从文件读取 URL 列表)
208
308
  vcode-analysis batch-clone repos.txt ./projects --parallel
209
309
 
310
+ # 克隆后自动分析
311
+ vcode-analysis batch-clone repos.txt ./projects --parallel --analyze
312
+
313
+ # 克隆指定分支
314
+ vcode-analysis clone https://example.com/repo.git --branch develop
315
+
316
+ # 批量拉取更新
317
+ vcode-analysis batch-pull ~/projects
318
+
319
+ # 拉取指定仓库
320
+ vcode-analysis batch-pull ~/projects --repos repo1,repo2
321
+
210
322
  # 查看多仓库状态
211
323
  vcode-analysis git-status ~/projects
212
324
  ```
@@ -221,10 +333,30 @@ llm:
221
333
  model: qwen3.5-35b-a3b
222
334
  temperature: 0.7
223
335
  max_tokens: 4096
336
+ timeout: 180 # 请求超时时间(秒)
224
337
 
225
338
  analysis:
226
339
  max_file_size: 102400
227
- max_workers: 5 # 并发分析线程数
340
+ max_workers: 5 # 并发分析线程数
341
+
342
+ # 支持的文件扩展名(不在此列表中的文件将被忽略)
343
+ supported_extensions:
344
+ - ".py"
345
+ - ".java"
346
+ - ".kt"
347
+ - ".kts"
348
+ - ".js"
349
+ - ".jsx"
350
+ - ".ts"
351
+ - ".tsx"
352
+ - ".vue"
353
+ - ".c"
354
+ - ".h"
355
+ - ".cpp"
356
+ - ".hpp"
357
+ - ".cc"
358
+ - ".cxx"
359
+
228
360
  ignore_patterns:
229
361
  # 默认已包含多语言依赖目录和缓存文件
230
362
  # Python: .venv, venv, __pycache__, .pytest_cache, .mypy_cache
@@ -234,8 +366,24 @@ analysis:
234
366
  # .NET: bin, obj
235
367
  # 以及: .git, .idea, .vscode, *.pyc, *.min.js 等
236
368
  # 用户可在此添加额外的自定义忽略规则
369
+
370
+ cache:
371
+ ttl: 604800 # 缓存有效期(秒),默认 7 天
372
+ memory_cache_size: 1000 # 内存缓存最大条目数
237
373
  ```
238
374
 
375
+ ### 环境变量
376
+
377
+ 除了配置文件,还可以通过环境变量设置(优先级高于配置文件):
378
+
379
+ | 环境变量 | 对应配置项 |
380
+ |----------|-----------|
381
+ | `OPENAI_API_BASE` 或 `OPENAI_BASE_URL` | `llm.base_url` |
382
+ | `OPENAI_API_KEY` | `llm.api_key` |
383
+ | `CODE_ANALYSIS_MODEL` | `llm.model` |
384
+ | `CODE_ANALYSIS_TEMPERATURE` | `llm.temperature` |
385
+ | `CODE_ANALYSIS_MAX_TOKENS` | `llm.max_tokens` |
386
+
239
387
  ## 🤝 扩展开发
240
388
 
241
389
  ### 添加新的分析器
@@ -290,12 +438,3 @@ twine upload dist/*
290
438
  twine upload --repository testpypi dist/*
291
439
  ```
292
440
 
293
- ## 📄 许可证
294
-
295
- [MIT License](LICENSE)
296
-
297
- ## 🔗 链接
298
-
299
- - [PyPI 包地址](https://pypi.org/project/vcode-analysis/)
300
- - [项目主页](https://gitcode.com/wellchang/code-analysis)
301
- - [问题反馈](https://gitcode.com/wellchang/code-analysis/issues)
@@ -14,11 +14,13 @@
14
14
  | 📝 **文档生成** | 自动生成模块文档、API 文档 |
15
15
  | 🏗️ **架构分析** | 分析项目结构、依赖关系、代码度量 |
16
16
  | 🔒 **安全扫描** | 检测常见安全漏洞和风险代码 |
17
+ | 🔗 **上下文增强** | 解析项目依赖关系,提供关联文件上下文给 LLM |
17
18
  | ⚡ **并发分析** | 支持多线程并发分析,默认 5 个线程 |
18
19
  | 📦 **批量操作** | 批量克隆、批量 Git 操作、多仓库管理 |
19
20
  | 📂 **目录分析** | 扫描项目结构、识别技术栈 |
20
- | 🌐 **多语言支持** | Python, Java, Kotlin, C, JavaScript, TypeScript 等 |
21
+ | 🌐 **多语言支持** | Python, Java, Kotlin, C/C++, JavaScript, TypeScript, Vue 等 |
21
22
  | 🤖 **私有化部署** | 兼容 OpenAI API 格式,支持任何私有化 LLM |
23
+ | 🌍 **环境变量** | 支持环境变量配置,方便 CI/CD 集成 |
22
24
 
23
25
  ## 🚀 快速开始
24
26
 
@@ -40,11 +42,21 @@ pip install vcode-analysis[parsers,rich]
40
42
  **方式二:从源码安装**
41
43
 
42
44
  ```bash
43
- git clone https://gitcode.com/wellchang/code-analysis.git
45
+ git clone
44
46
  cd code-analysis
45
47
  pip install -e .
46
48
  ```
47
49
 
50
+ **方式三:离线安装**
51
+
52
+ ```bash
53
+ # Windows
54
+ install_offline.bat
55
+
56
+ # Linux/macOS
57
+ bash install_offline.sh
58
+ ```
59
+
48
60
  ### 配置
49
61
 
50
62
  ```bash
@@ -58,7 +70,7 @@ vcode-analysis config --init
58
70
  ### 使用
59
71
 
60
72
  ```bash
61
- # 代码审查(结果自动保存到 result/目录名_review_时间戳.md)
73
+ # 代码审查(默认启用批量分析和缓存,大幅减少 API 调用)
62
74
  vcode-analysis review ./src
63
75
 
64
76
  # 架构分析
@@ -70,10 +82,43 @@ vcode-analysis security ./src --deep
70
82
  # 使用 10 个并发线程加速分析
71
83
  vcode-analysis review ./src --workers 10
72
84
 
85
+ # 禁用缓存(强制重新分析)
86
+ vcode-analysis review ./src --no-cache
87
+
88
+ # 禁用批量分析(逐文件分析)
89
+ vcode-analysis review ./src --no-batch
90
+
91
+ # 启用上下文增强(提供项目结构和依赖关系)
92
+ vcode-analysis review ./src --context
93
+
94
+ # 输出 JSON 格式
95
+ vcode-analysis review ./src --format json
96
+
73
97
  # 目录扫描
74
98
  vcode-analysis scan-dir ./project
99
+
100
+ # 目录扫描(指定深度)
101
+ vcode-analysis scan-dir ./project --depth 3
75
102
  ```
76
103
 
104
+ ## ⚡ 性能优化
105
+
106
+ ### 批量分析 + 缓存(v0.4.0 新增)
107
+
108
+ **默认启用**,可大幅提升分析效率:
109
+
110
+ | 场景 | 原方式 | 优化后 | 提升 |
111
+ |------|--------|--------|------|
112
+ | 首次分析 100 个文件 | 100 次 API 调用 | ~15 次 | 减少 85% |
113
+ | 二次分析(仅 10 个文件变更) | 100 次 API 调用 | ~2 次 | 减少 98% |
114
+
115
+ **优化原理**:
116
+ - **智能合并**:按语言类型分组,动态估算 Token 数,多文件合并为一次 API 调用
117
+ - **双层缓存**:内存缓存(快速)+ 磁盘缓存(持久化),基于内容哈希
118
+ - **增量分析**:自动跳过未变更的文件
119
+
120
+ **缓存位置**:`~/.code-analysis/cache/`
121
+
77
122
  ## 📖 命令概览
78
123
 
79
124
  ```bash
@@ -89,6 +134,27 @@ Commands:
89
134
  git-status 查看多仓库状态
90
135
  scan-dir 扫描目录结构
91
136
  config 配置管理
137
+
138
+ Options:
139
+ -c, --config <file> 配置文件路径
140
+ --base-url <url> LLM API 地址
141
+ --api-key <key> API 密钥
142
+ -m, --model <name> 模型名称
143
+ --max-tokens <n> 最大输出 Token 数 (默认: 4096)
144
+ --timeout <n> 请求超时时间/秒 (默认: 180)
145
+ -o, --output <file> 输出文件路径
146
+ -f, --format <format> 输出格式 (markdown/json)
147
+ -w, --workers <n> 并发线程数 (默认: 5)
148
+ --context 启用上下文增强分析
149
+ --no-cache 禁用缓存(默认启用缓存)
150
+ --no-batch 禁用批量分析(默认启用批量合并)
151
+ --deep 深度扫描 (安全扫描)
152
+ --branch <name> 克隆的分支名
153
+ --analyze 克隆后自动分析
154
+ --parallel 并行克隆
155
+ --repos <names> 指定仓库名列表(逗号分隔)
156
+ --depth <n> 扫描深度
157
+ --type <type> 文档类型 (module/api)
92
158
  ```
93
159
 
94
160
  ## 🌍 支持的语言
@@ -99,12 +165,17 @@ Commands:
99
165
  | Java | `.java` | AST |
100
166
  | Kotlin | `.kt`, `.kts` | 双模式 |
101
167
  | C | `.c`, `.h` | 双模式 |
168
+ | C++ | `.cpp`, `.hpp`, `.cc`, `.cxx` | 正则 |
102
169
  | JavaScript | `.js`, `.jsx` | 正则 |
103
170
  | TypeScript | `.ts`, `.tsx` | 正则 |
171
+ | Vue | `.vue` | 正则 |
172
+
173
+ > 此外还支持配置文件(`.json`、`.yaml`、`.yml`)和文档(`.md`)的分析
104
174
 
105
175
  ## 📚 文档
106
176
 
107
177
  - [完整使用手册](docs/USER_MANUAL.md)
178
+ - [批量分析与缓存优化设计](docs/design/batch-cache-optimization.md)
108
179
  - [Kotlin 解析器设计](docs/design/kotlin-parser-design.md)
109
180
  - [C 解析器设计](docs/design/c-parser-design.md)
110
181
 
@@ -118,18 +189,25 @@ code-analysis/
118
189
  │ ├── llm_client.py # LLM 客户端
119
190
  │ ├── git_handler.py # Git 操作 + 批量操作
120
191
  │ ├── config.py # 配置管理
121
- └── ignore.py # 统一过滤规则
192
+ ├── ignore.py # 统一过滤规则
193
+ │ ├── token_estimator.py # Token 估算模块
194
+ │ ├── batch_planner.py # 批量分析规划器
195
+ │ ├── batch_analyzer.py # 批量分析器
196
+ │ └── cache_manager.py # 缓存管理器
122
197
  ├── analyzers/
123
198
  │ ├── code_review.py # 代码审查
124
199
  │ ├── documentation.py # 文档生成
125
200
  │ ├── architecture.py # 架构分析
126
201
  │ ├── security.py # 安全扫描
127
- └── directory.py # 目录分析
202
+ ├── directory.py # 目录分析
203
+ │ └── context_builder.py # 上下文构建器
128
204
  └── parsers/
129
205
  ├── python_parser.py # Python AST 解析器
130
206
  ├── java_parser.py # Java AST 解析器
131
207
  ├── kotlin_parser.py # Kotlin 解析器(双模式)
132
208
  ├── c_parser.py # C 语言解析器(双模式)
209
+ ├── javascript_parser.py # JavaScript 解析器
210
+ ├── typescript_parser.py # TypeScript 解析器
133
211
  └── ...
134
212
  ```
135
213
 
@@ -147,8 +225,30 @@ vcode-analysis review ./src --workers 10
147
225
  # 自定义输出路径
148
226
  vcode-analysis review ./src --output custom_report.md
149
227
 
228
+ # 输出 JSON 格式
229
+ vcode-analysis review ./src --format json
230
+
231
+ # 启用上下文增强(提供项目依赖关系和关联文件信息)
232
+ vcode-analysis review ./src --context
233
+
150
234
  # 审查最新提交
151
235
  vcode-analysis review-commit HEAD
236
+
237
+ # 审查指定提交
238
+ vcode-analysis review-commit abc1234 --path ./src
239
+ ```
240
+
241
+ ### 文档生成
242
+
243
+ ```bash
244
+ # 生成模块文档(默认)
245
+ vcode-analysis doc ./src
246
+
247
+ # 生成 API 文档
248
+ vcode-analysis doc ./src --type api
249
+
250
+ # 自定义输出路径
251
+ vcode-analysis doc ./src --output docs.md
152
252
  ```
153
253
 
154
254
  ### 安全扫描
@@ -167,6 +267,18 @@ vcode-analysis security ./src
167
267
  # 批量克隆(从文件读取 URL 列表)
168
268
  vcode-analysis batch-clone repos.txt ./projects --parallel
169
269
 
270
+ # 克隆后自动分析
271
+ vcode-analysis batch-clone repos.txt ./projects --parallel --analyze
272
+
273
+ # 克隆指定分支
274
+ vcode-analysis clone https://example.com/repo.git --branch develop
275
+
276
+ # 批量拉取更新
277
+ vcode-analysis batch-pull ~/projects
278
+
279
+ # 拉取指定仓库
280
+ vcode-analysis batch-pull ~/projects --repos repo1,repo2
281
+
170
282
  # 查看多仓库状态
171
283
  vcode-analysis git-status ~/projects
172
284
  ```
@@ -181,10 +293,30 @@ llm:
181
293
  model: qwen3.5-35b-a3b
182
294
  temperature: 0.7
183
295
  max_tokens: 4096
296
+ timeout: 180 # 请求超时时间(秒)
184
297
 
185
298
  analysis:
186
299
  max_file_size: 102400
187
- max_workers: 5 # 并发分析线程数
300
+ max_workers: 5 # 并发分析线程数
301
+
302
+ # 支持的文件扩展名(不在此列表中的文件将被忽略)
303
+ supported_extensions:
304
+ - ".py"
305
+ - ".java"
306
+ - ".kt"
307
+ - ".kts"
308
+ - ".js"
309
+ - ".jsx"
310
+ - ".ts"
311
+ - ".tsx"
312
+ - ".vue"
313
+ - ".c"
314
+ - ".h"
315
+ - ".cpp"
316
+ - ".hpp"
317
+ - ".cc"
318
+ - ".cxx"
319
+
188
320
  ignore_patterns:
189
321
  # 默认已包含多语言依赖目录和缓存文件
190
322
  # Python: .venv, venv, __pycache__, .pytest_cache, .mypy_cache
@@ -194,8 +326,24 @@ analysis:
194
326
  # .NET: bin, obj
195
327
  # 以及: .git, .idea, .vscode, *.pyc, *.min.js 等
196
328
  # 用户可在此添加额外的自定义忽略规则
329
+
330
+ cache:
331
+ ttl: 604800 # 缓存有效期(秒),默认 7 天
332
+ memory_cache_size: 1000 # 内存缓存最大条目数
197
333
  ```
198
334
 
335
+ ### 环境变量
336
+
337
+ 除了配置文件,还可以通过环境变量设置(优先级高于配置文件):
338
+
339
+ | 环境变量 | 对应配置项 |
340
+ |----------|-----------|
341
+ | `OPENAI_API_BASE` 或 `OPENAI_BASE_URL` | `llm.base_url` |
342
+ | `OPENAI_API_KEY` | `llm.api_key` |
343
+ | `CODE_ANALYSIS_MODEL` | `llm.model` |
344
+ | `CODE_ANALYSIS_TEMPERATURE` | `llm.temperature` |
345
+ | `CODE_ANALYSIS_MAX_TOKENS` | `llm.max_tokens` |
346
+
199
347
  ## 🤝 扩展开发
200
348
 
201
349
  ### 添加新的分析器
@@ -250,12 +398,3 @@ twine upload dist/*
250
398
  twine upload --repository testpypi dist/*
251
399
  ```
252
400
 
253
- ## 📄 许可证
254
-
255
- [MIT License](LICENSE)
256
-
257
- ## 🔗 链接
258
-
259
- - [PyPI 包地址](https://pypi.org/project/vcode-analysis/)
260
- - [项目主页](https://gitcode.com/wellchang/code-analysis)
261
- - [问题反馈](https://gitcode.com/wellchang/code-analysis/issues)
@@ -5,6 +5,7 @@ from .documentation import DocumentationAnalyzer, DocumentationResult
5
5
  from .architecture import ArchitectureAnalyzer, ArchitectureResult, ModuleInfo, DependencyInfo
6
6
  from .security import SecurityAnalyzer, SecurityResult, SecurityIssue
7
7
  from .directory import DirectoryAnalyzer, DirectoryAnalysisResult, ProjectInfo
8
+ from .context_builder import ContextBuilder, AnalysisContext
8
9
 
9
10
  __all__ = [
10
11
  "CodeReviewAnalyzer",
@@ -21,4 +22,6 @@ __all__ = [
21
22
  "DirectoryAnalyzer",
22
23
  "DirectoryAnalysisResult",
23
24
  "ProjectInfo",
25
+ "ContextBuilder",
26
+ "AnalysisContext",
24
27
  ]
@@ -166,6 +166,16 @@ class ArchitectureAnalyzer:
166
166
  self.modules: list[ModuleInfo] = []
167
167
  self.dependencies: list[DependencyInfo] = []
168
168
 
169
+ def _count_lines(self, content: str) -> int:
170
+ """准确计算代码行数"""
171
+ if not content:
172
+ return 0
173
+ # 如果以换行符结尾,换行符数量就是行数
174
+ # 否则,行数 = 换行符数量 + 1
175
+ if content.endswith('\n'):
176
+ return content.count('\n')
177
+ return content.count('\n') + 1
178
+
169
179
  def _detect_imports(self, content: str, language: str, file_path: str = "") -> list[str]:
170
180
  """检测文件中的导入语句"""
171
181
  imports = []
@@ -349,7 +359,7 @@ class ArchitectureAnalyzer:
349
359
  language=file_info.language,
350
360
  imports=imports,
351
361
  exports=[], # TODO: 实现导出检测
352
- lines=len(content.split('\n')),
362
+ lines=self._count_lines(content),
353
363
  classes=structures.get("classes", 0),
354
364
  functions=structures.get("functions", 0),
355
365
  )