Files
2026Technology-Competition/data/demo-sqlfluff/reports/03_caps-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

108 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 代码审查报告
**文件:** `data\demo-sqlfluff\src\03_caps.sql`
**语言:** sql
**耗时:** 190.8s
**分析工具:** sqlfluff
---
总计: 29 | 错误: 25 | 警告: 2 | 建议: 2
静态分析 · 25 个问题
- 🔴 `sqlfluff:CP01` L11
第11行:关键字必须一律小写。
建议: 将 SELECT 改为小写 select。
- 🔴 `sqlfluff:CP02` L12
第12行:未加引号的标识符必须一律小写。
建议: 将 colA 改为小写 cola,并确保其他位置的同一标识符也统一小写。
- 🔴 `sqlfluff:CP01` L14
第14行:关键字必须一律小写。
建议: 将 FROM 改为小写 from。
- 🔴 `sqlfluff:CP01` L16
第16行:关键字必须一律小写。
建议: 将 WHERE 改为小写 where。
- 🔴 `sqlfluff:CP02` L17
第17行:未加引号的标识符必须一律小写。
建议: 将 coLa 改为小写 cola,与第12行的 colA 统一。
- 🔴 `sqlfluff:CP01` L20
第20行:关键字必须一律小写。
建议: 将 SELECT 改为小写 select。
- 🔴 `sqlfluff:AL03` L21
第21行:列表达式缺少别名。请使用显式 AS 子句。
建议: 为 SUM(amount) 添加别名,例如:SUM(amount) AS total_amount。
- 🔴 `sqlfluff:AL03` L22
第22行:列表达式缺少别名。请使用显式 AS 子句。
建议: 为 sum(quantity) 添加别名,例如:sum(quantity) AS total_quantity。
- 🔴 `sqlfluff:CP03` L22
第22行:函数名必须一律大写。
建议: 将 sum 改为 SUM,与第21行的 SUM 保持一致。
- 🔴 `sqlfluff:CP01` L23
第23行:关键字必须一律小写。
建议: 将 FROM 改为小写 from。
- 🔴 `sqlfluff:CP01` L27
第27行:关键字必须一律小写。
建议: 将 SELECT 改为小写 select。
- 🔴 `sqlfluff:CP01` L29
第29行:关键字必须一律小写。
建议: 将 FROM 改为小写 from。
- 🔴 `sqlfluff:CP01` L31
第31行:关键字必须一律小写。
建议: 将 WHERE 改为小写 where。
- 🔴 `sqlfluff:CP01` L32
第32行:关键字必须一律小写。
建议: 将 flag IS NULL 中的 IS 改为 is。
- 🔴 `sqlfluff:CP01` L32
第32行:关键字必须一律小写。
建议: 将 OR 改为 or。
- 🔴 `sqlfluff:CP01` L32
第32行:关键字必须一律小写。
建议: 将 other_flag IS null 中的 IS 改为 is。
- 🔴 `sqlfluff:CP04` L32
第32行:布尔/null 字面量必须一律大写。
建议: 将小写 null 改为 NULL。
- 🔴 `sqlfluff:CP01` L35
第35行:关键字必须一律小写。
建议: 将 SELECT 改为小写 select。
- 🔴 `sqlfluff:AL03` L36
第36行:列表达式缺少别名。请使用显式 AS 子句。
建议: 为 CAST(id AS VARCHAR) 添加别名,例如:CAST(id AS VARCHAR) AS id_string。
- 🔴 `sqlfluff:CP01` L36
第36行:关键字必须一律小写。
建议: 将 AS 改为小写 as。
- 🔴 `sqlfluff:AL03` L37
第37行:列表达式缺少别名。请使用显式 AS 子句。
建议: 为 CAST(amount AS varchar) 添加别名,例如:CAST(amount AS varchar) AS amount_string。
- 🔴 `sqlfluff:CP01` L37
第37行:关键字必须一律小写。
建议: 将 AS 改为小写 as。
- 🔴 `sqlfluff:CP05` L37
第37行:数据类型必须一律大写。
建议: 将 varchar 改为 VARCHAR,与第36行的 VARCHAR 保持一致。
- 🔴 `sqlfluff:CP01` L38
第38行:关键字必须一律小写。
建议: 将 FROM 改为小写 from。
- 🔴 `sqlfluff:LT12` L40
第40行:文件必须以单个尾部换行结束。
建议: 在文件末尾添加一个换行符,并确保没有多余的空行。
AI 审查 · 4 条建议
- 🟡 [AI] [bug] `or-condition-maybe-and` L32
**OR 条件可能将意图的 AND 写成 OR,导致结果范围扩大**
第32行 `flag IS NULL OR other_flag IS null` 会返回只要任一标志为 NULL 的行;如果业务意图是查找两个标志都为 NULL 的行,应使用 AND。请确认实际语义。
建议: 若意图是同时为 NULL,请将 OR 改为 AND。
- 🟡 [AI] [bug] `cast-without-length` L36
**CAST 未指定目标长度,可能导致数据截断**
第36行和第37行的 CAST 将列转换为 VARCHAR 时未指定长度。不同数据库对无长度 VARCHAR 的默认行为不同(如 SQL Server 默认 30Oracle 要求必须指定),若 id/amount 超出默认长度将产生静默截断。
建议: 为 CAST 指定明确的长度,例如 CAST(id AS VARCHAR(20))、CAST(amount AS VARCHAR(20)),或根据业务使用更合适的类型。
- 🔵 [AI] [bug] `sum-may-return-null` L21
**聚合函数 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-performance` L32
**WHERE 中使用 OR 可能阻止索引使用**
第32行对两个可空字段使用 OR 条件,这类谓词通常难以利用索引,在数据量大时容易导致全表扫描。
建议: 若两个条件的选择性都较低,可考虑改写为 UNION ALL 以分别利用索引(注意重复行问题),或在应用层拆分查询。如果数据量不大,保持 OR 也可接受。