技术开发 频道

程序员如何在Eclipse Orion中使用LSP?

  【IT168 编译】Eclipse Orion由两个不同的部分组成:服务器端和运行在浏览器中的客户端。Orion服务器有两个单独的实现,其中一个是用Java编写,另一个是用Node.js编写。针对语言服务器协议(LSP),我们选择使用了Node.js服务器。

  Orion中的LSP集成着重在Orion编辑器中获得对Java语言的支持。众所周知,Eclipse平台的JDT插件提供了丰富的功能,使Java开发者能够把Eclipse作为一个Java IDE来使用。JDT是一套插件集合,不仅为Eclipse平台提供了Java编译器、调试器,而且还提供了许多Java特定的用户界面元素,支持Java应用的开发,提供重整、增量编译和只能编辑等支持。

  如何开始

  首先执行以下步骤来获取最新的Orion LSP代码:

程序员如何在Eclipse Orion中使用LSP?

  使用Docker

  orion.client / modules / orionnode /中有一个docker文件,可以用于创建Docker映像,其中包含Eclipse jdt.ls的最新版本以及lsp支持的最新Orion node.js。

  构建映像运行:./docker_build.sh

  构建完成,可以启动映像:docker run -p 8083:8083 orionlsp

  通过打开浏览器连接到http://localhost:8083/。

  然后检查Orion服务器和Orion客户端的更改,以便支持Orion编辑器中的Java语言。

  选择架构

  在开始之前,我们要搞清楚Orion是如何与与语言服务器进行交互的。

程序员如何在Eclipse Orion中使用LSP?

  LSP服务器和Node.js服务器现在在同一台机器上运行。LSP服务器本地安装在Node.js服务器中名为'server'的文件夹内。这样做的目的是让每个Node.js服务器运行一个LSP服务器。目前,两台Orion服务器之间无法共享LSP服务器。

  Orion服务器

  在Orion服务器端,无法使语言服务器通信进行。我们定义了一个在服务器代码中注册的扩展名(请参阅server.js中的第100行)。该扩展开始侦听用于启动和初始化LSP服务器的命名套接字。

  Orion客户端

  语言服务器协议定义了很多,并且可以向LSP服务器发出请求,例如文档生命周期,代码格式化,hover事件,搜索引用,代码补全等等。

  目前Orion支持其中的大多数,一旦服务器在工作空间内启动和初始化,用户就可以格式化代码,获取问题和警告,搜索引用,获取Javadoc hover,获取错误警告等。

  因为现在不支持代码操作,所以在Orion编辑器中没有可用于报告的错误和警告的快速修复。

  使用Orion插件完成编辑器集成。该插件定义了用于启动语言服务器的命名套接字。该插件注册之后,为使用以下内容类型的文件进行初始化:“text / x-java-source”或“application / x-jsp”。这两种文件在Orion插件中注册之后,扩展名为“.java”和“.jsp”。因此,当插件启动和初始化时,它将触发命名套接字的连接并发送'start'事件。然后初始化LSP服务器,并且让两个套接字用于LSP服务器和Orion客户端之间的双向通信。Orion插件也用于通过使用Orion stylers来注册Java语言的语法高亮。

程序员如何在Eclipse Orion中使用LSP?

  其中mJava和mJSP被定义为:

程序员如何在Eclipse Orion中使用LSP?

  Orion编辑器的每个功能都已经被更新了,以检查LSP服务器是否已注册并需要处理。

  例如,对于格式化程序,在调用的文件中org.eclipse.orion.client.ui/web/orion/formatter.js,我们检查是否存在为当前文件内容类型注册的LSP服务器。为此,我们将所有LSP服务器注册到一个注册表中,然后加速查找基于特定内容类型的LSP服务器。如果我们找到一个,从协议调用相应的处理程序来使用它。在这种情况下,它是执行文档格式化请求或者文档范围格式化请求,要取决于编辑器中的当前选择。

程序员如何在Eclipse Orion中使用LSP?

  我们可以这样做:

程序员如何在Eclipse Orion中使用LSP?

  我们使用同样的原理来实现所有可以利用LSP服务器特性的Orion编辑器特性(事件、搜索引用等)。

  未来方向

  我们还需要添加LSP中定义的代码操作请求的支持,以便能够在Orion编辑器中添加快速修复。

  现在,LSP服务器在Maven和Gradle项目中运行正常。 这是一个快速发展的领域,我们相信未来会有更多的项目可以适用。就像通用Eclipse编辑器一样,不仅可以支持Java,还可以支持其它语言。

  运行界面:

程序员如何在Eclipse Orion中使用LSP?

0
相关文章