95 lines
3.0 KiB
TypeScript
95 lines
3.0 KiB
TypeScript
import * as vscode from 'vscode';
|
|
import * as fs from 'fs';
|
|
import * as fspath from 'path';
|
|
import { hdlFile, hdlPath } from '../../hdlFs';
|
|
|
|
import { clean, hardwareTreeProvider, softwareTreeProvider, toolTreeProvider } from './command';
|
|
import { moduleTreeProvider, ModuleDataItem } from './tree';
|
|
import { Range } from '../../hdlParser/common';
|
|
import { MainOutput, opeParam, ReportType } from '../../global';
|
|
import { t } from '../../i18n';
|
|
|
|
|
|
async function openFileAtPosition(uri: vscode.Uri, range?: Range) {
|
|
if (range === undefined) {
|
|
range = {
|
|
start: { line: 0, character: 0 },
|
|
end: { line: 0, character: 0 }
|
|
}
|
|
}
|
|
const document = await vscode.workspace.openTextDocument(uri);
|
|
const start = new vscode.Position(range.start.line, range.start.character);
|
|
const end = new vscode.Position(range.end.line, range.end.character);
|
|
|
|
await vscode.window.showTextDocument(
|
|
document,
|
|
{
|
|
selection: new vscode.Range(start, end)
|
|
}
|
|
);
|
|
}
|
|
|
|
function openFileByUri(path: string, range: Range, element: ModuleDataItem) {
|
|
if (range === undefined) {
|
|
// vscode.window.showErrorMessage(`${path} not support jump yet`);
|
|
return;
|
|
}
|
|
|
|
if (hdlPath.exist(path) && hdlFile.isFile(path)) {
|
|
const uri = vscode.Uri.file(path);
|
|
openFileAtPosition(uri, range);
|
|
return;
|
|
} else {
|
|
if (element.doFastFileType === 'ip') {
|
|
switch (opeParam.prjInfo.toolChain) {
|
|
case 'xilinx':
|
|
return gotoXilinxIPDefinition(element);
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
MainOutput.report("invalid jump uri triggered in treeview, el: " + JSON.stringify(element, null, ' '), ReportType.Error);
|
|
}
|
|
|
|
function gotoXilinxIPDefinition(element: ModuleDataItem) {
|
|
const folderPath = element.path;
|
|
if (folderPath) {
|
|
const ipName = fspath.basename(folderPath);
|
|
const defPath = hdlPath.join(folderPath, 'synth', ipName + '.vhd');
|
|
if (fs.existsSync(defPath)) {
|
|
openFileAtPosition(vscode.Uri.file(defPath), element.range);
|
|
} else {
|
|
vscode.window.showInformationMessage(t('info.treeview.ip-no-active.message'));
|
|
}
|
|
} else {
|
|
MainOutput.report("[gotoXilinxIPDefinition] path is undefined", ReportType.Error);
|
|
}
|
|
}
|
|
|
|
function refreshArchTree(element?: ModuleDataItem) {
|
|
// TODO : diff and optimize
|
|
moduleTreeProvider.refresh(element);
|
|
}
|
|
|
|
function expandTreeView() {
|
|
vscode.commands.executeCommand('setContext', 'TOOL-tree-expand', false);
|
|
}
|
|
|
|
function collapseTreeView() {
|
|
vscode.commands.executeCommand('workbench.actions.treeView.digital-ide-treeView-arch.collapseAll');
|
|
vscode.commands.executeCommand('setContext', 'TOOL-tree-expand', true);
|
|
}
|
|
|
|
|
|
export {
|
|
hardwareTreeProvider,
|
|
softwareTreeProvider,
|
|
toolTreeProvider,
|
|
moduleTreeProvider,
|
|
expandTreeView,
|
|
collapseTreeView,
|
|
openFileByUri,
|
|
refreshArchTree,
|
|
clean
|
|
}; |