问题标签 [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.

0 投票
1 回答
755 浏览

json - VSCode JSON 语言服务器未处理方法

我上周发布了这个并取得了进展,在那里我发现了 VSCode 的 JSON 支持通过扩展提供的包:

https://github.com/vscode-langservers/vscode-json-languageserver https://github.com/Microsoft/vscode-json-languageservice

和所有其他的。我正在尝试在电子(NodeJS)应用程序中重用它。我可以派生一个启动语言服务器的进程并对其进行初始化:

我看到 console.log 触发并显示它似乎是正确的。我的想法是我只想根据LSP发送一个 textDocument/didChange 事件:

其中 data 是表示文件的 JSON 对象。

当我发送该消息和其他尝试时,我得到

知道我在这里做错了什么吗?我的主要目标是允许通过我的 Electron 应用程序进行编辑,然后将更新的 JSON 发送到语言服务器以完成模式验证。

编辑:当我在 jsonServerMain.js 中实现 connection.onInitialized() 时,我什至看到未处理的方法被初始化。

EDIT2:更新,我想出了我在哪里出错了。initialized 和 textDocument/didChange 是通知,而不是请求。

0 投票
1 回答
183 浏览

language-server-protocol - LSP:无法获取文档符号

我正在学习 LSP,现在正在尝试获取文档符号。我使用Felix Becker PHP 语言服务器。无论我尝试什么,我都无法取回符号。

我试图记录语言服务器接收到的内容,这里是(试图省略敏感数据):

这是来自服务器的记录响应

  1. 很多{"method":"window\/logMessage","params"....
  2. 很多{"method":"textDocument\/publishDiagnostics"...

最后我得到

我找不到服务器没有响应符号的原因。我尝试了同一作者的 VS 插件,它工作正常,这意味着我在某个地方搞砸了。但就是想不通!

任何帮助表示赞赏。

0 投票
1 回答
85 浏览

visual-studio-code - VSCode 是否使用阻塞与 LSP 的通信

我正在玩语言服务器协议。在玩了一段时间后,我可以看到两种与语言服务器通信的方式,即阻塞套接字和非阻塞套接字。

通过阻塞套接字,我的意思是发送请求并阻塞直到响应。这很简单,但是一旦我在 GUI 应用程序中使用它就会阻止 UI。另一种是使用异步/非阻塞套接字。这有点复杂,可能需要一些回调/事件机制。

现在我的问题是 VSCode 使用哪种方式与 LSP 通信?

0 投票
3 回答
2301 浏览

visual-studio-code - 使 VS Code 解析并显示一种新语言的结构到 VSC 的轮廓区域

我试图通过将语言定义添加到 VSC 来使 VSC 显示包含 DSL(域特定语言)的文档的结构。该结构应出现在 VSC“大纲视图”中,其中显示已安装语言的所有文档结构(如 json、markdown、html 等)

DSL 非常简单,只有一些大写字母的元素应该出现在大纲中并保持层次结构:

我遵循了关于 stackoverflow 的所有提示,这些提示都导致了 VSC 和/或语言服务器协议 (LSP) 的官方文档。但是,没有任何帮助,一点也没有 -.- 是的,我可以使用 CodeMap 扩展,但我不想依赖它,因为 VSC 实际上能够理解新语言。对于众所周知的语言,不需要创建专用的树视图元素或其他东西,因此必须有一种方法让 VSC 解析语言结构。

VSC 中的“大纲视图”仍然为空。我发现如果删除 VSC 扩展文件夹中的文件夹“xxx-language-features”(xxx 代表语言),安装的(例如)markdown 或 json 的语言支持也不会为“大纲”生成任何内容. 所以看来我也需要一个语言功能扩展。

我浏览了https://code.visualstudio.com/api/language-extensions/language-configuration-guidehttps://microsoft.github.io/language-server-protocol/以及许多其他东西,包括 LSP-example来自 VSC 的 Github-Repo,但对此没有任何帮助。我还尝试借助“哟代码”创建一种新语言。没有什么。Microsoft 提供的 LSP 示例是针对纯文本文件的……为纯文本创建语言服务器有多大用处?!我想举一个关于语言的例子。查看扩展中的已编译文件无济于事,因为它们已被缩小。

在该问题上没有完整的“如何做” - 因此,感谢任何帮助!如何告诉 VSC 将文档结构解析为“大纲视图”?

0 投票
0 回答
101 浏览

c++ - 在neovim上使用coc.vim的cquery中出现奇怪的错误

我已经按照它的存储库中的说明构建并安装了 cquery。但在我看来,出了点问题。

这个简单的代码片段编译良好,没有任何错误,而 cquery 向我显示一个错误,告诉我将 无效操作数告诉二进制表达式 ('std::__1::ostream' (aka 'basic_ostream') 和 'const char

我做了很多研究来配置.cquery文件及其路径,但我仍然没有成功。

任何人都可以给我一个提示吗? 二进制表达式的无效操作数 ('std::__1::ostream' (aka 'basic_ostream<char>') 和 'const char

0 投票
2 回答
1607 浏览

c# - 文本编辑器选项下的新 C#_LSP 条目是什么?

Visual Studio 2019 在名为 C#_LSP 的文本编辑器选项下有一个新条目。我想这与语言服务器协议有关,但我找不到该条目的确切用途。

是否有使用它的某些标准工具?还是为了可扩展性?

C#_LSP 条目位于文本编辑器选项下的 C# 条目下方

0 投票
1 回答
331 浏览

python - Monaco 编辑器:突出显示 Python 中的语法错误

我想在浏览器中突出显示 Python 语法错误。

我发现有Python 的 LSP 实现Monaco 编辑器的 LSP 客户端

有没有办法将它们连接在一起?

0 投票
0 回答
182 浏览

visual-studio-code - 是否可以在 VSCode 中侦听/拦截与打字稿语言服务器之间的 LSP 消息?

我们的扩展引用(有链接)打字稿符号。这就是为什么,每当一个符号被重构/重命名时,我都应该知道,以反映我的扩展中的名称更改。可能吗?如果是,如何?

AFAIK,我可以听textDocument/rename打字稿扩展的请求,但我该怎么做呢?

如果您考虑一下,仅听代码更改不会给您带来太多好处,因为用户可以用某种绝对其他种类和类型的符号完全替换符号,或者用户可以来回移动符号等。另一方面,重构符号是完全确定的,即您绝对确定只有名称发生了变化,而不是位置,而不是符号本身等。

PS我之前也问过类似的问题,但是主题和我真正要问的完全不同。

0 投票
0 回答
616 浏览

ios - 如何在 Linux 上为 iOS 框架添加 VSCode 编辑器补全

当我离开 Mac 时,我仍然希望能够使用 VSCode 在我的 Linux 机器上编写 Swift 代码。但我无法sourcekit-lsp识别来自 iOS SDK 的模块。

我偶尔会使用 Mac,但主要使用我的 Linux 机器。因此,我可以在我的 Mac 上构建应用程序,但我仍然希望能够提前使用 VSCode 在我的 Linux 机器上起草 Swift 代码。

但我无法sourcekit-lsp识别来自 iOS SDK 的模块。与references.d.tsTypeScript 开发人员类似,但使用 swift,并且只有 VSCode/sourcekit-lsp 关心它。

我四处挖掘并Xcode.app发现了各种文件,在文本编辑器中查看后,它们看起来提供了我想要的东西,但我不知道如何查看它们。.modulemap.swiftinterfacesourcekit-lsp

需要强调的是,我不希望也不希望能够在 Linux 机器上编译iOS 代码。在我的故障排除中,我swift build只用来发现更有意义的错误。我不希望发生实际构建——这就是 Mac 的用途。我只是希望能够在 VSCode 中使用来自本机模块(如 UIKit)的自动完成功能,以便稍后将其复制到 Mac 上进行测试。

我知道,这是一个奇怪的工作流程,但这是我现在可以访问的。

设置

我已经下载了 Xcode 11 测试版并将其解压缩,以便我可以访问框架/SDK。但是,我似乎无法找到一种方法来sourcekit-lsp理解各种框架的标题。

此外,swift 安装在/usr/local/bin/swift-5.1-DEVELOPMENT-SNAPSHOT-2019-06-21-a-ubuntu18.04.

由于sourcekit-lsp没有记录很多错误,我决定swift build一遍又一遍地尝试,尽可能接近“工作”,直到希望sourcekit-lsp能找到一些东西。

试错

到目前为止,我已经尝试了许多不同的命令。但我会遵循我所取得的最佳进展。

我首先使用指向swiftc我的 SDK 和 iOS 目标-sdk Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk -target arm64-apple-ios13.0

这修复了模块未找到错误(当我运行时swift build

我猜这是没有包含的 swift 库,所以我复制Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/usr/local/bin/swift-5.1-DEVELOPMENT-SNAPSHOT-2019-06-21-a-ubuntu18.04/usr/lib/swift/iphoneos,确实修复了上述错误。

我被困在哪里

现在,swift build给了我一个新的错误:

此外,回到 VSCode,将鼠标悬停在模块导入(如Foundation)上会产生不同的错误:

我尝试修复这些错误但没有成功。我不需要swift build工作,但我只想sourcekit-lsp让我编写使用 UIKit/etc 的代码。

包.swift

0 投票
1 回答
360 浏览

typescript - 如何使用语言服务器协议将 TS 解析为符号?

我是这个主题的新手,所以很有可能我弄错了一些关键词。我想将打字稿文件解析为其组件符号。举一个我想象的非常粗略的例子,见下文:

会创建这样的东西:

我很确定这个符号化/标记化是语言服务器初始化阶段的一部分,试图从这个问题中收集(https://github.com/Microsoft/language-server-protocol/issues/33)。

但是我通读了有关初始化(https://microsoft.github.io/language-server-protocol/specification#initialize)的文档,但我找不到(ctrl-f)有关返回的符号或令牌的任何内容。

不久前我在摩纳哥工作,我知道语言服务器的重点主要是标准化代码的标记化和链接/导航,所以我很确定这是适合它的工具。但是文档非常密集,并且似乎更关注代码交互而不是代码解析。

如何使用语言服务器协议将 TS 解析为符号?

编辑:值得一提,如果这本身就是一个项目:我不是在寻找这个或任何东西的完整代码。只是对正在发生的事情的某种粗略概述,也许还有一些相关文档的链接/摘录。

编辑 2:我在这里发现了一个非常相似的问题(TypeScript: get syntax tree),但它没有提到语言服务器,而且似乎来自它们之前的时间。

编辑 3:看来我正在寻找的正确术语是 AST。在网上找到了一个非常酷的 TypeScript 工具(https://ts-ast-viewer.com/