feat: 编辑器波浪线自动标记 + SQLFluff 默认方言改 oracle + AI 审查行号修正
- 波浪线标记:打开/编辑/保存自动静态分析,新增 markers.enabled 配置与 onStartupFinished 激活,带防抖与版本竞态保护 - SQLFluff:默认方言 sql->oracle;PRS 解析错误改用 i18n 三语友好提示(含当前方言与配置指引)并提升为 error - AI 审查:mergeResults 统一 aiFindings 行号为 0 基,修复整文件审查行号偏移 1 行
This commit is contained in:
@@ -174,3 +174,8 @@
|
||||
| 2026-08-03 22:11 | ① 用户提出 → ② 需求澄清 → ③ 方案设计 → ④ 人类审批 → ⑤ 编码实现 → ⑥ 审查验证 | 默认方言调整:DIALECT_MAP sql 映射 ansi→mysql(plsql 保持 oracle),setupView 项目配置模板 dialect postgres→mysql;优先级不变(显式 sqlfluff.dialect > 全局/项目配置 > 语言映射兜底) | 中间产物:无;实证(sqlfluff 4.2.2):反引号 MySQL 脚本在适配器内置配置(dialect=mysql)下正常解析无 PRS(此前 ansi 会 PRS 失败),验证中途发现 PowerShell 转义将反引号变双引号导致的 PRS 误报(MySQL 双引号=字符串,非产品问题);测试沿用移开 adapter.test.ts 方案 64 用例通过(1 个既有 extension 激活失败与本变更无关) | src/adapters/sqlfluff.ts, src/views/setupView.ts | deepseek-v4-flash |
|
||||
| 2026-08-03 22:18 | ① 用户提出 → ② 需求澄清 → ③ 方案设计 → ④ 人类审批 → ⑤ 编码实现 → ⑥ 审查验证 | 修复 JSP 适配器两处缺陷:(1) 整文件检查改用 PMD JSP 规则集(新增 pmd.ts checkJsp(),优先级 getPMDJspRulesetPath > 内置 pmd-jsp-ruleset.xml,此前该配置零使用导致整文件 files:[]);(2) 提取的 <% %> Java 片段裸语句无法被 PMD 按编译单元解析(ParseException)→ 按 scriptletKind 包装成 package jsp; class JspScriptlet{...} 再交 PMD,用 codeLineOffset 映射回原文行号并过滤合成包装噪音(NoPackage/AtLeastOneConstructor 等);jsp-extractor.ts 区分 5 种标签(注释/指令跳过、declaration/expression/statement 标记 kind);PmdRunner.java 新增第 3 参数指定 stdin 临时文件扩展名(jsp 用 .jsp,未保存 JSP 也可走 JSP 语言模块)并重编译 | 中间产物:无;实证(PMD 7.26.0):含违规 JSP 检出 JspEncoding/NoScriptlets + EmptyControlStatement/UnusedLocalVariable/UnusedPrivateField 等,行号正确映射、无合成噪音;stdin+.jsp 扩展名路径验证通过;测试沿用移开 adapter.test.ts 方案 64 用例通过(1 个既有 extension 激活失败与本变更无关) | src/jsp/jsp-extractor.ts, src/adapters/jsp.ts, src/adapters/pmd.ts, jars/pmd/PmdRunner.java(重编译 PmdRunner.class) | deepseek-v4-flash |
|
||||
| 2026-08-03 22:42 | ① 用户提出 → ② 需求澄清 → ③ 方案设计 → ④ 人类审批 → ⑤ 编码实现 → ⑥ 审查验证 | 诊断按严重度+行号排序:mergeResults 集中排序(error<warning<info<其他,同级按 range.start.line 升序,Node 22 稳定排序),linterDiagnostics/customRuleDiagnostics/aiFindings 三数组统一;翻译映射在排序前完成;fixableLinterIndices/fixableCustomIndices 基于排序后数组重算;新增 merger.test.ts 排序测试 | 中间产物:测试断言首次行号基准错误(customRuleDiagnostics range 为 line-1 0 基,断言误用 1 基)→ 修正为 error:1/info:8;测试沿用移开 adapter.test.ts 方案 65 用例通过(新增排序用例,1 个既有 extension 激活失败与本变更无关) | src/merger/merger.ts, src/test/merger.test.ts | deepseek-v4-flash |
|
||||
| 2026-08-04 20:34 | ① 用户提出 → ② 需求澄清 → ③ 方案设计 → ④ 人类审批 → ⑤ 编码实现 → ⑥ 审查验证 | 内置配置默认方言调整:DIALECT_MAP 中 sql 映射由 mysql 改为 oracle,sql 文件未显式配置方言且无项目 .sqlfluff 时,内置配置按 oracle 审查(plsql 仍为 oracle) | 无 | src/adapters/sqlfluff.ts | deepseek-v4-flash |
|
||||
| 2026-08-04 20:48 | ① 用户提出 → ② 需求澄清 → ③ 方案设计 → ④ 人类审批 → ⑤ 编码实现 → ⑥ 审查验证 | 编辑器波浪线标记功能:新增 src/diagnostics/diagnosticMarkers.ts(DiagnosticMarkers 类封装 createDiagnosticCollection('codeReviewer') + 纯函数 toVscodeDiagnostics 严重度映射 error/warning/info→Error/Warning/Information 并加 [ruleId] 前缀 + isMarkersEnabled 配置读取);extension.ts 集成四时机(onDidOpenTextDocument file scheme 自动静态分析并应用、保存 debounce 500ms 结果应用到标记、onDidChangeTextDocument 编辑时清除、onDidCloseTextDocument 清除并入 statusCache 清理)+ 版本号校验防异步竞态(结果返回时文档已改/已关则不应用);commands.ts 完整审查命令 codeReviewer.review 完成后应用翻译后 linterDiagnostics(reviewMethod 不触碰标记);package.json 新增 vscode-code-reviewer.markers.enabled(默认 true);新增 src/test/diagnostics.test.ts 4 用例(severity 映射/range 透传/ruleId 前缀/空数组) | 中间产物:临时 .vscode-test-diag.mjs 配置(限定仅跑诊断测试,4 用例通过后删除);全量测试沿用团队既有惯例临时移开 adapter.test.js/extension.test.js(stylelint-config-recommended@18 ESM-only 无 exports.main 使 CJS require 失败的既有问题,extension 激活亦受其阻),其余 69 用例全部通过后恢复原文件 | src/diagnostics/diagnosticMarkers.ts(新增), src/test/diagnostics.test.ts(新增), src/extension.ts, src/activation/commands.ts, package.json | deepseek-v4-flash |
|
||||
| 2026-08-04 20:59 | ① 用户提出 → ② 需求澄清 → ③ 方案设计 → ④ 人类审批 → ⑤ 编码实现 → ⑥ 审查验证 | 修复 AI 审查行号显示错误(整文件审查多 1 行):根因是 AI 返回的 findings[].line 为 1 基(基于带行号代码),而 webview/report 按 0 基处理(buildIssueItem/formatLine 显示 line+1、navigate 直接作 0 基跳转),方法级审查因 commands.ts 已转 0 基而正确、两条路径基准不一致。修复:mergeResults 统一将 aiFindings.line 转 0 基(Math.max(0, f.line-1)),reviewMethod 的 aiFindings 偏移由 f.line+methodLine-1 改为 f.line+methodLine(传 1 基文件行号交 mergeResults 转换,与 customRuleResults 语义一致);更新 merger.test.ts 排序断言(aiFindings error:3/warning:6)+ 新增 0 基转换用例 | 中间产物:无;根因追踪:先假设「mergeResults 统一转 0 基」并在 merger.test.ts 改写断言验证(4 passing);全量测试沿用既有惯例临时移开 adapter/extension.test.js 后 70 用例全部通过(新增 1 个转换用例),恢复原文件 | src/merger/merger.ts, src/activation/commands.ts, src/test/merger.test.ts | deepseek-v4-flash |
|
||||
| 2026-08-04 21:20 | ① 用户提出 → ② 需求澄清 → ③ 方案设计 → ④ 人类审批 → ⑤ 编码实现 → ⑥ 审查验证 | SQLFluff PRS 解析错误呈现优化:sqlfluff.ts 新增可导出纯函数 buildPRSMessage(正则提取 Found unparsable section 引号内片段、正则失败回退原文、换行单行化 \\n、超 80 字符截断 +...),check() 中 v.code==='PRS' 时 message 改用 i18n 友好提示(含当前生效方言 effectiveDialect=cliDialect??fallbackDialect + 配置指引)、severity 提升为 error(解析失败时后续规则不可信);messages.ts 新增 adapter.sqlfluffPRS 三语 key;新增 sqlfluff-prs.test.ts 4 用例(片段提取/换行单行化/截断/回退)。背景:问题面板报 PRS 显示原始 SQL 片段+重复行号前缀观感差,且 DIALECT_MAP 默认方言已改为 oracle(08-04 20:34 未提交改动)致 MySQL 风格 DDL 误报 PRS(已实证:同一 SQL mysql 方言解析通过、oracle 报 PRS) | 中间产物:测试首次用 msg.length<200 断言截断不稳定(中英模板长度差异致英文下超限,DEBUG 日志确认实际失败的是 truncate 用例而非 fallback 用例)→ 改为断言 !includes(longFragment)(验证全文被截断,不依赖模板总长);全量测试沿用既有惯例临时移开 adapter/extension.test.js 后 74 用例全部通过(新增 4 个 PRS 用例),恢复原文件 | src/adapters/sqlfluff.ts, src/i18n/messages.ts, src/test/sqlfluff-prs.test.ts(新增) | deepseek-v4-flash |
|
||||
| 2026-08-04 21:45 | ① 用户提出 → ② 需求澄清 → ③ 方案设计 → ④ 人类审批 → ⑤ 编码实现 → ⑥ 审查验证 | 修复已打开文件不静态分析、无波浪线问题:根因两处——① package.json activationEvents 为空导致插件不自动激活(onDidOpenTextDocument 对激活前已打开的文件永不触发);② activate 未遍历存量 textDocuments。改动:package.json activationEvents 加 onStartupFinished;extension.ts 新增 scheduleAnalysis(统一按 URI 防抖调度器,gate file scheme + markers.enabled)与 analyzeOpenDocuments(遍历已打开文档、活动文件优先、串行 await runStaticAndApply),activate 时调用;onDidChangeTextDocument 改为 clear 波浪线 + 1s 防抖自动重分析;onDidSaveTextDocument 改用 scheduleAnalysis(500) 替换原独立 debounceTimers Map。复用 runStaticAndApply 版本竞态保护,行为不变。设计文档 docs/superpowers/specs/2026-08-04-auto-static-analysis-design.md 已产出 | 中间产物:无(澄清阶段就"并发 vs 串行"向用户说明各 linter 执行成本后定为串行;激活顺序定为活动文件优先);lint/compile 通过 | package.json, src/extension.ts, docs/superpowers/specs/2026-08-04-auto-static-analysis-design.md(新增) | deepseek-v4-flash |
|
||||
|
||||
Reference in New Issue
Block a user