jarvis-ai-assistant 0.1.138__py3-none-any.whl → 0.1.141__py3-none-any.whl
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.
Potentially problematic release.
This version of jarvis-ai-assistant might be problematic. Click here for more details.
- jarvis/__init__.py +1 -1
- jarvis/jarvis_agent/__init__.py +62 -14
- jarvis/jarvis_agent/builtin_input_handler.py +4 -14
- jarvis/jarvis_agent/main.py +1 -1
- jarvis/jarvis_agent/patch.py +37 -40
- jarvis/jarvis_agent/shell_input_handler.py +2 -3
- jarvis/jarvis_code_agent/code_agent.py +23 -30
- jarvis/jarvis_code_analysis/checklists/__init__.py +3 -0
- jarvis/jarvis_code_analysis/checklists/c_cpp.py +50 -0
- jarvis/jarvis_code_analysis/checklists/csharp.py +75 -0
- jarvis/jarvis_code_analysis/checklists/data_format.py +82 -0
- jarvis/jarvis_code_analysis/checklists/devops.py +107 -0
- jarvis/jarvis_code_analysis/checklists/docs.py +87 -0
- jarvis/jarvis_code_analysis/checklists/go.py +52 -0
- jarvis/jarvis_code_analysis/checklists/infrastructure.py +98 -0
- jarvis/jarvis_code_analysis/checklists/java.py +66 -0
- jarvis/jarvis_code_analysis/checklists/javascript.py +73 -0
- jarvis/jarvis_code_analysis/checklists/kotlin.py +107 -0
- jarvis/jarvis_code_analysis/checklists/loader.py +76 -0
- jarvis/jarvis_code_analysis/checklists/php.py +77 -0
- jarvis/jarvis_code_analysis/checklists/python.py +56 -0
- jarvis/jarvis_code_analysis/checklists/ruby.py +107 -0
- jarvis/jarvis_code_analysis/checklists/rust.py +58 -0
- jarvis/jarvis_code_analysis/checklists/shell.py +75 -0
- jarvis/jarvis_code_analysis/checklists/sql.py +72 -0
- jarvis/jarvis_code_analysis/checklists/swift.py +77 -0
- jarvis/jarvis_code_analysis/checklists/web.py +97 -0
- jarvis/jarvis_code_analysis/code_review.py +660 -0
- jarvis/jarvis_dev/main.py +61 -88
- jarvis/jarvis_git_squash/main.py +3 -3
- jarvis/jarvis_git_utils/git_commiter.py +242 -0
- jarvis/jarvis_init/main.py +62 -0
- jarvis/jarvis_platform/base.py +4 -0
- jarvis/jarvis_platform/kimi.py +173 -5
- jarvis/jarvis_platform/openai.py +3 -0
- jarvis/jarvis_platform/registry.py +1 -0
- jarvis/jarvis_platform/yuanbao.py +275 -5
- jarvis/jarvis_tools/ask_codebase.py +6 -9
- jarvis/jarvis_tools/ask_user.py +17 -5
- jarvis/jarvis_tools/base.py +3 -1
- jarvis/jarvis_tools/chdir.py +1 -0
- jarvis/jarvis_tools/create_code_agent.py +4 -3
- jarvis/jarvis_tools/create_sub_agent.py +1 -0
- jarvis/jarvis_tools/execute_script.py +170 -0
- jarvis/jarvis_tools/file_analyzer.py +90 -239
- jarvis/jarvis_tools/file_operation.py +99 -31
- jarvis/jarvis_tools/{find_methodolopy.py → find_methodology.py} +2 -1
- jarvis/jarvis_tools/lsp_get_diagnostics.py +2 -0
- jarvis/jarvis_tools/methodology.py +11 -11
- jarvis/jarvis_tools/read_code.py +2 -0
- jarvis/jarvis_tools/read_webpage.py +33 -196
- jarvis/jarvis_tools/registry.py +68 -131
- jarvis/jarvis_tools/search_web.py +14 -6
- jarvis/jarvis_tools/virtual_tty.py +399 -0
- jarvis/jarvis_utils/config.py +29 -3
- jarvis/jarvis_utils/embedding.py +0 -317
- jarvis/jarvis_utils/file_processors.py +343 -0
- jarvis/jarvis_utils/input.py +0 -1
- jarvis/jarvis_utils/methodology.py +94 -435
- jarvis/jarvis_utils/utils.py +207 -9
- {jarvis_ai_assistant-0.1.138.dist-info → jarvis_ai_assistant-0.1.141.dist-info}/METADATA +4 -4
- jarvis_ai_assistant-0.1.141.dist-info/RECORD +94 -0
- {jarvis_ai_assistant-0.1.138.dist-info → jarvis_ai_assistant-0.1.141.dist-info}/entry_points.txt +4 -4
- jarvis/jarvis_code_agent/file_select.py +0 -202
- jarvis/jarvis_platform/ai8.py +0 -268
- jarvis/jarvis_platform/ollama.py +0 -137
- jarvis/jarvis_platform/oyi.py +0 -307
- jarvis/jarvis_rag/file_processors.py +0 -138
- jarvis/jarvis_rag/main.py +0 -1734
- jarvis/jarvis_tools/code_review.py +0 -333
- jarvis/jarvis_tools/execute_python_script.py +0 -58
- jarvis/jarvis_tools/execute_shell.py +0 -97
- jarvis/jarvis_tools/execute_shell_script.py +0 -58
- jarvis/jarvis_tools/find_caller.py +0 -278
- jarvis/jarvis_tools/find_symbol.py +0 -295
- jarvis/jarvis_tools/function_analyzer.py +0 -331
- jarvis/jarvis_tools/git_commiter.py +0 -167
- jarvis/jarvis_tools/project_analyzer.py +0 -304
- jarvis/jarvis_tools/rag.py +0 -143
- jarvis/jarvis_tools/tool_generator.py +0 -221
- jarvis_ai_assistant-0.1.138.dist-info/RECORD +0 -85
- /jarvis/{jarvis_rag → jarvis_init}/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.138.dist-info → jarvis_ai_assistant-0.1.141.dist-info}/LICENSE +0 -0
- {jarvis_ai_assistant-0.1.138.dist-info → jarvis_ai_assistant-0.1.141.dist-info}/WHEEL +0 -0
- {jarvis_ai_assistant-0.1.138.dist-info → jarvis_ai_assistant-0.1.141.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Utility module for loading language-specific code review checklists.
|
|
3
|
+
"""
|
|
4
|
+
from typing import Dict, Optional
|
|
5
|
+
|
|
6
|
+
# Import checklist modules
|
|
7
|
+
from jarvis.jarvis_code_analysis.checklists import (
|
|
8
|
+
c_cpp,
|
|
9
|
+
go,
|
|
10
|
+
python,
|
|
11
|
+
rust,
|
|
12
|
+
java,
|
|
13
|
+
javascript,
|
|
14
|
+
csharp,
|
|
15
|
+
swift,
|
|
16
|
+
php,
|
|
17
|
+
shell,
|
|
18
|
+
sql,
|
|
19
|
+
ruby,
|
|
20
|
+
kotlin,
|
|
21
|
+
web,
|
|
22
|
+
data_format,
|
|
23
|
+
infrastructure,
|
|
24
|
+
docs,
|
|
25
|
+
devops
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
# Map of language identifiers to their checklist content
|
|
29
|
+
CHECKLIST_MAP = {
|
|
30
|
+
'c_cpp': c_cpp.CHECKLIST,
|
|
31
|
+
'go': go.CHECKLIST,
|
|
32
|
+
'python': python.CHECKLIST,
|
|
33
|
+
'rust': rust.CHECKLIST,
|
|
34
|
+
'java': java.CHECKLIST,
|
|
35
|
+
'javascript': javascript.CHECKLIST,
|
|
36
|
+
'typescript': javascript.CHECKLIST, # TypeScript uses the same checklist as JavaScript
|
|
37
|
+
'csharp': csharp.CHECKLIST,
|
|
38
|
+
'swift': swift.CHECKLIST,
|
|
39
|
+
'php': php.CHECKLIST,
|
|
40
|
+
'shell': shell.CHECKLIST,
|
|
41
|
+
'sql': sql.CHECKLIST,
|
|
42
|
+
'ruby': ruby.CHECKLIST,
|
|
43
|
+
'kotlin': kotlin.CHECKLIST,
|
|
44
|
+
'html': web.CHECKLIST,
|
|
45
|
+
'css': web.CHECKLIST,
|
|
46
|
+
'xml': data_format.CHECKLIST,
|
|
47
|
+
'json': data_format.CHECKLIST,
|
|
48
|
+
'yaml': data_format.CHECKLIST,
|
|
49
|
+
'docker': infrastructure.CHECKLIST,
|
|
50
|
+
'terraform': infrastructure.CHECKLIST,
|
|
51
|
+
'markdown': docs.CHECKLIST,
|
|
52
|
+
'docs': docs.CHECKLIST,
|
|
53
|
+
'makefile': devops.CHECKLIST,
|
|
54
|
+
'devops': devops.CHECKLIST,
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
def get_language_checklist(language: str) -> Optional[str]:
|
|
58
|
+
"""
|
|
59
|
+
Get the checklist for a specific language.
|
|
60
|
+
|
|
61
|
+
Args:
|
|
62
|
+
language: The language identifier ('c_cpp', 'go', 'python', 'rust', etc.)
|
|
63
|
+
|
|
64
|
+
Returns:
|
|
65
|
+
The checklist content as a string, or None if not found
|
|
66
|
+
"""
|
|
67
|
+
return CHECKLIST_MAP.get(language)
|
|
68
|
+
|
|
69
|
+
def get_all_checklists() -> Dict[str, str]:
|
|
70
|
+
"""
|
|
71
|
+
Get all available language checklists.
|
|
72
|
+
|
|
73
|
+
Returns:
|
|
74
|
+
Dictionary mapping language identifiers to their checklist content
|
|
75
|
+
"""
|
|
76
|
+
return CHECKLIST_MAP
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"""
|
|
2
|
+
PHP language-specific code review checklist.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
CHECKLIST = """
|
|
6
|
+
## PHP 代码审查检查清单
|
|
7
|
+
|
|
8
|
+
### 代码风格和规范
|
|
9
|
+
- [ ] 是否遵循 PSR 标准 (PSR-1, PSR-12)
|
|
10
|
+
- [ ] 命名约定是否一致 (类、方法、变量)
|
|
11
|
+
- [ ] 是否使用 PHP_CodeSniffer 等工具检查代码风格
|
|
12
|
+
- [ ] 缩进和格式是否一致
|
|
13
|
+
- [ ] 是否使用了最新的 PHP 语法特性
|
|
14
|
+
|
|
15
|
+
### 安全性
|
|
16
|
+
- [ ] 是否防范 SQL 注入 (使用 PDO 或预处理语句)
|
|
17
|
+
- [ ] 是否防范 XSS 攻击 (输出转义)
|
|
18
|
+
- [ ] 是否防范 CSRF 攻击
|
|
19
|
+
- [ ] 文件上传是否安全处理
|
|
20
|
+
- [ ] 是否使用安全的密码散列 (password_hash)
|
|
21
|
+
- [ ] 是否避免使用有安全隐患的函数 (eval, create_function)
|
|
22
|
+
- [ ] 敏感数据是否加密存储
|
|
23
|
+
- [ ] 会话和 Cookie 是否安全配置
|
|
24
|
+
- [ ] 是否正确进行 HTTPS 配置
|
|
25
|
+
|
|
26
|
+
### 性能优化
|
|
27
|
+
- [ ] 数据库查询是否优化
|
|
28
|
+
- [ ] 是否使用缓存机制
|
|
29
|
+
- [ ] 循环和数据处理是否高效
|
|
30
|
+
- [ ] 是否避免了内存密集型操作
|
|
31
|
+
- [ ] 是否考虑了代码的可扩展性
|
|
32
|
+
- [ ] 是否使用适当的数据结构
|
|
33
|
+
- [ ] 是否优化了 I/O 操作
|
|
34
|
+
|
|
35
|
+
### 错误处理
|
|
36
|
+
- [ ] 是否使用异常处理机制
|
|
37
|
+
- [ ] 是否适当捕获和记录错误
|
|
38
|
+
- [ ] 是否提供友好的错误信息
|
|
39
|
+
- [ ] 是否有合适的异常层次结构
|
|
40
|
+
- [ ] 生产环境是否适当配置错误显示
|
|
41
|
+
|
|
42
|
+
### 面向对象设计
|
|
43
|
+
- [ ] 是否遵循 SOLID 原则
|
|
44
|
+
- [ ] 类的职责是否单一明确
|
|
45
|
+
- [ ] 继承层次是否合理
|
|
46
|
+
- [ ] 是否使用接口定义契约
|
|
47
|
+
- [ ] 类之间的耦合是否最小化
|
|
48
|
+
- [ ] 是否使用设计模式解决复杂问题
|
|
49
|
+
|
|
50
|
+
### 依赖管理
|
|
51
|
+
- [ ] 是否使用 Composer 管理依赖
|
|
52
|
+
- [ ] 依赖版本是否指定
|
|
53
|
+
- [ ] 是否定期更新依赖以修复安全漏洞
|
|
54
|
+
- [ ] 是否最小化了第三方依赖
|
|
55
|
+
- [ ] composer.json 和 composer.lock 是否同步
|
|
56
|
+
|
|
57
|
+
### 测试
|
|
58
|
+
- [ ] 是否有单元测试 (PHPUnit)
|
|
59
|
+
- [ ] 测试是否覆盖核心功能和边界条件
|
|
60
|
+
- [ ] 是否使用模拟对象测试依赖
|
|
61
|
+
- [ ] 测试是否可重复执行且彼此独立
|
|
62
|
+
- [ ] 是否有集成测试
|
|
63
|
+
|
|
64
|
+
### 文档
|
|
65
|
+
- [ ] 公共 API 是否有 PHPDoc 注释
|
|
66
|
+
- [ ] 复杂逻辑是否有注释说明
|
|
67
|
+
- [ ] 是否记录了项目设置和依赖要求
|
|
68
|
+
- [ ] 是否有使用示例
|
|
69
|
+
- [ ] 注释是否与代码同步
|
|
70
|
+
|
|
71
|
+
### 框架特定检查 (如使用框架)
|
|
72
|
+
- [ ] 是否遵循框架的最佳实践
|
|
73
|
+
- [ ] 是否正确使用 ORM 和数据库迁移
|
|
74
|
+
- [ ] 是否适当使用中间件
|
|
75
|
+
- [ ] 路由定义是否合理
|
|
76
|
+
- [ ] MVC 结构是否清晰
|
|
77
|
+
"""
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Python language-specific code review checklist.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
CHECKLIST = """
|
|
6
|
+
## Python 代码审查检查清单
|
|
7
|
+
|
|
8
|
+
### 代码风格
|
|
9
|
+
- [ ] 是否遵循 PEP 8 规范
|
|
10
|
+
- [ ] 命名是否符合 Python 约定
|
|
11
|
+
- [ ] 是否有适当的空格和缩进
|
|
12
|
+
- [ ] 是否避免了过长的行
|
|
13
|
+
|
|
14
|
+
### 类型安全
|
|
15
|
+
- [ ] 是否使用类型注解 (Python 3.6+)
|
|
16
|
+
- [ ] 是否处理了可能的类型不匹配
|
|
17
|
+
- [ ] 复杂参数是否有类型说明
|
|
18
|
+
|
|
19
|
+
### 异常处理
|
|
20
|
+
- [ ] 是否捕获和处理了异常
|
|
21
|
+
- [ ] 是否使用了合适的异常类型
|
|
22
|
+
- [ ] 是否避免了过于宽泛的 except 子句
|
|
23
|
+
- [ ] 自定义异常是否合理
|
|
24
|
+
|
|
25
|
+
### 性能
|
|
26
|
+
- [ ] 是否避免了低效的循环和操作
|
|
27
|
+
- [ ] 列表推导式和生成器的使用是否合理
|
|
28
|
+
- [ ] 是否优化了 I/O 操作
|
|
29
|
+
- [ ] 是否合理使用了缓存
|
|
30
|
+
|
|
31
|
+
### 安全
|
|
32
|
+
- [ ] 是否存在 SQL 注入风险
|
|
33
|
+
- [ ] 是否存在命令注入风险
|
|
34
|
+
- [ ] 密码和密钥是否安全存储
|
|
35
|
+
- [ ] 是否正确验证用户输入
|
|
36
|
+
|
|
37
|
+
### 依赖管理
|
|
38
|
+
- [ ] 是否明确指定了依赖版本
|
|
39
|
+
- [ ] 是否考虑了版本兼容性
|
|
40
|
+
- [ ] 是否最小化了依赖的数量
|
|
41
|
+
|
|
42
|
+
### 测试
|
|
43
|
+
- [ ] 是否有单元测试
|
|
44
|
+
- [ ] 测试覆盖率是否合理
|
|
45
|
+
- [ ] 是否处理了边界情况
|
|
46
|
+
|
|
47
|
+
### 文档
|
|
48
|
+
- [ ] 函数和类是否有文档字符串
|
|
49
|
+
- [ ] 复杂逻辑是否有注释说明
|
|
50
|
+
- [ ] README 是否完整
|
|
51
|
+
|
|
52
|
+
### 设计
|
|
53
|
+
- [ ] 是否遵循 SOLID 原则
|
|
54
|
+
- [ ] 是否避免了过度工程
|
|
55
|
+
- [ ] 是否实现了适当的抽象
|
|
56
|
+
"""
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Ruby-specific code review checklist.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
CHECKLIST = """
|
|
6
|
+
## Ruby 代码审查检查清单
|
|
7
|
+
|
|
8
|
+
### 代码风格和约定
|
|
9
|
+
- [ ] 代码是否符合 Ruby 代码风格指南 (如 [Ruby Style Guide](https://github.com/rubocop/ruby-style-guide))
|
|
10
|
+
- [ ] 是否使用 RuboCop 进行代码风格检查
|
|
11
|
+
- [ ] 两个空格缩进是否一致
|
|
12
|
+
- [ ] 是否有不必要的空白或者空行
|
|
13
|
+
- [ ] 是否使用了恰当的命名约定 (snake_case 用于方法/变量, CamelCase 用于类/模块)
|
|
14
|
+
- [ ] 是否有不必要的注释或者过时的注释
|
|
15
|
+
- [ ] 代码是否容易理解且符合惯用的 Ruby 风格
|
|
16
|
+
- [ ] 魔法数字是否已提取为有意义的常量
|
|
17
|
+
|
|
18
|
+
### 类和模块设计
|
|
19
|
+
- [ ] 类和模块是否单一职责
|
|
20
|
+
- [ ] 是否遵循 DRY (Don't Repeat Yourself) 原则
|
|
21
|
+
- [ ] 类的继承结构是否合理
|
|
22
|
+
- [ ] 是否合理使用模块作为 mixin
|
|
23
|
+
- [ ] 是否恰当地使用了模块命名空间
|
|
24
|
+
- [ ] 公共 API 接口是否明确且易于理解
|
|
25
|
+
- [ ] 是否控制了类和模块的大小 (避免过大的类/模块)
|
|
26
|
+
- [ ] 类变量 (@@var) 是否使用恰当 (通常应避免使用)
|
|
27
|
+
|
|
28
|
+
### 方法和代码块
|
|
29
|
+
- [ ] 方法是否遵循单一职责原则
|
|
30
|
+
- [ ] 方法长度是否合理控制
|
|
31
|
+
- [ ] 方法名是否清晰表达了其功能
|
|
32
|
+
- [ ] 参数数量是否合理 (避免过多参数)
|
|
33
|
+
- [ ] 是否恰当使用了可选参数和关键字参数
|
|
34
|
+
- [ ] 是否恰当使用了代码块和 yield
|
|
35
|
+
- [ ] 闭包使用是否恰当且清晰
|
|
36
|
+
- [ ] 是否恰当使用了方法链 (避免过长的方法链)
|
|
37
|
+
|
|
38
|
+
### 异常处理
|
|
39
|
+
- [ ] 是否捕获具体的异常类型而非所有异常
|
|
40
|
+
- [ ] 是否提供有意义的错误信息
|
|
41
|
+
- [ ] 资源是否在 ensure 块中正确释放
|
|
42
|
+
- [ ] 是否避免了使用异常控制正常流程
|
|
43
|
+
- [ ] 是否在合适的级别处理异常
|
|
44
|
+
- [ ] 是否有自定义异常类用于特定错误情况
|
|
45
|
+
- [ ] 是否使用了 begin/rescue/ensure/end 代码块的简洁形式
|
|
46
|
+
- [ ] 是否处理了第三方库可能抛出的异常
|
|
47
|
+
|
|
48
|
+
### 性能考量
|
|
49
|
+
- [ ] 大型集合操作是否高效 (如使用 map, select 而非循环)
|
|
50
|
+
- [ ] 是否避免了 N+1 查询问题
|
|
51
|
+
- [ ] 是否恰当使用了惰性计算
|
|
52
|
+
- [ ] 字符串操作是否高效
|
|
53
|
+
- [ ] 是否通过缓存避免重复计算
|
|
54
|
+
- [ ] IO 和网络操作是否异步或批量处理
|
|
55
|
+
- [ ] 是否避免了内存泄漏
|
|
56
|
+
- [ ] 是否避免了不必要的对象分配
|
|
57
|
+
|
|
58
|
+
### Rails 特定检查 (如适用)
|
|
59
|
+
- [ ] 模型是否遵循 ActiveRecord 最佳实践
|
|
60
|
+
- [ ] 控制器是否遵循"瘦控制器,胖模型"原则
|
|
61
|
+
- [ ] 是否恰当使用了 Rails 的回调机制
|
|
62
|
+
- [ ] 视图是否避免了业务逻辑
|
|
63
|
+
- [ ] 路由设计是否符合 RESTful 规范
|
|
64
|
+
- [ ] 是否使用了适当的查询优化技术
|
|
65
|
+
- [ ] ActiveRecord 关联是否合理配置
|
|
66
|
+
- [ ] 是否使用了适当的数据库索引
|
|
67
|
+
|
|
68
|
+
### 安全性
|
|
69
|
+
- [ ] 是否防止了 SQL 注入攻击
|
|
70
|
+
- [ ] 是否防止了跨站点脚本 (XSS) 攻击
|
|
71
|
+
- [ ] 是否防止了跨站请求伪造 (CSRF)
|
|
72
|
+
- [ ] 是否安全处理了用户输入
|
|
73
|
+
- [ ] 是否使用了安全的密码存储方式
|
|
74
|
+
- [ ] 是否正确处理了敏感数据
|
|
75
|
+
- [ ] 是否使用了 HTTPS
|
|
76
|
+
- [ ] 是否防止了不安全的对象反序列化
|
|
77
|
+
|
|
78
|
+
### 测试
|
|
79
|
+
- [ ] 是否有全面的单元测试
|
|
80
|
+
- [ ] 是否有整合测试
|
|
81
|
+
- [ ] 测试是否覆盖了边缘情况
|
|
82
|
+
- [ ] 测试命名是否清晰表达测试目的
|
|
83
|
+
- [ ] 是否使用了恰当的测试辅助工具 (如 RSpec, Minitest)
|
|
84
|
+
- [ ] 测试是否避免了依赖外部服务
|
|
85
|
+
- [ ] 是否有适当的 fixture 或 factory
|
|
86
|
+
- [ ] 测试是否快速且可靠 (没有随机失败)
|
|
87
|
+
|
|
88
|
+
### 依赖管理
|
|
89
|
+
- [ ] Gemfile 是否明确指定了版本约束
|
|
90
|
+
- [ ] 是否避免使用过时的 gem
|
|
91
|
+
- [ ] 是否考虑了 gem 的安全更新
|
|
92
|
+
- [ ] 是否最小化了外部依赖
|
|
93
|
+
- [ ] Gemfile.lock 是否包含在版本控制中
|
|
94
|
+
- [ ] 是否注意了依赖冲突问题
|
|
95
|
+
- [ ] 是否适当使用了开发环境和生产环境分组
|
|
96
|
+
- [ ] 是否考虑了使用 Bundler 的 require: false 选项优化加载
|
|
97
|
+
|
|
98
|
+
### 文档
|
|
99
|
+
- [ ] 是否使用 RDoc/YARD 对公共 API 进行文档化
|
|
100
|
+
- [ ] 是否有清晰的 README 文件
|
|
101
|
+
- [ ] 复杂逻辑是否有代码注释
|
|
102
|
+
- [ ] 是否有必要的开发者文档
|
|
103
|
+
- [ ] 文档是否与代码同步更新
|
|
104
|
+
- [ ] 是否有示例或者教程
|
|
105
|
+
- [ ] 是否有 CHANGELOG 记录变更
|
|
106
|
+
- [ ] API 参数和返回值是否有文档描述
|
|
107
|
+
"""
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Rust language-specific code review checklist.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
CHECKLIST = """
|
|
6
|
+
## Rust 代码审查检查清单
|
|
7
|
+
|
|
8
|
+
### 内存安全
|
|
9
|
+
- [ ] 是否避免了不安全代码块 (unsafe)
|
|
10
|
+
- [ ] 如有 unsafe 代码,是否有充分的注释和证明
|
|
11
|
+
- [ ] 生命周期参数是否正确标注
|
|
12
|
+
- [ ] 引用是否遵循借用规则
|
|
13
|
+
|
|
14
|
+
### 错误处理
|
|
15
|
+
- [ ] 是否正确使用 Result 和 Option 类型
|
|
16
|
+
- [ ] 错误传播操作符 (?) 是否合理使用
|
|
17
|
+
- [ ] 错误类型是否合适
|
|
18
|
+
- [ ] 是否有自定义错误类型
|
|
19
|
+
|
|
20
|
+
### 并发安全
|
|
21
|
+
- [ ] 可变状态是否受到 Mutex/RwLock 保护
|
|
22
|
+
- [ ] 是否避免了死锁风险
|
|
23
|
+
- [ ] Send/Sync trait 实现是否安全
|
|
24
|
+
- [ ] 是否正确使用原子类型
|
|
25
|
+
|
|
26
|
+
### 性能
|
|
27
|
+
- [ ] 是否避免了不必要的克隆
|
|
28
|
+
- [ ] 是否合理使用了引用而非所有权转移
|
|
29
|
+
- [ ] 数据结构选择是否高效
|
|
30
|
+
- [ ] 是否合理使用了迭代器
|
|
31
|
+
|
|
32
|
+
### 代码风格
|
|
33
|
+
- [ ] 是否遵循 Rust 官方风格指南
|
|
34
|
+
- [ ] 命名是否符合 Rust 约定
|
|
35
|
+
- [ ] 代码是否通过 clippy 静态分析
|
|
36
|
+
- [ ] 是否避免了过度使用宏
|
|
37
|
+
|
|
38
|
+
### API 设计
|
|
39
|
+
- [ ] 公共 API 是否有文档注释
|
|
40
|
+
- [ ] 类型和函数是否遵循最小权限原则
|
|
41
|
+
- [ ] trait 边界是否合理
|
|
42
|
+
- [ ] 泛型参数使用是否合适
|
|
43
|
+
|
|
44
|
+
### 依赖管理
|
|
45
|
+
- [ ] 是否有明确的版本约束
|
|
46
|
+
- [ ] 是否最小化了依赖数量
|
|
47
|
+
- [ ] 是否避免了有安全问题的依赖
|
|
48
|
+
|
|
49
|
+
### 测试
|
|
50
|
+
- [ ] 是否有单元测试
|
|
51
|
+
- [ ] 是否测试了错误路径
|
|
52
|
+
- [ ] 是否使用了属性测试 (property testing)
|
|
53
|
+
- [ ] 文档示例是否可执行
|
|
54
|
+
|
|
55
|
+
### 资源管理
|
|
56
|
+
- [ ] 资源是否通过 Drop trait 正确释放
|
|
57
|
+
- [ ] 是否避免了资源泄漏
|
|
58
|
+
"""
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Shell/Bash language-specific code review checklist.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
CHECKLIST = """
|
|
6
|
+
## Shell/Bash 代码审查检查清单
|
|
7
|
+
|
|
8
|
+
### 脚本结构和可读性
|
|
9
|
+
- [ ] 是否有明确的 shebang 行 (#!/bin/bash 或 #!/usr/bin/env bash)
|
|
10
|
+
- [ ] 是否有脚本描述和使用说明
|
|
11
|
+
- [ ] 代码是否有一致的缩进和格式
|
|
12
|
+
- [ ] 函数和代码块是否有注释说明
|
|
13
|
+
- [ ] 命名是否清晰表达意图
|
|
14
|
+
- [ ] 是否使用 shellcheck 等工具检查代码
|
|
15
|
+
|
|
16
|
+
### 错误处理和调试
|
|
17
|
+
- [ ] 是否设置了 `set -e` 或 `set -o errexit`
|
|
18
|
+
- [ ] 是否适当处理管道失败 (`set -o pipefail`)
|
|
19
|
+
- [ ] 是否处理未声明变量 (`set -u` 或 `set -o nounset`)
|
|
20
|
+
- [ ] 是否有适当的错误消息和日志
|
|
21
|
+
- [ ] 退出代码 (exit codes) 是否一致且有意义
|
|
22
|
+
- [ ] 是否考虑了错误路径和异常情况
|
|
23
|
+
|
|
24
|
+
### 命令和管道
|
|
25
|
+
- [ ] 复杂管道是否可读和可维护
|
|
26
|
+
- [ ] 是否避免了不必要的命令和处理步骤
|
|
27
|
+
- [ ] 是否考虑了命令失败的情况
|
|
28
|
+
- [ ] 是否避免了不必要的子 shell
|
|
29
|
+
- [ ] 是否正确使用命令替换 ($(...) 而非 `...`)
|
|
30
|
+
|
|
31
|
+
### 变量和参数
|
|
32
|
+
- [ ] 变量引用是否使用双引号 ("$var" 而非 $var)
|
|
33
|
+
- [ ] 是否避免了全局变量污染
|
|
34
|
+
- [ ] 是否使用有意义的变量名
|
|
35
|
+
- [ ] 是否正确处理特殊字符和空格
|
|
36
|
+
- [ ] 是否验证命令行参数
|
|
37
|
+
- [ ] 是否设置了默认值 (${var:-default})
|
|
38
|
+
- [ ] 常量是否使用大写命名
|
|
39
|
+
|
|
40
|
+
### 函数
|
|
41
|
+
- [ ] 是否适当使用函数模块化代码
|
|
42
|
+
- [ ] 函数是否有明确的输入和输出
|
|
43
|
+
- [ ] 函数是否有文档说明
|
|
44
|
+
- [ ] 函数是否是幂等的 (可重复运行)
|
|
45
|
+
- [ ] 是否避免了副作用
|
|
46
|
+
- [ ] 返回状态是否明确
|
|
47
|
+
|
|
48
|
+
### 安全性
|
|
49
|
+
- [ ] 是否安全处理用户输入
|
|
50
|
+
- [ ] 是否避免了命令注入风险
|
|
51
|
+
- [ ] 敏感信息是否安全管理 (不使用明文密码)
|
|
52
|
+
- [ ] 临时文件是否安全创建和清理
|
|
53
|
+
- [ ] 是否正确设置了文件权限
|
|
54
|
+
- [ ] 是否避免了 eval 和其他危险结构
|
|
55
|
+
|
|
56
|
+
### 可移植性
|
|
57
|
+
- [ ] 是否考虑了不同 shell 的兼容性 (bash, sh, zsh)
|
|
58
|
+
- [ ] 是否避免了系统特定的命令和功能
|
|
59
|
+
- [ ] 是否考虑了路径的可移植性
|
|
60
|
+
- [ ] 是否考虑了不同环境的差异 (Linux, macOS)
|
|
61
|
+
- [ ] 外部依赖是否明确记录
|
|
62
|
+
|
|
63
|
+
### 性能
|
|
64
|
+
- [ ] 是否避免了不必要的外部命令调用
|
|
65
|
+
- [ ] 循环是否高效
|
|
66
|
+
- [ ] 是否优化了文件 I/O 操作
|
|
67
|
+
- [ ] 是否避免了不必要的重复计算
|
|
68
|
+
- [ ] 是否合理使用并行处理
|
|
69
|
+
|
|
70
|
+
### 可测试性
|
|
71
|
+
- [ ] 代码是否易于测试
|
|
72
|
+
- [ ] 是否有自动化测试
|
|
73
|
+
- [ ] 测试是否涵盖主要功能和错误路径
|
|
74
|
+
- [ ] 是否可以使用 mock 替换外部依赖
|
|
75
|
+
"""
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"""
|
|
2
|
+
SQL language-specific code review checklist.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
CHECKLIST = """
|
|
6
|
+
## SQL 代码审查检查清单
|
|
7
|
+
|
|
8
|
+
### 查询设计和可读性
|
|
9
|
+
- [ ] SQL 语句是否格式化和缩进一致
|
|
10
|
+
- [ ] 是否使用有意义的表和列名
|
|
11
|
+
- [ ] 是否有注释说明复杂查询
|
|
12
|
+
- [ ] 是否使用了一致的命名约定
|
|
13
|
+
- [ ] 是否避免了过度复杂的查询
|
|
14
|
+
- [ ] 是否适当使用子查询和公共表表达式 (CTE)
|
|
15
|
+
|
|
16
|
+
### 性能优化
|
|
17
|
+
- [ ] 是否有合适的索引支持查询
|
|
18
|
+
- [ ] 大表查询是否使用了分页
|
|
19
|
+
- [ ] 是否避免了全表扫描
|
|
20
|
+
- [ ] WHERE 条件是否能有效利用索引
|
|
21
|
+
- [ ] JOIN 操作是否高效
|
|
22
|
+
- [ ] 是否避免了使用 SELECT *
|
|
23
|
+
- [ ] 是否避免了不必要的排序和聚合
|
|
24
|
+
- [ ] 是否使用了适当的索引提示
|
|
25
|
+
- [ ] 大批量操作是否分批处理
|
|
26
|
+
- [ ] 触发器和存储过程是否高效
|
|
27
|
+
|
|
28
|
+
### 数据完整性和约束
|
|
29
|
+
- [ ] 是否定义了适当的主键
|
|
30
|
+
- [ ] 是否使用了外键约束
|
|
31
|
+
- [ ] 是否添加了适当的 NOT NULL 约束
|
|
32
|
+
- [ ] 是否设置了合理的默认值
|
|
33
|
+
- [ ] 是否使用了检查约束验证数据
|
|
34
|
+
- [ ] 事务是否保持一致性
|
|
35
|
+
|
|
36
|
+
### 安全性
|
|
37
|
+
- [ ] 是否防范 SQL 注入
|
|
38
|
+
- [ ] 是否使用参数化查询
|
|
39
|
+
- [ ] 权限是否遵循最小权限原则
|
|
40
|
+
- [ ] 敏感数据是否加密存储
|
|
41
|
+
- [ ] 是否限制了查询结果集大小
|
|
42
|
+
- [ ] 是否避免了在查询中使用 SQL 动态构建
|
|
43
|
+
|
|
44
|
+
### 并发和锁定
|
|
45
|
+
- [ ] 是否考虑了并发访问
|
|
46
|
+
- [ ] 事务范围是否最小化
|
|
47
|
+
- [ ] 是否使用了适当的隔离级别
|
|
48
|
+
- [ ] 是否避免了长时间锁定资源
|
|
49
|
+
- [ ] 是否考虑了死锁问题
|
|
50
|
+
- [ ] 是否处理了锁超时错误
|
|
51
|
+
|
|
52
|
+
### 可维护性和兼容性
|
|
53
|
+
- [ ] 脚本是否是幂等的 (可重复运行)
|
|
54
|
+
- [ ] 是否有数据库版本控制和迁移策略
|
|
55
|
+
- [ ] 是否考虑了数据库引擎兼容性
|
|
56
|
+
- [ ] 是否有针对各种错误情况的处理
|
|
57
|
+
- [ ] 是否有回滚策略
|
|
58
|
+
- [ ] 模式更改是否安全可靠
|
|
59
|
+
|
|
60
|
+
### 特定数据库最佳实践
|
|
61
|
+
- [ ] 是否遵循特定数据库引擎的最佳实践
|
|
62
|
+
- [ ] 是否合理使用数据库特有功能
|
|
63
|
+
- [ ] 是否考虑了不同数据库方言的差异
|
|
64
|
+
- [ ] 是否使用了合适的数据类型
|
|
65
|
+
|
|
66
|
+
### 测试
|
|
67
|
+
- [ ] 是否有针对 SQL 的单元测试
|
|
68
|
+
- [ ] 是否测试了边缘情况
|
|
69
|
+
- [ ] 是否验证了结果集的正确性
|
|
70
|
+
- [ ] 是否测试了性能和负载
|
|
71
|
+
- [ ] 是否有数据恢复测试
|
|
72
|
+
"""
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Swift language-specific code review checklist.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
CHECKLIST = """
|
|
6
|
+
## Swift 代码审查检查清单
|
|
7
|
+
|
|
8
|
+
### 代码风格和格式
|
|
9
|
+
- [ ] 是否遵循 Swift API 设计指南
|
|
10
|
+
- [ ] 命名是否清晰明确 (驼峰式命名法)
|
|
11
|
+
- [ ] 是否使用 SwiftLint 等工具进行代码规范检查
|
|
12
|
+
- [ ] 缩进和格式是否一致
|
|
13
|
+
- [ ] 是否避免了过长的函数和过度嵌套
|
|
14
|
+
|
|
15
|
+
### Swift 语言特性
|
|
16
|
+
- [ ] 是否正确使用可选类型 (Optional)
|
|
17
|
+
- [ ] 是否安全地解包可选值
|
|
18
|
+
- [ ] 是否适当使用类型推断
|
|
19
|
+
- [ ] 是否合理使用值类型和引用类型
|
|
20
|
+
- [ ] 是否正确使用协议和扩展
|
|
21
|
+
- [ ] 是否适当使用属性观察器 (willSet/didSet)
|
|
22
|
+
- [ ] 是否正确使用闭包和逃逸闭包
|
|
23
|
+
- [ ] 是否合理使用 guard 语句和条件提前返回
|
|
24
|
+
|
|
25
|
+
### 内存管理
|
|
26
|
+
- [ ] 是否避免了循环引用 (使用 weak 或 unowned)
|
|
27
|
+
- [ ] 闭包捕获列表是否正确设置
|
|
28
|
+
- [ ] 是否正确处理委托和通知的生命周期
|
|
29
|
+
- [ ] 是否避免了内存泄漏
|
|
30
|
+
|
|
31
|
+
### 并发和异步
|
|
32
|
+
- [ ] 是否正确使用 GCD 或 Operation
|
|
33
|
+
- [ ] 是否避免了线程竞争
|
|
34
|
+
- [ ] UI 更新是否在主线程进行
|
|
35
|
+
- [ ] 是否正确处理异步操作的取消和超时
|
|
36
|
+
- [ ] Swift 5.5+ 是否合理使用结构化并发 (async/await)
|
|
37
|
+
|
|
38
|
+
### 性能优化
|
|
39
|
+
- [ ] 是否避免不必要的计算或对象创建
|
|
40
|
+
- [ ] 集合操作是否高效
|
|
41
|
+
- [ ] 是否避免了过度使用字符串操作
|
|
42
|
+
- [ ] 是否考虑了缓存策略
|
|
43
|
+
- [ ] 是否避免了过度使用计算属性
|
|
44
|
+
|
|
45
|
+
### 用户界面 (UI)
|
|
46
|
+
- [ ] 约束是否正确设置 (没有冲突或歧义)
|
|
47
|
+
- [ ] 是否考虑了不同屏幕尺寸和方向
|
|
48
|
+
- [ ] 是否遵循人机界面指南 (HIG)
|
|
49
|
+
- [ ] 是否适当使用 SF Symbols 和系统字体
|
|
50
|
+
- [ ] 是否适配了深色模式
|
|
51
|
+
|
|
52
|
+
### 安全性
|
|
53
|
+
- [ ] 敏感数据是否使用钥匙串存储
|
|
54
|
+
- [ ] 网络请求是否使用 HTTPS
|
|
55
|
+
- [ ] 输入验证是否充分
|
|
56
|
+
- [ ] 是否防范 JSON 解析错误
|
|
57
|
+
- [ ] 是否避免硬编码凭证
|
|
58
|
+
|
|
59
|
+
### 依赖管理
|
|
60
|
+
- [ ] 第三方依赖是否必要
|
|
61
|
+
- [ ] 依赖版本是否固定
|
|
62
|
+
- [ ] 是否考虑了依赖的维护状态和安全性
|
|
63
|
+
- [ ] 是否最小化了外部依赖
|
|
64
|
+
|
|
65
|
+
### 测试
|
|
66
|
+
- [ ] 是否有单元测试覆盖核心功能
|
|
67
|
+
- [ ] 是否使用 XCTest 框架进行测试
|
|
68
|
+
- [ ] 是否测试了错误路径和边界条件
|
|
69
|
+
- [ ] UI 测试是否覆盖主要用户流程
|
|
70
|
+
- [ ] 测试是否独立且可重复
|
|
71
|
+
|
|
72
|
+
### 文档和注释
|
|
73
|
+
- [ ] 是否使用 Xcode 的标记注释 (MARK, TODO, FIXME)
|
|
74
|
+
- [ ] 复杂逻辑是否有注释说明
|
|
75
|
+
- [ ] 公开 API 是否有文档注释
|
|
76
|
+
- [ ] 注释是否与代码保持同步
|
|
77
|
+
"""
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"""
|
|
2
|
+
HTML/CSS specific code review checklist.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
CHECKLIST = """
|
|
6
|
+
## HTML/CSS 代码审查检查清单
|
|
7
|
+
|
|
8
|
+
### HTML 结构和语义
|
|
9
|
+
- [ ] 是否使用了正确的 HTML5 文档类型声明 (<!DOCTYPE html>)
|
|
10
|
+
- [ ] 是否使用了语义化标签 (header, nav, main, section, article, footer 等)
|
|
11
|
+
- [ ] 文档结构是否清晰且符合逻辑
|
|
12
|
+
- [ ] 标题层级 (h1-h6) 是否正确使用且有层次性
|
|
13
|
+
- [ ] 是否正确使用列表元素 (ul, ol, dl) 来组织列表内容
|
|
14
|
+
- [ ] 链接是否有描述性文本 (避免使用 "点击这里" 之类的文本)
|
|
15
|
+
- [ ] 图片是否有适当的 alt 属性
|
|
16
|
+
- [ ] 表单元素是否有关联的 label 标签
|
|
17
|
+
|
|
18
|
+
### HTML 最佳实践
|
|
19
|
+
- [ ] 是否使用 UTF-8 字符编码
|
|
20
|
+
- [ ] 是否正确设置了视口元标签 (meta viewport)
|
|
21
|
+
- [ ] 是否使用了适当的 SEO 元标签
|
|
22
|
+
- [ ] ID 是否唯一
|
|
23
|
+
- [ ] 类名是否有意义且符合命名约定
|
|
24
|
+
- [ ] 是否避免使用内联样式
|
|
25
|
+
- [ ] 是否有适当的注释说明复杂结构
|
|
26
|
+
- [ ] 是否避免了过度的标签嵌套
|
|
27
|
+
|
|
28
|
+
### CSS 组织和架构
|
|
29
|
+
- [ ] 是否使用了 CSS 方法论 (如 BEM, OOCSS, SMACSS)
|
|
30
|
+
- [ ] 选择器是否有效且明确
|
|
31
|
+
- [ ] 是否避免过于具体的选择器 (避免过度的嵌套选择器)
|
|
32
|
+
- [ ] 是否有清晰的组件/模块化结构
|
|
33
|
+
- [ ] 样式规则是否按照逻辑分组和排序
|
|
34
|
+
- [ ] 类命名约定是否一致
|
|
35
|
+
- [ ] 是否使用 CSS 变量管理主题和重复值
|
|
36
|
+
- [ ] 是否使用适当的注释分隔不同的样式部分
|
|
37
|
+
|
|
38
|
+
### CSS 最佳实践
|
|
39
|
+
- [ ] 是否使用了 CSS 重置或归一化 (Normalize.css)
|
|
40
|
+
- [ ] 是否使用响应式设计 (媒体查询)
|
|
41
|
+
- [ ] 是否使用了合适的单位 (rem/em 用于字体大小, 百分比或 vw/vh 用于响应式布局)
|
|
42
|
+
- [ ] 是否设置了合理的盒模型 (box-sizing: border-box)
|
|
43
|
+
- [ ] 是否避免使用 !important
|
|
44
|
+
- [ ] 是否使用了 flexbox 或 grid 进行布局
|
|
45
|
+
- [ ] 颜色和字体是否一致
|
|
46
|
+
- [ ] z-index 管理是否合理
|
|
47
|
+
|
|
48
|
+
### 性能优化
|
|
49
|
+
- [ ] 是否避免了不必要的标签嵌套和冗余元素
|
|
50
|
+
- [ ] CSS 选择器是否简洁高效
|
|
51
|
+
- [ ] 是否避免使用复杂的选择器
|
|
52
|
+
- [ ] 是否使用了适当的图片格式和优化
|
|
53
|
+
- [ ] 是否为大型网站考虑使用 CSS 分片/代码分割
|
|
54
|
+
- [ ] 是否使用了合适的资源延迟加载策略
|
|
55
|
+
- [ ] 是否最小化了重绘和回流
|
|
56
|
+
- [ ] 是否优化了关键渲染路径
|
|
57
|
+
|
|
58
|
+
### 可访问性 (A11Y)
|
|
59
|
+
- [ ] 颜色对比度是否符合 WCAG 标准
|
|
60
|
+
- [ ] 是否正确使用了 ARIA 属性
|
|
61
|
+
- [ ] 交互元素是否能够通过键盘访问
|
|
62
|
+
- [ ] 是否有适当的焦点状态样式
|
|
63
|
+
- [ ] 文本是否可调整大小
|
|
64
|
+
- [ ] 动画是否可控制或禁用 (prefers-reduced-motion)
|
|
65
|
+
- [ ] 表单错误是否清晰且易于理解
|
|
66
|
+
- [ ] 是否通过了可访问性测试和验证
|
|
67
|
+
|
|
68
|
+
### 跨浏览器兼容性
|
|
69
|
+
- [ ] 是否测试了主要浏览器兼容性
|
|
70
|
+
- [ ] 是否使用了适当的浏览器前缀
|
|
71
|
+
- [ ] 是否避免使用尚未广泛支持的特性
|
|
72
|
+
- [ ] 是否有适当的回退方案
|
|
73
|
+
- [ ] 是否使用了适当的 polyfills
|
|
74
|
+
- [ ] 样式和布局是否在不同设备上保持一致
|
|
75
|
+
- [ ] 字体渲染是否考虑了跨平台差异
|
|
76
|
+
- [ ] 是否解决了已知的浏览器特定问题
|
|
77
|
+
|
|
78
|
+
### CSS 预处理器 (如适用)
|
|
79
|
+
- [ ] 是否合理使用了变量
|
|
80
|
+
- [ ] 是否合理使用了混合 (mixins)
|
|
81
|
+
- [ ] 嵌套规则是否控制在合理深度
|
|
82
|
+
- [ ] 是否使用了 partials/imports 来组织代码
|
|
83
|
+
- [ ] 是否避免了生成过度复杂的 CSS
|
|
84
|
+
- [ ] 函数和操作符是否使用得当
|
|
85
|
+
- [ ] 扩展/继承是否使用得当
|
|
86
|
+
- [ ] 是否避免了重复的代码
|
|
87
|
+
|
|
88
|
+
### 文档和注释
|
|
89
|
+
- [ ] 复杂的 HTML 结构是否有注释
|
|
90
|
+
- [ ] 是否有足够的 CSS 注释
|
|
91
|
+
- [ ] 是否有设计系统/组件文档
|
|
92
|
+
- [ ] 是否记录了浏览器特定的解决方案和黑客技巧
|
|
93
|
+
- [ ] 是否记录了颜色系统、排版和网格系统
|
|
94
|
+
- [ ] 是否有清晰的 README 或风格指南
|
|
95
|
+
- [ ] CSS 变量是否有适当的命名和注释
|
|
96
|
+
- [ ] 不明显的布局决策是否有解释
|
|
97
|
+
"""
|