From f6d6f47b621bb6ee1204d723933f288375d8710a Mon Sep 17 00:00:00 2001 From: LSTM-Kirigaya <1193466151@qq.com> Date: Mon, 2 Dec 2024 00:30:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=A7=E8=A1=8C=200.4.0=20=E7=AC=AC=E4=BA=8C?= =?UTF-8?q?=E8=BD=AE=E8=BF=AD=E4=BB=A3=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dide-lsp/static/xilinx/primitive.bin | Bin 3736879 -> 3736879 bytes src/function/sim/instance.ts | 2 +- src/function/sim/simulate.ts | 2 +- src/function/tool.ts | 16 +++++++++++++++- src/function/treeView/tree.ts | 14 ++++++++------ src/hdlParser/core.ts | 13 +++++++------ src/manager/ignore.ts | 7 +++++++ 7 files changed, 39 insertions(+), 15 deletions(-) diff --git a/resources/dide-lsp/static/xilinx/primitive.bin b/resources/dide-lsp/static/xilinx/primitive.bin index 4bd7e11b4c61551dd61d4b55ff9203c942c78340..fe9c9f14c57a8aa02538db77d8bab01706f5f503 100644 GIT binary patch delta 4339 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 BzU2S_ delta 4354 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 VNWPaY+jEkD57UV%c(ET#{}1a|lzIRF diff --git a/src/function/sim/instance.ts b/src/function/sim/instance.ts index d2cb4e3..93b2967 100644 --- a/src/function/sim/instance.ts +++ b/src/function/sim/instance.ts @@ -75,7 +75,7 @@ function instanceVhdlCode(module: HdlModule) { instContent += `generic map(\n${param})\n`; } - instContent += `port map(\n${port});\n`; + instContent += `port map(\n${port.trim()}\n);\n`; return instContent; } diff --git a/src/function/sim/simulate.ts b/src/function/sim/simulate.ts index 9e523d3..c478a78 100644 --- a/src/function/sim/simulate.ts +++ b/src/function/sim/simulate.ts @@ -207,7 +207,7 @@ class IcarusSimulate extends Simulate { continue; } // icarus 不支持 IP - if (dep.startsWith(opeParam.prjInfo.ipPath)) { + if (opeParam.prjInfo.ipPath.length > 0 && dep.startsWith(opeParam.prjInfo.ipPath)) { MainOutput.report(t('error.simluate.icarus.use-ip', dep), { level: ReportType.Error }); continue; } diff --git a/src/function/tool.ts b/src/function/tool.ts index 8746649..13fc6bd 100644 --- a/src/function/tool.ts +++ b/src/function/tool.ts @@ -156,7 +156,21 @@ function exportFilelist(view: ModuleDataItem) { deps.others.forEach(path => fileset.add(path)); deps.include.forEach(path => fileset.add(path)); const filelist = [view.path]; - filelist.push(...fileset); + + for (const dep of fileset) { + // 去除其中的原语 + if (dep === 'xilinx-primitives') { + continue; + } + + // 去除其中的 IP 文件 + if (opeParam.prjInfo.ipPath.length > 0 && dep.startsWith(opeParam.prjInfo.ipPath)) { + continue; + } + + filelist.push(dep); + } + askUserToSaveFilelist(filelist); } else { vscode.window.showErrorMessage('fail to get deps of view ' + view.name); diff --git a/src/function/treeView/tree.ts b/src/function/treeView/tree.ts index f953827..964fc27 100644 --- a/src/function/treeView/tree.ts +++ b/src/function/treeView/tree.ts @@ -10,7 +10,6 @@ import { getIconConfig } from '../../hdlFs/icons'; import { DoFastFileType } from '../../global/lsp'; import { t } from '../../i18n'; -let needExpand = true; interface ModuleDataItem { icon: string, // 图标 @@ -118,10 +117,13 @@ class ModuleTreeProvider implements vscode.TreeDataProvider { let collapsibleState; if (!expandable) { collapsibleState = vscode.TreeItemCollapsibleState.None; - } else if (needExpand) { - collapsibleState = vscode.TreeItemCollapsibleState.Expanded; - } else { - collapsibleState = vscode.TreeItemCollapsibleState.Collapsed; + } else { + // 默认只让 src 和 sim 展开 + if (element.parent === undefined) { + collapsibleState = vscode.TreeItemCollapsibleState.Expanded; + } else { + collapsibleState = vscode.TreeItemCollapsibleState.Collapsed; + } } const treeItem = new vscode.TreeItem(itemName, collapsibleState); @@ -179,7 +181,7 @@ class ModuleTreeProvider implements vscode.TreeDataProvider { const hardwarePath = opeParam.prjInfo.arch.hardware; const moduleType = element.name as keyof (SrcPath & SimPath); - const topModules = hdlParam.getTopModulesByType(moduleType); + const topModules = hdlParam.getTopModulesByType(moduleType); const topModuleItemList = topModules.map(module => ({ icon: this.judgeTopModuleIconByDoFastType(module.file.doFastType), type: moduleType, diff --git a/src/hdlParser/core.ts b/src/hdlParser/core.ts index 308bf8e..1047d40 100644 --- a/src/hdlParser/core.ts +++ b/src/hdlParser/core.ts @@ -314,7 +314,7 @@ class HdlParam { for (const p of pools) { const increment = Math.floor(p.id / fileNum * 100); await p.promise; - console.log("handle id " + p.id + ' increment: ' + increment); + // console.log("handle id " + p.id + ' increment: ' + increment); progress?.report({ message: reportTitle + ` ${p.id}/${fileNum}`, increment }); } pools.length = 0; @@ -351,7 +351,7 @@ class HdlParam { for (const p of pools) { const increment = Math.floor(p.id / fileNum * 100); await p.promise; - console.log("handle id " + p.id + ' increment: ' + increment); + // console.log("handle id " + p.id + ' increment: ' + increment); progress?.report({ message: reportTitle + ` ${p.id}/${fileNum}`, increment }); } pools.length = 0; @@ -454,14 +454,15 @@ class HdlParam { public updateFast(path: string, fast: common.Fast) { const moduleFile = this.getHdlFile(path); + if (moduleFile === undefined) { return; } - // 1. update marco directly + // 1. 更新 macro moduleFile.updateMacro(fast.macro); - // 2. update modules one by one + // 2. 增量更新所有 module const uncheckedModuleNames = new Set(); for (const name of moduleFile.getAllModuleNames()) { uncheckedModuleNames.add(name); @@ -482,7 +483,7 @@ class HdlParam { } } - // 3. delete module not visited yet + // 3. 删除没有被访问到的 module for (const moduleName of uncheckedModuleNames) { moduleFile.deleteHdlModule(moduleName); } @@ -1078,7 +1079,7 @@ export class HdlFile { hdlParam.setHdlFile(this); // make nameToModule - this.nameToModule = new Map(); + this.nameToModule = new Map(); for (const rawHdlModule of modules) { this.createHdlModule(rawHdlModule); } diff --git a/src/manager/ignore.ts b/src/manager/ignore.ts index d5e6fe9..007e1c8 100644 --- a/src/manager/ignore.ts +++ b/src/manager/ignore.ts @@ -23,6 +23,13 @@ class HdlIgnore { let relativePath = hdlPath.toPureRelativePath(hdlPath.relative(workspace, path)); for (const pattern of this.patterns) { + // 1. 如果当前 pattern 是一个文件夹,则通过包含前缀匹配 + const patternAbsPath = hdlPath.join(workspace, pattern); + if (fspath.isAbsolute(patternAbsPath) && relativePath.startsWith(pattern)) { + return true; + } + + // 2. 通过 glob 进行匹配 const matched = minimatch(relativePath, pattern); if (matched) { return true;