refactor: 优化 Vivado 配置检测逻辑

- 使用环境变量中的 vivado 命令替代磁盘路径搜索
   - 修改验证逻辑,支持环境变量命令
   - 简化自动检测函数实现
This commit is contained in:
Roe-xin
2026-03-17 10:20:46 +08:00
parent 5adde3d40a
commit ccbc40f5fb

View File

@ -51,9 +51,11 @@ export function validateConfig(config: VivadoConfig): string | null {
if (!config.enabled) {
return 'Vivado 未启用';
}
if (!fs.existsSync(config.executablePath)) {
// 如果是完整路径,检查文件是否存在
if (path.isAbsolute(config.executablePath) && !fs.existsSync(config.executablePath)) {
return `Vivado 可执行文件不存在: ${config.executablePath}`;
}
// 环境变量命令不检查,运行时会自动报错
return null;
}
@ -72,34 +74,14 @@ export function resolveWorkingDir(workingDir: string): string {
* 自动检测 Vivado
*/
function autoDetectVivado(): VivadoConfig | null {
const drives = ['C', 'D', 'E', 'F', 'G'];
for (const drive of drives) {
const vivadoDir = `${drive}:\\Xilinx\\Vivado`;
if (!fs.existsSync(vivadoDir)) {
continue;
}
// 读取所有版本目录
const versions = fs.readdirSync(vivadoDir)
.filter(v => fs.statSync(path.join(vivadoDir, v)).isDirectory())
.sort()
.reverse(); // 最新版本在前
for (const version of versions) {
const p = path.join(vivadoDir, version, 'bin', 'vivado.bat');
if (fs.existsSync(p)) {
const workspaceFolder = vscode.workspace.workspaceFolders?.[0];
// 默认使用环境变量中的 vivado 命令
return {
enabled: true,
executablePath: p,
executablePath: 'vivado',
workingDir: workspaceFolder
? path.join(workspaceFolder.uri.fsPath, 'vivado_projects')
: `${drive}:\\vivado_projects`
: path.join(process.env.USERPROFILE || 'C:\\Users\\Default', 'vivado_projects')
};
}
}
}
return null;
}