【问题标题】:Is there a way to execute a custom action through the CodeAction request?有没有办法通过 CodeAction 请求执行自定义操作?
【发布时间】:2019-12-21 01:36:27
【问题描述】:

我想从 Visual Studio 代码启动用户操作。它将读取当前打开的文本文档,通过某种 UI 操作(自定义按钮,或者如果可能的话通过 CodeAction)提取一段代码,使用语言服务器协议将其发送到服务器,完成一些工作并返回一些输出回客户端。

我已阅读 CodeAction 的语言服务器协议规范,但它通常仅用于快速修复和重构,我可以将它用于任何其他自定义操作吗?如果有,怎么做?

【问题讨论】:

    标签: visual-studio-code vscode-extensions language-server-protocol


    【解决方案1】:

    Code actions 在执行时可以调用任意客户端命令:

    export interface CodeAction {
        [...]
    
        /**
         * A command this code action executes. If a code action
         * provides an edit and a command, first the edit is
         * executed and then the command.
         */
        command?: Command;
    }
    

    您可以使用 vscode.commands 命名空间注册新命令。

    [...] 使用语言服务器协议将其发送到服务器,做一些工作并将一些输出返回给客户端

    对于这部分,您可以使用自定义方法在语言服务器和 VSCode 扩展之间来回发送数据:


    这两件事当然会使您的语言服务器与 VSCode 以外的客户端的兼容性大大降低。您确定为此需要客户端逻辑吗?

    【讨论】:

    • 嗯,我想将代码发送到语言服务器,然后进行一些操作,然后生成一个控制流图(点语言)作为字符串,然后我想使用 webview api 呈现,所以由于我的语言服务器是用 F# 编写的,并且不使用 vscode-language server npm 包中的内置功能,所以我不确定如何在服务器端和 F# 中完成所有这些操作,不能'在互联网上找不到任何相关信息,所以我认为更简单的方法是将输出发送回客户端,然后生成 WebView。
    • 语言服务器用什么语言编写并不重要,您仍然应该能够调用自定义方法。除非您使用的 API 已经抽象了所有这些并且不允许您访问通信层......
    猜你喜欢
    • 2021-07-26
    • 1970-01-01
    • 2013-01-16
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    相关资源
    最近更新 更多