Files
2026Technology-Competition/data/demo-eslint/reports/common-review.md
T
范智鹏 c92249a044 docs: 归档 demo 工程样例与插件实测报告
- 新增三个 demo 工程(demo-eslint / demo-sqlfluff / demo-stylelint):各含 src/ 样例代码与覆盖率映射(run-coverage.mjs、coverage_map.json、stylelint_line_map.json)

- 归档各 demo 的插件实测导出报告(reports/):

  - demo-eslint:common.js / esm-demo.js / legacysyntax.cjs / typescript.ts 审查报告 + 覆盖率报告(292/292 条零偏差,126 种规则全覆盖)

  - demo-sqlfluff:11 个 SQL 样例审查报告 + 覆盖率报告(113/113 条零偏差,57 种规则全覆盖,含 JJ01 行号缺陷修复后的复测验证)

  - demo-stylelint:common.css / empty-source.css 审查报告 + 覆盖率报告(145/145 条零偏差,68 种规则全覆盖)
2026-08-25 22:00:19 +08:00

663 lines
34 KiB
Markdown

# 代码审查报告
**文件:** `data\demo-eslint\src\common.js`
**语言:** javascript
**耗时:** 288.0s
**分析工具:** eslint
---
总计: 214 | 错误: 197 | 警告: 17 | 建议: 0
静态分析 · 210 个问题
- 🔴 `eslint:require-yield` L12
L12: 此生成器函数没有 'yield'。
建议: 在生成器函数体内添加 yield 表达式;若本意不是生成器,请改为普通函数。
- 🔴 `eslint:no-unused-vars` L12
L12: 'generatorWithoutYield' 已定义但从未使用。
建议: 删除该函数声明;若它应被外部使用,请添加导出或实际调用。
- 🔴 `eslint:no-undef` L13
L13: 未定义变量 'console'。
建议: 在 ESLint 配置中声明浏览器或 Node 环境,或在文件顶部添加 /* global console */。
- 🔴 `eslint:no-unused-vars` L17
L17: 'asyncExecutor' 被赋值但从未使用。
建议: 删除该变量,或在使用处引用它。
- 🔴 `eslint:no-async-promise-executor` L17
L17: Promise 执行器不应是 async 函数。
建议: 移除 async 关键字,改为普通 executor,并使用 resolve/reject 控制 Promise 状态。
- 🔴 `eslint:no-unused-vars` L17
L17: 'reject' 已定义但从未使用。
建议: 若不需要拒绝路径,可省略 reject 参数,或实际调用 reject。
- 🔴 `eslint:no-unused-vars` L22
L22: 'executorReturn' 被赋值但从未使用。
建议: 删除该变量,或在使用处引用它。
- 🔴 `eslint:no-unused-vars` L22
L22: 'reject' 已定义但从未使用。
建议: 若不需要拒绝路径,可省略 reject 参数,或实际调用 reject。
- 🔴 `eslint:no-promise-executor-return` L23
L23: Promise 执行器的返回值无法被读取。
建议: 不要在 executor 内 return,直接调用 resolve 即可。
- 🔴 `eslint:no-unused-vars` L27
L27: 'awaitInLoop' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-undef` L30
L30: 未定义变量 'fetch'。
建议: 确保运行环境为浏览器或 Node 18+,并在 ESLint 配置中声明对应全局变量。
- 🔴 `eslint:no-unused-vars` L37
L37: 'returnAssign' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-return-assign` L39
L39: 返回语句中不应包含赋值。
建议: 将赋值与返回分开,避免歧义。
- 🔴 `eslint:no-unused-vars` L39
L39: 'assignedInReturn' 被赋值但从未使用。
建议: 若不需要该局部变量,可以直接 return x。
- 🔴 `eslint:no-unused-vars` L43
L43: 'throwLiteral' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-throw-literal` L44
L44: 应抛出错误对象。
建议: 使用 new Error() 抛错,以保留堆栈信息。
- 🔴 `eslint:no-unused-vars` L48
L48: 'uselessReturn' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-undef` L54
L54: 未定义变量 'console'。
建议: 在 ESLint 配置中声明浏览器或 Node 环境,或在文件顶部添加 /* global console */。
- 🔴 `eslint:no-unused-vars` L62
L62: 'BadConstructor' 已定义但从未使用。
建议: 删除该类,或在使用处实例化。
- 🔴 `eslint:constructor-super` L63
L63: 继承类构造函数中应调用 super()。
建议: 在构造函数体内最先调用 super(message)。
- 🔴 `eslint:no-undef` L64
L64: 未定义变量 'console'。
建议: 在 ESLint 配置中声明浏览器或 Node 环境,或在文件顶部添加 /* global console */。
- 🔴 `eslint:no-class-assign` L70
L70: 'Widget' 是类,不能重新赋值。
建议: 删除对类名的赋值,或用其他变量名保存覆盖后的值。
- 🔴 `eslint:no-unused-vars` L70
L70: 'Widget' 被赋值但从未使用。
建议: 删除该类或在使用处实例化。
- 🔴 `eslint:no-unused-vars` L73
L73: 'DupeMember' 已定义但从未使用。
建议: 删除该类,或在使用处实例化。
- 🔴 `eslint:no-dupe-class-members` L77
L77: 重复的成员名 'method'。
建议: 删除重复的方法定义,或改为不同方法名。
- 🔴 `eslint:no-unused-vars` L83
L83: 'EmptyStatic' 已定义但从未使用。
建议: 删除该类,或在使用处实例化。
- 🔴 `eslint:no-empty-static-block` L84
L84: 不应有空的 static 块。
建议: 删除空的 static 块,或在其中编写有意义的初始化逻辑。
- 🔴 `eslint:no-unused-vars` L88
L88: 'SetterReturn' 已定义但从未使用。
建议: 删除该类,或在使用处实例化。
- 🔴 `eslint:no-setter-return` L91
L91: setter 不能返回值。
建议: 删除 setter 中的 return 语句。
- 🔴 `eslint:no-unused-vars` L96
L96: 'GetterNoReturn' 已定义但从未使用。
建议: 删除该类,或在使用处实例化。
- 🔴 `eslint:getter-return` L97
L97: getter 'value' 应返回值。
建议: 在 getter 中返回一个有意义的表达式。
- 🔴 `eslint:no-unused-vars` L98
L98: 'x' 被赋值但从未使用。
建议: 删除 x 声明,或在实际使用后返回它。
- 🔴 `eslint:no-unused-vars` L103
L103: 'ThisBeforeSuper' 已定义但从未使用。
建议: 删除该类,或在使用处实例化。
- 🔴 `eslint:no-this-before-super` L105
L105: 在调用 super() 之前不允许使用 this。
建议: 将 super(message) 移到 this.message 赋值之前。
- 🔴 `eslint:no-unused-vars` L111
L111: 'UnusedPrivate' 已定义但从未使用。
建议: 删除该类,或在使用处实例化。
- 🔴 `eslint:no-unused-private-class-members` L112
L112: 私有成员 '#secret' 已定义但从未使用。
建议: 删除 #secret 定义,或在类方法中实际使用它。
- 🔴 `eslint:no-unused-vars` L123
L123: 'looseEquality' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:eqeqeq` L124
L124: 应使用 '===' 而非 '=='。
建议: 将 == 改为 ===,避免隐式类型转换。
- 🔴 `eslint:no-unused-vars` L128
L128: 'nullEquality' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-eq-null` L129
L129: 与 null 比较时应使用 '==='。
建议: 如果只想匹配 null,应使用 x === null;如需要 null/undefined 都匹配,可显式写成 x === null || x === undefined。
- 🔴 `eslint:eqeqeq` L129
L129: 应使用 '===' 而非 '=='。
建议: 将 == 改为 ===,避免隐式类型转换。
- 🔴 `eslint:no-unused-vars` L133
L133: 'selfCompare' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-self-compare` L134
L134: 与自身比较可能没有意义。
建议: 删除该比较;若想检测 NaN 应使用 Number.isNaN(x)。
- 🔴 `eslint:no-unused-vars` L138
L138: 'negZero' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-compare-neg-zero` L139
L139: 不要使用 '===' 与 -0 比较。
建议: 如果需要判断 -0,请使用 Object.is(x, -0)。
- 🔴 `eslint:no-unused-vars` L143
L143: 'isNanWrong' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:use-isnan` L144
L144: 与 NaN 比较时应使用 isNaN 函数。
建议: 使用 Number.isNaN(x) 进行 NaN 判断。
- 🔴 `eslint:no-unused-vars` L148
L148: 'typeofCheck' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:valid-typeof` L149
L149: typeof 比较值无效。
建议: 将 'strnig' 修正为 'string'。
- 🔴 `eslint:no-unused-vars` L153
L153: 'constBinary' 已定义但从未使用。
建议: 删除该变量,或在使用处引用它。
- 🔴 `eslint:no-unused-vars` L171
L171: 'fallthrough' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-undef` L174
L174: 未定义变量 'console'。
建议: 在 ESLint 配置中声明浏览器或 Node 环境,或在文件顶部添加 /* global console */。
- 🔴 `eslint:no-fallthrough` L175
L175: 在 'case' 之前应有 'break' 语句。
建议: 在 case 1 的语句后添加 break,除非刻意需要穿透。
- 🔴 `eslint:no-undef` L176
L176: 未定义变量 'console'。
建议: 在 ESLint 配置中声明浏览器或 Node 环境,或在文件顶部添加 /* global console */。
- 🔴 `eslint:no-unused-vars` L184
L184: 'caseDeclarations' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-case-declarations` L187
L187: case 块中不应有词法声明。
建议: 为 case 1 添加块级大括号 {},或把 let 声明移到 switch 外。
- 🔴 `eslint:no-undef` L188
L188: 未定义变量 'console'。
建议: 在 ESLint 配置中声明浏览器或 Node 环境,或在文件顶部添加 /* global console */。
- 🔴 `eslint:no-unused-vars` L196
L196: 'duplicateCase' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-duplicate-case` L200
L200: 重复的 case 标签。
建议: 将第二个 case 1 改为其他值,或删除重复分支。
- 🔴 `eslint:no-unused-vars` L208
L208: 'dupeElseIf' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-dupe-else-if` L211
L211: 此分支永远无法执行,其条件与前序 if-else-if 条件重复或已被覆盖。
建议: 删除重复的 else if 分支,或改为不同的条件。
- 🔴 `eslint:no-unused-vars` L218
L218: 'noDefault' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:default-case` L219
L219: 应包含 default 分支。
建议: 在 switch 中添加 default 分支,处理未匹配的情况。
- 🔴 `eslint:no-unused-vars` L227
L227: 'defaultNotLast' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:default-case-last` L229
L229: default 分支应放在最后。
建议: 将 default 分支移到 switch 的最后一个分支。
- 🔴 `eslint:no-func-assign` L246
L246: 'assignableFn' 是函数,不能重新赋值。
建议: 删除对函数名的重新赋值,或将新函数赋值给其他变量名。
- 🔴 `eslint:no-unused-vars` L246
L246: 'assignableFn' 被赋值但从未使用。
建议: 删除该函数定义或在使用处调用它。
- 🔴 `eslint:no-unused-vars` L256
L256: 'forDirection' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:for-direction` L257
L257: 循环更新子句使变量向错误方向移动。
建议: 将 i-- 改为 i++,使循环条件 i < 10 最终为 false。
- 🔴 `eslint:no-undef` L258
L258: 未定义变量 'console'。
建议: 在 ESLint 配置中声明浏览器或 Node 环境,或在文件顶部添加 /* global console */。
- 🔴 `eslint:no-unused-vars` L267
L267: 'my_snake_case_var' 被赋值但从未使用。
建议: 删除该变量,或在使用处引用它。
- 🔴 `eslint:no-unused-vars` L270
L270: 'generated' 被赋值但从未使用。
建议: 删除该变量,或在使用处引用它。
- 🔴 `eslint:no-undef` L270
L270: 未定义变量 'object'。
建议: 检查全局是否存在 object 构造函数;更推荐使用 {} 创建空对象。
- 🔴 `eslint:no-unused-vars` L273
L273: 'uselessConcat' 被赋值但从未使用。
建议: 删除该变量,或在使用处引用它。
- 🔴 `eslint:no-unused-vars` L276
L276: 'obj' 被赋值但从未使用。
建议: 删除该变量,或在使用处引用它。
- 🔴 `eslint:no-unused-vars` L279
L279: 'dupeKeyObj' 被赋值但从未使用。
建议: 删除该变量,或在使用处引用它。
- 🔴 `eslint:no-dupe-keys` L279
L279: 属性名 'a' 重复。
建议: 删除重复的 a 属性,保留最终需要的值。
- 🔴 `eslint:no-unused-vars` L282
L282: 'a' 被赋值但从未使用。
建议: 删除该解构赋值,或在使用处引用 a。
- 🔴 `eslint:no-unused-vars` L287
L287: 'preferTemplate' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-unused-vars` L292
L292: 'preferSpreadStyle' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-unused-vars` L298
L298: 'preferRest' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-unused-vars` L307
L307: 'preferSpreadCall' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-unused-vars` L313
L313: 'hasOwnPrefer' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-shadow` L313
L313: 'obj' 与第 276 行第 7 列的上层作用域中的 'obj' 重名。
建议: 将参数改名为 target 或 sourceObj,避免遮蔽外层变量。
- 🔴 `eslint:no-unused-vars` L318
L318: 'preferConstDemo' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-useless-assignment` L323
L323: 此赋值在后续语句中未被使用。
建议: 删除 someObj 声明,或在实际使用后保留。
- 🔴 `eslint:no-unused-vars` L334
L334: 'extendNative' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-extend-native` L335
L335: String 原型是只读的,不应添加属性。
建议: 不要修改原生原型;如需扩展功能,应使用包装函数或 WeakMap。
- 🔴 `eslint:no-unused-vars` L339
L339: 'evalDemo' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-eval` L340
L340: eval 可能存在安全风险。
建议: 避免使用 eval;如果只是解析 JSON,请用 JSON.parse。
- 🔴 `eslint:no-unused-vars` L344
L344: 'paramReassign' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-unused-vars` L350
L350: 'unmodifiedLoop' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-unmodified-loop-condition` L351
L351: 循环中 'i' 未被修改。
建议: 在循环体内修改 i,否则该循环可能无限执行。
- 🔴 `eslint:no-undef` L352
L352: 未定义变量 'console'。
建议: 在 ESLint 配置中声明浏览器或 Node 环境,或在文件顶部添加 /* global console */。
- 🔴 `eslint:no-unused-vars` L357
L357: 'unreachableLoop' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-unreachable-loop` L359
L359: 无效循环,其循环体只能执行一次。
建议: 删除循环或移除循环体中的 break。
- 🔴 `eslint:no-unused-vars` L359
L359: 'item' 被赋值但从未使用。
建议: 若不需要 item,改用索引循环或 for...of 中实际使用 item。
- 🔴 `eslint:no-unreachable-loop` L362
L362: 无效循环,其循环体只能执行一次。
建议: 将 while(true) 改为 if(true),或移除 break 并重写逻辑。
- 🔴 `eslint:no-unused-vars` L376
L376: 'badRegex' 被赋值但从未使用。
建议: 删除该变量,或在使用处引用它。
- 🔴 `eslint:no-invalid-regexp` L376
L376: 无效正则表达式:/[/: 未结束的字符类。
建议: 如果要匹配左括号,应使用 new RegExp('\\[')。
- 🔴 `eslint:no-unused-vars` L379
L379: 'regexSpaces' 被赋值但从未使用。
建议: 删除该变量,或在使用处引用它。
- 🔴 `eslint:no-regex-spaces` L379
L379: 空格难以计数,请使用 {2}。
建议: 将连续空格改为 {2} 量词。
- 🔴 `eslint:no-unused-vars` L382
L382: 'controlRegex' 被赋值但从未使用。
建议: 删除该变量,或在使用处引用它。
- 🔴 `eslint:no-control-regex` L382
L382: 正则表达式中出现意外的控制字符:\x1f。
建议: 如果确实要匹配控制字符,请添加注释并临时禁用该规则;否则应移除该正则。
- 🔴 `eslint:no-unused-vars` L385
L385: 'emptyCharClass' 被赋值但从未使用。
建议: 删除该变量,或在使用处引用它。
- 🔴 `eslint:no-empty-character-class` L385
L385: 空字符类。
建议: 删除空的 [],或写入实际需要的字符。
- 🔴 `eslint:no-unused-vars` L388
L388: 'misleadingCharClass' 被赋值但从未使用。
建议: 删除该变量,或在使用处引用它。
- 🔴 `eslint:no-misleading-character-class` L388
L388: 字符类中出现意外的代理对,请使用 'u' 标志。
建议: 为正则添加 u 标志。
- 🔴 `eslint:no-misleading-character-class` L388
L388: 字符类中出现意外的代理对,请使用 'u' 标志。
建议: 为正则添加 u 标志。
- 🔴 `eslint:no-unused-vars` L391
L391: 'uselessBackref' 被赋值但从未使用。
建议: 删除该变量,或在使用处引用它。
- 🔴 `eslint:no-useless-backreference` L391
L391: 反向引用 '\1' 将被忽略,它引用了自身所在的组 '(\1a)'。
建议: 删除无意义的反向引用,或重写分组。
- 🔴 `eslint:no-unused-vars` L394
L394: 'uselessEscape' 被赋值但从未使用。
建议: 删除该变量,或在使用处引用它。
- 🔴 `eslint:no-useless-escape` L394
L394: 多余的转义字符:\.。
建议: 删除多余的转义,写成 'line.'。
- 🔴 `eslint:no-unused-vars` L397
L397: 'irregularWhitespace' 被赋值但从未使用。
建议: 删除该变量,或在使用处引用它。
- 🔴 `eslint:no-loss-of-precision` L400
L400: 此数字字面量在运行时将丢失精度。
建议: 使用可安全表示的浮点字面量,或改用 BigInt/字符串处理高精度数值。
- 🔴 `eslint:no-sparse-arrays` L403
L403: 数组中不应出现空槽位。
建议: 用 undefined 显式填充空位,或删除该槽位。
- 🔴 `eslint:no-unused-vars` L406
L406: 'emptyFunctionBody' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-empty` L409
L409: 空块语句。
建议: 在 if 块中填充逻辑,或删除空的 if 语句。
- 🔴 `eslint:no-unused-vars` L413
L413: 'constantBinary' 被赋值但从未使用。
建议: 删除该变量,或在使用处引用它。
- 🔴 `eslint:no-constant-binary-expression` L413
L413: '&&' 表达式的左侧出现意外的常量真值。
建议: 移除恒真左侧,或改写为普通值。
- 🔴 `eslint:no-constant-condition` L416
L416: 意外的常量条件。
建议: 删除固定的 if(true),或改为真实条件。
- 🔴 `eslint:no-undef` L417
L417: 未定义变量 'console'。
建议: 在 ESLint 配置中声明浏览器或 Node 环境,或在文件顶部添加 /* global console */。
- 🔴 `eslint:no-cond-assign` L422
L422: 应是条件表达式,而不是赋值。
建议: 将 = 改为 ===,或者把赋值移到 if 之前。
- 🔴 `eslint:no-constant-condition` L422
L422: 意外的常量条件。
建议: 修正条件赋值后,条件将不再是常量。
- 🔴 `eslint:no-unused-vars` L422
L422: 'condVar' 被赋值但从未使用。
建议: 删除该变量,或在实际条件中使用它。
- 🔴 `eslint:no-undef` L423
L423: 未定义变量 'console'。
建议: 在 ESLint 配置中声明浏览器或 Node 环境,或在文件顶部添加 /* global console */。
- 🔴 `eslint:no-unused-vars` L428
L428: 'selfAssigned' 被赋值但从未使用。
建议: 删除该变量,或在使用处引用它。
- 🔴 `eslint:no-useless-assignment` L428
L428: 此赋值在后续语句中未被使用。
建议: 删除自赋值语句。
- 🔴 `eslint:no-self-assign` L428
L428: 'selfAssigned' 被赋值为自身。
建议: 删除该无意义的自赋值。
- 🔴 `eslint:no-debugger` L431
L431: 不应使用 'debugger' 语句。
建议: 删除 debugger 语句。
- 🔴 `eslint:no-extra-boolean-cast` L434
L434: 多余的双重否定。
建议: 移除 !!,直接使用变量作为条件。
- 🔴 `eslint:no-undef` L435
L435: 未定义变量 'console'。
建议: 在 ESLint 配置中声明浏览器或 Node 环境,或在文件顶部添加 /* global console */。
- 🔴 `eslint:no-ex-assign` L442
L442: 不应给 catch 异常参数赋值。
建议: 不要重新赋值 e;如需重新抛出,请直接 throw e 或 throw new Error(..., { cause: e })。
- 🔴 `eslint:no-unused-vars` L442
L442: 'e' 被赋值但从未使用。
建议: 删除赋值;如果需要新错误,直接抛出而不是赋值给 e。
- 🔴 `eslint:no-unused-vars` L446
L446: 'noEmptyPattern' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-empty-pattern` L446
L446: 不应使用空对象解构模式。
建议: 在解构模式中写出至少一个属性名,或直接使用普通参数。
- 🔴 `eslint:no-unused-vars` L451
L451: 'unreachableCode' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-unreachable` L453
L453: 不可达代码。
建议: 删除 return 之后永远不会执行的语句。
- 🔴 `eslint:no-undef` L453
L453: 未定义变量 'console'。
建议: 在 ESLint 配置中声明浏览器或 Node 环境,或在文件顶部添加 /* global console */。
- 🔴 `eslint:no-unused-vars` L457
L457: 'unexpectedMultiline' 被赋值但从未使用。
建议: 删除该变量,或在使用处引用它。
- 🔴 `eslint:no-unexpected-multiline` L458
L458: 函数与函数调用左括号之间存在意外换行。
建议: 在前一行末尾补充分号,或将 IIFE 整体改成赋值表达式,避免被解释为对上文变量的调用。
- 🔴 `eslint:no-undef` L459
L459: 未定义变量 'console'。
建议: 在 ESLint 配置中声明浏览器或 Node 环境,或在文件顶部添加 /* global console */。
- 🔴 `eslint:no-unused-vars` L463
L463: 'unsafeOptional' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-shadow` L463
L463: 'obj' 与第 276 行第 7 列的上层作用域中的 'obj' 重名。
建议: 将参数改名为 target 或 sourceObj,避免遮蔽外层变量。
- 🔴 `eslint:no-unsafe-optional-chaining` L464
L464: 可选链使用不安全;如果短路为 'undefined',后续运算会抛 TypeError。
建议: 将后续属性访问也改为可选链,或先判断 obj?.a 是否存在。
- 🔴 `eslint:no-unsafe-negation` L470
L470: 不应取反 'in' 运算符的左操作数。
建议: 将整个 in 表达式放入括号后再取反,例如 !(flagFlag in holderObj)。
- 🔴 `eslint:no-undef` L471
L471: 未定义变量 'console'。
建议: 在 ESLint 配置中声明浏览器或 Node 环境,或在文件顶部添加 /* global console */。
- 🔴 `eslint:no-unused-vars` L475
L475: 'unsafeFinally' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-unsafe-finally` L479
L479: 在 finally 中使用返回语句不安全。
建议: 不要在 finally 中 return,否则会覆盖 try 中的 throw 或 return。
- 🔴 `eslint:no-unused-labels` L484
L484: 标签 'unusedLabel:' 已定义但从未使用。
建议: 移除未使用的标签。
- 🔴 `eslint:no-undef` L485
L485: 未定义变量 'console'。
建议: 在 ESLint 配置中声明浏览器或 Node 环境,或在文件顶部添加 /* global console */。
- 🔴 `eslint:no-unused-vars` L489
L489: 'completelyUnusedVariable' 被赋值但从未使用。
建议: 删除该变量,或在使用处引用它。
- 🔴 `eslint:no-unused-vars` L492
L492: 'uselessCatch' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-useless-catch` L493
L493: 不必要的 try/catch 包装。
建议: 删除 try/catch,直接返回 try 中的值。
- 🔴 `eslint:no-unreachable` L495
L495: 不可达代码。
建议: 删除 catch 中被 no-useless-catch 覆盖后不再可达的 throw 逻辑。
- 🔴 `eslint:no-unused-vars` L514
L514: 'irregularWS' 被赋值但从未使用。
建议: 删除该变量,或在使用处引用它。
- 🔴 `eslint:no-irregular-whitespace` L514
L514: 不允许使用不规则空白。
建议: 将行尾的不可见空白(如 NBSP)替换为普通空格或删除。
- 🔴 `eslint:no-var` L521
L521: 不应使用 var,请改用 let 或 const。
建议: 改用 const,若需要重新赋值则改用 let。
- 🔴 `eslint:no-unused-vars` L521
L521: 'oldStyleVar' 被赋值但从未使用。
建议: 删除该变量,或在使用处引用它。
- 🔴 `eslint:no-undef` L524
L524: 未定义变量 'console'。
建议: 在 ESLint 配置中声明浏览器或 Node 环境,或在文件顶部添加 /* global console */。
- 🔴 `eslint:no-undef` L524
L524: 未定义变量 'undefinedGlobalThing'。
建议: 检查该全局变量是否真实存在;若存在,请添加全局声明。
- 🔴 `eslint:no-unused-vars` L527
L527: 'redeclareDemo' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-var` L528
L528: 不应使用 var,请改用 let 或 const。
建议: 改用 let 或 const。
- 🔴 `eslint:no-var` L529
L529: 不应使用 var,请改用 let 或 const。
建议: 删除重复声明,并保留一次用 let/const 的声明。
- 🔴 `eslint:no-redeclare` L529
L529: 'redeclaredName' 已定义。
建议: 删除重复的 var 声明,只在函数中声明一次。
- 🔴 `eslint:no-unused-vars` L529
L529: 'redeclaredName' 被赋值但从未使用。
建议: 保留一次声明并在使用处引用,或删除整个演示函数。
- 🔴 `eslint:no-unused-vars` L539
L539: 'deleteVarDemo' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-shadow` L540
L540: 'obj' 与第 276 行第 7 列的上层作用域中的 'obj' 重名。
建议: 将局部变量 obj 改名为 targetObj 或 instance。
- 🔴 `eslint:no-unused-vars` L545
L545: 'shadowRestricted' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-shadow-restricted-names` L545
L545: 不允许遮蔽全局属性 'undefined'。
建议: 将参数 undefined 改名为 other 或 anyValue。
- 🔴 `eslint:no-unused-vars` L550
L550: 'globalAssign' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-global-assign` L551
L551: 只读全局变量 'Math' 不应被修改。
建议: 不要给 Math 赋值;如果需要自定义数学方法,请使用新的命名空间。
- 🔴 `eslint:no-unused-vars` L558
L558: 'blockScopedDemo' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-constant-condition` L559
L559: 意外的常量条件。
建议: 移除 if(true),或改为基于真实条件。
- 🔴 `eslint:no-var` L560
L560: 不应使用 var,请改用 let 或 const。
建议: 在函数顶部改用 let/const 声明,并确保块级语义正确。
- 🔴 `eslint:no-undef` L562
L562: 未定义变量 'console'。
建议: 在 ESLint 配置中声明浏览器或 Node 环境,或在文件顶部添加 /* global console */。
- 🔴 `eslint:block-scoped-var` L562
L562: 在第 560 行声明的 'blockScoped' 在绑定上下文之外使用。
建议: 将 var 移到函数顶部,或改用 let/const 并确保作用域一致。
- 🔴 `eslint:no-unused-vars` L566
L566: 'unassignedVarDemo' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-unassigned-vars` L567
L567: 'unassignedVariable' 因从未赋值而始终为 'undefined'。
建议: 初始化变量,或检查是否真的需要该变量。
- 🔴 `eslint:no-unused-vars` L572
L572: 'shadowDemo' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-unused-vars` L573
L573: 'value' 被赋值但从未使用。
建议: 删除该变量,或在使用处引用它。
- 🔴 `eslint:no-shadow` L575
L575: 'value' 与第 573 行第 7 列的上层作用域中的 'value' 重名。
建议: 将内层变量改名为 innerValue。
- 🔴 `eslint:no-unused-vars` L582
L582: 'uselessAssignment' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-useless-assignment` L583
L583: 此赋值在后续语句中未被使用。
建议: 删除初始赋值,只保留最终赋值。
- 🔴 `eslint:no-unused-vars` L589
L589: 'arrayViaConstructor' 被赋值但从未使用。
建议: 删除该变量,或在使用处引用它。
- 🔴 `eslint:no-array-constructor` L589
L589: 应优先使用数组字面量 []。
建议: 改用 [1, 2, 3]。
- 🔴 `eslint:no-unused-vars` L592
L592: 'symbolViaNew' 被赋值但从未使用。
建议: 删除该变量,或在使用处引用它。
- 🔴 `eslint:no-new-native-nonconstructor` L592
L592: 'Symbol' 不能作为构造函数调用。
建议: 移除 new,直接调用 Symbol('x')。
- 🔴 `eslint:no-unused-vars` L595
L595: 'jsonAsFunction' 被赋值但从未使用。
建议: 删除该变量,或在使用处引用它。
- 🔴 `eslint:no-obj-calls` L595
L595: 'JSON' 不是函数。
建议: 不要直接调用 JSON();如需解析 JSON 字符串,应使用 JSON.parse()。
- 🔴 `eslint:no-const-assign` L599
L599: 'immutableValue' 是常量,不能重新赋值。
建议: 改用 let,或删除赋值。
- 🔴 `eslint:no-unused-vars` L599
L599: 'immutableValue' 被赋值但从未使用。
建议: 删除该变量,或在使用处引用它。
- 🔴 `eslint:no-unused-vars` L602
L602: 'protoBuilds' 已定义但从未使用。
建议: 删除该函数,或在使用处调用它。
- 🔴 `eslint:no-shadow` L602
L602: 'obj' 与第 276 行第 7 列的上层作用域中的 'obj' 重名。
建议: 将参数改名为 target 或 sourceObj,避免遮蔽外层变量。
- 🔴 `eslint:no-prototype-builtins` L603
L603: 不应从目标对象上访问 Object.prototype 的方法 'hasOwnProperty'。
建议: 使用 Object.hasOwn(obj, 'key') 或 Object.prototype.hasOwnProperty.call(obj, 'key')。
- 🟡 `eslint:no-await-in-loop` L30
L30: 循环内不应使用 await。
建议: 若请求之间无依赖,应使用 Promise.all 并行执行;若有依赖,至少在循环外积累 Promise。
- 🟡 `eslint:no-useless-return` L50
L50: 不必要的 return 语句。
建议: 删除函数末尾无意义的 return。
- 🟡 `eslint:prefer-template` L154
L154: 不应使用字符串拼接。
建议: 改用模板字符串或直接写出拼接结果;注意当前表达式结果可能是 'aNaN'。
- 🟡 `eslint:camelcase` L267
L267: 标识符 'my_snake_case_var' 不是驼峰命名。
建议: 改为驼峰命名,如 mySnakeCaseVar。
- 🟡 `eslint:new-cap` L270
L270: 构造函数名不应以小写字母开头。
建议: 如果意图是创建对象,应使用 new Object() 或对象字面量 {}。
- 🟡 `eslint:no-useless-concat` L273
L273: 不应拼接字符串字面量。
建议: 直接写 'foobar'。
- 🟡 `eslint:no-useless-computed-key` L276
L276: 属性 ['key'] 的计算属性是不必要的。
建议: 直接写成 key: 'value'。
- 🟡 `eslint:no-useless-rename` L282
L282: 解构赋值 a 被无必要地重命名。
建议: 简化为 { a }。注意 someObj 当前在 L282 之后才声明,会导致运行时错误。
- 🟡 `eslint:prefer-template` L288
L288: 不应使用字符串拼接。
建议: 改用模板字符串。
- 🟡 `eslint:prefer-object-spread` L293
L293: 应使用对象展开代替 Object.assign,例如 `{ ...foo }`
建议: 改用对象字面量展开语法。
- 🟡 `eslint:prefer-rest-params` L299
L299: 应使用剩余参数代替 'arguments'。
建议: 将函数签名改为 function preferRest(...args),并直接返回 args。
- 🟡 `eslint:prefer-spread` L309
L309: 应使用展开运算符代替 '.apply()'。
建议: 使用 spreadThis(...nums)。
- 🟡 `eslint:prefer-object-has-own` L314
L314: 应使用 Object.hasOwn() 代替 Object.prototype.hasOwnProperty.call()。
建议: 改用 Object.hasOwn(obj, key)。
- 🟡 `eslint:no-param-reassign` L345
L345: 不应重新赋值函数参数 'x'。
建议: 改用局部变量保存计算结果。
- 🟡 `eslint:new-cap` L595
L595: 以大写字母开头的函数只应作为构造函数使用。
建议: JSON 不是构造函数,也不可调用;使用 JSON.parse 等静态方法。
AI 审查 · 4 条建议
- 🔴 [AI] [design] `top-level-fatal-expression` L270
**顶层存在多个必然抛出异常的表达式,会导致脚本加载中断**
合并文件在模块初始化阶段依次执行大量演示代码,包括 `new object()`(若 object 未定义会抛 ReferenceError)、`new RegExp('[')`(抛 SyntaxError)、`new Symbol('x')`(抛 TypeError)、`JSON()`(抛 TypeError)、`immutableValue = 2`(抛 TypeError)等。这些不是普通 lint 风格问题,而是脚本加载即崩溃的致命缺陷。即使静态分析逐条标记了相关规则,文件的“可运行性”仍无法保证。
建议: 将演示/规则触发代码放入独立函数或测试用例中,避免在模块顶层直接执行会抛异常的字面量表达式;必要时用 try/catch 包住这些演示片段。
- 🔴 [AI] [bug] `use-before-define` L282
**someObj 在声明前使用导致暂时性死区错误**
L282 的 `const { a: a } = someObj;` 引用了 L323 才声明的 `const someObj`。const 声明存在暂时性死区,代码执行到 L282 时会抛出 ReferenceError,导致合并脚本在后续逻辑执行前中断。
建议: 将 `const someObj = ...` 移到 L282 之前,或在 L282 直接使用对象字面量,避免引用未初始化的变量。
- 🟡 [AI] [bug] `string-coercion-bug` L154
**字符串拼接 `-'b'` 产生 'aNaN',很可能不是预期结果**
L154 的 `const y = 'a' + -'b';``-'b'` 的结果是 NaN,字符串拼接后得到 'aNaN'。若意图是拼接两个字符串,应直接写 'ab';若意图是数学运算,则操作数不应为字符串。
建议: 根据意图改写为 `const y = 'ab';``const y = 'a' + 'b';`
- 🟡 [AI] [bug] `exception-swallowed` L442
**catch 参数被重新赋值,原始异常被静默吞掉**
L442 的 `e = new Error('reassigned');` 只是改变 catch 局部变量 e 的引用,原始异常没有被记录也没有被重新抛出,这段 catch 块的语义很可能是错误的:异常在无人知晓的情况下被吞掉。
建议: 如需记录并重新抛出,应使用 `console.error(e); throw new Error('reassigned', { cause: e });`;如果只是演示重抛,应该写 `throw e;`