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 :
+
+
]]>