Files
2026Technology-Competition/scripts/translations/pmd-2.mjs
T
范智鹏 9c676e46e6 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 更新
2026-08-25 21:58:14 +08:00

123 lines
14 KiB
JavaScript
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.
export default {
'pmd/AssertEqualsArgumentOrder': { zh: 'assertEquals 的 expected/actual 参数顺序颠倒', ja: 'assertEquals の expected/actual 引数が逆' },
'pmd/AssignmentInOperand': { zh: '避免在操作数中赋值', ja: 'オペランド内での代入を避ける' },
'pmd/AssignmentToNonFinalStatic': { zh: '构造函数中对非 final 静态字段的不安全赋值', ja: 'コンストラクタ内の非 final 静的フィールドへの安全でない代入' },
'pmd/AvoidAccessibilityAlteration': { zh: '不要使用 setAccessible(true)', ja: 'setAccessible(true) を使用しない' },
'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/AvoidFieldNameMatchingMethodName': { zh: '字段名与方法名相同', ja: 'フィールド名とメソッド名が一致する' },
'pmd/AvoidFieldNameMatchingTypeName': { zh: '字段名与类型名相同', ja: 'フィールド名と型名が一致する' },
'pmd/AvoidInstanceofChecksInCatchClause': { zh: '使用单独的 catch 子句', ja: '個別の catch 句を使用する' },
'pmd/AvoidLiteralsInIfCondition': { zh: '避免 if 条件中的魔术数字', ja: 'if 条件内のマジックナンバーを避ける' },
'pmd/AvoidMultipleUnaryOperators': { zh: '避免多个一元运算符', ja: '複数の単項演算子を避ける' },
'pmd/AvoidSynchronizedStatement': { zh: '避免 synchronized 语句', ja: 'synchronized 文を避ける' },
'pmd/AvoidSynchronizedAtMethodLevel': { zh: '避免在方法级别使用 synchronized', ja: 'メソッドレベルでの synchronized を避ける' },
'pmd/AvoidThreadGroup': { zh: '避免使用 ThreadGroup', ja: 'ThreadGroup の使用を避ける' },
'pmd/AvoidUsingOctalValues': { zh: '避免八进制字面量', ja: '8進数リテラルを避ける' },
'pmd/AvoidUsingVolatile': { zh: '避免 volatile 关键字', ja: 'volatile キーワードを避ける' },
'pmd/BrokenNullCheck': { zh: '错误的 null 检查(|| 与 &&', ja: '壊れた null チェック(|| vs &&' },
'pmd/CallSuperFirst': { zh: 'super 应首先调用', ja: 'super を最初に呼ぶべきである' },
'pmd/CallSuperLast': { zh: 'super 应最后调用', ja: 'super を最後に呼ぶべきである' },
'pmd/CheckSkipResult': { zh: '检查 skip() 的返回值', ja: 'skip() の戻り値を確認する' },
'pmd/ClassCastExceptionWithToArray': { zh: 'Collection.toArray() 的 ClassCastException', ja: 'Collection.toArray() の ClassCastException' },
'pmd/CloneMethodMustBePublic': { zh: '实现 Cloneable 时 clone() 必须是 public', ja: 'Cloneable の場合 clone() は public でなければならない' },
'pmd/CloneMethodMustImplementCloneable': { zh: '只有实现 Cloneable 时才有 clone()', ja: 'Cloneable の場合のみ clone() を持つ' },
'pmd/CloneMethodReturnTypeMustMatchClassName': { zh: 'clone() 协变返回类型', ja: 'clone() の共変戻り値型' },
'pmd/CloseResource': { zh: '确保资源被关闭', ja: 'リソースが閉じられることを保証する' },
'pmd/CollectionTypeMismatch': { zh: '集合方法中的类型不匹配', ja: 'コレクションメソッド内の型不一致' },
'pmd/CompareObjectsWithEquals': { zh: '对象比较使用 equals() 而非 ==', ja: 'オブジェクトの比較に == ではなく equals() を使用する' },
'pmd/ComparisonWithNaN': { zh: 'NaN 比较总是返回 false', ja: 'NaN との比較は常に false を返す' },
'pmd/ConfusingArgumentToVarargsMethod': { zh: '澄清可变参数意图', ja: '可変長引数の意図を明確にする' },
'pmd/ConstructorCallsOverridableMethod': { zh: '构造函数调用可重写方法', ja: 'コンストラクタがオーバーライド可能なメソッドを呼ぶ' },
'pmd/DataflowAnomalyAnalysis': { zh: '数据流异常', ja: 'データフロー異常' },
'pmd/DoNotCallGarbageCollectionExplicitly': { zh: '不要显式调用 System.gc()', ja: 'System.gc() を明示的に呼ばない' },
'pmd/DoNotCallSystemExit': { zh: '不要调用 System.exit()', ja: 'System.exit() を呼ばない' },
'pmd/DoNotHardCodeSDCard': { zh: '不要硬编码 /sdcard 路径', ja: '/sdcard パスをハードコードしない' },
'pmd/DoNotThrowExceptionInFinally': { zh: '不要在 finally 中抛出异常', ja: 'finally で例外を投げない' },
'pmd/DoNotUseThreads': { zh: '不要使用线程', ja: 'スレッドを使用しない' },
'pmd/DontCallThreadRun': { zh: '不要调用 Thread.run()', ja: 'Thread.run() を呼ばない' },
'pmd/DoubleCheckedLocking': { zh: '双重检查锁定不是线程安全的', ja: '二重チェックロッキングはスレッド安全でない' },
'pmd/EmptyCatchBlock': { zh: '空 catch 块', ja: '空の catch ブロック' },
'pmd/EqualsNull': { zh: '与 null 进行相等比较', ja: 'null との等価比較' },
'pmd/FinallyBlockDoesNothing': { zh: 'finally 块什么也不做', ja: 'finally ブロックが何もしない' },
'pmd/IdempotentOperations': { zh: '幂等操作', ja: '冪等な操作' },
'pmd/ImplicitSwitchFallThrough': { zh: '隐式 switch fall through', ja: '暗黙の switch フォールスルー' },
'pmd/ImportFromSamePackage': { zh: '从同包导入', ja: '同一パッケージからのインポート' },
'pmd/InstantiationToGetClass': { zh: '仅为获取类而实例化', ja: 'クラス取得のためだけのインスタンス化' },
'pmd/InvalidLogMessageFormat': { zh: '无效的 SLF4J 消息格式', ja: '無効な SLF4J メッセージ形式' },
'pmd/JUnitSpelling': { zh: 'JUnit 方法拼写', ja: 'JUnit メソッドの綴り' },
'pmd/JUnitStaticSuite': { zh: 'JUnit 静态 suite 方法', ja: 'JUnit の静的 suite メソッド' },
'pmd/JumbledIncrementer': { zh: '混乱的增量器', ja: '入り混じったインクリメンタ' },
'pmd/LoggerIsNotStaticFinal': { zh: 'Logger 不是 static final', ja: 'Logger が static final でない' },
'pmd/MethodWithSameNameAsEnclosingClass': { zh: '方法与包围类同名', ja: 'メソッドが囲むクラスと同名' },
'pmd/MisplacedNullCheck': { zh: '位置错误的 null 检查', ja: '誤った位置の null チェック' },
'pmd/MissingBreakInSwitch': { zh: 'switch 中缺少 break', ja: 'switch 内の break 欠落' },
'pmd/MissingSerialVersionUID': { zh: '缺少 serialVersionUID', ja: 'serialVersionUID の欠落' },
'pmd/MissingStaticMethodInNonInstantiatableClass': { zh: '不可实例化类缺少静态方法', ja: 'インスタンス化できないクラスに静的メソッドがない' },
'pmd/MoreThanOneLogger': { zh: '多于一个 logger', ja: 'logger が複数ある' },
'pmd/NonCaseLabelInSwitch': { zh: 'switch 中的非 case 标签', ja: 'switch 内の非 case ラベル' },
'pmd/NonStaticInitializer': { zh: '非静态初始化器', ja: '非静的初期化子' },
'pmd/NonThreadSafeSingleton': { zh: '单例不是线程安全的', ja: 'シングルトンがスレッド安全でない' },
'pmd/NullAssignment': { zh: 'null 赋值', ja: 'null 代入' },
'pmd/NumberConstructor': { zh: 'Number 构造函数(已废弃)', ja: 'Number コンストラクタ(非推奨)' },
'pmd/ObjectFinalize': { zh: 'Object finalize 问题', ja: 'Object finalize の問題' },
'pmd/OperationWithCloning': { zh: '克隆操作', ja: 'クローン操作' },
'pmd/OverrideBothEqualsAndHashcode': { zh: '同时重写 equals() 和 hashCode()', ja: 'equals() と hashCode() の両方をオーバーライドする' },
'pmd/OverridingThreadRun': { zh: '不要重写 Thread.run()', ja: 'Thread.run() をオーバーライドしない' },
'pmd/PackageDeclaration': { zh: '包声明', ja: 'パッケージ宣言' },
'pmd/ProperCloneImplementation': { zh: '正确的 clone 实现', ja: '適切な clone 実装' },
'pmd/ProperLogger': { zh: '正确的 logger', ja: '適切な logger' },
'pmd/ReturnFromFinallyBlock': { zh: '从 finally 返回', ja: 'finally からの return' },
'pmd/SimpleDateFormatNeedsLocale': { zh: 'SimpleDateFormat 需要 locale', ja: 'SimpleDateFormat に locale が必要' },
'pmd/SingleMethodSingleton': { zh: '单例模式问题', ja: 'シングルトンパターンの問題' },
'pmd/SingletonClassReturningNewInstance': { zh: '单例返回新实例', ja: 'シングルトンが新しいインスタンスを返す' },
'pmd/StaticEJBFieldShouldBeFinal': { zh: '静态 EJB 字段应为 final', ja: '静的 EJB フィールドは final にする' },
'pmd/StringBufferInstantiationWithChar': { zh: 'StringBuffer 带 char 实例化', ja: 'char を伴う StringBuffer インスタンス化' },
'pmd/SuspiciousConstantFieldName': { zh: '常量字段命名', ja: '定数フィールドの命名' },
'pmd/SuspiciousEqualsMethodName': { zh: 'equals() 方法签名', ja: 'equals() メソッドのシグネチャ' },
'pmd/SuspiciousHashcodeMethodName': { zh: 'hashCode() 方法签名', ja: 'hashCode() メソッドのシグネチャ' },
'pmd/SuspiciousOctalEscape': { zh: '可疑的八进制转义', ja: '疑わしい8進エスケープ' },
'pmd/TestClassWithoutTestCases': { zh: '没有测试用例的测试类', ja: 'テストケースのないテストクラス' },
'pmd/UnconditionalIfStatement': { zh: '无条件 if 语句', ja: '無条件の if 文' },
'pmd/UnnecessaryBooleanAssertion': { zh: '不必要的布尔断言', ja: '不要なブールアサーション' },
'pmd/UnnecessaryCaseChange': { zh: '不必要的大小写转换', ja: '不要なケース変換' },
'pmd/UnnecessaryConversionTemporal': { zh: '不必要的时间转换', ja: '不要な時間変換' },
'pmd/UnusedNullCheckInEquals': { zh: 'equals 中未使用的 null 检查', ja: 'equals 内の未使用 null チェック' },
'pmd/UseConcurrentHashMap': { zh: '并发访问使用 ConcurrentHashMap', ja: '並行アクセスに ConcurrentHashMap を使用する' },
'pmd/UseCorrectExceptionLogging': { zh: '正确的异常日志', ja: '適切な例外ログ' },
'pmd/UseDiamondOperator': { zh: '使用菱形运算符 <>', ja: 'ダイヤモンド演算子 <> を使用する' },
'pmd/UseEqualsToCompareStrings': { zh: '字符串比较使用 equals()', ja: '文字列の比較に equals() を使用する' },
'pmd/UseLocaleWithCaseConversions': { zh: '大小写转换使用 locale', ja: 'ケース変換に locale を使用する' },
'pmd/UseNotifyAllInsteadOfNotify': { zh: '使用 notifyAll() 替代 notify()', ja: 'notify() の代わりに notifyAll() を使用する' },
'pmd/UseProperClassLoader': { zh: '使用正确的类加载器', ja: '適切なクラスローダーを使用する' },
'pmd/AddEmptyString': { zh: '不要添加空字符串', ja: '空文字列を追加しない' },
'pmd/AppendCharacterWithChar': { zh: 'StringBuffer 中追加 char 而非 String', ja: 'StringBuffer には String ではなく char を追加する' },
'pmd/AvoidArrayLoops': { zh: '使用 Arrays.copyOf 或 System.arraycopy', ja: 'Arrays.copyOf または System.arraycopy を使用する' },
'pmd/AvoidCalendarDateCreation': { zh: '获取当前时间避免使用 Calendar', ja: '現在時刻に Calendar を使用しない' },
'pmd/AvoidFileStream': { zh: '避免 FileInputStream/FileOutputStream/FileReader/FileWriter', ja: 'FileInputStream/FileOutputStream/FileReader/FileWriter を避ける' },
'pmd/AvoidInstantiatingObjectsInLoops': { zh: '不要在循环中实例化对象', ja: 'ループ内でオブジェクトをインスタンス化しない' },
'pmd/BigIntegerInstantiation': { zh: '使用 BigInteger.ZERO/ONE/TEN', ja: 'BigInteger.ZERO/ONE/TEN を使用する' },
'pmd/ConsecutiveAppendsShouldReuse': { zh: '链式调用 StringBuilder.append', ja: 'StringBuilder.append をチェーンで呼ぶ' },
'pmd/ConsecutiveLiteralAppends': { zh: '合并字面量追加', ja: 'リテラルの追加を統合する' },
'pmd/InefficientEmptyStringCheck': { zh: '使用 isBlank() 替代 trim().isEmpty()', ja: 'trim().isEmpty() の代わりに isBlank() を使用する' },
'pmd/InefficientStringBuffering': { zh: '避免在 StringBuffer 构造函数中拼接', ja: 'StringBuffer コンストラクタ内での連結を避ける' },
'pmd/InsufficientStringBufferDeclaration': { zh: '预先指定 StringBuilder 容量', ja: 'StringBuilder の容量を事前指定する' },
'pmd/OptimizableToArrayCall': { zh: '使用 new Foo[0] 替代 new Foo[size]', ja: 'new Foo[size] の代わりに new Foo[0] を使用する' },
'pmd/RedundantFieldInitializer': { zh: '移除冗余的字段初始化器', ja: '冗長なフィールド初期化子を削除する' },
'pmd/StringInstantiation': { zh: '避免 new String()', ja: 'new String() を避ける' },
'pmd/StringToString': { zh: '避免对 String 调用 toString()', ja: 'String への toString() を避ける' },
'pmd/TooFewBranchesForSwitch': { zh: '少于3个分支的 switch', ja: '3未満のブランチの switch' },
'pmd/UseArrayListInsteadOfVector': { zh: '使用 ArrayList 替代 Vector', ja: 'Vector の代わりに ArrayList を使用する' },
'pmd/UseArraysAsList': { zh: '使用 Arrays.asList() 替代循环', ja: 'ループの代わりに Arrays.asList() を使用する' },
'pmd/UseIndexOfChar': { zh: '使用 indexOf(char) 而非 indexOf(String)', ja: 'indexOf(String) ではなく indexOf(char) を使用する' },
'pmd/UseIOStreamsWithApacheCommonsFileItem': { zh: '使用 getInputStream() 而非 get()', ja: 'get() ではなく getInputStream() を使用する' },
'pmd/UselessStringValueOf': { zh: '不要用 String.valueOf() 包裹', ja: 'String.valueOf() でラップしない' },
'pmd/UseStringBufferForStringAppends': { zh: '使用 StringBuilder 进行拼接', ja: '文字列連結に StringBuilder を使用する' },
'pmd/UseStringBufferLength': { zh: '使用 length() 替代 toString().equals("")', ja: 'toString().equals("") の代わりに length() を使用する' },
'pmd/HardCodedCryptoKey': { zh: '不要硬编码加密密钥', ja: '暗号鍵をハードコードしない' },
'pmd/InsecureCryptoIv': { zh: '不要硬编码初始化向量', ja: '初期化ベクタをハードコードしない' },
};