The 7 Things I Know About Cyber Security After 25 Years | April 2024
Feedback from an eclipse plugin developer to provide support to large set of ide based on language server protocol
1. Feedback from an Eclipse plugin developer
to provide support to a large set of IDE
based on Language Server Protocol
Aurélien Pupier
Principal Software Engineer
19th
November 2019
@apupier
Eclipse Tools Day Grenoble 2019
2. I’m an Eclipse Plugin developer.
I want to reach a larger audience for my Language.
Context
2
3. 3
Which complexity?
IDE skills Language skills
Eclipse
Desktop IDE
VS Code
Emacs
...
N implementations
with high skill required in language and IDE extension
4. Write Code Editing capabilities once, run in all IDEs!
The Promise of Language Server Protocol
4
5. Write Code Editing capabilities once, run in all IDEs!
(after a setup for each IDE and for most features)
The (real) Promise of Language Server Protocol
5
10. How to write the server?
10
● LSP4J
● Fat jar for easy launch
● Restrict to a single-file scope (if possible)
● TextDocumentSyncKind.Full
● sysin/sysout
○ ⇒ No log on sysout!!
11. Server Implementation examples
11
● Very simple
○ https://github.com/apupier/language-server-template-java
● Good examples
○ https://github.com/camel-tooling/camel-language-server
○ https://github.com/angelozerr/lsp4xml
● A full blown headless Eclipse desktop
○ https://github.com/eclipse/eclipse.jdt.ls
● Search in Official site listing
○ https://microsoft.github.io/language-server-protocol/implementors/servers/
12. I have a first server iteration:
Now test with IDEs!
12
● Configuration more or less easy
● Too complex for real users!!
⇒ Need to provide a client per IDE starting the server!
⇒ in different languages!
⇒ in different communities!
13. With which IDE to start?
13
● Eclipse Desktop IDE
○ we know it!
● VS Code
○ De facto “reference implementation”
○ Trendy
○ Can be reused in Eclipse Che
● Listen to your existing community
14. Technical advice - IDE integration
Eclipse Desktop (1/2)
14
● LSP4E
● (Process)StreamConnectionProvider
● Content-type association
● Generic text editor only!
15. Technical advice - IDE integration
Eclipse Desktop (2/2)
15
● To help development:
○ Configure remote debug possibilities
○ Communication log
16. Technical advice - IDE integration
VS Code (1/2)
16
● How to launch Java from TypeScript?
○ Java LSP client example, now also Camel Client
● Writing a test is not trivial
● Not friendly with bad request
○ log on stdout → crash!
17. Technical advice - IDE integration
VS Code (2/2)
17
● To help development:
○ Logging
○ LSP inspector
18. Technical advice - IDE integration
Eclipse Che 7
18
● Reuse VS Code extension
● Web-based demo!
19. Technical advice - IDE integration
CodeMirror
19
● Embeddable web editor
● /! WebSocket
● Limited functionalities
20. In a nutshell
20
● LSP known only in Eclipse/Tooling world
● Key points:
○ List of potential supported IDEs
○ Demo in one desktop and one web-based IDE
○ Marketplace entries
● Few work weeks to have several IDEs supported
● Plan a bit of time to bootstrap for all wanted IDEs
21. Start writing your Language Server!
Aurélien Pupier
Principal Software Engineer
@apupier
Eclipse Tools Day Grenoble 2019
23. Technical advice - IDE integration
Atom
23
● Easy to publish to Marketplace
● Small codebase
● Hard to debug/setup dev env
24. Technical advice - IDE integration
Vim
24
● Lightweight
● Only readme provided
● Ecosystem is too complicated for newcomers
25. Time/resource management
25
● Half-day per week for 2 developers during 7
months
○ Regularly skipped…
○ But also several hours reading docs
● 1-2 days per week for 2 developers during 2
months
● Communities working on LSP are active
26. Architecture - multi-Language Server
26
● Several LS on same file?
● How to avoid redundancy?
○ Extension points in a LS?
○ Clients responsible to merge results?
○ Formatting?
27. What’s next?
27
● Cross-LS…
● Other protocols?
○ Debug Adapter Protocol
○ Graphical server protocol?
○ Creating new project?
● IDE client?
○ Docker
○ LS Marketplace?
○ Clients generator?