From fb157d07a9909ab3a61310157fc0fc78278a69f3 Mon Sep 17 00:00:00 2001 From: LSTM-Kirigaya <1193466151@qq.com> Date: Tue, 3 Dec 2024 18:35:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BB=93=E6=9E=84=E6=A0=91?= =?UTF-8?q?=E9=80=92=E5=BD=92=E6=B8=B2=E6=9F=93=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- images/svg/dark/dide.svg | 42 +++++++++++ images/svg/light/dide.svg | 42 +++++++++++ l10n/bundle.l10n.de.json | 3 +- l10n/bundle.l10n.en.json | 3 +- l10n/bundle.l10n.ja.json | 3 +- l10n/bundle.l10n.zh-cn.json | 3 +- l10n/bundle.l10n.zh-tw.json | 3 +- resources/dide-doc/documentation.css | 14 ++++ resources/dide-doc/icon.png | Bin 0 -> 20789 bytes resources/dide-doc/index.html | 1 + .../dide-lsp/static/xilinx/primitive.bin | Bin 3736879 -> 3740719 bytes src/function/hdlDoc/html.ts | 8 ++- src/function/hdlDoc/markdown.ts | 47 +++++++----- src/function/lsp-client/index.ts | 2 + src/function/treeView/tree.ts | 1 + src/hdlParser/common.ts | 1 + src/hdlParser/core.ts | 68 ++++++++++++++++-- 17 files changed, 207 insertions(+), 34 deletions(-) create mode 100644 images/svg/dark/dide.svg create mode 100644 images/svg/light/dide.svg create mode 100644 resources/dide-doc/icon.png diff --git a/images/svg/dark/dide.svg b/images/svg/dark/dide.svg new file mode 100644 index 0000000..28ba1ed --- /dev/null +++ b/images/svg/dark/dide.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/images/svg/light/dide.svg b/images/svg/light/dide.svg new file mode 100644 index 0000000..28ba1ed --- /dev/null +++ b/images/svg/light/dide.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/l10n/bundle.l10n.de.json b/l10n/bundle.l10n.de.json index 11a147a..01cf885 100644 --- a/l10n/bundle.l10n.de.json +++ b/l10n/bundle.l10n.de.json @@ -81,6 +81,5 @@ "error.simulation.error-happen-run-command": "Fehler bei der Icarus-Simulation:", "info.command.structure.transform-xilinx-to-standard": "Konvertiere Xilinx-Projektstruktur in Digital IDE-Standardstruktur", "error.command.structure.not-valid-xilinx-project": "Das aktuelle Projekt ist kein gültiges Xilinx-Projekt, die Konvertierung ist fehlgeschlagen!", - "info.command.structure.reload-vscode": "Projektstrukturkonvertierung abgeschlossen, bitte starten Sie vscode neu, um die Änderungen zu übernehmen.", - "info.common.confirm": "Bestätigen" + "info.common.codedoc": "Code-Dokumentation" } \ No newline at end of file diff --git a/l10n/bundle.l10n.en.json b/l10n/bundle.l10n.en.json index e2b8d22..3284640 100644 --- a/l10n/bundle.l10n.en.json +++ b/l10n/bundle.l10n.en.json @@ -81,6 +81,5 @@ "error.simulation.error-happen-run-command": "Error during Icarus simulation:", "info.command.structure.transform-xilinx-to-standard": "Converting Xilinx project structure to Digital IDE standard structure", "error.command.structure.not-valid-xilinx-project": "The current project is not a valid Xilinx project, the conversion failed!", - "info.command.structure.reload-vscode": "Project structure conversion completed, please restart vscode to apply the changes.", - "info.common.confirm": "Confirm" + "info.common.codedoc": "Code Documentation" } \ No newline at end of file diff --git a/l10n/bundle.l10n.ja.json b/l10n/bundle.l10n.ja.json index 8b53441..1a28725 100644 --- a/l10n/bundle.l10n.ja.json +++ b/l10n/bundle.l10n.ja.json @@ -81,6 +81,5 @@ "error.simulation.error-happen-run-command": "Icarusシミュレーション中にエラーが発生しました:", "info.command.structure.transform-xilinx-to-standard": "Xilinx プロジェクト構造を Digital IDE 標準構造に変換しています", "error.command.structure.not-valid-xilinx-project": "現在のプロジェクトは有効なXilinxプロジェクトではありません、変換に失敗しました!", - "info.command.structure.reload-vscode": "プロジェクト構造の変換が完了しました。変更を適用するために vscode を再起動してください。", - "info.common.confirm": "確認" + "info.common.codedoc": "コードドキュメント" } \ No newline at end of file diff --git a/l10n/bundle.l10n.zh-cn.json b/l10n/bundle.l10n.zh-cn.json index 299c638..78a78be 100644 --- a/l10n/bundle.l10n.zh-cn.json +++ b/l10n/bundle.l10n.zh-cn.json @@ -81,6 +81,5 @@ "error.simulation.error-happen-run-command": "Icarus 仿真时,出现错误:", "info.command.structure.transform-xilinx-to-standard": "正在将 Xilinx 项目结构转变为 Digital IDE 标准结构", "error.command.structure.not-valid-xilinx-project": "当前项目不是一个有效的 Xilinx 项目,转换失败!", - "info.command.structure.reload-vscode": "项目结构转换完成,请重启 vscode 使应用生效", - "info.common.confirm": "确定" + "info.common.codedoc": "代码文档" } \ No newline at end of file diff --git a/l10n/bundle.l10n.zh-tw.json b/l10n/bundle.l10n.zh-tw.json index 7d9500b..8463d8e 100644 --- a/l10n/bundle.l10n.zh-tw.json +++ b/l10n/bundle.l10n.zh-tw.json @@ -81,6 +81,5 @@ "error.simulation.error-happen-run-command": "Icarus 模擬時,出現錯誤:", "info.command.structure.transform-xilinx-to-standard": "正在將 Xilinx 專案結構轉變為 Digital IDE 標準結構", "error.command.structure.not-valid-xilinx-project": "當前專案不是一個有效的 Xilinx 專案,轉換失敗!", - "info.command.structure.reload-vscode": "專案結構轉換完成,請重新啟動 vscode 使應用生效。", - "info.common.confirm": "確定" + "info.common.codedoc": "程式碼文件" } \ No newline at end of file diff --git a/resources/dide-doc/documentation.css b/resources/dide-doc/documentation.css index c30e764..5d3b663 100644 --- a/resources/dide-doc/documentation.css +++ b/resources/dide-doc/documentation.css @@ -651,6 +651,20 @@ img { background-color: rgb(53,59,140); } +#write .source-ip-tag { + font-size: 0.85rem; + padding: 3px 4px; + border-radius: .5em; + background-color: rgb(24, 91, 149); +} + +#write .source-primitive-tag { + font-size: 0.85rem; + padding: 3px 4px; + border-radius: .5em; + background-color: rgb(108, 53, 140); +} + #write .source-unk-tag { font-size: 0.85rem; padding: 3px 4px; diff --git a/resources/dide-doc/icon.png b/resources/dide-doc/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..cec516344091a738cc033ad9c90594e0c6732f51 GIT binary patch literal 20789 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 FV1n9PXMF$w literal 0 HcmV?d00001 diff --git a/resources/dide-doc/index.html b/resources/dide-doc/index.html index 310e6ba..cb080a6 100644 --- a/resources/dide-doc/index.html +++ b/resources/dide-doc/index.html @@ -5,6 +5,7 @@ Digital IDE Document + diff --git a/resources/dide-lsp/static/xilinx/primitive.bin b/resources/dide-lsp/static/xilinx/primitive.bin index f987783049b0d35255b555b3e7d114d536eb5eae..aedc7c0ec16032aa9cda5915696878fce6fd1472 100644 GIT binary patch delta 11843 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 delta 10203 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 diff --git a/src/function/hdlDoc/html.ts b/src/function/hdlDoc/html.ts index 77692d5..08cf36e 100644 --- a/src/function/hdlDoc/html.ts +++ b/src/function/hdlDoc/html.ts @@ -9,6 +9,7 @@ import { Count, MarkdownString, ThemeColorConfig, WavedromString } from './commo import { getRenderList, getCurrentRenderList } from './markdown'; import { hdlPath, hdlIcon, hdlFile } from '../../hdlFs'; import { ThemeType } from '../../global/enum'; +import { t } from '../../i18n'; const _cache = { css : '' @@ -227,8 +228,9 @@ export async function makeDocWebview(uri: vscode.Uri, context: vscode.ExtensionC } ); - panel.iconPath = hdlIcon.getIconConfig('documentation'); - + panel.iconPath = hdlIcon.getIconConfig('dide'); + panel.title = t('info.common.codedoc') + ': ' + fspath.basename(uri.fsPath); + const html = getWebviewContent(context, panel); if (html === undefined) { return panel; @@ -241,7 +243,7 @@ export async function makeDocWebview(uri: vscode.Uri, context: vscode.ExtensionC let filePath: string = message.filePath; if (filePath.startsWith('file://')) { filePath = filePath.slice(7); - } + } vscode.commands.executeCommand('vscode.open', vscode.Uri.file(filePath)); return; case 'do-render': diff --git a/src/function/hdlDoc/markdown.ts b/src/function/hdlDoc/markdown.ts index 2696ee1..ab80e70 100644 --- a/src/function/hdlDoc/markdown.ts +++ b/src/function/hdlDoc/markdown.ts @@ -43,15 +43,34 @@ function selectFieldValue(obj: any, subName: string, ws: string, name: string, i if (fs.existsSync(value)) { // 判断 类型 const hdlFile = hdlParam.getHdlFile(value); - if (hdlFile && hdlFile.projectType === HdlFileProjectType.RemoteLib) { - // 如果是 库 文件,做出更加自定义的字面量 - const libRelPath = value.replace(`${opeParam.extensionPath}/library/`, ''); - value = `library [${libRelPath}](file://${value})`; - } else { + if (hdlFile) { + switch (hdlFile.projectType) { + case HdlFileProjectType.RemoteLib: + // 如果是 库 文件,做出更加自定义的字面量 + const libRelPath = value.replace(`${opeParam.extensionPath}/library/`, ''); + value = `library [${libRelPath}](file://${value})`; + break; + case HdlFileProjectType.IP: + // 如果是 IP,定向到 xci 上 + const ipname = fspath.basename(value); + const xciPath = hdlPath.join(value, ipname + '.xci'); + value = `ip core [${relativePath}](file://${xciPath})`; + break; + default: + value = `project [${relativePath}](file://${value})`; + break; + } + } else { value = `project [${relativePath}](file://${value})`; } } else { - value = 'unknown ' + t('info.dide-doc.source.cannot-find'); + // 如果不存在,可能是原语 + const inst = obj as HdlInstance; + if (inst.getDoFastFileType === 'primitives') { + value = `${opeParam.prjInfo.toolChain} primitive`; + } else { + value = 'unknown ' + t('info.dide-doc.source.cannot-find'); + } } } @@ -171,14 +190,7 @@ async function getDocsFromModule(module: HdlModule): Promise { await portPP; // 判断是否为单文件 - let isSingleFile = false; - if (!opeParam.workspacePath || !fs.existsSync(opeParam.workspacePath)) { - isSingleFile = true; - } else { - const workspacePath = opeParam.workspacePath; - const modulePath = module.path; - isSingleFile = !modulePath.startsWith(workspacePath); - } + const isSingleFile = opeParam.openMode === 'file'; // param section const paramTitleIcon = ' '; @@ -227,10 +239,10 @@ async function getDocsFromModule(module: HdlModule): Promise { const depTitleIcon = ' '; md.addTitle(depTitleIcon + t('info.dide-doc.dependency'), 2); - let insts = module.getAllInstances(); + let insts: HdlInstance[] = []; // 对于单文件模式而言,未进行 instance 搜索,所以insts必然是空的 if (isSingleFile && insts.length === 0 && module.rawInstances) { - insts = module.rawInstances.map(rawInstance => new HdlInstance( + insts = module.rawInstances.map(rawInstance => new HdlInstance( rawInstance.name, rawInstance.type, undefined, @@ -240,6 +252,9 @@ async function getDocsFromModule(module: HdlModule): Promise { rawInstance.range, module )); + } else { + // 对于多文件,找出所有依赖项 + insts = [...module.getAllDependenceInstance()]; } // 根据 start 进行排序 diff --git a/src/function/lsp-client/index.ts b/src/function/lsp-client/index.ts index dc07c8c..f29a9fb 100644 --- a/src/function/lsp-client/index.ts +++ b/src/function/lsp-client/index.ts @@ -210,8 +210,10 @@ export async function activate(context: vscode.ExtensionContext, packageJson: an ); LspClient.DigitalIDE = client; + // 启动 lsp await client.start(); + // 检测配置文件变动 registerConfigurationUpdater(client, packageJson); } diff --git a/src/function/treeView/tree.ts b/src/function/treeView/tree.ts index 3db8f62..b66c0f0 100644 --- a/src/function/treeView/tree.ts +++ b/src/function/treeView/tree.ts @@ -203,6 +203,7 @@ class ModuleTreeProvider implements vscode.TreeDataProvider { // 默认选择依赖模块最多的作为 first top let firstTop: { path: string, name: string } | undefined = undefined; let maxDepSize = 0; + for (const hdlModule of topModules) { // 此处断言是因为当前的 name 和 path 是从 topModules 中提取的 diff --git a/src/hdlParser/common.ts b/src/hdlParser/common.ts index f1a48d2..340bd34 100644 --- a/src/hdlParser/common.ts +++ b/src/hdlParser/common.ts @@ -172,6 +172,7 @@ interface RawHdlInstance { interface RawHdlModule { name: string + archName: string params: HdlModuleParam[] ports: HdlModulePort[] instances: RawHdlInstance[] diff --git a/src/hdlParser/core.ts b/src/hdlParser/core.ts index 880d20a..7d169ab 100644 --- a/src/hdlParser/core.ts +++ b/src/hdlParser/core.ts @@ -205,11 +205,14 @@ class HdlParam { } else if (status === common.InstModPathStatus.Others && inst.instModPath) { dependencies.others.push(inst.instModPath); } - const instDependencies = this.getAllDependences(inst.module.path, inst.module.name); - if (instDependencies) { - dependencies.current.push(...instDependencies.current); - dependencies.include.push(...instDependencies.include); - dependencies.others.push(...instDependencies.others); + // 防止无限递归 + if (inst.module && inst.module !== module) { + const instDependencies = this.getAllDependences(inst.module.path, inst.module.name); + if (instDependencies) { + dependencies.current.push(...instDependencies.current); + dependencies.include.push(...instDependencies.include); + dependencies.others.push(...instDependencies.others); + } } } @@ -819,6 +822,59 @@ class HdlModule { return this.nameToInstances.size; } + /** + * @description 获取当前模块的所有依赖路径 + * @returns + */ + public getAllDependences(): common.HdlDependence { + const dependencies : common.HdlDependence = { + current: [], + include: [], + others: [] + }; + + for (const inst of this.getAllInstances()) { + if (!inst.module) { + continue; + } + const status = inst.instModPathStatus; + if (status === common.InstModPathStatus.Current && inst.instModPath) { + dependencies.current.push(inst.instModPath); + } else if (status === common.InstModPathStatus.Include && inst.instModPath) { + dependencies.include.push(inst.instModPath); + } else if (status === common.InstModPathStatus.Others && inst.instModPath) { + dependencies.others.push(inst.instModPath); + } + if (inst.module) { + const instDependencies = inst.module.getAllDependences(); + dependencies.current.push(...instDependencies.current); + dependencies.include.push(...instDependencies.include); + dependencies.others.push(...instDependencies.others); + } + } + + return dependencies; + } + + /** + * @description 递归获取当前模块所有依赖 + */ + public getAllDependenceInstance(): Set { + const instances = new Set(); + // 获取自身的 + for (const inst of this.nameToInstances.values()) { + console.log(inst); + instances.add(inst); + // 递归获取 inst 的 + if (inst.module) { + for (const subInst of inst.module.getAllDependenceInstance()) { + instances.add(subInst); + } + } + } + return instances; + } + public createHdlInstance(rawHdlInstance: common.RawHdlInstance): HdlInstance { const instModName = rawHdlInstance.type; @@ -1092,6 +1148,8 @@ export class HdlFile { // add to global hdlParam hdlParam.setHdlFile(this); + console.log(modules); + // make nameToModule this.nameToModule = new Map(); for (const rawHdlModule of modules) {