将内置函数插入 VS 代码扩展的正确方法

A proper way of inserting built-in functions into VS Code extension

简介

我目前正在开发基于 Bluegiga BLE-112 模块的应用程序。该模块可用 BGScript 脚本语言编程。但是,我发现只有 Notepad++ 编辑器对 BGScript 有某种支持,它不适合我的需要。因此,我开始为 Visual Studio 代码开发自己的扩展(扩展市场上的一个不可用)。我已经完成了着色器和错误解析,现在我正在创建一个带有代码建议的部分。

主要问题

我希望在输入时列出 all functions, enumerations and events embedded in the language。我发现代码片段可能是实现这一目标的方法。 JSON 格式的片段示例如下所示。

"call attclient_indicate_confirm": {
    "prefix": "call attclient_indicate_confirm",
    "body": [
        "call attclient_indicate_confirm(${1:connection})(${2:result})"
    ],
    "description": "Send a acknowledge a received indication from a remote device."
}

call 是一个关键字,表示在这一行中调用了一个函数。当这样的代码片段存储在适当的 JSON 文件中时,一切正常 - 我开始输入 call,VS Code 会建议一个代码片段,我可以使用它。

但是,为 enumerations 创建代码片段看起来有点矫枉过正,因为枚举没有任何变量 - 它们应该按原样插入。

我的问题是: 除了代码片段之外,还有其他方法可以在 Visual Studio 代码扩展中实现,以创建 BGScript 语言中的枚举建议?

是的,你可以注册一个CompletionItemProvider via registerCompletionItemProvider() (see the languages namespace)。这应该涵盖您的所有用例,因为完成项也可以通过将 insertText 设为 SnippetString.

来使用片段插入

通常这(连同其他提供程序)是通过称为 Language Server Protocol 的抽象层实现的,而不是直接使用 VSCode API,这使其独立于编辑器。