refactor: 品牌重命名 + maxTokens 支持 + 设置面板简化
- CodeGuard → Code Purifier / 净码特工(displayName、命令、配置标题) - 新增 ai.maxTokens 配置项,所有 Provider 及 fixer 传入 maxTokens - AI 引擎增强:repairJsonEscapes + JSON 解析 fallback + 详细错误信息 - 设置面板规则管理改为文件级(list/delete .yaml),addRule 改为 AI 从 Markdown 生成 YAML - yaml-parser 简化:移除 config.yaml 的 enable/disable 过滤逻辑 - 审查报告面板:errorBanner 优先显示具体错误、lint 诊断显示 suggestion、移除 translatedDiagnostics 独立渲染 - merger 中 translatedDiagnostics 覆盖原始 lint 诊断 message/suggestion - HTML linter 配置项、测试用例重写、typescript-eslint 移入 dependencies
This commit is contained in:
+3
-9
@@ -1,5 +1,5 @@
|
||||
import * as esbuild from 'esbuild';
|
||||
import { copyFileSync, mkdirSync, existsSync, cpSync } from 'fs';
|
||||
import { copyFileSync, mkdirSync, existsSync } from 'fs';
|
||||
import { resolve, dirname } from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
|
||||
@@ -33,20 +33,14 @@ await esbuild.build({
|
||||
treeShaking: true,
|
||||
});
|
||||
|
||||
const jarsSrc = resolve(rootDir, 'jars');
|
||||
const jarsDest = resolve(outDir, 'jars');
|
||||
if (existsSync(jarsSrc)) {
|
||||
cpSync(jarsSrc, jarsDest, { recursive: true, force: true });
|
||||
}
|
||||
|
||||
/* copy webview JS files */
|
||||
const viewsSrc = resolve(rootDir, 'src', 'views');
|
||||
const viewsDest = resolve(outDir, 'views');
|
||||
const webviewDir = resolve(outDir, 'webview');
|
||||
if (existsSync(viewsSrc)) {
|
||||
const files = ['setupView.js'];
|
||||
for (const f of files) {
|
||||
const src = resolve(viewsSrc, f);
|
||||
const dest = resolve(viewsDest, f);
|
||||
const dest = resolve(webviewDir, f);
|
||||
if (existsSync(src)) {
|
||||
mkdirSync(dirname(dest), { recursive: true });
|
||||
copyFileSync(src, dest);
|
||||
|
||||
@@ -10,7 +10,8 @@ const srcViews = resolve(rootDir, 'src', 'views');
|
||||
const files = ['setupView.js'];
|
||||
for (const f of files) {
|
||||
const src = resolve(srcViews, f);
|
||||
const dest = resolve(outViews, f);
|
||||
const webviewDir = resolve(rootDir, 'out', 'webview');
|
||||
const dest = resolve(webviewDir, f);
|
||||
if (existsSync(src)) {
|
||||
mkdirSync(dirname(dest), { recursive: true });
|
||||
copyFileSync(src, dest);
|
||||
|
||||
+32
-17
@@ -8,14 +8,26 @@ const rootDir = resolve(__dirname, '..');
|
||||
const libDir = resolve(rootDir, 'jars', 'pmd', 'lib');
|
||||
|
||||
const PMD_VERSION = '7.26.0';
|
||||
const PMD_JARS = [
|
||||
`pmd-core-${PMD_VERSION}.jar`,
|
||||
`pmd-java-${PMD_VERSION}.jar`,
|
||||
`pmd-javascript-${PMD_VERSION}.jar`,
|
||||
`pmd-jsp-${PMD_VERSION}.jar`,
|
||||
];
|
||||
const MAVEN_BASE = 'https://repo1.maven.org/maven2';
|
||||
|
||||
const MAVEN_BASE = `https://repo1.maven.org/maven2/net/sourceforge/pmd`;
|
||||
const JARS = [
|
||||
{ path: `net/sourceforge/pmd/pmd-core/${PMD_VERSION}/pmd-core-${PMD_VERSION}.jar` },
|
||||
{ path: `net/sourceforge/pmd/pmd-java/${PMD_VERSION}/pmd-java-${PMD_VERSION}.jar` },
|
||||
{ path: `net/sourceforge/pmd/pmd-javascript/${PMD_VERSION}/pmd-javascript-${PMD_VERSION}.jar` },
|
||||
{ path: `net/sourceforge/pmd/pmd-jsp/${PMD_VERSION}/pmd-jsp-${PMD_VERSION}.jar` },
|
||||
{ path: 'org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar' },
|
||||
{ path: 'org/slf4j/jul-to-slf4j/1.7.36/jul-to-slf4j-1.7.36.jar' },
|
||||
{ path: 'org/antlr/antlr4-runtime/4.13.2/antlr4-runtime-4.13.2.jar' },
|
||||
{ path: 'net/sf/saxon/Saxon-HE/12.9/Saxon-HE-12.9.jar' },
|
||||
{ path: 'org/apache/commons/commons-lang3/3.20.0/commons-lang3-3.20.0.jar' },
|
||||
{ path: 'org/ow2/asm/asm/9.10.1/asm-9.10.1.jar' },
|
||||
{ path: 'com/google/code/gson/gson/2.14.0/gson-2.14.0.jar' },
|
||||
{ path: 'org/checkerframework/checker-qual/4.2.0/checker-qual-4.2.0.jar' },
|
||||
{ path: 'org/pcollections/pcollections/4.0.2/pcollections-4.0.2.jar' },
|
||||
{ path: 'com/github/oowekyala/ooxml/nice-xml-messages/3.1/nice-xml-messages-3.1.jar' },
|
||||
{ path: 'org/xmlresolver/xmlresolver/5.3.3/xmlresolver-5.3.3.jar' },
|
||||
{ path: 'com/google/errorprone/error_prone_annotations/2.47.0/error_prone_annotations-2.47.0.jar' },
|
||||
];
|
||||
|
||||
function downloadFile(url, dest) {
|
||||
return new Promise((resolvePromise, reject) => {
|
||||
@@ -25,6 +37,10 @@ function downloadFile(url, dest) {
|
||||
downloadFile(response.headers.location, dest).then(resolvePromise).catch(reject);
|
||||
return;
|
||||
}
|
||||
if (response.statusCode !== 200) {
|
||||
reject(new Error(`HTTP ${response.statusCode} for ${url}`));
|
||||
return;
|
||||
}
|
||||
response.pipe(file);
|
||||
file.on('finish', () => { file.close(); resolvePromise(); });
|
||||
file.on('error', (err) => { unlinkSync(dest); reject(err); });
|
||||
@@ -36,19 +52,18 @@ if (!existsSync(libDir)) {
|
||||
mkdirSync(libDir, { recursive: true });
|
||||
}
|
||||
|
||||
for (const jar of PMD_JARS) {
|
||||
const moduleName = jar.replace(`-${PMD_VERSION}.jar`, '').replace('pmd-', '');
|
||||
const url = `${MAVEN_BASE}/pmd-${moduleName}/${PMD_VERSION}/${jar}`;
|
||||
const dest = resolve(libDir, jar);
|
||||
|
||||
let count = 0;
|
||||
for (const jar of JARS) {
|
||||
const filename = jar.path.split('/').pop();
|
||||
const dest = resolve(libDir, filename);
|
||||
if (existsSync(dest)) {
|
||||
console.log(`Skip: ${jar} (exists)`);
|
||||
console.log(`Skip: ${filename}`);
|
||||
continue;
|
||||
}
|
||||
|
||||
console.log(`Downloading: ${url}`);
|
||||
const url = `${MAVEN_BASE}/${jar.path}`;
|
||||
console.log(`Downloading ${filename}...`);
|
||||
await downloadFile(url, dest);
|
||||
console.log(`Done: ${jar}`);
|
||||
count++;
|
||||
}
|
||||
|
||||
console.log('PMD JARs download complete.');
|
||||
console.log(`Done. Downloaded ${count} new JARs. Total: ${JARS.length} JARs in ${libDir}`);
|
||||
|
||||
Reference in New Issue
Block a user