问题标签 [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.
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 是通知,而不是请求。
language-server-protocol - LSP:无法获取文档符号
我正在学习 LSP,现在正在尝试获取文档符号。我使用Felix Becker PHP 语言服务器。无论我尝试什么,我都无法取回符号。
我试图记录语言服务器接收到的内容,这里是(试图省略敏感数据):
这是来自服务器的记录响应
- 很多
{"method":"window\/logMessage","params"....
- 很多
{"method":"textDocument\/publishDiagnostics"...
最后我得到
我找不到服务器没有响应符号的原因。我尝试了同一作者的 VS 插件,它工作正常,这意味着我在某个地方搞砸了。但就是想不通!
任何帮助表示赞赏。
visual-studio-code - VSCode 是否使用阻塞与 LSP 的通信
我正在玩语言服务器协议。在玩了一段时间后,我可以看到两种与语言服务器通信的方式,即阻塞套接字和非阻塞套接字。
通过阻塞套接字,我的意思是发送请求并阻塞直到响应。这很简单,但是一旦我在 GUI 应用程序中使用它就会阻止 UI。另一种是使用异步/非阻塞套接字。这有点复杂,可能需要一些回调/事件机制。
现在我的问题是 VSCode 使用哪种方式与 LSP 通信?
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-guide和https://microsoft.github.io/language-server-protocol/以及许多其他东西,包括 LSP-example来自 VSC 的 Github-Repo,但对此没有任何帮助。我还尝试借助“哟代码”创建一种新语言。没有什么。Microsoft 提供的 LSP 示例是针对纯文本文件的……为纯文本创建语言服务器有多大用处?!我想举一个关于语言的例子。查看扩展中的已编译文件无济于事,因为它们已被缩小。
在该问题上没有完整的“如何做” - 因此,感谢任何帮助!如何告诉 VSC 将文档结构解析为“大纲视图”?
visual-studio-code - 是否可以在 VSCode 中侦听/拦截与打字稿语言服务器之间的 LSP 消息?
我们的扩展引用(有链接)打字稿符号。这就是为什么,每当一个符号被重构/重命名时,我都应该知道,以反映我的扩展中的名称更改。可能吗?如果是,如何?
AFAIK,我可以听textDocument/rename
打字稿扩展的请求,但我该怎么做呢?
如果您考虑一下,仅听代码更改不会给您带来太多好处,因为用户可以用某种绝对其他种类和类型的符号完全替换符号,或者用户可以来回移动符号等。另一方面,重构符号是完全确定的,即您绝对确定只有名称发生了变化,而不是位置,而不是符号本身等。
PS我之前也问过类似的问题,但是主题和我真正要问的完全不同。
ios - 如何在 Linux 上为 iOS 框架添加 VSCode 编辑器补全
当我离开 Mac 时,我仍然希望能够使用 VSCode 在我的 Linux 机器上编写 Swift 代码。但我无法sourcekit-lsp
识别来自 iOS SDK 的模块。
我偶尔会使用 Mac,但主要使用我的 Linux 机器。因此,我可以在我的 Mac 上构建应用程序,但我仍然希望能够提前使用 VSCode 在我的 Linux 机器上起草 Swift 代码。
但我无法sourcekit-lsp
识别来自 iOS SDK 的模块。与references.d.ts
TypeScript 开发人员类似,但使用 swift,并且只有 VSCode/sourcekit-lsp 关心它。
我四处挖掘并Xcode.app
发现了各种文件,在文本编辑器中查看后,它们看起来提供了我想要的东西,但我不知道如何查看它们。.modulemap
.swiftinterface
sourcekit-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
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/)