【问题标题】:Is it possible to call commands between extensions in VSCode?是否可以在 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可以拨打exCommand2extension2提供
  • extension2 可以拨打exCommand1 提供的extension1

但是,VSCode 的扩展是延迟加载的,那么如何从另一个可能尚未加载的扩展调用命令呢?

【问题讨论】:

    标签: visual-studio-code vscode-extensions


    【解决方案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 =&gt; x.id)。它们的形式为&lt;extension publisher&gt;.&lt;extension name&gt;
    • 我不是回答这个问题的人。您可以尝试将它们作为第二个参数 vscode.commands.executeCommand("xmlTools.formatAsXml", HERE); 传递,但不知道它是否适用于扩展。
    猜你喜欢
    • 2019-06-21
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 2019-08-28
    • 1970-01-01
    • 2016-02-20
    相关资源
    最近更新 更多