vscode-languageserver-node 中的服务器端命令如何知道哪个是当前文档?
How does a server-side command in vscode-languageserver-node know which is the current document?
我正在为 vscode 开发 DSL 的语言扩展。该架构使用来自微软 github 的 vscode-languageserver-node 基础设施,带有一个可以评估 DSL 的 REST 后端。
我有一个名为 Evaluate 的命令,它应该将当前打开的文件文本发送到后端服务器进行评估。
我尝试将其建模为使用 onExecuteCommand
执行的服务器端命令,但是在服务器处理程序中,并没有办法找出当前聚焦的源文件在客户端。至少我不知道。
我想我可以将其建模为客户端命令,然后使用包含我需要的信息的参数手动调用 sendRequest(ExecuteCommandRequest)
到该客户端处理程序中的服务器,但我想知道我是否遗漏了东西。
假设只有用户更新的文本文档需要(重新)验证,我觉得这样做更方便(至少对于那种需要多个源文件一起验证的DSL)通过实现语言服务器,它在初始化时做两件事:
- 遍历工作区中打开的文档
workspace.textDocuments
(那些在上一个 VS Code 会话中在工作区中打开的文本文档)并将它们添加到要验证的文件集合中
- 订阅工作区事件:
workspace.onDidOpenTextDocument
--> 应验证文件并显示诊断信息
workspace.onDidChangeTextDocument
--> 应重新验证文件,显示诊断信息
workspace.onDidCloseTextDocument
--> 应该删除诊断信息
这是一个很好的起点:
https://code.visualstudio.com/docs/extensions/example-language-server
... 但不是在语言服务器中处理评估,您可以将其委托给您的 RESTful 后端服务器。该通信可以以您想要的任何方式处理,并且接口不需要遵守语言服务器协议。
引入此类更改请求的队列并限制验证请求可能是个好主意。如果文件在 3 秒内没有更新,我只会触发实际的 DSL 验证。该延迟是可配置的。
我正在为 vscode 开发 DSL 的语言扩展。该架构使用来自微软 github 的 vscode-languageserver-node 基础设施,带有一个可以评估 DSL 的 REST 后端。
我有一个名为 Evaluate 的命令,它应该将当前打开的文件文本发送到后端服务器进行评估。
我尝试将其建模为使用 onExecuteCommand
执行的服务器端命令,但是在服务器处理程序中,并没有办法找出当前聚焦的源文件在客户端。至少我不知道。
我想我可以将其建模为客户端命令,然后使用包含我需要的信息的参数手动调用 sendRequest(ExecuteCommandRequest)
到该客户端处理程序中的服务器,但我想知道我是否遗漏了东西。
假设只有用户更新的文本文档需要(重新)验证,我觉得这样做更方便(至少对于那种需要多个源文件一起验证的DSL)通过实现语言服务器,它在初始化时做两件事:
- 遍历工作区中打开的文档
workspace.textDocuments
(那些在上一个 VS Code 会话中在工作区中打开的文本文档)并将它们添加到要验证的文件集合中 - 订阅工作区事件:
workspace.onDidOpenTextDocument
--> 应验证文件并显示诊断信息workspace.onDidChangeTextDocument
--> 应重新验证文件,显示诊断信息workspace.onDidCloseTextDocument
--> 应该删除诊断信息
这是一个很好的起点: https://code.visualstudio.com/docs/extensions/example-language-server
... 但不是在语言服务器中处理评估,您可以将其委托给您的 RESTful 后端服务器。该通信可以以您想要的任何方式处理,并且接口不需要遵守语言服务器协议。
引入此类更改请求的队列并限制验证请求可能是个好主意。如果文件在 3 秒内没有更新,我只会触发实际的 DSL 验证。该延迟是可配置的。