@zhanlucode/zl-darwin-arm64 1.6.4-moma.0
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.
- package/LICENSE +22 -0
- package/bin/rg +0 -0
- package/bin/tree-sitter/tree-sitter-bash.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-c.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-c_sharp.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-cpp.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-css.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-dart.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-elisp.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-elixir.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-elm.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-embedded_template.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-go.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-html.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-java.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-javascript.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-json.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-kotlin.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-lua.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-objc.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-ocaml.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-php.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-python.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-ql.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-rescript.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-ruby.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-rust.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-scala.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-solidity.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-swift.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-systemrdl.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-tlaplus.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-toml.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-tsx.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-typescript.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-vue.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-yaml.wasm +0 -0
- package/bin/tree-sitter/tree-sitter-zig.wasm +0 -0
- package/bin/tree-sitter/tree-sitter.wasm +0 -0
- package/bin/zhanlu-plugins/bundle-index.json +60 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/.claude-plugin/plugin.json +42 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/README.md +29 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/mcps/sast_fixer_mcp/README.md +10 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-check/SKILL.md +179 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-check/config/gitlab_config.json +5 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-check/prompts/step1_preparation.md +167 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-check/prompts/step2_consistency_check.md +446 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-check/scripts/gitlab_clone.py +213 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-check/scripts/read_excel_requirements.py +144 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/GITLAB_USAGE.md +160 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/QUICK_REFERENCE.md +149 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/README.md +134 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/SKILL.md +151 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/assets/review_standards.md +144 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/prompts/file_review_prompt.md +160 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/prompts/output_requirements.md +35 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/prompts/step1_project_preprocessing.md +106 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/prompts/step2_file_review.md +83 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/prompts/step3_report_generation.md +319 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/scripts/gitlab_clone.py +213 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/manual-test-case-generator/SKILL.md +366 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/manual-test-case-generator/references/generation-rules.md +214 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/manual-test-case-generator/references/query-rules.md +60 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/manual-test-case-generator/references/review-rules.md +117 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/manual-test-case-generator/references/save-rules.md +367 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/quality_scan/SKILL.md +195 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/requirement-analysis/SKILL.md +346 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/requirement-review/SKILL.md +267 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/requirements-gather/SKILL.md +187 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/sast_scan/SKILL.md +312 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/story-decomposer/SKILL.md +77 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/story-decomposer/evals/evals.json +34 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/story-decomposer/references/epic-to-story-methodology.md +122 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/story-decomposer/references/epic-to-story-template.md +93 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/story-decomposer/references/epic-to-story-to-task-template.md +221 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/story-decomposer/references/story-to-task-methodology.md +139 -0
- package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/story-decomposer/references/story-to-task-template.md +89 -0
- package/bin/zhanlu-plugins/lingji-beta-assistant/.claude-plugin/plugin.json +19 -0
- package/bin/zhanlu-plugins/lingji-beta-assistant/README.md +21 -0
- package/bin/zhanlu-plugins/lingji-beta-assistant/skills/.gitkeep +1 -0
- package/bin/zhanlu-plugins/lingji-beta-assistant/skills/beta-requirement-analysis/SKILL.md +383 -0
- package/bin/zhanlu-plugins/lingji-beta-assistant/skills/beta-requirement-decomposer/SKILL.md +348 -0
- package/bin/zhanlu-plugins/lingji-beta-assistant/skills/beta-requirement-decomposer/references/epic-to-story-methodology.md +122 -0
- package/bin/zhanlu-plugins/lingji-beta-assistant/skills/beta-requirement-decomposer/references/epic-to-story-template.md +93 -0
- package/bin/zhanlu-plugins/lingji-beta-assistant/skills/beta-requirement-decomposer/references/epic-to-story-to-task-template.md +221 -0
- package/bin/zhanlu-plugins/lingji-beta-assistant/skills/beta-requirement-decomposer/references/story-to-task-methodology.md +139 -0
- package/bin/zhanlu-plugins/lingji-beta-assistant/skills/beta-requirement-decomposer/references/story-to-task-template.md +89 -0
- package/bin/zhanlu-plugins/lingji-beta-assistant/skills/beta-requirement-review/SKILL.md +350 -0
- package/bin/zhanlu-plugins/lingji-beta-assistant/skills/beta-requirements-gather/SKILL.md +244 -0
- package/bin/zl +4 -0
- package/package.json +18 -0
package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/prompts/step2_file_review.md
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# 第二步:文件级评审
|
|
2
|
+
|
|
3
|
+
🚀 **性能优化提示**:
|
|
4
|
+
- 若项目文件总数 > 500:仅对 P0 文件进行深度评审
|
|
5
|
+
- 若项目文件总数 200-500:深度评审 P0 + 中度评审 P1
|
|
6
|
+
- 若项目文件总数 < 200:全面评审 P0 + P1 + P2
|
|
7
|
+
|
|
8
|
+
对每个待评审文件(按 P0 → P1 顺序),执行以下 **5 个核心步骤**:
|
|
9
|
+
|
|
10
|
+
## 2.1 项目上下文检索(最小上下文闭包)
|
|
11
|
+
|
|
12
|
+
**核心职责**:根据目标文件路径,按需检索「最小上下文闭包」,避免上下文爆炸,为后续评审提供精准关联信息。
|
|
13
|
+
|
|
14
|
+
**执行步骤**:
|
|
15
|
+
1. 读取目标文件的完整内容
|
|
16
|
+
2. 基于全局依赖图,检索其直接关联文件(retrieval_depth = 1,仅直接依赖)
|
|
17
|
+
3. 对关联文件**仅提取**:函数/类签名、接口定义、结构体定义、枚举定义
|
|
18
|
+
4. **过滤掉**:具体实现代码、注释、空行、业务逻辑
|
|
19
|
+
|
|
20
|
+
**输出格式**(内部结构化数据):
|
|
21
|
+
```json
|
|
22
|
+
{
|
|
23
|
+
"target_file_content": "完整目标文件内容(已去注释/空行)",
|
|
24
|
+
"related_contexts": [
|
|
25
|
+
{
|
|
26
|
+
"file_path": "关联文件路径",
|
|
27
|
+
"signatures": "提取的签名内容(函数/类/接口/结构体)"
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
> 此步骤确保上下文量可控,同时保留足够的关联信息用于跨文件分析。
|
|
34
|
+
|
|
35
|
+
## 2.2 文件级深度评审
|
|
36
|
+
|
|
37
|
+
详细说明:`prompts/file_review_prompt.md`
|
|
38
|
+
|
|
39
|
+
## 2.3 跨文件影响分析
|
|
40
|
+
|
|
41
|
+
**输入**:
|
|
42
|
+
- 上下文检索结果(2.1 输出)
|
|
43
|
+
- 文件级评审结果(2.2 输出)
|
|
44
|
+
- 全局依赖图(1.3 输出)
|
|
45
|
+
|
|
46
|
+
**执行**:基于目标文件的问题清单和依赖图,分析对关联文件的潜在影响:
|
|
47
|
+
1. 识别哪些关联文件会受当前问题的波及
|
|
48
|
+
2. 评估是否存在以下风险:
|
|
49
|
+
- 接口不兼容(函数签名变更导致调用方失败)
|
|
50
|
+
- 调用链断裂(异常处理缺失导致中断)
|
|
51
|
+
- 数据不一致(事务边界错误、数据结构变更)
|
|
52
|
+
- 序列化/反序列化问题
|
|
53
|
+
|
|
54
|
+
**输出**:跨文件影响报告(JSON 格式,内部记录)
|
|
55
|
+
|
|
56
|
+
## 2.4 架构合规校验
|
|
57
|
+
|
|
58
|
+
**输入**:
|
|
59
|
+
- 目标文件路径和内容
|
|
60
|
+
- 项目架构基线(1.2 输出)
|
|
61
|
+
|
|
62
|
+
**核心检查点**:
|
|
63
|
+
- **分层规范**:是否存在跨层调用(如 Controller 直接调用 Model/DAO)
|
|
64
|
+
- **模块职责**:是否符合职责划分(如 Utils 层不应包含业务逻辑,Model 层不应包含 HTTP 处理)
|
|
65
|
+
- **命名约定**:包名、类名、函数名是否符合语言规范和项目约定
|
|
66
|
+
- **目录结构**:文件是否放置在正确的目录层级
|
|
67
|
+
|
|
68
|
+
**输出**:架构合规检查结果(合规/违规及具体问题描述)
|
|
69
|
+
|
|
70
|
+
## 2.5 结果汇总
|
|
71
|
+
|
|
72
|
+
将上述 4 个子步骤的结果汇总为当前文件的评审结论,包括:
|
|
73
|
+
- 问题清单(严重问题 + 一般问题)
|
|
74
|
+
- 跨文件影响评估
|
|
75
|
+
- 架构合规状态
|
|
76
|
+
|
|
77
|
+
所有文件的评审结果将在第三步中统一汇总生成最终报告。
|
|
78
|
+
|
|
79
|
+
注意:严格按照上述要求流程执行,禁止跳过或进行其他未设定的操作!执行完每个步骤必须按执行格式在终端输出显示,否则不清楚实际情况!
|
|
80
|
+
|
|
81
|
+
✅ 执行完成后请输出: "✅ 步骤2完成:文件级评审已完成,共评审 {file_count} 个文件"
|
|
82
|
+
|
|
83
|
+
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
# 第三步:报告生成
|
|
2
|
+
|
|
3
|
+
## 角色设定
|
|
4
|
+
|
|
5
|
+
你是一名资深代码评审专家,负责汇总所有文件的评审结果,生成专业的项目级代码评审报告。
|
|
6
|
+
|
|
7
|
+
## 任务目标
|
|
8
|
+
|
|
9
|
+
将多个单文件评审结果整合为一份结构化、专业的项目级代码评审报告,突出整体质量状况、核心风险和优先级建议。
|
|
10
|
+
|
|
11
|
+
## 报告保存规范
|
|
12
|
+
|
|
13
|
+
### 保存位置
|
|
14
|
+
- **保存路径**: 被评审项目的根目录
|
|
15
|
+
- **完整路径**: `{project_root_path}/{project_name}项目级代码评审分析报告.md`
|
|
16
|
+
|
|
17
|
+
### 文件命名规则
|
|
18
|
+
- **命名格式**: `{项目名称}项目级代码评审分析报告.md`
|
|
19
|
+
- **示例**:
|
|
20
|
+
- 项目名称为 "user-service" → `user-service项目级代码评审分析报告.md`
|
|
21
|
+
- 项目名称为 "order-management" → `order-management项目级代码评审分析报告.md`
|
|
22
|
+
|
|
23
|
+
### 保存要求
|
|
24
|
+
1. 报告生成完成后,必须将完整的 Markdown 内容保存到上述指定路径
|
|
25
|
+
2. 使用 UTF-8 编码保存文件
|
|
26
|
+
3. 如果同名文件已存在,询问用户是否覆盖或生成带时间戳的新文件名
|
|
27
|
+
4. 保存成功后,向用户报告文件的完整路径
|
|
28
|
+
|
|
29
|
+
### 注意事项
|
|
30
|
+
- 如果无法直接写入文件系统,应将完整报告内容输出给用户,并明确告知应该保存的文件名和位置
|
|
31
|
+
- 报告文件名中的"{项目名称}"应从项目架构基线中提取,或使用项目根目录的名称
|
|
32
|
+
|
|
33
|
+
## 输入数据
|
|
34
|
+
|
|
35
|
+
### 1. 项目架构基线
|
|
36
|
+
```json
|
|
37
|
+
{architecture_baseline}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### 2. 文件优先级分布
|
|
41
|
+
```json
|
|
42
|
+
{file_priority_distribution}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### 3. 单文件评审结果集合
|
|
46
|
+
```
|
|
47
|
+
{
|
|
48
|
+
"file_reviews": [
|
|
49
|
+
{
|
|
50
|
+
"file_path": "src/service/user.go",
|
|
51
|
+
"priority": "P0",
|
|
52
|
+
"critical_issues": [...],
|
|
53
|
+
"warning_issues": [...],
|
|
54
|
+
"architecture_compliance": {...}
|
|
55
|
+
},
|
|
56
|
+
...
|
|
57
|
+
]
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## 报告生成要求
|
|
62
|
+
|
|
63
|
+
### ⛔ 绝对禁止事项(违反将导致报告无效)
|
|
64
|
+
|
|
65
|
+
**在开始生成报告前,请牢记以下禁令:**
|
|
66
|
+
|
|
67
|
+
1. **禁止添加任何额外章节**:报告只能包含模板中定义的5个章节,不得添加任何其他章节标题
|
|
68
|
+
2. **禁止在报告末尾添加任何补充说明**:包括但不限于"评审范围"、"评审方法"、"局限性说明"、"后续建议"、"复评建议"、"免责声明"、"附录"等内容
|
|
69
|
+
3. **禁止改变问题清单的表格格式**:严重问题和一般问题必须使用Markdown表格展示,不得使用标题+描述的列表形式
|
|
70
|
+
4. **禁止省略"五、架构合规性评估"章节**:此章节为必需,即使没有发现架构问题也要如实填写
|
|
71
|
+
5. **禁止在项目概览中省略JSON格式的架构基线**:必须包含完整的JSON代码块
|
|
72
|
+
|
|
73
|
+
### 核心原则
|
|
74
|
+
1. **全局视角**: 从项目整体角度总结问题,而非简单罗列各文件问题
|
|
75
|
+
2. **风险聚焦**: 突出最严重的安全漏洞、架构缺陷和性能瓶颈
|
|
76
|
+
3. ** actionable**: 提供可执行的改进建议和清晰的优先级
|
|
77
|
+
4. **数据驱动**: 基于实际评审数据生成统计和结论
|
|
78
|
+
|
|
79
|
+
### 汇总策略
|
|
80
|
+
|
|
81
|
+
#### 问题去重与合并
|
|
82
|
+
- 相同类型的问题在不同文件中出现时,合并为一条并标注影响范围
|
|
83
|
+
- 示例: "SQL注入风险"在 5 个文件中出现 → 合并为一条,注明"影响 5 个文件"
|
|
84
|
+
|
|
85
|
+
#### 严重程度重新评估
|
|
86
|
+
- 单个文件中的一般问题,如果在多个核心文件中出现,可能升级为严重问题
|
|
87
|
+
- 考虑问题的系统性影响,而非孤立看待
|
|
88
|
+
|
|
89
|
+
#### 架构层面分析
|
|
90
|
+
- 从所有文件的架构合规性检查结果中,提炼出项目级的架构问题
|
|
91
|
+
- 识别跨模块的依赖问题和职责混乱
|
|
92
|
+
|
|
93
|
+
## 报告模板
|
|
94
|
+
|
|
95
|
+
请严格按照以下 Markdown 格式生成项目级评审报告:
|
|
96
|
+
|
|
97
|
+
```markdown
|
|
98
|
+
# 代码评审报告
|
|
99
|
+
|
|
100
|
+
> 生成时间:{timestamp}
|
|
101
|
+
> 评审范围:{project_path}
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## 一、项目概览
|
|
106
|
+
|
|
107
|
+
| 项目 | 信息 |
|
|
108
|
+
|------|------|
|
|
109
|
+
| 项目名称 | {name} |
|
|
110
|
+
| 主语言 | {language} |
|
|
111
|
+
| 技术栈 | {tech_stack} |
|
|
112
|
+
| 架构类型 | {architecture} |
|
|
113
|
+
| 评审文件数 | {total_files} (P0: {p0_count}, P1: {p1_count}, P2: {p2_count}) |
|
|
114
|
+
|
|
115
|
+
### 项目架构基线
|
|
116
|
+
|
|
117
|
+
```json
|
|
118
|
+
{
|
|
119
|
+
"project_name": "{name}",
|
|
120
|
+
"main_language": "{language}",
|
|
121
|
+
"tech_stack": ["{framework1}", "{framework2}"],
|
|
122
|
+
"architecture": "{MVC/微服务/前后端分离/单体}",
|
|
123
|
+
"module_layers": {
|
|
124
|
+
"controller": "{controller层路径}",
|
|
125
|
+
"service": "{service层路径}",
|
|
126
|
+
"model": "{model层路径}",
|
|
127
|
+
"utils": "{utils层路径}"
|
|
128
|
+
},
|
|
129
|
+
"entry_files": ["{入口文件1}", "{入口文件2}"]
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## 二、总体评价
|
|
137
|
+
|
|
138
|
+
### 代码质量总结
|
|
139
|
+
{从整体角度评估项目代码质量,2-3句话概括}
|
|
140
|
+
{示例: "项目整体代码质量中等,核心业务逻辑实现较为规范,但存在多处安全漏洞和架构设计问题需要优先修复。"}
|
|
141
|
+
|
|
142
|
+
### 主要优点
|
|
143
|
+
- {优点1:具体的优秀实践,如"Service层职责划分清晰"}
|
|
144
|
+
- {优点2:值得保持的代码风格或设计,如"单元测试覆盖率达到85%"}
|
|
145
|
+
- {优点3:架构或工程化方面的亮点}
|
|
146
|
+
|
|
147
|
+
### 核心风险
|
|
148
|
+
- {风险1:最严重的安全漏洞或架构缺陷}
|
|
149
|
+
- {风险2:可能导致服务故障的性能或并发问题}
|
|
150
|
+
- {风险3:影响可维护性的设计问题}
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## 三、问题清单
|
|
155
|
+
|
|
156
|
+
> **说明**: 以下问题已进行去重和合并,相同类型的问题在不同文件中出现时已汇总。
|
|
157
|
+
|
|
158
|
+
### 【严重问题】(必须修复)
|
|
159
|
+
|
|
160
|
+
| # | 评审点 | 影响文件数 | 典型位置 | 问题描述 | 修改建议 |
|
|
161
|
+
|---|--------|-----------|---------|----------|----------|
|
|
162
|
+
| 1 | {评审点名称} | {count}个文件 | {file_path}:L{line} | {详细描述问题现象和系统性影响} | {具体的修复方案和最佳实践} |
|
|
163
|
+
| 2 | ... | ... | ... | ... | ... |
|
|
164
|
+
|
|
165
|
+
> 共发现 **{critical_count}** 个严重问题,影响 {affected_files_count} 个文件
|
|
166
|
+
|
|
167
|
+
**严重问题分布**:
|
|
168
|
+
- 安全漏洞: {count} 个
|
|
169
|
+
- 架构缺陷: {count} 个
|
|
170
|
+
- 性能瓶颈: {count} 个
|
|
171
|
+
- 其他: {count} 个
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
### 【一般问题】(建议修复)
|
|
176
|
+
|
|
177
|
+
| # | 评审点 | 文件 | 行号 | 问题描述 | 修改建议 |
|
|
178
|
+
|---|--------|------|------|----------|----------|
|
|
179
|
+
| 1 | {评审点名称} | {file_path} | {line} | {详细描述} | {具体建议} |
|
|
180
|
+
| 2 | ... | ... | ... | ... | ... |
|
|
181
|
+
|
|
182
|
+
> 共发现 **{warning_count}** 个一般问题
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## 四、改进建议优先级
|
|
187
|
+
|
|
188
|
+
### 高优先级(严重问题,应立即修复)
|
|
189
|
+
|
|
190
|
+
> **修复时限**: 1-3天内
|
|
191
|
+
|
|
192
|
+
1. **{问题简述}** ({影响文件数}个文件)
|
|
193
|
+
- **风险**: {为什么需要优先修复,可能的影响}
|
|
194
|
+
- **修复方案**: {具体的修复步骤}
|
|
195
|
+
- **涉及文件**: {file1}, {file2}, ...
|
|
196
|
+
|
|
197
|
+
2. **{问题简述}** ({影响文件数}个文件)
|
|
198
|
+
- **风险**: {风险评估}
|
|
199
|
+
- **修复方案**: {具体的修复步骤}
|
|
200
|
+
- **涉及文件**: {...}
|
|
201
|
+
|
|
202
|
+
### 中优先级(潜在风险,建议近期修复)
|
|
203
|
+
|
|
204
|
+
> **修复时限**: 1-2周内
|
|
205
|
+
|
|
206
|
+
1. **{问题简述}**
|
|
207
|
+
- **收益**: {优化后的改进效果}
|
|
208
|
+
- **修复方案**: {改进方向}
|
|
209
|
+
|
|
210
|
+
2. **{问题简述}**
|
|
211
|
+
- **收益**: {改进价值}
|
|
212
|
+
- **修复方案**: {...}
|
|
213
|
+
|
|
214
|
+
### 低优先级(优化建议,可逐步改进)
|
|
215
|
+
|
|
216
|
+
> **修复时限**: 1-2个月内或迭代优化
|
|
217
|
+
|
|
218
|
+
1. **{问题简述}**
|
|
219
|
+
- **价值**: {长期优化方向}
|
|
220
|
+
- **建议**: {代码质量提升建议}
|
|
221
|
+
|
|
222
|
+
2. **{问题简述}**
|
|
223
|
+
- **价值**: {...}
|
|
224
|
+
- **建议**: {...}
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## 五、架构合规性评估
|
|
229
|
+
|
|
230
|
+
### 分层规范检查结果
|
|
231
|
+
|
|
232
|
+
| 调用链路 | 检查结果 | 违规文件数 | 典型问题 |
|
|
233
|
+
|---------|---------|-----------|----------|
|
|
234
|
+
| Controller → Service | {合规/存在违规} | {count}个 | {具体问题描述} |
|
|
235
|
+
| Service → Model | {合规/存在违规} | {count}个 | {...} |
|
|
236
|
+
| 跨层调用 | {无/存在} | {count}个 | {描述违规情况} |
|
|
237
|
+
|
|
238
|
+
**分层规范总结**: {从整体角度评价项目的分层架构执行情况}
|
|
239
|
+
|
|
240
|
+
### 模块职责划分评估
|
|
241
|
+
|
|
242
|
+
| 模块层级 | 职责清晰度 | 主要问题 | 建议 |
|
|
243
|
+
|---------|-----------|---------|------|
|
|
244
|
+
| Controller层 | {清晰/一般/混乱} | {问题描述} | {改进建议} |
|
|
245
|
+
| Service层 | {清晰/一般/混乱} | {...} | {...} |
|
|
246
|
+
| Model层 | {清晰/一般/混乱} | {...} | {...} |
|
|
247
|
+
| Utils层 | {清晰/一般/混乱} | {...} | {...} |
|
|
248
|
+
|
|
249
|
+
**模块职责总结**: {评价项目整体的模块职责划分是否合理}
|
|
250
|
+
|
|
251
|
+
### 依赖关系评估
|
|
252
|
+
|
|
253
|
+
- **循环依赖**: {存在/不存在}
|
|
254
|
+
- {如存在,列出循环依赖链路: A → B → C → A}
|
|
255
|
+
|
|
256
|
+
- **过度耦合模块**:
|
|
257
|
+
- {模块1}: 被 {count} 个模块依赖,耦合度过高
|
|
258
|
+
- {模块2}: {...}
|
|
259
|
+
|
|
260
|
+
- **依赖方向合理性**: {合理/存在问题}
|
|
261
|
+
- {如存在问题,描述具体的依赖方向错误}
|
|
262
|
+
|
|
263
|
+
**依赖关系总结**: {从整体角度评价项目的依赖管理是否健康}
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
⚠️ **强制约束(必须严格遵守)**:
|
|
268
|
+
|
|
269
|
+
### 章节限制
|
|
270
|
+
1. **报告必须且只能包含以下5个章节**,按顺序排列:
|
|
271
|
+
- 一、项目概览
|
|
272
|
+
- 二、总体评价
|
|
273
|
+
- 三、问题清单
|
|
274
|
+
- 四、改进建议优先级
|
|
275
|
+
- 五、架构合规性评估
|
|
276
|
+
|
|
277
|
+
2. **严禁添加以下任何章节**(常见错误示例):
|
|
278
|
+
- ❌ "代码与功能一致性评审"
|
|
279
|
+
- ❌ "技术架构先进性评审"
|
|
280
|
+
- ❌ "问题统计汇总"
|
|
281
|
+
- ❌ "附录"或"评审文件清单"
|
|
282
|
+
- ❌ "评审说明"、"评审范围"、"评审方法"
|
|
283
|
+
- ❌ "局限性说明"、"后续建议"、"复评建议"
|
|
284
|
+
- ❌ 任何未在模板中定义的章节标题
|
|
285
|
+
|
|
286
|
+
### 格式要求
|
|
287
|
+
3. **问题清单必须使用表格格式**:
|
|
288
|
+
- 严重问题:使用带列头的Markdown表格(# | 评审点 | 影响文件数 | 典型位置 | 问题描述 | 修改建议)
|
|
289
|
+
- 一般问题:使用带列头的Markdown表格(# | 评审点 | 文件 | 行号 | 问题描述 | 修改建议)
|
|
290
|
+
- **禁止**使用"### 问题1: xxx"这样的标题+描述形式
|
|
291
|
+
|
|
292
|
+
4. **必须在"五、架构合规性评估"后立即结束报告**:
|
|
293
|
+
- 报告最后一个字符应该是架构合规性评估章节的内容
|
|
294
|
+
- **禁止**在报告末尾添加任何形式的补充说明、免责声明、总结语或签名
|
|
295
|
+
- **禁止**添加类似"*本报告由自动化代码评审工具生成,仅供参考*"的文字
|
|
296
|
+
|
|
297
|
+
### 内容完整性
|
|
298
|
+
5. **项目概览必须包含JSON格式的架构基线**:
|
|
299
|
+
- 在表格之后必须有一个```json代码块,包含完整的项目架构信息
|
|
300
|
+
- 不得省略此JSON代码块
|
|
301
|
+
|
|
302
|
+
6. **总体评价必须分别列出"主要优点"和"核心风险"**:
|
|
303
|
+
- 使用无序列表格式(- 开头)
|
|
304
|
+
- 不得将优点和风险混合在一个段落中
|
|
305
|
+
|
|
306
|
+
### 执行验证
|
|
307
|
+
7. **生成报告后,请自我检查**:
|
|
308
|
+
- ✓ 是否只有5个章节?
|
|
309
|
+
- ✓ 是否有额外的章节标题?
|
|
310
|
+
- ✓ 问题清单是否使用了表格格式?
|
|
311
|
+
- ✓ 是否包含JSON格式的架构基线?
|
|
312
|
+
- ✓ 报告是否在"五、架构合规性评估"后立即结束?
|
|
313
|
+
- ✓ 末尾是否有任何补充说明或免责声明?
|
|
314
|
+
|
|
315
|
+
**如果以上任何一项答案为"否",请立即修正后再输出报告!**
|
|
316
|
+
|
|
317
|
+
注意:严格按照上述要求流程执行,禁止跳过或进行其他未设定的操作!禁止新增无关(未设定)的内容章节输出;执行完每个步骤必须按执行格式在终端输出显示,否则不清楚实际情况!
|
|
318
|
+
|
|
319
|
+
✅ 执行完成后请输出: "✅ 步骤3完成:代码评审报告已生成并保存至 {完整文件路径}"
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
GitLab 代码拉取脚本(跨平台版)
|
|
4
|
+
用法: python gitlab_clone.py --url <url> --path <path> [--branch <branch>]
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import argparse
|
|
8
|
+
import json
|
|
9
|
+
import os
|
|
10
|
+
import shutil
|
|
11
|
+
import subprocess
|
|
12
|
+
import sys
|
|
13
|
+
from pathlib import Path
|
|
14
|
+
|
|
15
|
+
if sys.platform == "win32":
|
|
16
|
+
import io
|
|
17
|
+
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8", errors="replace")
|
|
18
|
+
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding="utf-8", errors="replace")
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def load_config(script_dir: Path) -> dict:
|
|
22
|
+
config_file = script_dir.parent / "config" / "gitlab_config.json"
|
|
23
|
+
if not config_file.exists():
|
|
24
|
+
print(f"[ERROR] 配置文件不存在: {config_file}")
|
|
25
|
+
print("请先创建配置文件并设置 GitLab Token")
|
|
26
|
+
sys.exit(1)
|
|
27
|
+
|
|
28
|
+
try:
|
|
29
|
+
with open(config_file, "r", encoding="utf-8") as f:
|
|
30
|
+
return json.load(f)
|
|
31
|
+
except json.JSONDecodeError as e:
|
|
32
|
+
print(f"[ERROR] 配置文件格式错误: {e}")
|
|
33
|
+
sys.exit(1)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def validate_url(url: str) -> bool:
|
|
37
|
+
return url.startswith("http://") or url.startswith("https://")
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def get_git_command(config: dict) -> str:
|
|
41
|
+
return config.get("git_path", "git")
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def check_git_available(git_cmd: str) -> bool:
|
|
45
|
+
try:
|
|
46
|
+
result = subprocess.run(
|
|
47
|
+
[git_cmd, "--version"],
|
|
48
|
+
capture_output=True,
|
|
49
|
+
text=True
|
|
50
|
+
)
|
|
51
|
+
if result.returncode == 0:
|
|
52
|
+
print(f"[OK] Git 版本: {result.stdout.strip()}")
|
|
53
|
+
return True
|
|
54
|
+
except FileNotFoundError:
|
|
55
|
+
pass
|
|
56
|
+
|
|
57
|
+
print("[ERROR] 未找到 Git 命令,请确保已安装 Git 并添加到系统 PATH")
|
|
58
|
+
return False
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def create_directory(path: str) -> bool:
|
|
62
|
+
path_obj = Path(path)
|
|
63
|
+
|
|
64
|
+
if path_obj.exists():
|
|
65
|
+
if any(path_obj.iterdir()):
|
|
66
|
+
print(f"[WARNING] 目录 {path} 不为空")
|
|
67
|
+
print(" 继续操作可能会覆盖现有文件")
|
|
68
|
+
confirm = input(" 是否继续?(y/n): ").strip().lower()
|
|
69
|
+
if confirm != 'y':
|
|
70
|
+
print("操作已取消")
|
|
71
|
+
return False
|
|
72
|
+
|
|
73
|
+
path_obj.mkdir(parents=True, exist_ok=True)
|
|
74
|
+
print(f"[OK] 目录已存在: {path}")
|
|
75
|
+
else:
|
|
76
|
+
path_obj.mkdir(parents=True, exist_ok=True)
|
|
77
|
+
print(f"[OK] 创建目录: {path}")
|
|
78
|
+
|
|
79
|
+
return True
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def clone_repository(git_cmd: str, url: str, path: str, branch: str, token: str) -> bool:
|
|
83
|
+
if url.startswith("https://"):
|
|
84
|
+
authenticated_url = url.replace("https://", f"https://oauth2:{token}@")
|
|
85
|
+
else:
|
|
86
|
+
authenticated_url = url.replace("http://", f"http://oauth2:{token}@")
|
|
87
|
+
|
|
88
|
+
project_name = Path(url).stem.replace(".git", "")
|
|
89
|
+
|
|
90
|
+
print("")
|
|
91
|
+
print("开始拉取代码...")
|
|
92
|
+
print(f" 仓库: {project_name}")
|
|
93
|
+
print(f" URL: {url}")
|
|
94
|
+
print(f" 分支: {branch}")
|
|
95
|
+
print(f" 保存路径: {path}")
|
|
96
|
+
print("")
|
|
97
|
+
|
|
98
|
+
try:
|
|
99
|
+
print("正在克隆仓库...")
|
|
100
|
+
|
|
101
|
+
result = subprocess.run(
|
|
102
|
+
[git_cmd, "clone", "--depth", "1", "--branch", branch, authenticated_url, path],
|
|
103
|
+
capture_output=True,
|
|
104
|
+
text=True,
|
|
105
|
+
cwd=path
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
if result.returncode == 0:
|
|
109
|
+
print("")
|
|
110
|
+
print("=" * 40)
|
|
111
|
+
print(" [SUCCESS] 代码拉取成功!")
|
|
112
|
+
print("=" * 40)
|
|
113
|
+
print("")
|
|
114
|
+
print(f"本地路径: {path}")
|
|
115
|
+
print("")
|
|
116
|
+
print("现在可以对此项目进行代码评审")
|
|
117
|
+
print("")
|
|
118
|
+
return True
|
|
119
|
+
else:
|
|
120
|
+
print_error(result.stderr or result.stdout, path)
|
|
121
|
+
return False
|
|
122
|
+
|
|
123
|
+
except Exception as e:
|
|
124
|
+
print(f"[ERROR] {e}")
|
|
125
|
+
print_error(str(e), path)
|
|
126
|
+
return False
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def print_error(error_msg: str, path: str):
|
|
130
|
+
print("")
|
|
131
|
+
print("=" * 40)
|
|
132
|
+
print(" [FAILED] 代码拉取失败")
|
|
133
|
+
print("=" * 40)
|
|
134
|
+
print("")
|
|
135
|
+
print(f"错误信息: {error_msg}")
|
|
136
|
+
print("")
|
|
137
|
+
print("可能的原因:")
|
|
138
|
+
print(" 1. GitLab Token 无效或已过期")
|
|
139
|
+
print(" 2. 仓库地址不正确或无访问权限")
|
|
140
|
+
print(" 3. 网络连接问题")
|
|
141
|
+
print(" 4. 指定的分支不存在")
|
|
142
|
+
print("")
|
|
143
|
+
print("建议:")
|
|
144
|
+
print(" - 检查 config/gitlab_config.json 中的 Token 是否正确")
|
|
145
|
+
print(" - 确认仓库地址和分支名称是否正确")
|
|
146
|
+
print(" - 尝试在浏览器中访问该仓库确认是否有权限")
|
|
147
|
+
print("")
|
|
148
|
+
|
|
149
|
+
try:
|
|
150
|
+
path_obj = Path(path)
|
|
151
|
+
if path_obj.exists() and not any(path_obj.iterdir()):
|
|
152
|
+
path_obj.rmdir()
|
|
153
|
+
print(f"已清理空目录: {path}")
|
|
154
|
+
except Exception:
|
|
155
|
+
pass
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
def main():
|
|
159
|
+
parser = argparse.ArgumentParser(
|
|
160
|
+
description="GitLab 代码拉取工具(跨平台版)",
|
|
161
|
+
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
162
|
+
epilog="""
|
|
163
|
+
示例:
|
|
164
|
+
python gitlab_clone.py --url https://gitlab.com/group/project.git --path ./code
|
|
165
|
+
python gitlab_clone.py -u https://gitlab.com/group/project.git -p D:\\code\\review -b develop
|
|
166
|
+
"""
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
parser.add_argument("-u", "--url", required=True, help="GitLab 仓库 URL")
|
|
170
|
+
parser.add_argument("-p", "--path", required=True, help="本地保存路径")
|
|
171
|
+
parser.add_argument("-b", "--branch", default="", help="分支名称(默认使用配置文件中的 default_branch)")
|
|
172
|
+
parser.add_argument("-c", "--config", default="", help="配置文件路径(可选)")
|
|
173
|
+
|
|
174
|
+
args = parser.parse_args()
|
|
175
|
+
|
|
176
|
+
print("=" * 40)
|
|
177
|
+
print(" GitLab 代码拉取工具")
|
|
178
|
+
print("=" * 40)
|
|
179
|
+
print("")
|
|
180
|
+
|
|
181
|
+
if not validate_url(args.url):
|
|
182
|
+
print("[ERROR] GitLab URL 格式不正确,必须以 http:// 或 https:// 开头")
|
|
183
|
+
sys.exit(1)
|
|
184
|
+
|
|
185
|
+
script_dir = Path(__file__).parent.resolve()
|
|
186
|
+
config = load_config(script_dir)
|
|
187
|
+
|
|
188
|
+
token = config.get("gitlab_token")
|
|
189
|
+
if not token or token == "YOUR_GITLAB_TOKEN_HERE":
|
|
190
|
+
print("[ERROR] GitLab Token 未配置")
|
|
191
|
+
print("请在 config/gitlab_config.json 中设置您的 GitLab Token")
|
|
192
|
+
sys.exit(1)
|
|
193
|
+
|
|
194
|
+
branch = args.branch
|
|
195
|
+
if not branch:
|
|
196
|
+
branch = config.get("default_branch", "main")
|
|
197
|
+
|
|
198
|
+
git_cmd = get_git_command(config)
|
|
199
|
+
|
|
200
|
+
if not check_git_available(git_cmd):
|
|
201
|
+
sys.exit(1)
|
|
202
|
+
|
|
203
|
+
if not create_directory(args.path):
|
|
204
|
+
sys.exit(0)
|
|
205
|
+
|
|
206
|
+
if clone_repository(git_cmd, args.url, args.path, branch, token):
|
|
207
|
+
sys.exit(0)
|
|
208
|
+
else:
|
|
209
|
+
sys.exit(1)
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
if __name__ == "__main__":
|
|
213
|
+
main()
|