feat: AI 修复预生成 + 审查面板 diff 预览两步确认 + SQLFluff 行号修复 + PMD 内置规则精简

- AI 修复预生成:静态/custom/AI 条目审查时预生成修复片段(originalText/newText),展开问题即显示行级 diff,无预生成时展示占位提示,匹配失败回退实时 LLM 生成

- 修复前 diff 预览:侧边新建编辑器组打开内置 diff,确认后写入(两步确认),不覆盖当前文件

- fix: sqlfluff 在 jinja 标签位于注释内时 JJ01 JSON 缺失 end_line_no/end_line_pos,适配器 Range 构造产生 NaN 被 VSCode 交换 start/end 导致行号 LNaN;新增 resolveSqlFluffRange 兜底 + 面板/report 行号 Number.isFinite 防御

- fix: 从 PMD 内置 ruleset 移除 5 条实际不可触发规则(AvoidAssertAsIdentifier、AvoidEnumAsIdentifier、AccessorClassGeneration、AccessorMethodGeneration、LoosePackageCoupling),内置配置 274→269 条全部可触发,同步 static-rules.json 与翻译脚本

- docs: README/DESIGN 更新
This commit is contained in:
范智鹏
2026-08-25 21:58:14 +08:00
parent 59e5fcde8c
commit 9c676e46e6
22 changed files with 445 additions and 86 deletions
-3
View File
@@ -1,7 +1,5 @@
export default {
'pmd/AbstractClassWithoutAbstractMethod': { zh: '抽象类不包含任何抽象方法', ja: '抽象クラスに抽象メソッドが含まれていない' },
'pmd/AccessorClassGeneration': { zh: '避免从外部通过私有构造函数实例化', ja: '外部からプライベートコンストラクタでインスタンス化することを避ける' },
'pmd/AccessorMethodGeneration': { zh: '避免合成访问器方法', ja: '合成アクセッサメソッドを避ける' },
'pmd/ArrayIsStoredDirectly': { zh: '存储到构造函数/方法前应克隆对象', ja: 'コンストラクタやメソッドに格納する前にオブジェクトをクローンする' },
'pmd/AssertStatementInTest': { zh: '测试代码中不应使用断言语句', ja: 'テストコードで assert 文を使用すべきでない' },
'pmd/AvoidMessageDigestField': { zh: '不要将 MessageDigest 声明为字段(线程安全)', ja: 'MessageDigest をフィールドとして宣言しない(スレッド安全性)' },
@@ -136,7 +134,6 @@ export default {
'pmd/InvalidJavaBean': { zh: 'Bean 不符合 JavaBeans 规范', ja: 'Bean が JavaBeans 仕様に従っていない' },
'pmd/LawOfDemeter': { zh: '潜在的迪米特法则违规', ja: '潜在的な LoD 違反' },
'pmd/LogicInversion': { zh: '使用相反的运算符替代 !', ja: '! の代わりに反対の演算子を使用する' },
'pmd/LoosePackageCoupling': { zh: '避免使用包层次之外的类', ja: 'パッケージ階層外のクラスの使用を避ける' },
'pmd/MutableStaticState': { zh: '非私有非 final 的静态字段', ja: '非 private かつ非 final の静的フィールド' },
'pmd/NcssCount': { zh: '非注释源码语句度量', ja: '非コメントソース文のメトリクス' },
'pmd/NPathComplexity': { zh: 'NPath 复杂度阈值', ja: 'NPath 複雑度の閾値' },
-2
View File
@@ -3,13 +3,11 @@ export default {
'pmd/AssignmentInOperand': { zh: '避免在操作数中赋值', ja: 'オペランド内での代入を避ける' },
'pmd/AssignmentToNonFinalStatic': { zh: '构造函数中对非 final 静态字段的不安全赋值', ja: 'コンストラクタ内の非 final 静的フィールドへの安全でない代入' },
'pmd/AvoidAccessibilityAlteration': { zh: '不要使用 setAccessible(true)', ja: 'setAccessible(true) を使用しない' },
'pmd/AvoidAssertAsIdentifier': { zh: 'assert 是保留字(Java <1.4', ja: 'assert は予約語である(Java <1.4' },
'pmd/AvoidBranchingStatementAsLastInLoop': { zh: '循环体最后的跳转语句', ja: 'ループの最後の分岐文' },
'pmd/AvoidCallingFinalize': { zh: '不要显式调用 finalize()', ja: 'finalize() を明示的に呼ばない' },
'pmd/AvoidCatchingGenericException': { zh: '不要捕获泛化异常', ja: '汎用例外を捕捉しない' },
'pmd/AvoidDecimalLiteralsInBigDecimalConstructor': { zh: 'BigDecimal 使用 String 构造函数', ja: 'BigDecimal には String コンストラクタを使用する' },
'pmd/AvoidDuplicateLiterals': { zh: '避免重复的 String 字面量', ja: '重複する文字列リテラルを避ける' },
'pmd/AvoidEnumAsIdentifier': { zh: 'enum 是保留字(Java <1.5', ja: 'enum は予約語である(Java <1.5' },
'pmd/AvoidFieldNameMatchingMethodName': { zh: '字段名与方法名相同', ja: 'フィールド名とメソッド名が一致する' },
'pmd/AvoidFieldNameMatchingTypeName': { zh: '字段名与类型名相同', ja: 'フィールド名と型名が一致する' },
'pmd/AvoidInstanceofChecksInCatchClause': { zh: '使用单独的 catch 子句', ja: '個別の catch 句を使用する' },