- 新增三个 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 种规则全覆盖)
5.2 KiB
5.2 KiB
代码审查报告
文件: data\demo-sqlfluff\src\03_caps.sql
语言: sql
耗时: 190.8s
分析工具: sqlfluff
总计: 29 | 错误: 25 | 警告: 2 | 建议: 2
静态分析 · 25 个问题
- 🔴
sqlfluff:CP01L11 第11行:关键字必须一律小写。 建议: 将 SELECT 改为小写 select。 - 🔴
sqlfluff:CP02L12 第12行:未加引号的标识符必须一律小写。 建议: 将 colA 改为小写 cola,并确保其他位置的同一标识符也统一小写。 - 🔴
sqlfluff:CP01L14 第14行:关键字必须一律小写。 建议: 将 FROM 改为小写 from。 - 🔴
sqlfluff:CP01L16 第16行:关键字必须一律小写。 建议: 将 WHERE 改为小写 where。 - 🔴
sqlfluff:CP02L17 第17行:未加引号的标识符必须一律小写。 建议: 将 coLa 改为小写 cola,与第12行的 colA 统一。 - 🔴
sqlfluff:CP01L20 第20行:关键字必须一律小写。 建议: 将 SELECT 改为小写 select。 - 🔴
sqlfluff:AL03L21 第21行:列表达式缺少别名。请使用显式 AS 子句。 建议: 为 SUM(amount) 添加别名,例如:SUM(amount) AS total_amount。 - 🔴
sqlfluff:AL03L22 第22行:列表达式缺少别名。请使用显式 AS 子句。 建议: 为 sum(quantity) 添加别名,例如:sum(quantity) AS total_quantity。 - 🔴
sqlfluff:CP03L22 第22行:函数名必须一律大写。 建议: 将 sum 改为 SUM,与第21行的 SUM 保持一致。 - 🔴
sqlfluff:CP01L23 第23行:关键字必须一律小写。 建议: 将 FROM 改为小写 from。 - 🔴
sqlfluff:CP01L27 第27行:关键字必须一律小写。 建议: 将 SELECT 改为小写 select。 - 🔴
sqlfluff:CP01L29 第29行:关键字必须一律小写。 建议: 将 FROM 改为小写 from。 - 🔴
sqlfluff:CP01L31 第31行:关键字必须一律小写。 建议: 将 WHERE 改为小写 where。 - 🔴
sqlfluff:CP01L32 第32行:关键字必须一律小写。 建议: 将 flag IS NULL 中的 IS 改为 is。 - 🔴
sqlfluff:CP01L32 第32行:关键字必须一律小写。 建议: 将 OR 改为 or。 - 🔴
sqlfluff:CP01L32 第32行:关键字必须一律小写。 建议: 将 other_flag IS null 中的 IS 改为 is。 - 🔴
sqlfluff:CP04L32 第32行:布尔/null 字面量必须一律大写。 建议: 将小写 null 改为 NULL。 - 🔴
sqlfluff:CP01L35 第35行:关键字必须一律小写。 建议: 将 SELECT 改为小写 select。 - 🔴
sqlfluff:AL03L36 第36行:列表达式缺少别名。请使用显式 AS 子句。 建议: 为 CAST(id AS VARCHAR) 添加别名,例如:CAST(id AS VARCHAR) AS id_string。 - 🔴
sqlfluff:CP01L36 第36行:关键字必须一律小写。 建议: 将 AS 改为小写 as。 - 🔴
sqlfluff:AL03L37 第37行:列表达式缺少别名。请使用显式 AS 子句。 建议: 为 CAST(amount AS varchar) 添加别名,例如:CAST(amount AS varchar) AS amount_string。 - 🔴
sqlfluff:CP01L37 第37行:关键字必须一律小写。 建议: 将 AS 改为小写 as。 - 🔴
sqlfluff:CP05L37 第37行:数据类型必须一律大写。 建议: 将 varchar 改为 VARCHAR,与第36行的 VARCHAR 保持一致。 - 🔴
sqlfluff:CP01L38 第38行:关键字必须一律小写。 建议: 将 FROM 改为小写 from。 - 🔴
sqlfluff:LT12L40 第40行:文件必须以单个尾部换行结束。 建议: 在文件末尾添加一个换行符,并确保没有多余的空行。
AI 审查 · 4 条建议
- 🟡 [AI] [bug]
or-condition-maybe-andL32 OR 条件可能将意图的 AND 写成 OR,导致结果范围扩大 第32行flag IS NULL OR other_flag IS null会返回只要任一标志为 NULL 的行;如果业务意图是查找两个标志都为 NULL 的行,应使用 AND。请确认实际语义。 建议: 若意图是同时为 NULL,请将 OR 改为 AND。 - 🟡 [AI] [bug]
cast-without-lengthL36 CAST 未指定目标长度,可能导致数据截断 第36行和第37行的 CAST 将列转换为 VARCHAR 时未指定长度。不同数据库对无长度 VARCHAR 的默认行为不同(如 SQL Server 默认 30,Oracle 要求必须指定),若 id/amount 超出默认长度将产生静默截断。 建议: 为 CAST 指定明确的长度,例如 CAST(id AS VARCHAR(20))、CAST(amount AS VARCHAR(20)),或根据业务使用更合适的类型。 - 🔵 [AI] [bug]
sum-may-return-nullL21 聚合函数 SUM 在无行时返回 NULL,可能影响下游计算 第21、22行的 SUM(amount) 和 sum(quantity) 如果没有匹配行,将返回 NULL 而非 0。如果业务逻辑期望数值 0,应使用 COALESCE 或 IFNULL 包裹。 建议: 使用 COALESCE(SUM(amount), 0) 和 COALESCE(SUM(quantity), 0) 以避免空值。 - 🔵 [AI] [performance]
or-condition-index-performanceL32 WHERE 中使用 OR 可能阻止索引使用 第32行对两个可空字段使用 OR 条件,这类谓词通常难以利用索引,在数据量大时容易导致全表扫描。 建议: 若两个条件的选择性都较低,可考虑改写为 UNION ALL 以分别利用索引(注意重复行问题),或在应用层拆分查询。如果数据量不大,保持 OR 也可接受。