diff --git a/README.md b/README.md index c7fd18bff..643e9decd 100644 --- a/README.md +++ b/README.md @@ -19,15 +19,22 @@ It currently doesn't provide any useful functionality on its own, but is instead LSP4IJ provides: * Language server `extension points` to add any language server: - * `com.redhat.devtools.lsp4ij.server` extension point to define a language server. - * `com.redhat.devtools.lsp4ij.languageMapping` to associate an Intellij language with a language server definition. -* an `LSP Consoles view` to tracks LSP requests, responses and notifications in a console: + * [com.redhat.devtools.lsp4ij.server](./docs/DeveloperGuide.md#declare-server-with-extension-point) extension point to define a language server. + * [com.redhat.devtools.lsp4ij.languageMapping](./docs/DeveloperGuide.md#declare-language-mapping-with-extension-point) to associate an IntelliJ language with a language server definition. +* an [LSP Consoles view](./docs/UserGuide.md#lsp-console) to tracks LSP requests, responses and notifications in a console: -![LSP console](https://github.com/redhat-developer/lsp4ij/blob/HEAD/docs/images/LSPConsole.png?raw=true) +![LSP console](./docs/images/LSPConsole.png) -* a `Language Servers settings page` to configure the LSP trace level, the debug port to use to debug language server: +* a [Language Servers preferences page](./docs/UserGuide.md#language-servers-preferences) to configure the LSP trace level, the debug port to use to debug language server: + +![Language Server preferences](./docs/images/LanguageServerPreferences.png) + +You can start with: + + * [Developer guide](./docs/DeveloperGuide.md) which explains step by step how to integrate a language server in LSP4J in an external IntelliJ plugin. + * [User guide](./docs/UserGuide.md) which explains how to use LSP console and Language server preferences. + * [LSP support](./docs/LSPSupport.md) which explains the LSP support. -![Language Server settings](https://github.com/redhat-developer/lsp4ij/blob/HEAD/docs/images/LanguageServerSettings.png?raw=true) ## Who is using LSP4IJ? diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md new file mode 100644 index 000000000..c30841946 --- /dev/null +++ b/docs/DeveloperGuide.md @@ -0,0 +1,244 @@ +# Developer guide + +This section explains step by step how to add your own LSP language server in your IntelliJ plugin. + +## Reference LSP4IJ + +### plugin.xml + +The first step is to reference LSP4IJ. LSP4IJ uses `com.redhat.devtools.lsp4ij` as plugin Id. + +You need [to declare dependency in your plugin.xml](https://plugins.jetbrains.com/docs/intellij/plugin-dependencies.html#3-dependency-declaration-in-pluginxml) like this: + +```xml + + ... + + com.redhat.devtools.lsp4ij + + ... + +``` + +### Exclude all LSP4J dependencies + +LSP4IJ depends on [Eclipse LSP4J](https://github.com/eclipse-lsp4j/lsp4j) (Java binding for the [Language Server Protocol](https://microsoft.github.io/language-server-protocol) and the [Debug Adapter Protocol](https://microsoft.github.io/debug-adapter-protocol).). It uses a given version of LSPJ and their classes are loaded in the LSP4IJ plugin class loader. + +Your IntelliJ Plugin should use `the same LSP4J classes than LSP4IJ` to avoid some `ClassCastException` errors. To do that you need to `exclude all LSP4J dependencies` from your plugin. + +Here a sample used in [Quarkus Tools](https://github.com/redhat-developer/intellij-quarkus) in [build.gradle.kts](https://github.com/redhat-developer/intellij-quarkus/blob/main/build.gradle.kts) to exclude LSP4J dependency from the [Qute Language Server](https://github.com/redhat-developer/quarkus-ls/tree/master/qute.ls) which have a dependency to LSP4J: + +``` +implementation("com.redhat.microprofile:com.redhat.qute.ls:0.17.0) { + exclude("org.eclipse.lsp4j") +} +``` + +## Declare server + + +### StreamConnectionProvider Implementation + +You need to implement the [StreamConnectionProvider](https://github.com/redhat-developer/lsp4ij/blob/main/src/main/java/com/redhat/devtools/lsp4ij/server/StreamConnectionProvider.java) API which manages: + + * start of your language server + * returns the input/error stream of LSP requests, responses, notifications. + +Generally, the language server is started with a process by using a runtime like Java, NodeJS, etc. In this case you need to extend [ProcessStreamConnectionProvider](https://github.com/redhat-developer/lsp4ij/blob/main/src/main/java/com/redhat/devtools/lsp4ij/server/ProcessStreamConnectionProvider.java) + +Here a basic sample which starts the `path/to/my/language/server/main.js` language server written in JavaScript with NodeJS runtime "path/to/nodejs/node.exe": + +```java +package my.language.server; + +import com.redhat.devtools.lsp4ij.server.ProcessStreamConnectionProvider; + +import java.util.Arrays; +import java.util.List; + +public class MyLanguageServer extends ProcessStreamConnectionProvider { + + public MyLanguageServer() { + List commands = Arrays.asList("path/to/nodejs/node.exe", "path/to/my/language/server/main.js"); + super.setCommands(commands); + } +} +``` + +If your language server is written in Java, to build the command, you can use [JavaProcessCommandBuilder](https://github.com/redhat-developer/lsp4ij/blob/main/src/main/java/com/redhat/devtools/lsp4ij/server/JavaProcessCommandBuilder.java): + +```java +package my.language.server; + +import com.intellij.openapi.project.Project; +import com.redhat.devtools.lsp4ij.server.JavaProcessCommandBuilder; +import com.redhat.devtools.lsp4ij.server.ProcessStreamConnectionProvider; + +import java.util.Arrays; +import java.util.List; + +public class MyLanguageServer extends ProcessStreamConnectionProvider { + + public MyLanguageServer(Project project) { + List commands = new JavaProcessCommandBuilder(project, "myLanguageServerId") + .setJar("path/to/my/language/server/server.jar") + .create(); + super.setCommands(commands); + } +} +``` + +This builder takes care of filling command with Java runtime and generate the command with debug if the settings of the language server `myLanguageServerId` defines a debug port. + +You can see a full sample with [QuteServer](https://github.com/redhat-developer/intellij-quarkus/blob/main/src/main/java/com/redhat/devtools/intellij/qute/lsp/QuteServer.java) + +### LanguageClientImpl + +It is not required but you can override the [LanguageClientImpl](https://github.com/redhat-developer/lsp4ij/blob/main/src/main/java/com/redhat/devtools/lsp4ij/client/LanguageClientImpl.java) to, for instance: + + * add some IJ listeners when language client is created. + * override some LSP methods. + +```java +package my.language.server; + +import com.intellij.openapi.project.Project; +import com.redhat.devtools.lsp4ij.client.LanguageClientImpl; + +public class MyLanguageClient extends LanguageClientImpl { + public MyLanguageClient(Project project) { + super(project); + } +} +``` + +If your language server manages custom LSP requests, it is advised to extend [IndexAwareLanguageClient](https://github.com/redhat-developer/lsp4ij/blob/main/src/main/java/com/redhat/devtools/lsp4ij/client/IndexAwareLanguageClient.java) + +You can see a full sample with [QuteLanguageClient](https://github.com/redhat-developer/intellij-quarkus/blob/main/src/main/java/com/redhat/devtools/intellij/qute/lsp/QuteLanguageClient.java) + +## Declare server with extension point + +The last step is to declare the server in your plugin.xml with `com.redhat.devtools.lsp4ij.server` extension point +to use your `my.language.server.MyLanguageServer` and `my.language.server.MyLanguageClient`: + +```xml + + + + + + + + + + +``` + +Once the declaration is done, your server should appear in the LSP console: + +![My LanguageServer in LSP Console](./images/MyLanguageServerInLSPConsole.png) + +## Declare language mapping with extension point + +Once the server is defined, you need to associate an IntelliJ language with the `server` defined by the id attribute +with the `com.redhat.devtools.lsp4ij.languageMapping` extension point. + +Her is sample snippet to associate the `XML` language with the `myLanguageServerId` server: + +```xml + + + + + + + +``` + +If the language check is not enough, you can implement a custom [DocumentMatcher](https://github.com/redhat-developer/lsp4ij/blob/main/src/main/java/com/redhat/devtools/lsp4ij/DocumentMatcher.java). +For instance your language server could be mapped to the `Java` language, and you could implement a DocumentMatcher +to check if the module containing the file contains certain Java classes in its classpath. + +The DocumentMatcher is executed in a non blocking read action. + +A document matcher looks like this: + +```java +package my.language.server; + +import com.intellij.openapi.project.Project; +import com.intellij.openapi.vfs.VirtualFile; +import com.redhat.devtools.lsp4ij.AbstractDocumentMatcher; +import org.jetbrains.annotations.NotNull; + +public class MyDocumentMatcher extends AbstractDocumentMatcher { + + @Override + public boolean match(@NotNull VirtualFile virtualFile, @NotNull Project project) { + return true; + } +} +``` + +and it must be registered as language mapping, with the `documentMatcher` attribute: + +```xml + + + + + + + +``` + +## Add specific IJ features + +When it is possible, LSP4IJ declare the IJ feature with `any` language. + +For instance `textDocument/publishDiagnostics` is managed with `externalAnnotator` in LSP4IJ +with an empty language attribute, in order to support all languages: + +```xml + + +``` + +Some LSP features (Hover, Inlay Hints, CodeLens) have to be mapped specifically to your language, in your plugin.xml: + + * `textDocument/hover`: + +```xml + +``` + + * `textDocument/codeLens`: + +```xml + +``` + + * `textDocument/inlayHint`: + +```xml + +``` \ No newline at end of file diff --git a/docs/LSPSupport.md b/docs/LSPSupport.md new file mode 100644 index 000000000..c614c1202 --- /dev/null +++ b/docs/LSPSupport.md @@ -0,0 +1,196 @@ +# LSP support + +As `LSP4IJ` doesn't implement full specification of LSP, this section list the LSP implementation for IntelliJ + +## Text Document Synchronization + +Here the `LSP4IJ` support for [Text Document Synchronization](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_synchronization): + +### Implemented + + * [textDocument/didOpen](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_didOpen). + * [textDocument/didChange](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_didChange). + * [textDocument/didClose](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_didClose). + * [textDocument/didSave](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_didSave). + +### To implement... + + * [textDocument/willSave](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_willSave). + * [textDocument/willSaveWaitUntil](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_willSaveWaitUntil). + * [textDocument/didRename](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_didRename). + * [textDocument/didSave](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_didSave). + +Notebook is not supported. + +## Language Features + +Here the `LSP4IJ` support for [Language Features]( https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#languageFeatures) + +### Implemented + +#### Go to Definition + +[textDocument/definition](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_definition) is implemented with +`gotoDeclarationHandler` extension point. As this extension point supports `any` language, it works out of the box. + +#### Document Highlight + +[textDocument/documentHighlight](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_documentHighlight) is implemented with +`highlightUsagesHandlerFactory` extension point. As this extension point supports `any` language, it works out of the box. + +Here a sample with `Qute language server` which highlights item variables: + +![textDocument/documentHighlight](./images/lsp-support/textDocument_documentHighlight.png) + +#### Document Link + +[textDocument/documentLink](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_documentLink) is implemented with: + + * `externalAnnotator` extension point to display documentLink with hyperlink renderer. + * `gotoDeclarationHandler` extension point to open the file of the documentLink. + +As those extension points support `any` language, it works out of the box. + +Here a sample with `Qute language server` which displays include with hyperlink renderer (Ctrl+Click opens the document link): + +![textDocument/documentLink](./images/lsp-support/textDocument_documentLink.png) + +#### Hover + +[textDocument/hover](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_hover) is implemented with `lang.documentationProvider` extension point. As this extension point doesn't support `any` language, you need to declare the support in your `plugin.xml`: + +```xml + +``` + +Here a sample with `Qute language server` which hover include section to show documentation: + +![textDocument/hover](./images/lsp-support/textDocument_hover.png) + +#### CodeLens + +[textDocument/codeLens](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_codeLens) is implemented with `codeInsight.inlayProvider` extension point. As this extension point doesn't support `any` language, you need to declare the support in your `plugin.xml`: + +```xml + +``` + +Here a sample with `Qute language server` which shows REST services URL with codeLens: + +![textDocument/codeLens](./images/lsp-support/textDocument_codeLens.png) + +#### InlayHint + +[textDocument/inlayHint](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_inlayHint) is implemented with `codeInsight.inlayProvider` extension point. As this extension point doesn't support `any` language, you need to declare the support in your `plugin.xml`: + +```xml + +``` + +Here a sample with `Qute language server` which shows Java type of parameter as inlay hint: + +![textDocument/inlayHint](./images/lsp-support/textDocument_inlayHint.png) + +#### Completion Proposals + +[textDocument/completion](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_completion) is implemented with +`completion.contributor` extension point. As this extension point supports `any` language, it works out of the box. + +Here a sample with `Qute language server` which shows completion for methods: + +![textDocument/completion](./images/lsp-support/textDocument_completion.png) + +The [completionItem/resolve](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#completionItem_resolve) is implemented too. + +#### Publish Diagnostics + +[textDocument/publishDiagnostics](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_publishDiagnostics) is implemented with `externalAnnotator` extension point. As this extension point supports `any` language, it works out of the box. + +Here a sample with `Qute language server` which reports errors: + +![textDocument/publishDiagnostics](./images/lsp-support/textDocument_publishDiagnostics.png) + +#### Code Action + + * [textDocument/codeAction](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_codeAction) is implemented. + * [codeAction/resolve](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#codeAction_resolve) is implemented. + +### To implement... + + * [textDocument/declaration](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_declaration). + * [textDocument/typeDefinition](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_typeDefinition). + * [textDocument/implementation](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_implementation). + * [textDocument/references](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_references). + * [textDocument/prepareCallHierarchy](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_prepareCallHierarchy). + * [textDocument/incomingCalls](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#callHierarchy_incomingCalls). + * [textDocument/outgoingCalls](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#callHierarchy_outgoingCalls). + * [textDocument/prepareTypeHierarchy](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_prepareTypeHierarchy). + * [typeHierarchy/supertypes](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#typeHierarchy_supertypes). + * [documentLink/resolve](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#documentLink_resolve). + * [codeLens/refresh](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#codeLens_refresh). + * [textDocument/foldingRange](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_foldingRange). + * [textDocument/selectionRange](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_selectionRange). + * [textDocument/documentSymbol](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_documentSymbol). + * [textDocument/semanticTokens](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_semanticTokens). + * [textDocument/inlineValue](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_inlineValue). + * [workspace/inlineValue/refresh](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#workspace_inlineValue_refresh). + * [inlayHint/resolve](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#inlayHint_resolve). + * [textDocument/moniker](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_moniker). + * [textDocument/moniker](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_moniker). + * [textDocument/pullDiagnostics](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_pullDiagnostics). + * [textDocument/signatureHelp](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_signatureHelp). + * [textDocument/documentColor](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_documentColor). + * [textDocument/colorPresentation](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_colorPresentation). + * [textDocument/formatting](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_formatting). + * [textDocument/rangeFormatting](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_rangeFormatting). + * [textDocument/onTypeFormatting](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_onTypeFormatting). + * [textDocument/rename](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_rename). + * [textDocument/prepareRename](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_prepareRename). + * [textDocument/linkedEditingRange](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_linkedEditingRange). + +## Workspace Features + +Here the `LSP4IJ` support for [Workspace Features]( https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#workspaceFeatures) + +### Implemented + + * [workspace/didChangeWatchedFiles](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#workspace_didChangeWatchedFiles) but partially, pattern must be supported. + * [workspace/executeCommand](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#workspace_executeCommand). + * [workspace/applyEdit](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#workspace_applyEdit). + +### To implement... + + * [workspace/symbol](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#workspace_symbol). + * [workspace/symbolResolve](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#workspace_symbolResolve). + * [workspace/configuration](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#workspace_configuration). + * [workspace/workspaceFolders](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#workspace_workspaceFolders). + * [workspace/didChangeWorkspaceFolders](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#workspace_didChangeWorkspaceFolders). + * [workspace/willCreateFiles](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#workspace_willCreateFiles). + * [workspace/didCreateFiles](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#workspace_didCreateFiles). + * [workspace/willRenameFiles](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#workspace_willRenameFiles). + * [workspace/didRenameFiles](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#workspace_didRenameFiles). + * [workspace/willDeleteFiles](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#workspace_willDeleteFiles). + * [workspace/didDeleteFiles](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#workspace_didDeleteFiles). + +## Window Features + +Here the `LSP4IJ` support for [Window Features]( https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#windowFeatures) + +### Implemented + +### To implement... + + * [window/showMessage](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#window_showMessage). + * [window/showMessageRequest](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#window_showMessageRequest). + * [window/logMessage](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#window_logMessage). + * [window/showDocument](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#window_showDocument). + * [window/workDoneProgress/create](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#window_workDoneProgress_create). + * [window/workDoneProgress/cancel](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#window_workDoneProgress_cancel). + * [telemetry/event](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#telemetry_event). \ No newline at end of file diff --git a/docs/UserGuide.md b/docs/UserGuide.md new file mode 100644 index 000000000..93e895940 --- /dev/null +++ b/docs/UserGuide.md @@ -0,0 +1,26 @@ +# User guide + +## LSP console + +Although not directly useful to users in most cases, the Language Server console view is extremely important +when we need to troubleshoot issues with the language servers. + +The state of the servers is visible, stop and restart is available with a right-click, and you can enable different levels of tracing: + +![LSP console](./images/LSPConsoleSettings.png) + +The communication details between the IDE and the language servers are seen in the "LSP consoles" pane. +In verbose mode, the messages can be expanded for more details: + +![LSP console](./images/LSPConsole.png) + +When language server is started, several action like stopping the language server or copy the command which starts the language servers are available: + +![LSP console Actions](./images/LSPConsoleActions.png) + +## Language Servers preferences + +The preference page under `Preferences | Languages & Frameworks | Language Servers` allows power users +to configure language servers debugging and tracing: + +![Language Server preferences](./images/LanguageServerPreferences.png) \ No newline at end of file diff --git a/docs/images/LSPConsoleActions.png b/docs/images/LSPConsoleActions.png new file mode 100644 index 000000000..46592446e Binary files /dev/null and b/docs/images/LSPConsoleActions.png differ diff --git a/docs/images/LSPConsoleSettings.png b/docs/images/LSPConsoleSettings.png new file mode 100644 index 000000000..75725207e Binary files /dev/null and b/docs/images/LSPConsoleSettings.png differ diff --git a/docs/images/LanguageServerSettings.png b/docs/images/LanguageServerPreferences.png similarity index 100% rename from docs/images/LanguageServerSettings.png rename to docs/images/LanguageServerPreferences.png diff --git a/docs/images/MyLanguageServerInLSPConsole.png b/docs/images/MyLanguageServerInLSPConsole.png new file mode 100644 index 000000000..7286a5c91 Binary files /dev/null and b/docs/images/MyLanguageServerInLSPConsole.png differ diff --git a/docs/images/lsp-support/textDocument_codeLens.png b/docs/images/lsp-support/textDocument_codeLens.png new file mode 100644 index 000000000..ab6e0c42e Binary files /dev/null and b/docs/images/lsp-support/textDocument_codeLens.png differ diff --git a/docs/images/lsp-support/textDocument_completion.png b/docs/images/lsp-support/textDocument_completion.png new file mode 100644 index 000000000..d08e8f2e6 Binary files /dev/null and b/docs/images/lsp-support/textDocument_completion.png differ diff --git a/docs/images/lsp-support/textDocument_documentHighlight.png b/docs/images/lsp-support/textDocument_documentHighlight.png new file mode 100644 index 000000000..bb9478564 Binary files /dev/null and b/docs/images/lsp-support/textDocument_documentHighlight.png differ diff --git a/docs/images/lsp-support/textDocument_documentLink.png b/docs/images/lsp-support/textDocument_documentLink.png new file mode 100644 index 000000000..8d59c1e14 Binary files /dev/null and b/docs/images/lsp-support/textDocument_documentLink.png differ diff --git a/docs/images/lsp-support/textDocument_hover.png b/docs/images/lsp-support/textDocument_hover.png new file mode 100644 index 000000000..ede2961b1 Binary files /dev/null and b/docs/images/lsp-support/textDocument_hover.png differ diff --git a/docs/images/lsp-support/textDocument_inlayHint.png b/docs/images/lsp-support/textDocument_inlayHint.png new file mode 100644 index 000000000..bba4352ca Binary files /dev/null and b/docs/images/lsp-support/textDocument_inlayHint.png differ diff --git a/docs/images/lsp-support/textDocument_publishDiagnostics.png b/docs/images/lsp-support/textDocument_publishDiagnostics.png new file mode 100644 index 000000000..dad07cedf Binary files /dev/null and b/docs/images/lsp-support/textDocument_publishDiagnostics.png differ diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index a82acd686..1505efddc 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -14,7 +14,7 @@ LSP4IJ is a free and open-source Language Server protocol (LSP) client compatible with all flavors of IntelliJ.

+

LSP4IJ is a free and open-source Language Server protocol (LSP) client compatible with all flavors of IntelliJ.

It currently doesn't provide any useful functionality on its own but is instead used as a dependency for other extensions, willing to integrate language servers with IntelliJ products.

@@ -22,13 +22,27 @@
  • Language server extension points to add any language server:
      -
    • com.redhat.devtools.lsp4ij.server extension point to define a language server.
    • -
    • com.redhat.devtools.lsp4ij.languageMapping to associate an IntelliJ language with a language server definition.
    • +
    • com.redhat.devtools.lsp4ij.server extension point to define a language server.
    • +
    • com.redhat.devtools.lsp4ij.languageMapping to associate an IntelliJ language with a language server definition.
  • -
  • An LSP Consoles view to track LSP requests, responses, and notifications in a console.
  • -
  • A Language Servers settings page to configure the LSP trace level and the debug port to use to debug the language server.
  • +
  • An LSP Consoles view to track LSP requests, responses, and notifications in a console.
  • +
  • A Language Servers preferences page to configure the LSP trace level and the debug port to use to debug the language server.
+ +

You can start with : +

+

]]>