From 6c2e688f71b146a876cf5b0cc8116d6cecc4885d Mon Sep 17 00:00:00 2001 From: Peter van Gulik Date: Fri, 27 Oct 2023 21:44:21 +0200 Subject: [PATCH] feat: add view meta XML command to switch quickly to the related meta file --- .../vscode-extension/build/buildCommands.ts | 2 + packages/vscode-extension/commands.yaml | 18 +++++ packages/vscode-extension/package.json | 67 ++++++++++++++++++- .../resources/dark/meta-xml.svg | 9 +++ .../resources/light/meta-xml.svg | 9 +++ .../src/commands/metadata/index.ts | 3 +- .../commands/metadata/toggleMetaXmlCommand.ts | 34 ++++++++++ packages/vscode-extension/src/constants.ts | 2 + 8 files changed, 142 insertions(+), 2 deletions(-) create mode 100644 packages/vscode-extension/resources/dark/meta-xml.svg create mode 100644 packages/vscode-extension/resources/light/meta-xml.svg create mode 100644 packages/vscode-extension/src/commands/metadata/toggleMetaXmlCommand.ts diff --git a/packages/vscode-extension/build/buildCommands.ts b/packages/vscode-extension/build/buildCommands.ts index a71a2a1a..547a1e12 100644 --- a/packages/vscode-extension/build/buildCommands.ts +++ b/packages/vscode-extension/build/buildCommands.ts @@ -95,6 +95,8 @@ export function mergeCommandContributions(packageJson: PackageJson, commands: Co if (command.icon) { if (typeof command.icon === 'object') { newCommand.icon = command.icon; + } else if (command.icon.startsWith('$(')) { + newCommand.icon = command.icon; } else { newCommand.icon = { light: command.icon.replace(/{(type|theme)}/ig, 'light'), diff --git a/packages/vscode-extension/commands.yaml b/packages/vscode-extension/commands.yaml index f13536bf..ddbdbbd2 100644 --- a/packages/vscode-extension/commands.yaml +++ b/packages/vscode-extension/commands.yaml @@ -339,3 +339,21 @@ vlocode.omniScript.activate: title: 'OmniScript: (Re-)Activate' group: v_vlocity_omniscript menus: *omniScriptCommandMenus + +# editor +vlocode.openMetaXml: + title: Open -meta.xml + icon: resources/{type}/meta-xml.svg + when: + - resourceScheme == file && resourcePath =~ /\.cls$/ + - resourceScheme == file && resourcePath =~ /\.trigger$/ + menus: + - menu: editor/title/run +vlocode.openSourceFile: + title: Open Source + icon: $(code) + when: + - resourceScheme == file && resourcePath =~ /\.cls-meta\.xml$/ + - resourceScheme == file && resourcePath =~ /\.trigger-meta\.xml$/ + menus: + - menu: editor/title/run diff --git a/packages/vscode-extension/package.json b/packages/vscode-extension/package.json index adce4c25..2cfda7c2 100644 --- a/packages/vscode-extension/package.json +++ b/packages/vscode-extension/package.json @@ -118,7 +118,9 @@ "onCommand:vlocode.deployDeltaMetadata", "onCommand:vlocode.omniScript.generateLwc", "onCommand:vlocode.omniScript.deployLwc", - "onCommand:vlocode.omniScript.activate" + "onCommand:vlocode.omniScript.activate", + "onCommand:vlocode.openMetaXml", + "onCommand:vlocode.openSourceFile" ], "main": "./out/vlocode", "contributes": { @@ -403,6 +405,19 @@ { "command": "vlocode.omniScript.activate", "title": "OmniScript: (Re-)Activate" + }, + { + "command": "vlocode.openMetaXml", + "title": "Open -meta.xml", + "icon": { + "light": "resources/light/meta-xml.svg", + "dark": "resources/dark/meta-xml.svg" + } + }, + { + "command": "vlocode.openSourceFile", + "title": "Open Source", + "icon": "$(code)" } ], "menus": { @@ -670,6 +685,38 @@ "command": "vlocode.omniScript.activate", "group": "v_vlocity_omniscript", "when": "resourceScheme == file && resourcePath =~ /.+\\\\OmniScript\\\\.+\\\\.+\\.json$/" + }, + { + "command": "vlocode.openMetaXml", + "when": "false" + }, + { + "command": "vlocode.openMetaXml", + "when": "resourceScheme == file && resourcePath =~ /\\.cls$/ && false" + }, + { + "command": "vlocode.openMetaXml", + "when": "false" + }, + { + "command": "vlocode.openMetaXml", + "when": "resourceScheme == file && resourcePath =~ /\\.trigger$/ && false" + }, + { + "command": "vlocode.openSourceFile", + "when": "false" + }, + { + "command": "vlocode.openSourceFile", + "when": "resourceScheme == file && resourcePath =~ /\\.cls-meta\\.xml$/ && false" + }, + { + "command": "vlocode.openSourceFile", + "when": "false" + }, + { + "command": "vlocode.openSourceFile", + "when": "resourceScheme == file && resourcePath =~ /\\.trigger-meta\\.xml$/ && false" } ], "explorer/context": [ @@ -994,6 +1041,24 @@ "group": "navigation", "when": "view == developerLogsView" } + ], + "editor/title/run": [ + { + "command": "vlocode.openMetaXml", + "when": "resourceScheme == file && resourcePath =~ /\\.cls$/" + }, + { + "command": "vlocode.openMetaXml", + "when": "resourceScheme == file && resourcePath =~ /\\.trigger$/" + }, + { + "command": "vlocode.openSourceFile", + "when": "resourceScheme == file && resourcePath =~ /\\.cls-meta\\.xml$/" + }, + { + "command": "vlocode.openSourceFile", + "when": "resourceScheme == file && resourcePath =~ /\\.trigger-meta\\.xml$/" + } ] }, "configuration": [ diff --git a/packages/vscode-extension/resources/dark/meta-xml.svg b/packages/vscode-extension/resources/dark/meta-xml.svg new file mode 100644 index 00000000..d89527b4 --- /dev/null +++ b/packages/vscode-extension/resources/dark/meta-xml.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/packages/vscode-extension/resources/light/meta-xml.svg b/packages/vscode-extension/resources/light/meta-xml.svg new file mode 100644 index 00000000..a582a09f --- /dev/null +++ b/packages/vscode-extension/resources/light/meta-xml.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/packages/vscode-extension/src/commands/metadata/index.ts b/packages/vscode-extension/src/commands/metadata/index.ts index 31ac4162..d2d6e8e7 100644 --- a/packages/vscode-extension/src/commands/metadata/index.ts +++ b/packages/vscode-extension/src/commands/metadata/index.ts @@ -9,4 +9,5 @@ export * from './pauseDeploymentsCommand'; export * from './refreshMetadataCommand'; export * from './resumeDeploymentsCommand'; export * from './retrieveMetadataCommand'; -export * from './viewInSalesforce'; +export * from './toggleMetaXmlCommand'; +export * from './viewInSalesforce'; \ No newline at end of file diff --git a/packages/vscode-extension/src/commands/metadata/toggleMetaXmlCommand.ts b/packages/vscode-extension/src/commands/metadata/toggleMetaXmlCommand.ts new file mode 100644 index 00000000..ae3dc7e3 --- /dev/null +++ b/packages/vscode-extension/src/commands/metadata/toggleMetaXmlCommand.ts @@ -0,0 +1,34 @@ +import { VlocodeCommand } from '../../constants'; +import * as vscode from 'vscode'; +import MetadataCommand from './metadataCommand'; +import { vscodeCommand } from '../../lib/commandRouter'; + +@vscodeCommand(VlocodeCommand.openMetaXml) +@vscodeCommand(VlocodeCommand.openSourceFile) +export default class ToggleMetaXmlCommand extends MetadataCommand { + public execute() { + if (!this.currentOpenDocument) { + return; + } + + if (this.currentOpenDocument.path.endsWith('-meta.xml')) { + this.openSourceFile(this.currentOpenDocument); + } else { + this.openMetaXml(this.currentOpenDocument); + } + } + + private openMetaXml(documentUri: vscode.Uri) { + const metaFile = documentUri.with({ + path: documentUri.path + '-meta.xml' + }); + vscode.window.showTextDocument(metaFile); + } + + private openSourceFile(documentUri: vscode.Uri) { + const sourceFile = documentUri.with({ + path: documentUri.path.slice(0, -'-meta.xml'.length) + }); + vscode.window.showTextDocument(sourceFile); + } +} \ No newline at end of file diff --git a/packages/vscode-extension/src/constants.ts b/packages/vscode-extension/src/constants.ts index 2547aa3f..28085531 100644 --- a/packages/vscode-extension/src/constants.ts +++ b/packages/vscode-extension/src/constants.ts @@ -67,6 +67,8 @@ export enum VlocodeCommand { resumeDeploymentQueue = 'vlocode.resumeDeploymentQueue', addToProfile = 'vlocode.addToProfile', removeFromProfile = 'vlocode.removeFromProfile', + openMetaXml = 'vlocode.openMetaXml', + openSourceFile = 'vlocode.openSourceFile', omniScriptGenerateLwc = 'vlocode.omniScript.generateLwc', omniScriptDeployLwc = 'vlocode.omniScript.deployLwc', omniScriptActivate = 'vlocode.omniScript.activate',