Eclipse LSP4E Creation Review

Type: 
Creation
State: 
Successful
End Date of the Review Period: 

Reviews run for a minimum of one week. The outcome of the review is decided on this date. This is the last day to make comments or ask questions about this review.

Wednesday, November 16, 2016
Project: 
Proposal: 

Eclipse LSP4E

Parent Project: 
Background: 

The Language Server Protocol is an open-source protocol to interact with a "language server", responsible of computing and suggestion edition assistance on request. The protocol is open at https://github.com/Microsoft/language-server-protocol. This protocol and language servers are meant to simplify the development of tools for a given language. The IDE or editor becomes a "front-end" for the language server. There are already language servers for multiple popular languages.

Typical operations of language servers are: error reporting, completion, documentation, get references...

Scope: 

The scope of the project is to provide integration of language servers conforming to the Language Server Protocol into the Eclipse IDE. It includes some APIs to turn language server protocol elements into Eclipse IDE concepts and a generic integration allowing to easily plug any language server to an Eclipse IDE instance without need to write Java code, either via a plugin associating a new language server, and by letting users manually bind language servers to their IDE.

Individual language servers (VSCode, OmniSharp...) and the necessary layers to actually run a language server (node.js...) are not in the scope of this project. The project aims to easily connect to those, not to ship them. Shipping individual language servers should be considered by project that specifically target tooling for this language.

Description: 

The project includes the necessary code to integrate any language server in the Eclipse IDE, interacting with the language server: it orchestrates the request to the language servers and presents the response in the usual IDE metaphors so users can manipulate them.
The default integration is to provide features into the Platform's Generic and Extensible editor, but some code may be used as API to let integration be done with other Eclipse-based editors.

Some examples of integration are:

  • Show errors from language server as problem markers in the Eclipse IDE
  • Show completion proposals from language server into the Eclipse IDE Generic Editor
  • Show documentation from language server as hover into Eclipse IDE
  • Jump to declaration in Eclipse IDE, relying on language server results
  • Find References in Eclipse IDE, relying on language server results
  • Rename elements according to langauge server proposal
  • View Symbols in Outline/Quick Outline
  • ... more of current LSP feature to integrate
  • ... more to come as language server protocol get enhanced

 

Why Here?: 

This project targets solely the Eclipse IDE. It is likely to provide a lot of value to easily add support for new languages into the Eclipse IDE. The Eclipse IDE can take a big advantage of such integration.

On the other hand, the project would benefit from being inside the Eclipse.org community by attracting more experienced Eclipse developers who're already contributing to some related projects.

The project heavily relies on Eclipse LSP4J project and on Eclipse Platform project (especially on the Generic and Extensible editor part).

Initial Contribution: 

The initial contrbution is a functional code, currently stored on GitHub, with active contributors: https://github.com/eclipselabs/eclipse-language-service .

The copyright mostly belongs to Red Hat Inc., contributions that were made by non-Red Hat contributors were done on files that show the Copyright and license headers, without any concern from contributors. So it's assumed that all contributors have contributed approving the EPL license.

Project Scheduling: 

To bootstrap good practices, the project will attempt a first incubation release as soon as it is provisioned at Eclipse.org.

Then the target is to have multiple incubation releases, about once a month if there have been changes, to include improvements, bugfixes and new features available in the language server protocol and the LSP4J project.

Then, if there are interesting language servers Eclipse IDE can ship by June 2017, the Eclipse LSP4E project would be released as 1.0.0 as part of the Oxygen release train. If no integration with a language server is immediatly profiting to the Eclipse IDE, the project will continue as incubation.

Future Work: 

Integrations with various languages servers will bring needs to support more Language Server Protocol features, and will bring some questions such as how to deal with multiple "competitive" language servers contributing to the same language.

It is also very likely that a similar protocol will be developed for debug and that several languages share a common interface to interact with debuggers. In such case, integration between the Eclipse IDE and such debug protocol could be added to this project.

Another step will be to consider development or adoption of a discovery of language servers.

People
Project Leads: 
Committers: 
Michał Niewrzał
Kaloyan Raev
Interested Parties: 
  • Corporate:
  • Red Hat Inc.
  • TypeFox
  • Rogue Wave/Zend

Individuals:

  • Doug Schaefer
  • Pascal Rapicault
  • Yogesh Bitake
  • Lars Vogel
  • Marc-Andre Laperle

Related projects:

  • LSP4J committers
Mentors: