Files
范智鹏 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

34 KiB

代码审查报告

文件: 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;