139 lines
4.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* eslint-disable @typescript-eslint/naming-convention */
import * as vscode from 'vscode';
import * as fs from 'fs';
import * as fspath from 'path';
import { opeParam } from '../global';
import { hdlFile, hdlPath } from '../hdlFs';
import { ModuleDataItem } from './treeView/tree';
import { hdlParam } from '../hdlParser';
async function insertTextToUri(uri: vscode.Uri, text: string, position?: vscode.Position) {
if (!position) {
position = new vscode.Position(0, 0);
}
const editor = vscode.window.activeTextEditor;
if (editor) {
const edit = new vscode.WorkspaceEdit();
edit.insert(uri, position, text);
vscode.workspace.applyEdit(edit);
}
}
const PPY_REPLACE: Record<string, string> = {
TOOL_CHAIN: 'toolChain',
PRJ_NAME: 'prjName',
ARCH: 'arch',
SOC: 'soc',
SOC_MODE: 'soc',
enableShowlog: 'enableShowLog',
Device: 'device'
};
const PPY_ARCH_REPLACE: Record<string, string> = {
PRJ_Path: 'prjPath',
Hardware: 'hardware',
Software: 'software'
};
const PPY_LIB_REPLACE: Record<string, string> = {
Hardware: 'hardware'
};
async function transformOldPpy() {
const propertyJsonPath = opeParam.propertyJsonPath;
if (fs.existsSync(propertyJsonPath)) {
const oldPpyContent = hdlFile.readJSON(propertyJsonPath) as Record<any, any>;
if (oldPpyContent.ARCH) {
for (const oldName of Object.keys(PPY_ARCH_REPLACE)) {
const newName = PPY_ARCH_REPLACE[oldName];
oldPpyContent.ARCH[newName] = oldPpyContent.ARCH[oldName];
delete oldPpyContent.ARCH[oldName];
}
}
if (oldPpyContent.library) {
for (const oldName of Object.keys(PPY_LIB_REPLACE)) {
const newName = PPY_LIB_REPLACE[oldName];
oldPpyContent.library[newName] = oldPpyContent.library[oldName];
delete oldPpyContent.library[oldName];
}
}
for (const oldName of Object.keys(PPY_REPLACE)) {
const newName = PPY_REPLACE[oldName];
oldPpyContent[newName] = oldPpyContent[oldName];
delete oldPpyContent[oldName];
}
// 老版本的是 SOC_MODE.soc新版本需要变成 soc.core
if (oldPpyContent.soc && oldPpyContent.soc.soc !== undefined) {
oldPpyContent.soc.core = oldPpyContent.soc.soc;
delete oldPpyContent.soc['soc'];
}
hdlFile.writeJSON(propertyJsonPath, oldPpyContent);
} else {
vscode.window.showErrorMessage('You have\'t create property.json!');
}
}
async function askUserToSaveFilelist(filelist: string[]) {
const { t } = vscode.l10n;
const topModulePath = filelist[0];
const defaultSaveName = fspath.basename(topModulePath, fspath.extname(topModulePath));
const defaultSavePath = hdlPath.join(opeParam.workspacePath, defaultSaveName + '.f');
const uri = await vscode.window.showSaveDialog({
filters: {
'All Files': ['*']
},
saveLabel: 'save',
defaultUri: vscode.Uri.file(defaultSavePath)
});
if (uri === undefined) {
return;
}
const filePath = uri.path;
const fileContent = filelist.join('\n');
try {
fs.writeFileSync(filePath, fileContent);
} catch (error) {
vscode.window.showErrorMessage(t('error.filelist.save-file') + ': ' + error);
}
}
/**
* @description 导出当前 module 的 filelist
* @param view treeview 中的模块对象
*/
function exportFilelist(view: ModuleDataItem) {
const fileset = new Set<string>();
if (view.path !== undefined) {
const deps = hdlParam.getAllDependences(view.path, view.name);
if (deps) {
deps.others.forEach(path => fileset.add(path));
deps.include.forEach(path => fileset.add(path));
const filelist = [view.path];
filelist.push(...fileset);
askUserToSaveFilelist(filelist);
} else {
vscode.window.showErrorMessage('fail to get deps of view ' + view.name);
}
} else {
vscode.window.showErrorMessage('cannot find path for current module');
}
}
export {
insertTextToUri,
transformOldPpy,
exportFilelist
};