vcode-analysis 0.5.0__tar.gz → 0.5.2__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 (67) hide show
  1. vcode_analysis-0.5.2/PKG-INFO +302 -0
  2. vcode_analysis-0.5.2/README.md +262 -0
  3. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/analyzers/architecture.py +2 -1
  4. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/analyzers/code_review.py +3 -2
  5. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/analyzers/security.py +2 -1
  6. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/cli.py +292 -93
  7. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/core/__init__.py +3 -0
  8. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/core/batch_analyzer.py +80 -57
  9. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/core/git_handler.py +7 -1
  10. vcode_analysis-0.5.2/core/json_utils.py +65 -0
  11. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/core/llm_client.py +6 -1
  12. vcode_analysis-0.5.2/core/report_generator.py +587 -0
  13. vcode_analysis-0.5.2/docs/design/vcode-analysis-tool.md +558 -0
  14. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/parsers/c/patterns.py +2 -2
  15. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/parsers/c/regex_parser.py +18 -8
  16. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/pyproject.toml +1 -1
  17. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/tests/test_c_parser.py +1 -1
  18. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/tests/test_kotlin_parser.py +1 -1
  19. vcode_analysis-0.5.2/tests/test_report_generator.py +543 -0
  20. vcode_analysis-0.5.2/vcode_analysis.egg-info/PKG-INFO +302 -0
  21. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/vcode_analysis.egg-info/SOURCES.txt +3 -0
  22. vcode_analysis-0.5.0/PKG-INFO +0 -440
  23. vcode_analysis-0.5.0/README.md +0 -400
  24. vcode_analysis-0.5.0/docs/design/vcode-analysis-tool.md +0 -143
  25. vcode_analysis-0.5.0/vcode_analysis.egg-info/PKG-INFO +0 -440
  26. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/LICENSE +0 -0
  27. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/MANIFEST.in +0 -0
  28. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/analyzers/__init__.py +0 -0
  29. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/analyzers/context_builder.py +0 -0
  30. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/analyzers/directory.py +0 -0
  31. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/analyzers/documentation.py +0 -0
  32. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/core/analyzer.py +0 -0
  33. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/core/batch_planner.py +0 -0
  34. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/core/cache_manager.py +0 -0
  35. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/core/config.py +0 -0
  36. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/core/ignore.py +0 -0
  37. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/core/token_estimator.py +0 -0
  38. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/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" +0 -0
  39. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/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" +0 -0
  40. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/docs/USER_MANUAL.md +0 -0
  41. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/docs/design/batch-cache-optimization.md +0 -0
  42. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/docs/design/c-parser-design.md +0 -0
  43. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/docs/design/kotlin-parser-design.md +0 -0
  44. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/docs/security-sharing-article.md +0 -0
  45. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/parsers/__init__.py +0 -0
  46. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/parsers/c/__init__.py +0 -0
  47. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/parsers/c/ast_parser.py +0 -0
  48. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/parsers/c/models.py +0 -0
  49. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/parsers/c_parser.py +0 -0
  50. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/parsers/java_parser.py +0 -0
  51. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/parsers/javascript_parser.py +0 -0
  52. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/parsers/kotlin/__init__.py +0 -0
  53. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/parsers/kotlin/ast_parser.py +0 -0
  54. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/parsers/kotlin/models.py +0 -0
  55. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/parsers/kotlin/patterns.py +0 -0
  56. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/parsers/kotlin/regex_parser.py +0 -0
  57. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/parsers/kotlin_parser.py +0 -0
  58. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/parsers/python_parser.py +0 -0
  59. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/parsers/typescript_parser.py +0 -0
  60. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/requirements.txt +0 -0
  61. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/setup.cfg +0 -0
  62. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/tests/test_batch_operations.py +0 -0
  63. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/tests/test_security_rules.py +0 -0
  64. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/vcode_analysis.egg-info/dependency_links.txt +0 -0
  65. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/vcode_analysis.egg-info/entry_points.txt +0 -0
  66. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/vcode_analysis.egg-info/requires.txt +0 -0
  67. {vcode_analysis-0.5.0 → vcode_analysis-0.5.2}/vcode_analysis.egg-info/top_level.txt +0 -0
@@ -0,0 +1,302 @@
1
+ Metadata-Version: 2.4
2
+ Name: vcode-analysis
3
+ Version: 0.5.2
4
+ Summary: 基于大模型的智能代码分析工具,支持代码审查、文档生成、架构分析和安全扫描
5
+ Author-email: Wellchang <2483808264@qq.com>
6
+ License: MIT
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
+ Keywords: vcode-analysis,llm,code-review,documentation
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Environment :: Console
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.10
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Topic :: Software Development :: Quality Assurance
22
+ Classifier: Topic :: Software Development :: Documentation
23
+ Classifier: Topic :: Security
24
+ Requires-Python: >=3.10
25
+ Description-Content-Type: text/markdown
26
+ License-File: LICENSE
27
+ Requires-Dist: httpx>=0.25.0
28
+ Requires-Dist: docopt>=0.6.2
29
+ Requires-Dist: pyyaml>=6.0
30
+ Provides-Extra: dev
31
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
32
+ Requires-Dist: black>=23.0.0; extra == "dev"
33
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
34
+ Provides-Extra: rich
35
+ Requires-Dist: rich>=13.0.0; extra == "rich"
36
+ Provides-Extra: parsers
37
+ Requires-Dist: javalang>=0.13.0; extra == "parsers"
38
+ Requires-Dist: pycparser>=2.21; extra == "parsers"
39
+ Dynamic: license-file
40
+
41
+ # VCode Analysis
42
+
43
+ 基于私有化部署大模型的智能代码分析工具。兼容 OpenAI API 格式,支持代码审查、文档生成、架构分析和安全扫描。
44
+
45
+ ## 特性
46
+
47
+ - **代码审查** — 1-10 评分 + 问题定位 + 改进建议
48
+ - **批量分析** — 智能打包多文件为单次 API 调用,减少 85%+ 请求量
49
+ - **双层缓存** — 内存 LRU + 磁盘持久化,二次分析减少 98% 调用
50
+ - **安全扫描** — 正则规则引擎 + LLM 深度语义分析
51
+ - **架构分析** — 模块识别、依赖关系、耦合度评估
52
+ - **文档生成** — 模块文档 / API 文档 / README 自动生成
53
+ - **多语言解析** — Python/Java AST、Kotlin/C 双模式、JS/TS/Vue 正则
54
+ - **上下文增强** — 自动构建项目依赖关系,提升分析质量
55
+ - **Git 集成** — 单仓库 + 批量多仓库操作
56
+ - **交互式报告** — Markdown + HTML(排序、筛选、折叠)
57
+
58
+ ## 安装
59
+
60
+ ```bash
61
+ # 使用 pip
62
+ pip install vcode-analysis
63
+
64
+ # 或使用 uvx 直接运行
65
+ uvx vcode-analysis review ./src
66
+ ```
67
+
68
+ ### 可选依赖
69
+
70
+ ```bash
71
+ # Java AST 解析
72
+ pip install javalang
73
+
74
+ # C 语言精确解析
75
+ pip install pycparser
76
+ ```
77
+
78
+ ## 快速开始
79
+
80
+ ### 1. 配置 LLM 服务
81
+
82
+ ```bash
83
+ # 方式一:环境变量
84
+ export OPENAI_API_BASE=http://localhost:8000/v1
85
+ export OPENAI_API_KEY=sk-your-key
86
+
87
+ # 方式二:配置文件
88
+ vcode-analysis config --init
89
+ # 编辑 ~/.code-analysis/config.yaml
90
+
91
+ # 方式三:命令行参数
92
+ vcode-analysis review ./src --base-url http://localhost:8000/v1 --model qwen35-35b-a3b
93
+ ```
94
+
95
+ ### 2. 代码审查
96
+
97
+ ```bash
98
+ # 审查目录(默认启用批量+缓存)
99
+ vcode-analysis review ./src
100
+
101
+ # 审查单个文件
102
+ vcode-analysis review ./src/main.py
103
+
104
+ # 指定输出格式
105
+ vcode-analysis review ./src -o report.md -f markdown
106
+ vcode-analysis review ./src -o report.html -f html
107
+
108
+ # 启用上下文增强(提升分析质量)
109
+ vcode-analysis review ./src --context
110
+
111
+ # 审查 Git 提交
112
+ vcode-analysis review-commit abc1234
113
+ ```
114
+
115
+ ### 3. 其他分析
116
+
117
+ ```bash
118
+ # 生成文档
119
+ vcode-analysis doc ./src --type module
120
+ vcode-analysis doc ./src --type api
121
+ vcode-analysis doc ./src --type readme
122
+
123
+ # 架构分析
124
+ vcode-analysis arch ./src
125
+
126
+ # 安全扫描
127
+ vcode-analysis security ./src
128
+ vcode-analysis security ./src --deep # LLM 深度扫描
129
+
130
+ # 目录扫描
131
+ vcode-analysis scan-dir ./src
132
+ ```
133
+
134
+ ### 4. Git 操作
135
+
136
+ ```bash
137
+ # 克隆并分析
138
+ vcode-analysis clone https://github.com/user/repo.git
139
+
140
+ # 批量克隆(从文件读取 URL 列表)
141
+ vcode-analysis batch-clone repos.txt ./workspace
142
+
143
+ # 批量拉取
144
+ vcode-analysis batch-pull ./workspace
145
+
146
+ # 多仓库状态
147
+ vcode-analysis git-status ./workspace
148
+ ```
149
+
150
+ ## 命令参考
151
+
152
+ ```
153
+ vcode-analysis review <path> 代码审查
154
+ vcode-analysis review-commit <commit> 审查指定提交
155
+ vcode-analysis doc <path> 生成文档
156
+ vcode-analysis arch <path> 架构分析
157
+ vcode-analysis security <path> 安全扫描
158
+ vcode-analysis clone <url> 克隆仓库并分析
159
+ vcode-analysis batch-clone <file> <dir> 批量克隆
160
+ vcode-analysis batch-pull <dir> 批量拉取
161
+ vcode-analysis git-status <dir> 多仓库状态
162
+ vcode-analysis scan-dir <path> 目录扫描
163
+ vcode-analysis config [--init|--show] 配置管理
164
+ ```
165
+
166
+ ### 全局选项
167
+
168
+ | 选项 | 说明 | 默认值 |
169
+ |------|------|--------|
170
+ | `-c, --config` | 配置文件路径 | `~/.code-analysis/config.yaml` |
171
+ | `--base-url` | LLM API 地址 | `http://localhost:8000/v1` |
172
+ | `--api-key` | API 密钥 | `sk-dummy` |
173
+ | `-m, --model` | 模型名称 | `qwen35-35b-a3b` |
174
+ | `--max-tokens` | 最大输出 Token | 4096 |
175
+ | `--timeout` | 请求超时(秒) | 180 |
176
+ | `-o, --output` | 输出文件路径 | 自动生成 |
177
+ | `-f, --format` | 输出格式(markdown/html) | markdown |
178
+ | `-w, --workers` | 并发线程数 | 5 |
179
+ | `--context` | 启用上下文增强 | 关闭 |
180
+ | `--no-cache` | 禁用缓存 | 关闭 |
181
+ | `--no-batch` | 禁用批量分析 | 关闭 |
182
+
183
+ ## 配置文件
184
+
185
+ `~/.code-analysis/config.yaml`:
186
+
187
+ ```yaml
188
+ llm:
189
+ base_url: "http://localhost:8000/v1"
190
+ api_key: "sk-your-key"
191
+ model: "qwen35-35b-a3b"
192
+ temperature: 0.7
193
+ max_tokens: 8192
194
+ timeout: 180
195
+
196
+ analysis:
197
+ max_file_size: 102400
198
+ max_workers: 5
199
+ ignore_patterns:
200
+ - "custom_ignore/**"
201
+ supported_extensions:
202
+ - ".py"
203
+ - ".java"
204
+ - ".kt"
205
+
206
+ cache:
207
+ ttl: 604800
208
+ memory_cache_size: 1000
209
+ ```
210
+
211
+ ### 环境变量
212
+
213
+ | 变量 | 说明 |
214
+ |------|------|
215
+ | `OPENAI_API_BASE` / `OPENAI_BASE_URL` | LLM API 地址 |
216
+ | `OPENAI_API_KEY` | API 密钥 |
217
+ | `CODE_ANALYSIS_MODEL` | 模型名称 |
218
+ | `CODE_ANALYSIS_TEMPERATURE` | 温度参数 |
219
+ | `CODE_ANALYSIS_MAX_TOKENS` | 最大输出 Token |
220
+
221
+ ## 支持的语言
222
+
223
+ | 语言 | 扩展名 | 解析方式 |
224
+ |------|--------|----------|
225
+ | Python | `.py` | AST |
226
+ | Java | `.java` | AST (javalang) |
227
+ | Kotlin | `.kt`, `.kts` | 双模式 (fast/precise) |
228
+ | C | `.c`, `.h` | 双模式 (fast/precise) |
229
+ | C++ | `.cpp`, `.hpp`, `.cc`, `.cxx` | 正则 |
230
+ | JavaScript | `.js`, `.jsx` | 正则 |
231
+ | TypeScript | `.ts`, `.tsx` | 正则 |
232
+ | Vue | `.vue` | 正则 |
233
+ | Go | `.go` | 正则 |
234
+ | Rust | `.rs` | 正则 |
235
+ | 配置文件 | `.json`, `.yaml`, `.yml` | 文本 |
236
+ | Markdown | `.md` | 文本 |
237
+
238
+ ## 批量分析原理
239
+
240
+ ```
241
+ 100 个 Python 文件
242
+
243
+ ▼ 按语言分组 + Token 估算
244
+
245
+ ├── 批次 1: file_01.py + file_03.py + file_07.py (~7500 tokens)
246
+ ├── 批次 2: file_02.py + file_05.py (~6000 tokens)
247
+ ├── ...
248
+ └── 批次 15: file_98.py + file_99.py (~5000 tokens)
249
+
250
+ ▼ 每批合并为一次 API 调用
251
+
252
+ 100 次 → ~15 次 API 调用(减少 85%)
253
+ ```
254
+
255
+ **二次分析**(10 个文件变更):缓存命中 90 个文件,仅分析 10 个 → ~2 次调用(减少 98%)。
256
+
257
+ ## 项目结构
258
+
259
+ ```
260
+ code-analysis/
261
+ ├── cli.py CLI 入口
262
+ ├── core/ 核心模块
263
+ │ ├── analyzer.py 分析引擎
264
+ │ ├── llm_client.py LLM 客户端
265
+ │ ├── config.py 配置管理
266
+ │ ├── ignore.py 过滤规则
267
+ │ ├── git_handler.py Git 操作
268
+ │ ├── batch_planner.py 批量规划
269
+ │ ├── batch_analyzer.py 批量分析
270
+ │ ├── cache_manager.py 缓存管理
271
+ │ ├── token_estimator.py Token 估算
272
+ │ └── report_generator.py 报告生成
273
+ ├── analyzers/ 分析器
274
+ │ ├── code_review.py 代码审查
275
+ │ ├── documentation.py 文档生成
276
+ │ ├── architecture.py 架构分析
277
+ │ ├── security.py 安全扫描
278
+ │ ├── directory.py 目录分析
279
+ │ └── context_builder.py 上下文构建
280
+ ├── parsers/ 解析器
281
+ │ ├── python_parser.py Python AST
282
+ │ ├── java_parser.py Java AST
283
+ │ ├── kotlin_parser.py Kotlin 双模式
284
+ │ ├── c_parser.py C 双模式
285
+ │ ├── javascript_parser.py JavaScript
286
+ │ └── typescript_parser.py TypeScript
287
+ └── docs/ 文档
288
+ ├── USER_MANUAL.md 用户手册
289
+ └── design/ 设计文档
290
+ ```
291
+
292
+ ## 文档
293
+
294
+ - [用户手册](docs/USER_MANUAL.md)
295
+ - [设计文档](docs/design/vcode-analysis-tool.md)
296
+ - [批量分析优化设计](docs/design/batch-cache-optimization.md)
297
+ - [Kotlin 解析器设计](docs/design/kotlin-parser-design.md)
298
+ - [C 解析器设计](docs/design/c-parser-design.md)
299
+
300
+ ## License
301
+
302
+ MIT
@@ -0,0 +1,262 @@
1
+ # VCode Analysis
2
+
3
+ 基于私有化部署大模型的智能代码分析工具。兼容 OpenAI API 格式,支持代码审查、文档生成、架构分析和安全扫描。
4
+
5
+ ## 特性
6
+
7
+ - **代码审查** — 1-10 评分 + 问题定位 + 改进建议
8
+ - **批量分析** — 智能打包多文件为单次 API 调用,减少 85%+ 请求量
9
+ - **双层缓存** — 内存 LRU + 磁盘持久化,二次分析减少 98% 调用
10
+ - **安全扫描** — 正则规则引擎 + LLM 深度语义分析
11
+ - **架构分析** — 模块识别、依赖关系、耦合度评估
12
+ - **文档生成** — 模块文档 / API 文档 / README 自动生成
13
+ - **多语言解析** — Python/Java AST、Kotlin/C 双模式、JS/TS/Vue 正则
14
+ - **上下文增强** — 自动构建项目依赖关系,提升分析质量
15
+ - **Git 集成** — 单仓库 + 批量多仓库操作
16
+ - **交互式报告** — Markdown + HTML(排序、筛选、折叠)
17
+
18
+ ## 安装
19
+
20
+ ```bash
21
+ # 使用 pip
22
+ pip install vcode-analysis
23
+
24
+ # 或使用 uvx 直接运行
25
+ uvx vcode-analysis review ./src
26
+ ```
27
+
28
+ ### 可选依赖
29
+
30
+ ```bash
31
+ # Java AST 解析
32
+ pip install javalang
33
+
34
+ # C 语言精确解析
35
+ pip install pycparser
36
+ ```
37
+
38
+ ## 快速开始
39
+
40
+ ### 1. 配置 LLM 服务
41
+
42
+ ```bash
43
+ # 方式一:环境变量
44
+ export OPENAI_API_BASE=http://localhost:8000/v1
45
+ export OPENAI_API_KEY=sk-your-key
46
+
47
+ # 方式二:配置文件
48
+ vcode-analysis config --init
49
+ # 编辑 ~/.code-analysis/config.yaml
50
+
51
+ # 方式三:命令行参数
52
+ vcode-analysis review ./src --base-url http://localhost:8000/v1 --model qwen35-35b-a3b
53
+ ```
54
+
55
+ ### 2. 代码审查
56
+
57
+ ```bash
58
+ # 审查目录(默认启用批量+缓存)
59
+ vcode-analysis review ./src
60
+
61
+ # 审查单个文件
62
+ vcode-analysis review ./src/main.py
63
+
64
+ # 指定输出格式
65
+ vcode-analysis review ./src -o report.md -f markdown
66
+ vcode-analysis review ./src -o report.html -f html
67
+
68
+ # 启用上下文增强(提升分析质量)
69
+ vcode-analysis review ./src --context
70
+
71
+ # 审查 Git 提交
72
+ vcode-analysis review-commit abc1234
73
+ ```
74
+
75
+ ### 3. 其他分析
76
+
77
+ ```bash
78
+ # 生成文档
79
+ vcode-analysis doc ./src --type module
80
+ vcode-analysis doc ./src --type api
81
+ vcode-analysis doc ./src --type readme
82
+
83
+ # 架构分析
84
+ vcode-analysis arch ./src
85
+
86
+ # 安全扫描
87
+ vcode-analysis security ./src
88
+ vcode-analysis security ./src --deep # LLM 深度扫描
89
+
90
+ # 目录扫描
91
+ vcode-analysis scan-dir ./src
92
+ ```
93
+
94
+ ### 4. Git 操作
95
+
96
+ ```bash
97
+ # 克隆并分析
98
+ vcode-analysis clone https://github.com/user/repo.git
99
+
100
+ # 批量克隆(从文件读取 URL 列表)
101
+ vcode-analysis batch-clone repos.txt ./workspace
102
+
103
+ # 批量拉取
104
+ vcode-analysis batch-pull ./workspace
105
+
106
+ # 多仓库状态
107
+ vcode-analysis git-status ./workspace
108
+ ```
109
+
110
+ ## 命令参考
111
+
112
+ ```
113
+ vcode-analysis review <path> 代码审查
114
+ vcode-analysis review-commit <commit> 审查指定提交
115
+ vcode-analysis doc <path> 生成文档
116
+ vcode-analysis arch <path> 架构分析
117
+ vcode-analysis security <path> 安全扫描
118
+ vcode-analysis clone <url> 克隆仓库并分析
119
+ vcode-analysis batch-clone <file> <dir> 批量克隆
120
+ vcode-analysis batch-pull <dir> 批量拉取
121
+ vcode-analysis git-status <dir> 多仓库状态
122
+ vcode-analysis scan-dir <path> 目录扫描
123
+ vcode-analysis config [--init|--show] 配置管理
124
+ ```
125
+
126
+ ### 全局选项
127
+
128
+ | 选项 | 说明 | 默认值 |
129
+ |------|------|--------|
130
+ | `-c, --config` | 配置文件路径 | `~/.code-analysis/config.yaml` |
131
+ | `--base-url` | LLM API 地址 | `http://localhost:8000/v1` |
132
+ | `--api-key` | API 密钥 | `sk-dummy` |
133
+ | `-m, --model` | 模型名称 | `qwen35-35b-a3b` |
134
+ | `--max-tokens` | 最大输出 Token | 4096 |
135
+ | `--timeout` | 请求超时(秒) | 180 |
136
+ | `-o, --output` | 输出文件路径 | 自动生成 |
137
+ | `-f, --format` | 输出格式(markdown/html) | markdown |
138
+ | `-w, --workers` | 并发线程数 | 5 |
139
+ | `--context` | 启用上下文增强 | 关闭 |
140
+ | `--no-cache` | 禁用缓存 | 关闭 |
141
+ | `--no-batch` | 禁用批量分析 | 关闭 |
142
+
143
+ ## 配置文件
144
+
145
+ `~/.code-analysis/config.yaml`:
146
+
147
+ ```yaml
148
+ llm:
149
+ base_url: "http://localhost:8000/v1"
150
+ api_key: "sk-your-key"
151
+ model: "qwen35-35b-a3b"
152
+ temperature: 0.7
153
+ max_tokens: 8192
154
+ timeout: 180
155
+
156
+ analysis:
157
+ max_file_size: 102400
158
+ max_workers: 5
159
+ ignore_patterns:
160
+ - "custom_ignore/**"
161
+ supported_extensions:
162
+ - ".py"
163
+ - ".java"
164
+ - ".kt"
165
+
166
+ cache:
167
+ ttl: 604800
168
+ memory_cache_size: 1000
169
+ ```
170
+
171
+ ### 环境变量
172
+
173
+ | 变量 | 说明 |
174
+ |------|------|
175
+ | `OPENAI_API_BASE` / `OPENAI_BASE_URL` | LLM API 地址 |
176
+ | `OPENAI_API_KEY` | API 密钥 |
177
+ | `CODE_ANALYSIS_MODEL` | 模型名称 |
178
+ | `CODE_ANALYSIS_TEMPERATURE` | 温度参数 |
179
+ | `CODE_ANALYSIS_MAX_TOKENS` | 最大输出 Token |
180
+
181
+ ## 支持的语言
182
+
183
+ | 语言 | 扩展名 | 解析方式 |
184
+ |------|--------|----------|
185
+ | Python | `.py` | AST |
186
+ | Java | `.java` | AST (javalang) |
187
+ | Kotlin | `.kt`, `.kts` | 双模式 (fast/precise) |
188
+ | C | `.c`, `.h` | 双模式 (fast/precise) |
189
+ | C++ | `.cpp`, `.hpp`, `.cc`, `.cxx` | 正则 |
190
+ | JavaScript | `.js`, `.jsx` | 正则 |
191
+ | TypeScript | `.ts`, `.tsx` | 正则 |
192
+ | Vue | `.vue` | 正则 |
193
+ | Go | `.go` | 正则 |
194
+ | Rust | `.rs` | 正则 |
195
+ | 配置文件 | `.json`, `.yaml`, `.yml` | 文本 |
196
+ | Markdown | `.md` | 文本 |
197
+
198
+ ## 批量分析原理
199
+
200
+ ```
201
+ 100 个 Python 文件
202
+
203
+ ▼ 按语言分组 + Token 估算
204
+
205
+ ├── 批次 1: file_01.py + file_03.py + file_07.py (~7500 tokens)
206
+ ├── 批次 2: file_02.py + file_05.py (~6000 tokens)
207
+ ├── ...
208
+ └── 批次 15: file_98.py + file_99.py (~5000 tokens)
209
+
210
+ ▼ 每批合并为一次 API 调用
211
+
212
+ 100 次 → ~15 次 API 调用(减少 85%)
213
+ ```
214
+
215
+ **二次分析**(10 个文件变更):缓存命中 90 个文件,仅分析 10 个 → ~2 次调用(减少 98%)。
216
+
217
+ ## 项目结构
218
+
219
+ ```
220
+ code-analysis/
221
+ ├── cli.py CLI 入口
222
+ ├── core/ 核心模块
223
+ │ ├── analyzer.py 分析引擎
224
+ │ ├── llm_client.py LLM 客户端
225
+ │ ├── config.py 配置管理
226
+ │ ├── ignore.py 过滤规则
227
+ │ ├── git_handler.py Git 操作
228
+ │ ├── batch_planner.py 批量规划
229
+ │ ├── batch_analyzer.py 批量分析
230
+ │ ├── cache_manager.py 缓存管理
231
+ │ ├── token_estimator.py Token 估算
232
+ │ └── report_generator.py 报告生成
233
+ ├── analyzers/ 分析器
234
+ │ ├── code_review.py 代码审查
235
+ │ ├── documentation.py 文档生成
236
+ │ ├── architecture.py 架构分析
237
+ │ ├── security.py 安全扫描
238
+ │ ├── directory.py 目录分析
239
+ │ └── context_builder.py 上下文构建
240
+ ├── parsers/ 解析器
241
+ │ ├── python_parser.py Python AST
242
+ │ ├── java_parser.py Java AST
243
+ │ ├── kotlin_parser.py Kotlin 双模式
244
+ │ ├── c_parser.py C 双模式
245
+ │ ├── javascript_parser.py JavaScript
246
+ │ └── typescript_parser.py TypeScript
247
+ └── docs/ 文档
248
+ ├── USER_MANUAL.md 用户手册
249
+ └── design/ 设计文档
250
+ ```
251
+
252
+ ## 文档
253
+
254
+ - [用户手册](docs/USER_MANUAL.md)
255
+ - [设计文档](docs/design/vcode-analysis-tool.md)
256
+ - [批量分析优化设计](docs/design/batch-cache-optimization.md)
257
+ - [Kotlin 解析器设计](docs/design/kotlin-parser-design.md)
258
+ - [C 解析器设计](docs/design/c-parser-design.md)
259
+
260
+ ## License
261
+
262
+ MIT
@@ -10,6 +10,7 @@ import re
10
10
  from pathlib import Path
11
11
 
12
12
  from core.analyzer import Analyzer, FileInfo, AnalysisResult
13
+ from core.json_utils import remove_trailing_commas
13
14
 
14
15
  # Python AST 解析器(可选依赖)
15
16
  try:
@@ -499,7 +500,7 @@ class ArchitectureAnalyzer:
499
500
  elif "```" in content:
500
501
  content = content.split("```")[1].split("```")[0]
501
502
 
502
- data = json.loads(content.strip())
503
+ data = json.loads(remove_trailing_commas(content.strip()))
503
504
  summary = data.get("summary", "")
504
505
  suggestions = data.get("suggestions", [])
505
506
  except Exception:
@@ -3,6 +3,7 @@
3
3
  from dataclasses import dataclass
4
4
  from typing import Optional, TYPE_CHECKING
5
5
  from core.analyzer import Analyzer, FileInfo, AnalysisResult
6
+ from core.json_utils import remove_trailing_commas
6
7
 
7
8
  if TYPE_CHECKING:
8
9
  from .context_builder import AnalysisContext
@@ -133,7 +134,7 @@ class CodeReviewAnalyzer:
133
134
  elif "```" in content:
134
135
  content = content.split("```")[1].split("```")[0]
135
136
 
136
- data = json.loads(content.strip())
137
+ data = json.loads(remove_trailing_commas(content.strip()))
137
138
  return CodeReviewResult(
138
139
  file_path=file_info.relative_path,
139
140
  score=data.get("score", 0),
@@ -276,7 +277,7 @@ class CodeReviewAnalyzer:
276
277
  elif "```" in content:
277
278
  content = content.split("```")[1].split("```")[0]
278
279
 
279
- data = json.loads(content.strip())
280
+ data = json.loads(remove_trailing_commas(content.strip()))
280
281
 
281
282
  # 提取跨文件问题并添加到 issues
282
283
  issues = data.get("issues", [])
@@ -14,6 +14,7 @@ from typing import Optional
14
14
  import re
15
15
 
16
16
  from core.analyzer import Analyzer, FileInfo, AnalysisResult
17
+ from core.json_utils import remove_trailing_commas
17
18
 
18
19
 
19
20
  @dataclass
@@ -640,7 +641,7 @@ class SecurityAnalyzer:
640
641
  if "```json" in result_content:
641
642
  result_content = result_content.split("```json")[1].split("```")[0]
642
643
 
643
- data = json.loads(result_content.strip())
644
+ data = json.loads(remove_trailing_commas(result_content.strip()))
644
645
 
645
646
  issues = []
646
647
  for issue in data.get("confirmed_issues", []):