SlideShare a Scribd company logo
1 of 72
Download to read offline
The Language Server Protocol:
Why the Hype?
Mikael Barbero

Eclipse Foundation

Eclipse Summit India 2017
Dear IDE, please
support this new trendy
language!
Dear IDE, please
support this new trendy
language!
Dear language, please
provide integration with
my favorite IDE!
Dear IDE, please
support this new trendy
language!
Dear language, please
provide integration with
my favorite IDE!
Dear IDE, please
support this new trendy
language!
Dear language, please
provide integration with
my favorite IDE!
Language Server Protocol helps building language support!
Implementing language support for an IDE is hard
Expert of the tool Expert of the language
Parser
Semantic analysis
Type system
UI Workflows
APIs
Integration
Java Javascript C/C++ Go Json Rust CSS ...
Eclipse
Eclipse Che
Eclipse Orion
Atom
VisualStudio
Code
...
What is the so-called
Language Server Protocol (LSP)?
–Phil Karlton
“There are only two hard things in Computer Science:
cache invalidation and naming things.”
–Phil Karlton
“There are only two hard things in Computer Science:
cache invalidation and naming things.”
What is the so-called
Language Server Protocol (LSP)?
“A bad name for a Remote Procedure Call (RPC) API that is
used between by a tool and a language smartness provider to
integrate features like auto complete, goto definition, find all
references and alike into the tool”
“A bad name for a Remote Procedure Call (RPC) API that is
used between by a tool and a language smartness provider to
integrate features like auto complete, goto definition, find all
references and alike into the tool”
https://github.com/Microsoft/language-server-protocol
LSP
(RPC API)
Program A
LSP
(RPC API)
Program A Program B
LSP
(RPC API)
Tool
Program A Program B
LSP
(RPC API)
Language
Smartness
Provider
Tool
Program A Program B
LSP
(RPC API)
Language
Smartness
Provider
Tool
Program A Program B
LSP
(RPC API)
Language
Smartness
Provider
Tool
Program A Program B
LSP
(Client)
(RPC API)
Language
Smartness
Provider
Tool
Program A Program B
LSP
(Client) (Server)
(RPC API)
Language
Smartness
Provider
Tool
Program A Program B
LSP
Language
Smartness
Provider
Tool
Program A Program B
LSP
Tool
Tool
Tool
Language
Smartness Provider
Tool
Tool
Tool
Language
Smartness Provider
N
o
m
ultitenancy
Implementing language support for an IDE is easier
Expert of the tool Expert of the language
Parser
Semantic analysis
Type system
UI Workflows
APIs
Integration
LSP
Eclipse
Eclipse Che
Eclipse Orion
Atom
VisualStudio
Code
...
Java
Javascript
C/C++
Go
Json
Rust
CSS
...
LSP
DRY
(don't repeat yourself)
Current Status - Clients Support
Eclipse CheEclipse (LSP4e) NeoVim
Visual Studio
Code
Sublime TextEmacs VimAtom
Work in Progress
Eclipse Orion
Current Status - Languages Support
Current Status - LSP SDKs
node.js MS vscode-languageserver-node
C# MS work in progress by David Wilson
Java Eclipse, TypeFox Eclipse LSP4J
Haxe @nadako language-server-protocol-haxe
PHP Felix Becker php-language-server
Rust Bruno Medeiros RustLSP
Haskell Alan Zimmerman Haskell-LSP
C# OmniSharp C#-LSP
C# Inomata Kentaro LanguageServerProtocol
SDK/libraries support implementing the protocol in a particular language.
LSP in depth
JSON-RPC based API
)]}'
JSON-RPC
Stateless RPC
protocol
(use "id" used by client to
track responses)
JSON as data
format of request
and responses
Agnostic of
transport layer
(can be Sockets, Shared
Memory, PIPE, HTTP, ...)
JSON-RPC
Program A Program B
JSON-RPC
{
"jsonrpc": "2.0",
"method": "subtract",
"params": [42, 23],
"id": 1
}
Program A Program B
JSON-RPC
{
"jsonrpc": "2.0",
"result": 19,
"id": 1
}
{
"jsonrpc": "2.0",
"method": "subtract",
"params": [42, 23],
"id": 1
}
Program A Program B
Agnostic of
transport layer
(can be Sockets, Shared
Memory, PIPE, HTTP, ...)
Clients can only communicate with servers if they
talk on the same transport channel.
e.g., if a server only supports pipes (stdin / stdout),
a client that uses sockets won’t be able to use it.
LSP in a nutshell
A set of JSON-RPC requests,
responses and notifications to integrate
tools (clients) and language smartness
providers (servers)
LSP: Client Requests
Completion
Requests a list of completion
items from a document
position. Resolution can be
done in two steps
Hover
Requests hover information at a
given text document position.
Result is a markdown string or
a pair of a language and a code
block value
Signature Help
Requests signature
information at a given cursor
position (e.g. used to display a
tooltip with signature when
typing a method call)
References
Requests to resolve project-
wide references for the
symbol denoted by the given
text document position
Workspace Symbols
Requests to list project-wide
symbols matching the query
string (usually the name /
name prefix of the symbol)
Document Symbols
Requests to list all symbols
found in a given text
document
LSP: Client Requests (cont'd)
Formatting
Requests to format a whole
document
Range Formatting
Requests to format a given
range in a document
On Type Formatting
Requests to format parts of
the document during typing.
Trigger characters are
configured at registration time
Go to Definition
Requests to resolve the
definition location of a symbol
at a given text document
position
Code Action
Requests to compute
commands for a given text
document and range. Can be
used for instance to get the
list of quick fixes for a given
problem
Code Lens
Request to compute code
lenses for a given text
document. It returns a list of
commands to be executed for
some text ranges (e.g.
number of references)
LSP: Client Requests (cont'd again)
Rename
Requests to perform a
workspace-wide rename of a
symbol
Document Links
Requests the location of links
in a document. Resolution can
be done in two steps
Document Highlight
Requests to resolve a
document highlights for a
given text document position
(e.g., to mark all occurrences
of the variable for a given
position)
Typical lifecycle (startup)
Client
(e.g., VSCode, Eclipse)
Language Server
(e.g., JDT-LS, PHP-LS)
Client Tool
(e.g., Eclipse, VSCode)
Typical lifecycle (startup)
Client
(e.g., VSCode, Eclipse)
Language Server
(e.g., JDT-LS, PHP-LS)
Start
Client Tool
(e.g., Eclipse, VSCode)
(not defined by LSP)
Can be child process, daemon, run image in
container, HEAD http://server/status, …
Typical lifecycle (startup)
Client
(e.g., VSCode, Eclipse)
Language Server
(e.g., JDT-LS, PHP-LS)
Start
Initialize
Params: rootUri, the root URI of the workspace + client
capabilities
The protocol does not define how the rootUri parameter should be used by the servers. Most servers expect file: URIs. JDT-LS uses
this URI to provision an Eclipse Workspace (i.e. imports all Eclipse, Gradle and Maven projects it can find in the rootUri hierarchy).
Client Tool
(e.g., Eclipse, VSCode)
(not defined by LSP)
Can be child process, daemon, run image in
container, HEAD http://server/status, …
Typical lifecycle (startup)
Client
(e.g., VSCode, Eclipse)
Language Server
(e.g., JDT-LS, PHP-LS)
Start
Initialize
Params: rootUri, the root URI of the workspace + client
capabilities
Returns server capabilities (like how text documents are
synced)
The protocol does not define how the rootUri parameter should be used by the servers. Most servers expect file: URIs. JDT-LS uses
this URI to provision an Eclipse Workspace (i.e. imports all Eclipse, Gradle and Maven projects it can find in the rootUri hierarchy).
Client Tool
(e.g., Eclipse, VSCode)
(not defined by LSP)
Can be child process, daemon, run image in
container, HEAD http://server/status, …
Typical lifecycle (editing)
Client
(e.g., VSCode, Eclipse)
Language Server
(e.g., JDT-LS, PHP-LS)
Client Tool
(e.g., Eclipse, VSCode)
Typical lifecycle (editing)
Client
(e.g., VSCode, Eclipse)
Language Server
(e.g., JDT-LS, PHP-LS)
didOpen
Client Tool
(e.g., Eclipse, VSCode)
Notifies the server that the document's truth is now
managed by the client and the server must not try to
read the document's truth using the document's uri
Typical lifecycle (editing)
Client
(e.g., VSCode, Eclipse)
Language Server
(e.g., JDT-LS, PHP-LS)
didOpen
didChange
Signals changes to a text document (the granularity of the
reported changes are defined by server capabilities)
Client Tool
(e.g., Eclipse, VSCode)
Notifies the server that the document's truth is now
managed by the client and the server must not try to
read the document's truth using the document's uri
Typical lifecycle (editing)
Client
(e.g., VSCode, Eclipse)
Language Server
(e.g., JDT-LS, PHP-LS)
didOpen
didChange
Signals changes to a text document (the granularity of the
reported changes are defined by server capabilities)
Usually will notify about new diagnostics, some time later
Client Tool
(e.g., Eclipse, VSCode)
Notifies the server that the document's truth is now
managed by the client and the server must not try to
read the document's truth using the document's uri
Typical lifecycle (editing)
Client
(e.g., VSCode, Eclipse)
Language Server
(e.g., JDT-LS, PHP-LS)
didOpen
didChange
Signals changes to a text document (the granularity of the
reported changes are defined by server capabilities)
Usually will notify about new diagnostics, some time later
The didOpen, didChange (and willSave, save, didClose) are not mandatory. Some servers expose via their capabilities that they do not
need to be notified about these events.
Client Tool
(e.g., Eclipse, VSCode)
Notifies the server that the document's truth is now
managed by the client and the server must not try to
read the document's truth using the document's uri
Typical lifecycle (saving)
Client
(e.g., VSCode, Eclipse)
Language Server
(e.g., JDT-LS, PHP-LS)
Client Tool
(e.g., Eclipse, VSCode)
The didOpen, didChange (and willSave, save, didClose) are not mandatory. Some servers expose via their capabilities that they do not
need to be notified about these events.
Typical lifecycle (saving)
Client
(e.g., VSCode, Eclipse)
Language Server
(e.g., JDT-LS, PHP-LS)
willSave | willSaveWaitUntil
Client Tool
(e.g., Eclipse, VSCode)
+ Reason of the save (manual, after delay, focus out). "Wait until" is a way to
get all the edits that should be apply before saving (e.g. if a refactoring has
been requested before and it still being computed on the server side)
The didOpen, didChange (and willSave, save, didClose) are not mandatory. Some servers expose via their capabilities that they do not
need to be notified about these events.
Typical lifecycle (saving)
Client
(e.g., VSCode, Eclipse)
Language Server
(e.g., JDT-LS, PHP-LS)
willSave | willSaveWaitUntil
didSave
Can include the whole text document if server capabilities
require it
Client Tool
(e.g., Eclipse, VSCode)
+ Reason of the save (manual, after delay, focus out). "Wait until" is a way to
get all the edits that should be apply before saving (e.g. if a refactoring has
been requested before and it still being computed on the server side)
The didOpen, didChange (and willSave, save, didClose) are not mandatory. Some servers expose via their capabilities that they do not
need to be notified about these events.
Typical lifecycle (saving)
Client
(e.g., VSCode, Eclipse)
Language Server
(e.g., JDT-LS, PHP-LS)
willSave | willSaveWaitUntil
didSave
Can include the whole text document if server capabilities
require it
The document's truth now exists where the document's uri
points to.
Client Tool
(e.g., Eclipse, VSCode)
+ Reason of the save (manual, after delay, focus out). "Wait until" is a way to
get all the edits that should be apply before saving (e.g. if a refactoring has
been requested before and it still being computed on the server side)
didClose
The didOpen, didChange (and willSave, save, didClose) are not mandatory. Some servers expose via their capabilities that they do not
need to be notified about these events.
Typical lifecycle (shutdown)
Client
(e.g., VSCode, Eclipse)
Language Server
(e.g., JDT-LS, PHP-LS)
Client Tool
(e.g., Eclipse, VSCode)
Typical lifecycle (shutdown)
Client
(e.g., VSCode, Eclipse)
Language Server
(e.g., JDT-LS, PHP-LS)
shutdown
Client Tool
(e.g., Eclipse, VSCode)
Asks the server to shut down, but to not exit (otherwise the
response might not be delivered correctly to the client)
Typical lifecycle (shutdown)
Client
(e.g., VSCode, Eclipse)
Language Server
(e.g., JDT-LS, PHP-LS)
shutdown
May return errors
Client Tool
(e.g., Eclipse, VSCode)
Asks the server to shut down, but to not exit (otherwise the
response might not be delivered correctly to the client)
Typical lifecycle (shutdown)
Client
(e.g., VSCode, Eclipse)
Language Server
(e.g., JDT-LS, PHP-LS)
shutdown
exit
May return errors
Asks the server to exit its process. The server should exit
with success code 0 if the shutdown request has been
received before; otherwise with error code 1.
The specification explicitly talk about exiting a process on the ‘exit’ notification. Of course, some clients that will interact with daemons,
containers or HTTP servers will use this notification differently.
Client Tool
(e.g., Eclipse, VSCode)
Asks the server to shut down, but to not exit (otherwise the
response might not be delivered correctly to the client)
Server does no editing
All editing is done on the client side
• The server can read files, but all file modifications
are sent to the clients in the form of a
WorkspaceEdit.
• The client applies the edits and notifies the server
about the changes so he can refresh changed
files.
• To execute a command (e.g. quick fix or a
rename), the client send a request that the server
acknowledge or not. If it does, then the server
compute the changes and send a request to the
client for him to apply the modifications
LSP Limitations
Text Editing Only
No support for running, testing or debugging
Ongoing work for debug
https://github.com/Microsoft/vscode-debugadapter-node
No Advanced Tooling
Types hierarchy Advanced refactoring
Syntax Highlighting, Bracket Matchings and Code Folding
Deferred to the client's editor
Requires tokenizer and / or grammar in addition to the language server
No Communication between Language Servers
No cross-languages go to
definition or refactoring
No Packaging Standard
• Currently: specific to each editor
• Language servers can have a lot
of native dependencies
• Possible solution: use docker to
package and run LS
No standard transport or transport negotiation
Potential solutions:
• Force transport negotiation via a
specific transport during startup
phase
• Store metadata about the language
servers in a registry / marketplace
??
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
Key Takeaways: why the hype?
Mikaël Barbero
mikael.barbero@eclipse-foundation.org
@mikbarbero
https://eclipse.org/community/eclipse_newsletter/2017/may/
Key Takeaways: why the hype?
Promising and
powerful
abstraction for
language tooling
development
Mikaël Barbero
mikael.barbero@eclipse-foundation.org
@mikbarbero
https://eclipse.org/community/eclipse_newsletter/2017/may/
Key Takeaways: why the hype?
Promising and
powerful
abstraction for
language tooling
development
Still young and has
shortcomings
Mikaël Barbero
mikael.barbero@eclipse-foundation.org
@mikbarbero
https://eclipse.org/community/eclipse_newsletter/2017/may/
Key Takeaways: why the hype?
Promising and
powerful
abstraction for
language tooling
development
Still young and has
shortcomings
Paradigm shift in
tooling
development:
microservices
Mikaël Barbero
mikael.barbero@eclipse-foundation.org
@mikbarbero
https://eclipse.org/community/eclipse_newsletter/2017/may/

More Related Content

What's hot

mykola marzhan - jenkins on aws spot instance
mykola marzhan - jenkins on aws spot instancemykola marzhan - jenkins on aws spot instance
mykola marzhan - jenkins on aws spot instanceDariia Seimova
 
The New JavaScript: ES6
The New JavaScript: ES6The New JavaScript: ES6
The New JavaScript: ES6Rob Eisenberg
 
Introduction to OPA
Introduction to OPAIntroduction to OPA
Introduction to OPAKnoldus Inc.
 
Introducing Drools
Introducing DroolsIntroducing Drools
Introducing DroolsMario Fusco
 
Performance Engineering Masterclass: Introduction to Modern Performance
Performance Engineering Masterclass: Introduction to Modern PerformancePerformance Engineering Masterclass: Introduction to Modern Performance
Performance Engineering Masterclass: Introduction to Modern PerformanceScyllaDB
 
Intro to Asynchronous Javascript
Intro to Asynchronous JavascriptIntro to Asynchronous Javascript
Intro to Asynchronous JavascriptGarrett Welson
 
Locator strategy for web elements | Katalon Studio
Locator strategy for web elements | Katalon StudioLocator strategy for web elements | Katalon Studio
Locator strategy for web elements | Katalon StudioKatalon Studio
 
Atomicity In Redis: Thomas Hunter
Atomicity In Redis: Thomas HunterAtomicity In Redis: Thomas Hunter
Atomicity In Redis: Thomas HunterRedis Labs
 
Running distributed tests with k6.pdf
Running distributed tests with k6.pdfRunning distributed tests with k6.pdf
Running distributed tests with k6.pdfLibbySchulze
 
Expose your event-driven data to the outside world using webhooks powered by ...
Expose your event-driven data to the outside world using webhooks powered by ...Expose your event-driven data to the outside world using webhooks powered by ...
Expose your event-driven data to the outside world using webhooks powered by ...HostedbyConfluent
 
JavaScript Event Loop
JavaScript Event LoopJavaScript Event Loop
JavaScript Event LoopDesignveloper
 
AngularJS Architecture
AngularJS ArchitectureAngularJS Architecture
AngularJS ArchitectureEyal Vardi
 
BDD WITH CUCUMBER AND JAVA
BDD WITH CUCUMBER AND JAVABDD WITH CUCUMBER AND JAVA
BDD WITH CUCUMBER AND JAVASrinivas Katakam
 
Being Functional on Reactive Streams with Spring Reactor
Being Functional on Reactive Streams with Spring ReactorBeing Functional on Reactive Streams with Spring Reactor
Being Functional on Reactive Streams with Spring ReactorMax Huang
 
Lightweight Xtext Editors as SWT Widgets
Lightweight Xtext Editors as SWT WidgetsLightweight Xtext Editors as SWT Widgets
Lightweight Xtext Editors as SWT Widgetsmeysholdt
 
ES6 presentation
ES6 presentationES6 presentation
ES6 presentationritika1
 

What's hot (20)

mykola marzhan - jenkins on aws spot instance
mykola marzhan - jenkins on aws spot instancemykola marzhan - jenkins on aws spot instance
mykola marzhan - jenkins on aws spot instance
 
The New JavaScript: ES6
The New JavaScript: ES6The New JavaScript: ES6
The New JavaScript: ES6
 
Introduction to OPA
Introduction to OPAIntroduction to OPA
Introduction to OPA
 
Introducing Drools
Introducing DroolsIntroducing Drools
Introducing Drools
 
Performance Engineering Masterclass: Introduction to Modern Performance
Performance Engineering Masterclass: Introduction to Modern PerformancePerformance Engineering Masterclass: Introduction to Modern Performance
Performance Engineering Masterclass: Introduction to Modern Performance
 
Intro to Asynchronous Javascript
Intro to Asynchronous JavascriptIntro to Asynchronous Javascript
Intro to Asynchronous Javascript
 
Introduction to TypeScript
Introduction to TypeScriptIntroduction to TypeScript
Introduction to TypeScript
 
Locator strategy for web elements | Katalon Studio
Locator strategy for web elements | Katalon StudioLocator strategy for web elements | Katalon Studio
Locator strategy for web elements | Katalon Studio
 
Atomicity In Redis: Thomas Hunter
Atomicity In Redis: Thomas HunterAtomicity In Redis: Thomas Hunter
Atomicity In Redis: Thomas Hunter
 
Running distributed tests with k6.pdf
Running distributed tests with k6.pdfRunning distributed tests with k6.pdf
Running distributed tests with k6.pdf
 
Expose your event-driven data to the outside world using webhooks powered by ...
Expose your event-driven data to the outside world using webhooks powered by ...Expose your event-driven data to the outside world using webhooks powered by ...
Expose your event-driven data to the outside world using webhooks powered by ...
 
JavaScript Event Loop
JavaScript Event LoopJavaScript Event Loop
JavaScript Event Loop
 
Express js
Express jsExpress js
Express js
 
AngularJS Architecture
AngularJS ArchitectureAngularJS Architecture
AngularJS Architecture
 
React
React React
React
 
BDD WITH CUCUMBER AND JAVA
BDD WITH CUCUMBER AND JAVABDD WITH CUCUMBER AND JAVA
BDD WITH CUCUMBER AND JAVA
 
Being Functional on Reactive Streams with Spring Reactor
Being Functional on Reactive Streams with Spring ReactorBeing Functional on Reactive Streams with Spring Reactor
Being Functional on Reactive Streams with Spring Reactor
 
Querydsl overview 2014
Querydsl overview 2014Querydsl overview 2014
Querydsl overview 2014
 
Lightweight Xtext Editors as SWT Widgets
Lightweight Xtext Editors as SWT WidgetsLightweight Xtext Editors as SWT Widgets
Lightweight Xtext Editors as SWT Widgets
 
ES6 presentation
ES6 presentationES6 presentation
ES6 presentation
 

Similar to Language Server Protocol - Why the Hype?

Build Great Networked APIs with Swift, OpenAPI, and gRPC
Build Great Networked APIs with Swift, OpenAPI, and gRPCBuild Great Networked APIs with Swift, OpenAPI, and gRPC
Build Great Networked APIs with Swift, OpenAPI, and gRPCTim Burks
 
Building scalable and language-independent Java services using Apache Thrift ...
Building scalable and language-independent Java services using Apache Thrift ...Building scalable and language-independent Java services using Apache Thrift ...
Building scalable and language-independent Java services using Apache Thrift ...IndicThreads
 
[EclipseCon France 2017] Language Server Protocol in action
[EclipseCon France 2017] Language Server Protocol in action[EclipseCon France 2017] Language Server Protocol in action
[EclipseCon France 2017] Language Server Protocol in actionMickael Istria
 
Building scalable and language independent java services using apache thrift
Building scalable and language independent java services using apache thriftBuilding scalable and language independent java services using apache thrift
Building scalable and language independent java services using apache thriftTalentica Software
 
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...Maarten Balliauw
 
Learn about Java framework for pen-based computing and the Livescribe Platfor...
Learn about Java framework for pen-based computing and the Livescribe Platfor...Learn about Java framework for pen-based computing and the Livescribe Platfor...
Learn about Java framework for pen-based computing and the Livescribe Platfor...Marakana Inc.
 
TypeScript for Alfresco and CMIS - Alfresco DevCon 2012 San Jose
TypeScript for Alfresco and CMIS - Alfresco DevCon 2012 San JoseTypeScript for Alfresco and CMIS - Alfresco DevCon 2012 San Jose
TypeScript for Alfresco and CMIS - Alfresco DevCon 2012 San JoseSteve Reiner
 
EclipseCon Europe 2016, S. Cela, M.Istria: Eclipse Generic and Extensible Edi...
EclipseCon Europe 2016, S. Cela, M.Istria: Eclipse Generic and Extensible Edi...EclipseCon Europe 2016, S. Cela, M.Istria: Eclipse Generic and Extensible Edi...
EclipseCon Europe 2016, S. Cela, M.Istria: Eclipse Generic and Extensible Edi...Mickael Istria
 
CocoaConf: The Language of Mobile Software is APIs
CocoaConf: The Language of Mobile Software is APIsCocoaConf: The Language of Mobile Software is APIs
CocoaConf: The Language of Mobile Software is APIsTim Burks
 
Copmuter Languages
Copmuter LanguagesCopmuter Languages
Copmuter Languagesactanimation
 
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...Maarten Balliauw
 
Networked APIs with swift
Networked APIs with swiftNetworked APIs with swift
Networked APIs with swiftTim Burks
 
Realizing the promise of portable data processing with Apache Beam
Realizing the promise of portable data processing with Apache BeamRealizing the promise of portable data processing with Apache Beam
Realizing the promise of portable data processing with Apache BeamDataWorks Summit
 
Compiler Construction | Lecture 17 | Beyond Compiler Construction
Compiler Construction | Lecture 17 | Beyond Compiler ConstructionCompiler Construction | Lecture 17 | Beyond Compiler Construction
Compiler Construction | Lecture 17 | Beyond Compiler ConstructionEelco Visser
 
Crystal internals (part 1)
Crystal internals (part 1)Crystal internals (part 1)
Crystal internals (part 1)Ary Borenszweig
 
Crystal internals (part 1)
Crystal internals (part 1)Crystal internals (part 1)
Crystal internals (part 1)Ary Borenszweig
 

Similar to Language Server Protocol - Why the Hype? (20)

Avro
AvroAvro
Avro
 
Build Great Networked APIs with Swift, OpenAPI, and gRPC
Build Great Networked APIs with Swift, OpenAPI, and gRPCBuild Great Networked APIs with Swift, OpenAPI, and gRPC
Build Great Networked APIs with Swift, OpenAPI, and gRPC
 
Building scalable and language-independent Java services using Apache Thrift ...
Building scalable and language-independent Java services using Apache Thrift ...Building scalable and language-independent Java services using Apache Thrift ...
Building scalable and language-independent Java services using Apache Thrift ...
 
[EclipseCon France 2017] Language Server Protocol in action
[EclipseCon France 2017] Language Server Protocol in action[EclipseCon France 2017] Language Server Protocol in action
[EclipseCon France 2017] Language Server Protocol in action
 
Building scalable and language independent java services using apache thrift
Building scalable and language independent java services using apache thriftBuilding scalable and language independent java services using apache thrift
Building scalable and language independent java services using apache thrift
 
Visual studio
Visual studioVisual studio
Visual studio
 
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
 
Best node js course
Best node js courseBest node js course
Best node js course
 
Learn about Java framework for pen-based computing and the Livescribe Platfor...
Learn about Java framework for pen-based computing and the Livescribe Platfor...Learn about Java framework for pen-based computing and the Livescribe Platfor...
Learn about Java framework for pen-based computing and the Livescribe Platfor...
 
DSL explained _
DSL explained _DSL explained _
DSL explained _
 
TypeScript for Alfresco and CMIS - Alfresco DevCon 2012 San Jose
TypeScript for Alfresco and CMIS - Alfresco DevCon 2012 San JoseTypeScript for Alfresco and CMIS - Alfresco DevCon 2012 San Jose
TypeScript for Alfresco and CMIS - Alfresco DevCon 2012 San Jose
 
EclipseCon Europe 2016, S. Cela, M.Istria: Eclipse Generic and Extensible Edi...
EclipseCon Europe 2016, S. Cela, M.Istria: Eclipse Generic and Extensible Edi...EclipseCon Europe 2016, S. Cela, M.Istria: Eclipse Generic and Extensible Edi...
EclipseCon Europe 2016, S. Cela, M.Istria: Eclipse Generic and Extensible Edi...
 
CocoaConf: The Language of Mobile Software is APIs
CocoaConf: The Language of Mobile Software is APIsCocoaConf: The Language of Mobile Software is APIs
CocoaConf: The Language of Mobile Software is APIs
 
Copmuter Languages
Copmuter LanguagesCopmuter Languages
Copmuter Languages
 
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
 
Networked APIs with swift
Networked APIs with swiftNetworked APIs with swift
Networked APIs with swift
 
Realizing the promise of portable data processing with Apache Beam
Realizing the promise of portable data processing with Apache BeamRealizing the promise of portable data processing with Apache Beam
Realizing the promise of portable data processing with Apache Beam
 
Compiler Construction | Lecture 17 | Beyond Compiler Construction
Compiler Construction | Lecture 17 | Beyond Compiler ConstructionCompiler Construction | Lecture 17 | Beyond Compiler Construction
Compiler Construction | Lecture 17 | Beyond Compiler Construction
 
Crystal internals (part 1)
Crystal internals (part 1)Crystal internals (part 1)
Crystal internals (part 1)
 
Crystal internals (part 1)
Crystal internals (part 1)Crystal internals (part 1)
Crystal internals (part 1)
 

More from mikaelbarbero

Kubernetes 101 - A Cluster Operating System
Kubernetes 101 - A Cluster Operating SystemKubernetes 101 - A Cluster Operating System
Kubernetes 101 - A Cluster Operating Systemmikaelbarbero
 
What's new in Eclipse Oxygen (Devoxx France 2017)
What's new in Eclipse Oxygen (Devoxx France 2017)What's new in Eclipse Oxygen (Devoxx France 2017)
What's new in Eclipse Oxygen (Devoxx France 2017)mikaelbarbero
 
The Eclipse IDE: What's new in the 2017 release?
The Eclipse IDE: What's new in the 2017 release?The Eclipse IDE: What's new in the 2017 release?
The Eclipse IDE: What's new in the 2017 release?mikaelbarbero
 
What every Eclipse developer should know about progress reporting and job can...
What every Eclipse developer should know about progress reporting and job can...What every Eclipse developer should know about progress reporting and job can...
What every Eclipse developer should know about progress reporting and job can...mikaelbarbero
 
The Eclipse IDE - The Force Awakens (Devoxx France 2016)
The Eclipse IDE - The Force Awakens (Devoxx France 2016)The Eclipse IDE - The Force Awakens (Devoxx France 2016)
The Eclipse IDE - The Force Awakens (Devoxx France 2016)mikaelbarbero
 
Sirius: Graphical Editors for your DSLs
Sirius: Graphical Editors for your DSLsSirius: Graphical Editors for your DSLs
Sirius: Graphical Editors for your DSLsmikaelbarbero
 
Modeling in a Team Environment with EMF Compare and EGit
Modeling in a Team Environment with EMF Compare and EGitModeling in a Team Environment with EMF Compare and EGit
Modeling in a Team Environment with EMF Compare and EGitmikaelbarbero
 
Diff and Merge with Ease: EMF Compare
Diff and Merge with Ease: EMF CompareDiff and Merge with Ease: EMF Compare
Diff and Merge with Ease: EMF Comparemikaelbarbero
 
Eclipse simultaneous release in a nutshell
Eclipse simultaneous release in a nutshellEclipse simultaneous release in a nutshell
Eclipse simultaneous release in a nutshellmikaelbarbero
 
OSGi: Don't let me be Misunderstood
OSGi: Don't let me be MisunderstoodOSGi: Don't let me be Misunderstood
OSGi: Don't let me be Misunderstoodmikaelbarbero
 
EMF.Edit the Force Unleashed!
EMF.Edit the Force Unleashed!EMF.Edit the Force Unleashed!
EMF.Edit the Force Unleashed!mikaelbarbero
 
EMF Compare 2.0: Scaling to Millions (updated)
EMF Compare 2.0: Scaling to Millions (updated)EMF Compare 2.0: Scaling to Millions (updated)
EMF Compare 2.0: Scaling to Millions (updated)mikaelbarbero
 
EMFCompare 2.0: Scaling to Millions
EMFCompare 2.0: Scaling to MillionsEMFCompare 2.0: Scaling to Millions
EMFCompare 2.0: Scaling to Millionsmikaelbarbero
 
3mf infinity-and-beyond
3mf infinity-and-beyond3mf infinity-and-beyond
3mf infinity-and-beyondmikaelbarbero
 
Eclipseconeurope 2011 - EMFCompare Improvements
Eclipseconeurope 2011 - EMFCompare ImprovementsEclipseconeurope 2011 - EMFCompare Improvements
Eclipseconeurope 2011 - EMFCompare Improvementsmikaelbarbero
 
Google Guava & EMF @ GTUG Nantes
Google Guava & EMF @ GTUG NantesGoogle Guava & EMF @ GTUG Nantes
Google Guava & EMF @ GTUG Nantesmikaelbarbero
 
5M lines of code migration
5M lines of code migration5M lines of code migration
5M lines of code migrationmikaelbarbero
 
Generating an Android App with Acceleo (Eclipse Summit Europe 2010)
Generating an Android App with Acceleo (Eclipse Summit Europe 2010)Generating an Android App with Acceleo (Eclipse Summit Europe 2010)
Generating an Android App with Acceleo (Eclipse Summit Europe 2010)mikaelbarbero
 

More from mikaelbarbero (19)

Kubernetes 101 - A Cluster Operating System
Kubernetes 101 - A Cluster Operating SystemKubernetes 101 - A Cluster Operating System
Kubernetes 101 - A Cluster Operating System
 
What's new in Eclipse Oxygen (Devoxx France 2017)
What's new in Eclipse Oxygen (Devoxx France 2017)What's new in Eclipse Oxygen (Devoxx France 2017)
What's new in Eclipse Oxygen (Devoxx France 2017)
 
The Eclipse IDE: What's new in the 2017 release?
The Eclipse IDE: What's new in the 2017 release?The Eclipse IDE: What's new in the 2017 release?
The Eclipse IDE: What's new in the 2017 release?
 
What every Eclipse developer should know about progress reporting and job can...
What every Eclipse developer should know about progress reporting and job can...What every Eclipse developer should know about progress reporting and job can...
What every Eclipse developer should know about progress reporting and job can...
 
The Eclipse IDE - The Force Awakens (Devoxx France 2016)
The Eclipse IDE - The Force Awakens (Devoxx France 2016)The Eclipse IDE - The Force Awakens (Devoxx France 2016)
The Eclipse IDE - The Force Awakens (Devoxx France 2016)
 
Sirius: Graphical Editors for your DSLs
Sirius: Graphical Editors for your DSLsSirius: Graphical Editors for your DSLs
Sirius: Graphical Editors for your DSLs
 
Modeling in a Team Environment with EMF Compare and EGit
Modeling in a Team Environment with EMF Compare and EGitModeling in a Team Environment with EMF Compare and EGit
Modeling in a Team Environment with EMF Compare and EGit
 
Diff and Merge with Ease: EMF Compare
Diff and Merge with Ease: EMF CompareDiff and Merge with Ease: EMF Compare
Diff and Merge with Ease: EMF Compare
 
Eclipse simultaneous release in a nutshell
Eclipse simultaneous release in a nutshellEclipse simultaneous release in a nutshell
Eclipse simultaneous release in a nutshell
 
OSGi: Don't let me be Misunderstood
OSGi: Don't let me be MisunderstoodOSGi: Don't let me be Misunderstood
OSGi: Don't let me be Misunderstood
 
EMF.Edit the Force Unleashed!
EMF.Edit the Force Unleashed!EMF.Edit the Force Unleashed!
EMF.Edit the Force Unleashed!
 
EMF Compare 2.0: Scaling to Millions (updated)
EMF Compare 2.0: Scaling to Millions (updated)EMF Compare 2.0: Scaling to Millions (updated)
EMF Compare 2.0: Scaling to Millions (updated)
 
EMFCompare 2.0: Scaling to Millions
EMFCompare 2.0: Scaling to MillionsEMFCompare 2.0: Scaling to Millions
EMFCompare 2.0: Scaling to Millions
 
3mf infinity-and-beyond
3mf infinity-and-beyond3mf infinity-and-beyond
3mf infinity-and-beyond
 
Eclipseconeurope 2011 - EMFCompare Improvements
Eclipseconeurope 2011 - EMFCompare ImprovementsEclipseconeurope 2011 - EMFCompare Improvements
Eclipseconeurope 2011 - EMFCompare Improvements
 
Google Guava & EMF @ GTUG Nantes
Google Guava & EMF @ GTUG NantesGoogle Guava & EMF @ GTUG Nantes
Google Guava & EMF @ GTUG Nantes
 
5M lines of code migration
5M lines of code migration5M lines of code migration
5M lines of code migration
 
EMFPath
EMFPathEMFPath
EMFPath
 
Generating an Android App with Acceleo (Eclipse Summit Europe 2010)
Generating an Android App with Acceleo (Eclipse Summit Europe 2010)Generating an Android App with Acceleo (Eclipse Summit Europe 2010)
Generating an Android App with Acceleo (Eclipse Summit Europe 2010)
 

Recently uploaded

Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnAmarnathKambale
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfproinshot.com
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesVictorSzoltysek
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfryanfarris8
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionOnePlan Solutions
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplatePresentation.STUDIO
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024Mind IT Systems
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 

Recently uploaded (20)

Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 

Language Server Protocol - Why the Hype?

  • 1. The Language Server Protocol: Why the Hype? Mikael Barbero Eclipse Foundation Eclipse Summit India 2017
  • 2. Dear IDE, please support this new trendy language!
  • 3. Dear IDE, please support this new trendy language! Dear language, please provide integration with my favorite IDE!
  • 4. Dear IDE, please support this new trendy language! Dear language, please provide integration with my favorite IDE!
  • 5. Dear IDE, please support this new trendy language! Dear language, please provide integration with my favorite IDE! Language Server Protocol helps building language support!
  • 6. Implementing language support for an IDE is hard Expert of the tool Expert of the language Parser Semantic analysis Type system UI Workflows APIs Integration
  • 7. Java Javascript C/C++ Go Json Rust CSS ... Eclipse Eclipse Che Eclipse Orion Atom VisualStudio Code ...
  • 8. What is the so-called Language Server Protocol (LSP)?
  • 9. –Phil Karlton “There are only two hard things in Computer Science: cache invalidation and naming things.”
  • 10. –Phil Karlton “There are only two hard things in Computer Science: cache invalidation and naming things.”
  • 11. What is the so-called Language Server Protocol (LSP)?
  • 12. “A bad name for a Remote Procedure Call (RPC) API that is used between by a tool and a language smartness provider to integrate features like auto complete, goto definition, find all references and alike into the tool”
  • 13. “A bad name for a Remote Procedure Call (RPC) API that is used between by a tool and a language smartness provider to integrate features like auto complete, goto definition, find all references and alike into the tool”
  • 17. Program A Program B LSP (RPC API)
  • 18. Tool Program A Program B LSP (RPC API)
  • 22. Language Smartness Provider Tool Program A Program B LSP (Client) (Server) (RPC API)
  • 27. Implementing language support for an IDE is easier Expert of the tool Expert of the language Parser Semantic analysis Type system UI Workflows APIs Integration LSP
  • 29. Current Status - Clients Support Eclipse CheEclipse (LSP4e) NeoVim Visual Studio Code Sublime TextEmacs VimAtom Work in Progress Eclipse Orion
  • 30. Current Status - Languages Support
  • 31. Current Status - LSP SDKs node.js MS vscode-languageserver-node C# MS work in progress by David Wilson Java Eclipse, TypeFox Eclipse LSP4J Haxe @nadako language-server-protocol-haxe PHP Felix Becker php-language-server Rust Bruno Medeiros RustLSP Haskell Alan Zimmerman Haskell-LSP C# OmniSharp C#-LSP C# Inomata Kentaro LanguageServerProtocol SDK/libraries support implementing the protocol in a particular language.
  • 34. JSON-RPC Stateless RPC protocol (use "id" used by client to track responses) JSON as data format of request and responses Agnostic of transport layer (can be Sockets, Shared Memory, PIPE, HTTP, ...)
  • 36. JSON-RPC { "jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": 1 } Program A Program B
  • 37. JSON-RPC { "jsonrpc": "2.0", "result": 19, "id": 1 } { "jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": 1 } Program A Program B
  • 38. Agnostic of transport layer (can be Sockets, Shared Memory, PIPE, HTTP, ...) Clients can only communicate with servers if they talk on the same transport channel. e.g., if a server only supports pipes (stdin / stdout), a client that uses sockets won’t be able to use it.
  • 39. LSP in a nutshell A set of JSON-RPC requests, responses and notifications to integrate tools (clients) and language smartness providers (servers)
  • 40. LSP: Client Requests Completion Requests a list of completion items from a document position. Resolution can be done in two steps Hover Requests hover information at a given text document position. Result is a markdown string or a pair of a language and a code block value Signature Help Requests signature information at a given cursor position (e.g. used to display a tooltip with signature when typing a method call) References Requests to resolve project- wide references for the symbol denoted by the given text document position Workspace Symbols Requests to list project-wide symbols matching the query string (usually the name / name prefix of the symbol) Document Symbols Requests to list all symbols found in a given text document
  • 41. LSP: Client Requests (cont'd) Formatting Requests to format a whole document Range Formatting Requests to format a given range in a document On Type Formatting Requests to format parts of the document during typing. Trigger characters are configured at registration time Go to Definition Requests to resolve the definition location of a symbol at a given text document position Code Action Requests to compute commands for a given text document and range. Can be used for instance to get the list of quick fixes for a given problem Code Lens Request to compute code lenses for a given text document. It returns a list of commands to be executed for some text ranges (e.g. number of references)
  • 42. LSP: Client Requests (cont'd again) Rename Requests to perform a workspace-wide rename of a symbol Document Links Requests the location of links in a document. Resolution can be done in two steps Document Highlight Requests to resolve a document highlights for a given text document position (e.g., to mark all occurrences of the variable for a given position)
  • 43. Typical lifecycle (startup) Client (e.g., VSCode, Eclipse) Language Server (e.g., JDT-LS, PHP-LS) Client Tool (e.g., Eclipse, VSCode)
  • 44. Typical lifecycle (startup) Client (e.g., VSCode, Eclipse) Language Server (e.g., JDT-LS, PHP-LS) Start Client Tool (e.g., Eclipse, VSCode) (not defined by LSP) Can be child process, daemon, run image in container, HEAD http://server/status, …
  • 45. Typical lifecycle (startup) Client (e.g., VSCode, Eclipse) Language Server (e.g., JDT-LS, PHP-LS) Start Initialize Params: rootUri, the root URI of the workspace + client capabilities The protocol does not define how the rootUri parameter should be used by the servers. Most servers expect file: URIs. JDT-LS uses this URI to provision an Eclipse Workspace (i.e. imports all Eclipse, Gradle and Maven projects it can find in the rootUri hierarchy). Client Tool (e.g., Eclipse, VSCode) (not defined by LSP) Can be child process, daemon, run image in container, HEAD http://server/status, …
  • 46. Typical lifecycle (startup) Client (e.g., VSCode, Eclipse) Language Server (e.g., JDT-LS, PHP-LS) Start Initialize Params: rootUri, the root URI of the workspace + client capabilities Returns server capabilities (like how text documents are synced) The protocol does not define how the rootUri parameter should be used by the servers. Most servers expect file: URIs. JDT-LS uses this URI to provision an Eclipse Workspace (i.e. imports all Eclipse, Gradle and Maven projects it can find in the rootUri hierarchy). Client Tool (e.g., Eclipse, VSCode) (not defined by LSP) Can be child process, daemon, run image in container, HEAD http://server/status, …
  • 47. Typical lifecycle (editing) Client (e.g., VSCode, Eclipse) Language Server (e.g., JDT-LS, PHP-LS) Client Tool (e.g., Eclipse, VSCode)
  • 48. Typical lifecycle (editing) Client (e.g., VSCode, Eclipse) Language Server (e.g., JDT-LS, PHP-LS) didOpen Client Tool (e.g., Eclipse, VSCode) Notifies the server that the document's truth is now managed by the client and the server must not try to read the document's truth using the document's uri
  • 49. Typical lifecycle (editing) Client (e.g., VSCode, Eclipse) Language Server (e.g., JDT-LS, PHP-LS) didOpen didChange Signals changes to a text document (the granularity of the reported changes are defined by server capabilities) Client Tool (e.g., Eclipse, VSCode) Notifies the server that the document's truth is now managed by the client and the server must not try to read the document's truth using the document's uri
  • 50. Typical lifecycle (editing) Client (e.g., VSCode, Eclipse) Language Server (e.g., JDT-LS, PHP-LS) didOpen didChange Signals changes to a text document (the granularity of the reported changes are defined by server capabilities) Usually will notify about new diagnostics, some time later Client Tool (e.g., Eclipse, VSCode) Notifies the server that the document's truth is now managed by the client and the server must not try to read the document's truth using the document's uri
  • 51. Typical lifecycle (editing) Client (e.g., VSCode, Eclipse) Language Server (e.g., JDT-LS, PHP-LS) didOpen didChange Signals changes to a text document (the granularity of the reported changes are defined by server capabilities) Usually will notify about new diagnostics, some time later The didOpen, didChange (and willSave, save, didClose) are not mandatory. Some servers expose via their capabilities that they do not need to be notified about these events. Client Tool (e.g., Eclipse, VSCode) Notifies the server that the document's truth is now managed by the client and the server must not try to read the document's truth using the document's uri
  • 52. Typical lifecycle (saving) Client (e.g., VSCode, Eclipse) Language Server (e.g., JDT-LS, PHP-LS) Client Tool (e.g., Eclipse, VSCode) The didOpen, didChange (and willSave, save, didClose) are not mandatory. Some servers expose via their capabilities that they do not need to be notified about these events.
  • 53. Typical lifecycle (saving) Client (e.g., VSCode, Eclipse) Language Server (e.g., JDT-LS, PHP-LS) willSave | willSaveWaitUntil Client Tool (e.g., Eclipse, VSCode) + Reason of the save (manual, after delay, focus out). "Wait until" is a way to get all the edits that should be apply before saving (e.g. if a refactoring has been requested before and it still being computed on the server side) The didOpen, didChange (and willSave, save, didClose) are not mandatory. Some servers expose via their capabilities that they do not need to be notified about these events.
  • 54. Typical lifecycle (saving) Client (e.g., VSCode, Eclipse) Language Server (e.g., JDT-LS, PHP-LS) willSave | willSaveWaitUntil didSave Can include the whole text document if server capabilities require it Client Tool (e.g., Eclipse, VSCode) + Reason of the save (manual, after delay, focus out). "Wait until" is a way to get all the edits that should be apply before saving (e.g. if a refactoring has been requested before and it still being computed on the server side) The didOpen, didChange (and willSave, save, didClose) are not mandatory. Some servers expose via their capabilities that they do not need to be notified about these events.
  • 55. Typical lifecycle (saving) Client (e.g., VSCode, Eclipse) Language Server (e.g., JDT-LS, PHP-LS) willSave | willSaveWaitUntil didSave Can include the whole text document if server capabilities require it The document's truth now exists where the document's uri points to. Client Tool (e.g., Eclipse, VSCode) + Reason of the save (manual, after delay, focus out). "Wait until" is a way to get all the edits that should be apply before saving (e.g. if a refactoring has been requested before and it still being computed on the server side) didClose The didOpen, didChange (and willSave, save, didClose) are not mandatory. Some servers expose via their capabilities that they do not need to be notified about these events.
  • 56. Typical lifecycle (shutdown) Client (e.g., VSCode, Eclipse) Language Server (e.g., JDT-LS, PHP-LS) Client Tool (e.g., Eclipse, VSCode)
  • 57. Typical lifecycle (shutdown) Client (e.g., VSCode, Eclipse) Language Server (e.g., JDT-LS, PHP-LS) shutdown Client Tool (e.g., Eclipse, VSCode) Asks the server to shut down, but to not exit (otherwise the response might not be delivered correctly to the client)
  • 58. Typical lifecycle (shutdown) Client (e.g., VSCode, Eclipse) Language Server (e.g., JDT-LS, PHP-LS) shutdown May return errors Client Tool (e.g., Eclipse, VSCode) Asks the server to shut down, but to not exit (otherwise the response might not be delivered correctly to the client)
  • 59. Typical lifecycle (shutdown) Client (e.g., VSCode, Eclipse) Language Server (e.g., JDT-LS, PHP-LS) shutdown exit May return errors Asks the server to exit its process. The server should exit with success code 0 if the shutdown request has been received before; otherwise with error code 1. The specification explicitly talk about exiting a process on the ‘exit’ notification. Of course, some clients that will interact with daemons, containers or HTTP servers will use this notification differently. Client Tool (e.g., Eclipse, VSCode) Asks the server to shut down, but to not exit (otherwise the response might not be delivered correctly to the client)
  • 60. Server does no editing All editing is done on the client side • The server can read files, but all file modifications are sent to the clients in the form of a WorkspaceEdit. • The client applies the edits and notifies the server about the changes so he can refresh changed files. • To execute a command (e.g. quick fix or a rename), the client send a request that the server acknowledge or not. If it does, then the server compute the changes and send a request to the client for him to apply the modifications
  • 62. Text Editing Only No support for running, testing or debugging Ongoing work for debug https://github.com/Microsoft/vscode-debugadapter-node
  • 63. No Advanced Tooling Types hierarchy Advanced refactoring
  • 64. Syntax Highlighting, Bracket Matchings and Code Folding Deferred to the client's editor Requires tokenizer and / or grammar in addition to the language server
  • 65. No Communication between Language Servers No cross-languages go to definition or refactoring
  • 66. No Packaging Standard • Currently: specific to each editor • Language servers can have a lot of native dependencies • Possible solution: use docker to package and run LS
  • 67. No standard transport or transport negotiation Potential solutions: • Force transport negotiation via a specific transport during startup phase • Store metadata about the language servers in a registry / marketplace
  • 69. Key Takeaways: why the hype? Mikaël Barbero mikael.barbero@eclipse-foundation.org @mikbarbero https://eclipse.org/community/eclipse_newsletter/2017/may/
  • 70. Key Takeaways: why the hype? Promising and powerful abstraction for language tooling development Mikaël Barbero mikael.barbero@eclipse-foundation.org @mikbarbero https://eclipse.org/community/eclipse_newsletter/2017/may/
  • 71. Key Takeaways: why the hype? Promising and powerful abstraction for language tooling development Still young and has shortcomings Mikaël Barbero mikael.barbero@eclipse-foundation.org @mikbarbero https://eclipse.org/community/eclipse_newsletter/2017/may/
  • 72. Key Takeaways: why the hype? Promising and powerful abstraction for language tooling development Still young and has shortcomings Paradigm shift in tooling development: microservices Mikaël Barbero mikael.barbero@eclipse-foundation.org @mikbarbero https://eclipse.org/community/eclipse_newsletter/2017/may/