- 方法级审查:CodeLens 触发 + 单次 AI 调用(规则匹配 + 6 维度深度审查),新增 method-extractor / status-cache / codeLensProvider - 模板导入:severity 保留原始值 + 占位 id、去重对照统一 known-rules、重复提示条双语翻译、箭头展开/折叠 UI、520 条静态规则补 zh/ja 翻译 - SQL:sql-lint 重命名 sqlfluff + sqlfluff.dialect 方言可配置 + 默认方言调整 - ESLint:v9 flat config 接线修复(overrideConfigFile)+ legacy 迁移提示 - AI:空响应 EmptyContentError + 重试一次 + max_tokens 截断专用报错 - JSP:整文件检查走 PMD JSP 规则集 + scriptlet 包装解析 + 行号映射 - 诊断按 severity + 行号排序
48 lines
1.5 KiB
Java
48 lines
1.5 KiB
Java
import java.io.*;
|
|
import java.nio.file.*;
|
|
import net.sourceforge.pmd.*;
|
|
import net.sourceforge.pmd.renderers.*;
|
|
|
|
public class PmdRunner {
|
|
public static void main(String[] args) throws Exception {
|
|
if (args.length < 2) {
|
|
System.err.println("Usage: PmdRunner <filePath|- for stdin> <rulesetPath> [extension]");
|
|
System.exit(1);
|
|
return;
|
|
}
|
|
|
|
String filePath = args[0];
|
|
String rulesetPath = args[1];
|
|
String extension = args.length >= 3 ? args[2] : "java";
|
|
|
|
Path tempFile = null;
|
|
if ("-".equals(filePath)) {
|
|
String code = new String(System.in.readAllBytes());
|
|
tempFile = Files.createTempFile("pmd-stdin-", "." + extension);
|
|
Files.writeString(tempFile, code);
|
|
filePath = tempFile.toString();
|
|
}
|
|
|
|
try {
|
|
PMDConfiguration config = new PMDConfiguration();
|
|
config.addRuleSet(rulesetPath);
|
|
|
|
Writer writer = new StringWriter();
|
|
JsonRenderer renderer = new JsonRenderer();
|
|
renderer.setWriter(writer);
|
|
|
|
try (PmdAnalysis pmd = PmdAnalysis.create(config)) {
|
|
pmd.files().addFile(Path.of(filePath));
|
|
pmd.addRenderer(renderer);
|
|
pmd.performAnalysis();
|
|
}
|
|
|
|
System.out.print(writer.toString());
|
|
} finally {
|
|
if (tempFile != null) {
|
|
Files.deleteIfExists(tempFile);
|
|
}
|
|
}
|
|
}
|
|
}
|