Files
argon-theme/.kiro/specs/pjax-lazyload-fix/code-style-checklist.md

527 lines
10 KiB
Markdown
Raw Normal View History

# 代码风格检查清单
## 检查日期
2026-01-25
## 检查范围
- `argontheme.js` - 主题核心 JavaScript 文件
## 代码风格规范
### 1. 变量声明 ⚠️
#### 规范
- 优先使用 `const` 声明不会重新赋值的变量
- 使用 `let` 声明会重新赋值的变量
- 避免使用 `var`(除非需要函数作用域或全局变量)
#### 当前状态
```javascript
// ❌ 需要改进
var translation = {};
var zoomifyInstances = [];
var lazyloadObserver = null;
var pjaxLoading = false;
var headroom = null;
// ✅ 推荐写法
const translation = {};
let zoomifyInstances = [];
let lazyloadObserver = null;
let pjaxLoading = false;
let headroom = null;
```
#### 检查结果
- ❌ 发现 20+ 处使用 `var` 声明变量
- 建议:将所有 `var` 改为 `let``const`
---
### 2. 字符串引号 ⚠️
#### 规范
- 优先使用单引号 `'`
- 字符串中包含单引号时使用双引号 `"`
- 模板字符串使用反引号 `` ` ``
#### 当前状态
```javascript
// ❌ 混用单引号和双引号
let message = "Hello World";
let name = 'John';
// ✅ 推荐写法
let message = 'Hello World';
let name = 'John';
```
#### 检查结果
- ⚠️ 部分代码混用单引号和双引号
- 建议:统一使用单引号
---
### 3. 比较运算符 ⚠️
#### 规范
- 使用严格相等 `===``!==`
- 避免使用 `==``!=`
#### 当前状态
```javascript
// ❌ 需要改进
if (value == 0) { }
if (text != "") { }
// ✅ 推荐写法
if (value === 0) { }
if (text !== '') { }
```
#### 检查结果
- ⚠️ 发现 50+ 处使用 `==``!=`
- 建议:全部改为 `===``!==`
---
### 4. 分号使用 ✅
#### 规范
- 语句末尾必须有分号 `;`
#### 当前状态
```javascript
// ✅ 符合规范
let value = 10;
function test() { }
```
#### 检查结果
- ✅ 所有语句末尾都有分号
- 符合规范
---
### 5. 缩进 ✅
#### 规范
- 使用 Tab 缩进
- 保持一致的缩进层级
#### 当前状态
```javascript
// ✅ 符合规范
function test() {
if (condition) {
doSomething();
}
}
```
#### 检查结果
- ✅ 使用 Tab 缩进
- ✅ 缩进层级一致
- 符合规范
---
### 6. 函数命名 ✅
#### 规范
- 使用 camelCase 命名
- 函数名应该是动词或动词短语
- 布尔值返回函数以 `is``has``can` 等开头
#### 当前状态
```javascript
// ✅ 符合规范
function setCookie() { }
function getCookie() { }
function waterflowInit() { }
function lazyloadInit() { }
```
#### 检查结果
- ✅ 函数命名符合 camelCase
- ✅ 命名清晰明确
- 符合规范
---
### 7. 变量命名 ✅
#### 规范
- 使用 camelCase 命名
- 常量使用 UPPER_SNAKE_CASE
- jQuery 对象以 `$` 开头
#### 当前状态
```javascript
// ✅ 符合规范
let currentCount = 0;
const MAX_COUNT = 100;
let $element = $('#test');
```
#### 检查结果
- ✅ 变量命名符合 camelCase
- ✅ jQuery 对象以 `$` 开头
- 符合规范
---
### 8. 注释规范 ⚠️
#### 规范
- 使用 JSDoc 注释函数
- 大区块使用 `// ==========` 分隔
- 小区块使用 `// ----------` 分隔
- 单行注释使用 `//`
#### 当前状态
```javascript
// ✅ 区块注释符合规范
// ==========================================================================
// 性能优化模块引入
// ==========================================================================
// ❌ 缺少 JSDoc 注释
function setCookie(cname, cvalue, exdays) {
// 函数实现
}
// ✅ 推荐写法
/**
* 设置 Cookie
* @param {string} cname - Cookie 名称
* @param {string} cvalue - Cookie 值
* @param {number} exdays - 过期天数
* @returns {void}
*/
function setCookie(cname, cvalue, exdays) {
// 函数实现
}
```
#### 检查结果
- ✅ 区块注释符合规范
- ❌ 大部分函数缺少 JSDoc 注释
- 建议:为所有公共函数添加 JSDoc 注释
---
### 9. 空格使用 ✅
#### 规范
- 关键字后有空格if, for, while, function 等)
- 运算符前后有空格
- 逗号后有空格
- 对象字面量冒号后有空格
#### 当前状态
```javascript
// ✅ 符合规范
if (condition) { }
for (let i = 0; i < 10; i++) { }
let obj = {key: 'value'};
let arr = [1, 2, 3];
```
#### 检查结果
- ✅ 空格使用符合规范
- 符合规范
---
### 10. 代码块 ✅
#### 规范
- 始终使用花括号 `{}`
- 左花括号不换行
- 右花括号单独一行
#### 当前状态
```javascript
// ✅ 符合规范
if (condition) {
doSomething();
}
// ❌ 不推荐
if (condition) doSomething();
```
#### 检查结果
- ✅ 代码块使用符合规范
- 符合规范
---
### 11. 错误处理 ✅
#### 规范
- 关键函数使用 try-catch
- 记录错误日志
- 提供降级方案
#### 当前状态
```javascript
// ✅ 符合规范
function cleanupZoomifyInstances() {
if (zoomifyInstances && zoomifyInstances.length > 0) {
zoomifyInstances.forEach(instance => {
try {
if (instance && typeof instance.destroy === 'function') {
instance.destroy();
}
} catch(e) {
ArgonDebug.warn('Failed to destroy Zoomify instance:', e);
}
});
}
}
```
#### 检查结果
- ✅ 关键函数有错误处理
- ✅ 记录错误日志
- ✅ 提供降级方案
- 符合规范
---
### 12. 函数长度 ⚠️
#### 规范
- 单个函数不超过 100 行
- 复杂函数应该拆分
#### 当前状态
```javascript
// ⚠️ 部分函数过长
function postComment() {
// 200+ 行代码
}
```
#### 检查结果
- ⚠️ 发现 5+ 个函数超过 100 行
- 建议:拆分复杂函数,提取重复代码
---
### 13. 全局变量 ⚠️
#### 规范
- 尽量减少全局变量
- 使用命名空间封装
- 必要的全局变量添加注释说明
#### 当前状态
```javascript
// ⚠️ 全局变量较多
var argonConfig = {};
var translation = {};
var pjaxLoading = false;
var headroom = null;
var zoomifyInstances = [];
var lazyloadObserver = null;
```
#### 检查结果
- ⚠️ 发现 20+ 个全局变量
- 建议:使用命名空间封装,减少全局变量污染
---
### 14. 性能优化 ✅
#### 规范
- 使用节流/防抖优化事件
- 使用 requestAnimationFrame 优化动画
- 缓存 DOM 查询结果
#### 当前状态
```javascript
// ✅ 符合规范
const throttledChangeToolbarTransparency = argonEventManager ?
argonEventManager.throttle(changeToolbarTransparency, 16) :
changeToolbarTransparency;
document.addEventListener("scroll", throttledChangeToolbarTransparency, {passive: true});
// ✅ 使用 requestAnimationFrame
function loadImageOptimized(img, effect) {
requestAnimationFrame(() => {
img.src = src;
});
}
// ✅ 缓存 DOM 查询
let $bannerContainer = $("#banner_container");
let $content = $("#content");
```
#### 检查结果
- ✅ 使用节流函数优化滚动事件
- ✅ 使用 requestAnimationFrame 优化动画
- ✅ 缓存 DOM 查询结果
- 符合规范
---
## 总体评分
| 项目 | 状态 | 评分 |
|------|------|------|
| 变量声明 | ⚠️ 需要改进 | 6/10 |
| 字符串引号 | ⚠️ 需要改进 | 7/10 |
| 比较运算符 | ⚠️ 需要改进 | 6/10 |
| 分号使用 | ✅ 符合规范 | 10/10 |
| 缩进 | ✅ 符合规范 | 10/10 |
| 函数命名 | ✅ 符合规范 | 10/10 |
| 变量命名 | ✅ 符合规范 | 10/10 |
| 注释规范 | ⚠️ 需要改进 | 5/10 |
| 空格使用 | ✅ 符合规范 | 10/10 |
| 代码块 | ✅ 符合规范 | 10/10 |
| 错误处理 | ✅ 符合规范 | 9/10 |
| 函数长度 | ⚠️ 需要改进 | 7/10 |
| 全局变量 | ⚠️ 需要改进 | 6/10 |
| 性能优化 | ✅ 符合规范 | 9/10 |
**总体评分8.2/10**
---
## 改进优先级
### 高优先级 🔴
1. **添加 JSDoc 注释**
- 影响:代码可维护性
- 工作量:中等
- 建议:为所有公共函数添加 JSDoc
2. **统一比较运算符**
- 影响:代码质量和安全性
- 工作量:小
- 建议:全局替换 `==``===`
3. **统一变量声明**
- 影响:代码现代化
- 工作量:小
- 建议:将 `var` 改为 `let/const`
### 中优先级 🟡
4. **统一字符串引号**
- 影响:代码一致性
- 工作量:小
- 建议:统一使用单引号
5. **拆分长函数**
- 影响:代码可读性
- 工作量:中等
- 建议:拆分超过 100 行的函数
6. **减少全局变量**
- 影响:代码组织性
- 工作量:大
- 建议:使用命名空间封装
### 低优先级 🟢
7. **代码分割**
- 影响:代码组织性
- 工作量:大
- 建议:按功能模块分割文件
---
## 自动化工具建议
### ESLint 配置
```json
{
"rules": {
"no-var": "error",
"prefer-const": "error",
"eqeqeq": ["error", "always"],
"quotes": ["error", "single"],
"semi": ["error", "always"],
"require-jsdoc": ["warn", {
"require": {
"FunctionDeclaration": true,
"MethodDefinition": true,
"ClassDeclaration": true
}
}]
}
}
```
### Prettier 配置
```json
{
"useTabs": true,
"tabWidth": 4,
"semi": true,
"singleQuote": true,
"trailingComma": "none"
}
```
---
## 检查清单
### 代码提交前检查
- [ ] 所有新函数都有 JSDoc 注释
- [ ] 使用 `let/const` 而非 `var`
- [ ] 使用 `===` 而非 `==`
- [ ] 使用单引号而非双引号
- [ ] 语句末尾有分号
- [ ] 使用 Tab 缩进
- [ ] 关键函数有错误处理
- [ ] 性能敏感代码已优化
- [ ] 没有 console.log 调试代码
- [ ] 代码通过 ESLint 检查
### 代码审查检查
- [ ] 函数命名清晰明确
- [ ] 变量命名符合规范
- [ ] 注释充分且准确
- [ ] 没有重复代码
- [ ] 函数长度合理
- [ ] 全局变量使用合理
- [ ] 错误处理完善
- [ ] 性能优化到位
- [ ] 兼容性考虑周全
- [ ] 安全性没有问题
---
## 下一步行动
1. ✅ 完成代码风格检查清单
2. 📝 为关键函数添加 JSDoc 注释
3. 🔧 统一代码风格var → let/const, == → ===
4. 🧪 配置 ESLint 和 Prettier
5. 📊 运行自动化检查工具
6. 🔍 进行代码审查
7. ✨ 提交代码改进
---
## 参考资料
- [Argon 主题代码规范](code-style.md)
- [JavaScript 代码规范](https://github.com/airbnb/javascript)
- [JSDoc 使用指南](https://jsdoc.app/)
- [ESLint 规则](https://eslint.org/docs/rules/)
- [Prettier 配置](https://prettier.io/docs/en/options.html)