标签: language-server-protocol

我可以在不编写扩展的情况下测试我的 LSP 服务器吗?

我正在编写一个与 neovim 一起使用的语言服务器协议 (LSP) 服务器,我想针对 VSCode 对其进行测试,以确保我掌握了所有正确的细节,并且我没有意外编码任何 neovim 主义进入我的实施。

当前的文档建议我应该编写一个 VSCode 扩展来充当服务器的客户端,但我并不真正有兴趣在一个我不会使用的平台上投入那么多精力。

在 neovim 中,我可以定义一个 CLI 命令及其对应的文件类型,然后点击 go:

let g:LanguageClient_serverCommands = {
    \ 'rust': ['rustup', 'run', 'nightly', 'rls'],
    \ 'javascript': ['/opt/javascript-typescript-langserver/lib/language-server-stdio.js'],
    \ }
Run Code Online (Sandbox Code Playgroud)

Visual Studio 代码中是否存在类似的东西?

visual-studio-code language-server-protocol

5
推荐指数
1
解决办法
2903
查看次数

语言服务器协议规范中的遥测事件是什么

在语言服务器协议规范中,遥测通知从服务器发送到客户端,要求客户端记录遥测事件。我想知道什么是遥测事件。

language-server-protocol

5
推荐指数
1
解决办法
320
查看次数

如何在 Visual Studio Code 中为语言服务器启用日志

语言服务器扩展指南中它说:

'如果您使用vscode-languageclient来实现客户端,您可以指定一个设置[langId].trace.server,指示客户端将语言客户端/服务器之间的通信记录到语言客户端的name.

对于lsp-sample,您可以设置此设置: "languageServerExample.trace.server": "verbose". 现在前往“语言服务器示例”频道。您应该会看到日志:

日志

我在 VS Code 中在哪里以及如何准确指定此设置?

visual-studio-code vscode-extensions vscode-settings language-server-protocol

5
推荐指数
2
解决办法
2560
查看次数

如何在 VSCode 中获取 Java 抽象语法树?

我希望我的扩展能够读取 .java 文件的 Java AST 以进一步保存所选代码段的节点名称(例如,“ClassDeclaration”)。例如,如果您选择“public”,AST 会告诉您它是一个“修饰符”,然后我想将节点名称“修饰符”保存为变量中的字符串。

首先我需要 Java AST。

我首先查看了 VSCode 市场,但没有适用于 Java 的 AST 扩展(但您会发现一些适用于其他语言,如 TypeScript)。我得到的结果是 Java 扩展包,其中包含许多有用的 Java 扩展,但没有一个明确与 AST 相关。由于有来自 Red Hat 的调试器和语言支持,我很确定他们使用 AST 来使他们的扩展工作,所以我查看了他们的来源,试图找到这一点,但没有成功。我唯一知道的是他们引用了 Eclipse JDT“包”,但我不明白如何。答案可能就在那里,但代码对我来说很复杂。

我尝试的另一种方法是从 TypeScript AST 中获取源代码(git 链接:https : //github.com/krizzdewizz/vscode-typescript-ast-explorer)并尝试编写我自己的 Java AST 扩展(当然是在 TypeScript 中) ,但我很快意识到他使用了 TypeScript 特定的 node_modules。我去找了一个 Java 并想出了这个 npm 包:https ://www.npmjs.com/package/java-ast 。我不确定这是否有用,但我也不知道如何使用它(是的,有一个例子,我尝试过,但正如你所知,我对此很陌生)。

如果有人能进一步帮助我,我将不胜感激。

java abstract-syntax-tree visual-studio-code vscode-extensions language-server-protocol

5
推荐指数
0
解决办法
430
查看次数

使 VS Code 解析并显示新语言的结构到 VSC 的轮廓区域

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

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

WORD xxx
GRAMMAR xxx
STRUCTURE xxx xxx
     xxx xxx xxx xxx
MEANING xxx xxx xxx 
    SUB_MEANING xxx xxx xxx xxx
        SUB_SUB_MEANING xxx xxx xxx
Run Code Online (Sandbox Code Playgroud)

我遵循了有关 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,但没有任何帮助。我还尝试通过“yo code”创建一种新语言。没有。Microsoft 提供的 LSP 示例用于纯文本文件……为纯文本创建语言服务器有多大用处?!我想举一个关于语言的例子。查看扩展中的编译文件无济于事,因为它们被缩小了。

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

visual-studio-code vscode-extensions language-server-protocol

5
推荐指数
2
解决办法
1657
查看次数

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

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

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

但我无法sourcekit-lsp识别 iOS SDK 中的模块。与 TypeScript 开发人员类似references.d.ts,但速度很快,并且只有 VSCode/sourcekit-lsp 关心它。

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

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

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

设置

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

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

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

ios swift visual-studio-code language-server-protocol

5
推荐指数
0
解决办法
781
查看次数

如何将 IAR .ewp 转换为 LSPcompile_commands.json 数据库

我正在寻求compile_commands.json从我的 IAR .ewp 项目创建一个数据库。这将允许我在我的 vim 设置中使用智能 LSP 自动完成 ( ccls ) 和正确的语义突出显示 ( vim-lsp-cxx-highlight )。

我知道我可以手动创建一个与 .ewp 项目文件中的设置相同的 CMake 文件,但不幸的是我所有的同事都使用 IAR IDE。我可能会错过我的同事所做的一些重要的项目设置更改,并且我无法更新 .ewp。如果我可以自动将 .ewp 文件解析为 CMake,从而创建命令数据库,那就太好了。

有人知道这样做的聪明方法吗?如果没有,我将如何创建一个完全可以做到这一点的工具?看来,通过取消定义 Clang 编译器定义,可以使 ccls 充分利用 IAR 代码库。

vim cmake iar language-server-protocol

5
推荐指数
1
解决办法
1231
查看次数

如何查看 VSCode 语言服务器进程的日志?

情况

我正在尝试编写VSCode 语言服务器协议 (LSP) 扩展。我让它运行如下:

  • lsp-server通过haskell-lsp-example-exe从终端运行启动的进程
  • 一个lsp-client在打字稿写入了,现在,基本上只是启动lsp-server(它是基于对LSP-样本回购)

lsp-server是推出如下:

# extension.ts
let serverOptions: ServerOptions = {
  run: {
    command: "haskell-lsp-example-exe"
  },
}
Run Code Online (Sandbox Code Playgroud)

lsp-client使用启动code --extensionDevelopmentPath="path/to/extension"

我可以看到它正确启动,我可以pid通过活动监视器找到它(我在 Mac 上)。

如何查看由 VSCode 生成的此进程的日志?

语境

我尝试了以下方法:

  • lsp-client/package.json我设置以下这些给我来回传递的消息。但不是 . 的日志lsp-server
    "languageServerExample.trace.server": {
      "scope": "window",
      "type": "string",
      "enum": [
        "off",
        "messages",
        "verbose"
      ],
      "default": "verbose",
      "description": "Traces the communication between VS Code and the …
Run Code Online (Sandbox Code Playgroud)

visual-studio-code vscode-extensions language-server-protocol

5
推荐指数
0
解决办法
575
查看次数

如何在没有 vscode 的情况下运行现有的语言服务器

我正在尝试开发自己的具有语言服务器协议支持的 IDE,因此我下载了用 typescript 编写的语言服务器并尝试使用 Node.js 启动它们。首先,我用webpack打包了服务器包。然后使用命令“node server.js”启动,server.js是由webpack生成的。但我得到了

Error: Connection input stream is not set. Use arguments of createConnection or set command line parameters: '--node-ipc', '--stdio' or '--socket={number}'
at D:\GitHub\vscode-autohotkey2-lsp\server\dist\server.js:1:172642
at t.createConnection (D:\GitHub\vscode-autohotkey2-lsp\server\dist\server.js:1:179222)
at Object.999 (D:\GitHub\vscode-autohotkey2-lsp\server\dist\server.js:1:72865)
at n (D:\GitHub\vscode-autohotkey2-lsp\server\dist\server.js:1:186299)
at D:\GitHub\vscode-autohotkey2-lsp\server\dist\server.js:1:186653
at Object.<anonymous> (D:\GitHub\vscode-autohotkey2-lsp\server\dist\server.js:1:186661)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
Run Code Online (Sandbox Code Playgroud)

然后我按照错误信息,将命令替换为“node server.js --node-ipc”。上面的错误没有再次出现,但我的 Windows 任务管理器中没有服务器进程。我是打字稿和语言服务器协议的新手,我是否弄错或误解了某事?

node.js typescript language-server-protocol

5
推荐指数
0
解决办法
1134
查看次数

Vscode语言客户端扩展 - 如何从服务器向客户端发送消息?

我一直在使用语言服务器协议开发一个使用客户端和服务器的vscode扩展.

目前,我正在尝试执行以下操作:当服务器检测到某种情况时,他请求客户端将一定数量的文件加载到工作区中.

我这样做有严重的问题.由于语言服务器协议没有执行此操作的特定请求,我考虑从服务器向客户端发送消息,一旦客户端检测到此消息,他将继续执行此命令.

问题是,我也不知道该怎么做.谁能帮帮我吗?

javascript node.js visual-studio-code vscode-extensions language-server-protocol

4
推荐指数
1
解决办法
1049
查看次数