是否可以在 VSCode 中的扩展之间调用命令?
Posted
技术标签:
【中文标题】是否可以在 VSCode 中的扩展之间调用命令?【英文标题】:Is it possible to call commands between extensions in VSCode? 【发布时间】:2017-05-24 09:21:50 【问题描述】:比如有两个VSCode扩展:
extension1
已注册命令 exCommand1
extension2
已注册命令 exCommand2
根据文档,VSCode 扩展可以调用命令 (参考:https://code.visualstudio.com/docs/extensionAPI/vscode-api)
executeCommand<T>(command: string, ...rest: any[]): Thenable<T | undefined>
如果 API Doc 正确,那么
extension1
可以拨打exCommand2
extension2
提供
extension2
可以拨打exCommand1
提供的extension1
但是,VSCode 的扩展是延迟加载的,那么如何从另一个可能尚未加载的扩展调用命令呢?
【问题讨论】:
【参考方案1】:我知道这是一个旧帖子,如果您仍然有相同的要求或其他人在谷歌上搜索,我就是这样做的。
var xmlExtension = vscode.extensions.getExtension( 'DotJoshJohnson.xml' );
// is the ext loaded and ready?
if( xmlExtension.isActive == false )
xmlExtension.activate().then(
function()
console.log( "Extension activated");
// comment next line out for release
findCommand();
vscode.commands.executeCommand("xmlTools.formatAsXml");
,
function()
console.log( "Extension activation failed");
);
else
vscode.commands.executeCommand("xmlTools.formatAsXml");
// dev helper function to dump all the command identifiers to the console
// helps if you cannot find the command id on github.
var findCommand = function()
vscode.commands.getCommands(true).then(
function(cmds)
console.log("fulfilled");
console.log(cmd);
,
function()
console.log("failed");
console.log(arguments);
)
;
【讨论】:
对我来说,一个简短的绊脚石是弄清楚究竟要传递给vscode.extensions.getExtension()
。要获取扩展 ID 列表,您可以使用 vscode.extensions.all.map(x => x.id)
。它们的形式为<extension publisher>.<extension name>
。
我不是回答这个问题的人。您可以尝试将它们作为第二个参数 vscode.commands.executeCommand("xmlTools.formatAsXml", HERE);
传递,但不知道它是否适用于扩展。以上是关于是否可以在 VSCode 中的扩展之间调用命令?的主要内容,如果未能解决你的问题,请参考以下文章