LSP4IJ provides the capability to consume any language server without developing
an IntelliJ plugin via a User-defined language server
.
The main idea is to:
- install the language server and its requirements(ex :
Node.js
to execute a language server written in JavaScript/TypeScript), - declare the command which starts the language server.
- associate the language server with the proper files (identified by IntelliJ Language, File Type or file name pattern)
To create a new User-defined language server
you need to open the New Language Server
dialog, either:
- from the menu on the right of the LSP console:
- or with the
[+]
on the top of the language server settings:
Once you clicked on either of them, the dialog will appear:
The Server tab
requires to fill the server name
and the command
which will start the language server.
Here is a sample with the typescript-language-server:
The environment variables accessible by the process are populated with EnvironmentUtil.getEnvironmentMap() which retrieves system variables.
It is possible too to add custom environment variables via the field Environment variables
:
Depending on your OS, the environment variables may not be accessible. To make sure they are accessible, you can fill out the order fields:
- with
Windows OS
:cmd /c command_to_start_your_ls
- with
Linux
,Mac OS
:sh -c command_to_start_your_ls
The Mappings tab
provides the capability to associate the language server with the proper files
identified by:
- IntelliJ Language
- IntelliJ File type
File name pattern
Here are mappings samples with the typescript-language-server:
- The existing
JavaScript
file type is used to associate the file to the language server:
- Since IntelliJ (Community) doesn't provide file type by default
TypeScript
,React
file name patterns are used:
NOTE: it is better to use file name pattern instead of creating custom file type for TypeScript, since by default
IntelliJ Community support TypeScript syntax coloration
with TextMate
. If you define a file type, you will
lose syntax coloration.
The Configuration tab
allows to configure the language server with the expected (generally JSON format) configuration.
Here are configuration sample with the typescript-language-server:
The Debug tab
is available when you have created the language server definition. It allows to customize the
level Trace used in LSP console.
Template can be used to quickly create user defined language server pre-filled with server name, command, mappings and potential configurations.
The Template combo-box
provides some default language servers templates (located in templates directory classpath),
pre-filled with server name, command, mappings and potential configuration.
- Clojure LSP
- CSS Language Server
- Go Language Server
- HTML Language Server
- Scala Language Server (Metals)
- TypeScript Language Server
If the template directory contains a README.md
file, you can open the instructions by pressing the help icon.
The Import from custom template...
item from the Template combo-box
can be used to select a directory from
the file system to load a custom language server template,
these templates can be pre-filled with server name, command, mappings and potential configuration.
The selected directory contents should match the custom template structure.
If the template directory contains a README.md
file, you can open the instructions by pressing the help icon.
Custom templates can be created by exporting templates.
Users can export their own language servers to a zip file, where each language server is a separate directory. This can be done from the LSP console, by selecting one or more language servers and selecting the export option from the context menu.
These directories can then be used as a template for a new language server by importing a custom template.
By default, each directory contains the following files, but only template.json
is required.
template.json
settings.json
initializationOptions.json
A README.md
file can be added manually to each of the language server directories to provide instructions
for the corresponding language server.