将内置函数插入 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,这使其独立于编辑器。
简介
我目前正在开发基于 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,这使其独立于编辑器。