/* eslint-disable @typescript-eslint/naming-convention */ const fs = require('fs'); const vscode = require('vscode'); const fspath = require('path'); const vhd2vl = require("./vhd2vlog"); const formatter = require('../formatter'); /** * * @param {string} path * @return {string} */ function getFileName(path) { const fileName = fspath.basename(path); const names = fileName.split('.'); names.pop(); return names.join('.'); } /** * * @param {vscode.Uri} uri * @return {Promise} */ async function vhdl2vlog(uri) { const path = uri.fsPath.replace(/\\/g, '/'); const fileName = getFileName(path); const Module = await vhd2vl(); let content = fs.readFileSync(path, "utf-8"); const status = Module.ccall('vhdlParse', '', ['string'], [content]); if (!status) { content = Module.ccall('getVlog', 'string', ['string'], []); // format content = await formatter.hdlFormatterProvider.vlogFormatter.format_from_code(content); const folderPath = fspath.dirname(path); const defaultSaveUri = new vscode.Uri('file', '', folderPath + '/' + fileName + '.v', '', ''); const vscodeDialogConfig = { title: 'save the verilog code', defaultUri: defaultSaveUri, verilog: ["v", "V", "vh", "vl"] }; const fileInfos = await vscode.window.showSaveDialog(vscodeDialogConfig); if (fileInfos && fileInfos.path) { let savePath = fileInfos.path; if (savePath[0] === '/' && require('os').platform() === 'win32') { savePath = savePath.substring(1); } fs.writeFileSync(savePath, content, "utf-8"); vscode.window.showInformationMessage("translate successfully"); const options = { preview: false, viewColumn: vscode.ViewColumn.Two }; vscode.window.showTextDocument(vscode.Uri.file(savePath), options); } } else { const error = Module.ccall('getErr', 'string', ['string'], []); vscode.window.showErrorMessage(error); } } module.exports = { vhdl2vlog };