问题标签 [language-server-protocol]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
visual-studio-2017 - Visual Studio 2017 是否使用语言服务器协议?
语言服务器协议是为 VS-Code(不是 Visual Studio IDE)创建的。提供各种 linting 和代码补全(intillisense)等语言服务是一个相当明智的想法。这绝不是第一次有这个想法,但它已经得到了大量语言的相当快速和广泛的支持。
Visual Studio 2017 使用它吗?我似乎找不到 2017 年的创建扩展文档。例如这里的 2015 文档。
如果没有,是否有允许使用 LSP 资源的官方语言服务器插件?
server-side - Can Xtext Language Server support multiple clients?
Can Xtext LSP server by used as dls as a service? Where all files are stored on server (remote location) and handle multiple connections from different clients in the same time?
If yes any suggestions how to implement this will be very much appreciated.
java - 如何使远程调试 JVM 不在 stdout、stderr 上输出文本?
我目前正在编写一个语言服务器(在 lsp4j 之上),并且需要调试我的语言服务器。语言服务器协议服务器使用标准输入和标准输出与客户端通信。
现在我想调试一个从客户端(VSCode)启动的服务器,所以我为生成的 JVM 进程添加了调试标志:
突然执行此操作后,服务器不再工作,即使suspend = 0 并且我确认端口已打开并且没有发生防火墙故障。
我决定手动运行命令行,我看到一个进程在收到调试参数后所做的第一件事就是将以下内容输出到标准输出:
(不带双引号发出)
我相信这是我无法调试语言服务器的原因,因为将任何不属于语言服务器协议规范的内容输出到标准输出或标准输入会强制客户端拒绝服务器。
因此,我的问题是以迂回的方式询问是否可以通过另一个 JVM 参数使 stdout、stdin、stderr 上的内部 JVM 消息静默?
node.js - 扩展时如何在 VSCODE 上发布 LSP 语言服务器
已经通过官方网站,发布扩展的整个过程都有很好的记录:vscode发布扩展
我的疑问是在 vscode 中发布语言服务器(LSP),因为 LSP 的文件结构与扩展的文件结构不同,即扩展只有客户端,但 LSP 分别具有客户端和服务器目录,如LSP 代码和扩展代码。
我需要在和目录中vsce publish
单独运行吗?client
server
已经通过stackoverflow中的各种答案,如here。
任何帮助将不胜感激。
language-server-protocol - 语言服务器协议:在编辑器启动时同步
我正在为 LSP 实现客户端和服务器端。
我想尽可能严格地遵守协议。
当我启动我的编辑器(客户端)时,它应该通知服务器本地代码库现在的样子(一个 git sha 加上自 most-recent-common-ancestor 以来的一些更改),以便服务器可以在我正确回答例如,去定义。
你如何在 LSP 中做到这一点?
textDocument/didChange
我知道我可以为自最近共同祖先以来发生变化的每个文档发送一个。
但是服务器如何将其当前的 git SHA 发送给客户端,客户端又如何将最新的公共祖先发送给服务器呢?据我所知,需要此信息,但不是 Langserver 协议的一部分。
visual-studio-code - 我可以在不编写扩展程序的情况下测试我的 LSP 服务器吗?
我正在编写一个与 neovim 一起使用的语言服务器协议 (LSP) 服务器,我想针对 VSCode 对其进行测试,以确保我掌握了所有细节并且我不会意外编码任何 neovim-isms进入我的实施。
当前的文档建议我应该编写一个 VSCode 扩展来充当我的服务器的客户端,但我对在我不会使用的平台上投入那么多精力并不感兴趣。
在 neovim 中,我可以定义一个 CLI 命令和它对应的文件类型,然后点击 go:
Visual Studio 代码中是否存在类似的东西?
javascript - 读取与当前文件相同目录中的另一个文件(VS Code)
我正在创建一个语言服务器,目前有一个静态/预加载完成项的列表。.script
此语言服务器将在任何文件上激活。在同一个目录下会有一个.map
文件(任意扩展名,我不是指JS源映射文件)。映射文件只是一个纯文本文档,其中包含类名和名称列表(对于每个“实体”)。一个典型的条目可能如下所示:
我正在尝试将每个名称/类名对添加到完成列表中(名称是完成项标签,类名是详细信息)。这是我到目前为止所做的:
由于不幸的是“类名”的单个案例,我选择使用匹配两行的正则表达式。然后我使用了两个捕获组(一个用于名称,一个用于类名)将两者都推送到一个数组中。然后我遍历数组中的每一对并将其添加到完成列表中。
这个想法是我将映射文件中的变量预加载到相应的脚本文件中(它们都将具有相同的文件名并位于同一目录中)。
代码如下所示:
当我在扩展开发主机中调试扩展时,调试控制台会显示:
C:\Program Files\Microsoft VS Code\Code.exe --debugBrkPluginHost=37535 --debugId=cfbf2c6d-c313-46fa-8c44-4e64f44eb97f --extensionDevelopmentPath=c:\Users\thefyrewire\Documents\VSCode\quadscript
然后,当我键入func时,它们按预期显示,表明它们已成功从文件中读取(存在于c:\Users\thefyrewire\Documents\VSCode\quadscript\donkey.map
,对应于在调试控制台中看到的extensionDevelopmentPath )。
我接下来去了并将and文件c:\Users\thefyrewire\Documents\test
移动到这里,然后打包并安装了扩展。当我进入脚本文件并调出完成列表时,func_static 项目不存在。我认为这是因为它试图从安装扩展程序的位置读取,当我移动文件时,该扩展程序现在不存在。donkey.script
donkey.map
.vscode\extensions\<extension>\donkey.map
因此,我尝试更改读取地图文件的路径并使用绝对路径作为测试。
调试时,我得到了返回:
ENOENT:没有这样的文件或目录,打开 'C:\Program Files\Microsoft VS Code\file:\C:\Users\thefyrewire\Documents\test\donkey.map'。关闭警告
使用这样的相对路径:
回报:
ENOENT:没有这样的文件或目录,打开“C:\Program Files\Microsoft VS Code\donkey.map”。关闭警告
我尝试了多种其他 fs 方法,但似乎只能从C:\Program Files\Microsoft VS Code
.
所以最后我的问题是:我需要做什么才能让我的扩展从与加载的任何脚本文件相同的目录中动态读取?任何建议将不胜感激,谢谢!
编辑:我意识到这还不清楚。我所说的“脚本文件”不是指 JS 脚本文件,它又是自定义语言的一部分(因此是语言服务器)。
vim - 是否可以将 VSCode 语言服务器协议引擎与 Vim 或 NeoVim 一起使用?
我为 Vim 尝试了不同的代码分析引擎和工具(如tern_for_vim),但它们没有像 VSCode 那样提供如此出色的自动完成、转到和重命名功能。据我所知,VSCode 使用语言服务器协议技术来提供 IDE 功能。所以这是我的问题:
是否可以在 Vim 或 NeoVim 中使用 VSCode 语言服务器协议引擎?换句话说,是否可以提供与 VSCode 一样优质的类似 IDE 的功能?
我已经尝试过使用deoplete.vim的 javascript-typescript- langserver,但是自动完成和 goto-declaration 的质量很差。
language-server-protocol - 什么是语言服务器协议规范中的遥测事件
在语言服务器协议规范中,遥测通知从服务器发送到客户端,要求客户端记录遥测事件。我想知道遥测事件是什么。