Capabilities#
Implementation Status#
Below are all the currently supported LSP capabilities and their implementation status:
capability | done | notes |
---|---|---|
initialize | √ | |
initialized | √ | |
shutdown | √ | |
exit | √ | |
$/cancelRequest | ||
$/progress | √ | |
window/showDocument | √ | |
window/showMessage | √ | |
window/showMessageRequest | √ | |
window/logMessage | ||
window/workDoneProgress/create | ||
window/workDoneProgress/cancel | ||
telemetry/event | ||
client/registerCapability | √ | |
client/unregisterCapability | ||
workspace/workspaceFolders | ||
workspace/didChangeWorkspaceFolders | ||
workspace/didChangeConfiguration | √ | Currently does nothing but log |
workspace/configuration | We use a more robust settings concept (.lsp/config.edn) | |
workspace/didChangeWatchedFiles | √ | |
workspace/symbol | √ | |
workspace/executeCommand | √ | See Extra capabilities |
workspace/applyEdit | √ | TextDocumentEdit and RenameFile only |
workspace/willRenameFiles | √ | |
workspace/didRenameFiles | √ | |
workspace/willCreateFiles | ||
workspace/didCreateFiles | ||
workspace/willDeleteFiles | ||
workspace/didDeleteFiles | ||
textDocument/didOpen | √ | |
textDocument/didChange | √ | |
textDocument/willSave | ||
textDocument/willSaveWaitUntil | ||
textDocument/didSave | √ | Do nothing currently |
textDocument/didClose | √ | |
textDocument/publishDiagnostics | √ | |
textDocument/completion | √ | |
completionItem/resolve | √ | |
textDocument/hover | √ | |
textDocument/signatureHelp | √ | Missing support for active parameter ATM |
textDocument/declaration | √ | Show where the symbol was declared on the file, like alias/refer definitions |
textDocument/definition | √ | |
textDocument/typeDefinition | ||
textDocument/implementation | √ | Implementation of defprotocols/defmulti showing deftypes and defrecords |
textDocument/references | √ | |
textDocument/documentHighlight | √ | |
textDocument/documentSymbol | √ | |
textDocument/codeAction | √ | |
codeAction/resolve | √ | |
textDocument/codeLens | √ | |
codeLens/resolve | √ | |
textDocument/documentLink | ||
documentLink/resolve | ||
textDocument/documentColor | ||
textDocument/colorPresentation | ||
textDocument/formatting | √ | |
textDocument/rangeFormatting | √ | |
textDocument/onTypeFormatting | ||
textDocument/rename | √ | |
textDocument/prepareRename | √ | |
textDocument/foldingRange | ||
textDocument/selectionRange | ||
textDocument/semanticTokens/full | √ | |
textDocument/semanticTokens/full/delta | ||
textDocument/semanticTokens/range | √ | |
workspace/semanticTokens/refresh | ||
workspace/codeLens/refresh | √ | |
textDocument/linkedEditingRange | √ | |
textDocument/prepareCallHierarchy | √ | |
callHierarchy/incomingCalls | √ | |
callHierarchy/outgoingCalls | √ | |
textDocument/moniker |
Extra capabilities#
Besides LSP official capabilities, clojure-lsp
has some extra features:
Refactorings#
It should be possible to introduce most of the refactorings here
More details#
Calling executeCommand
with the following commands and additional args will notify the client with applyEdit
.
All commands expect the first three args to be [document-uri, line, character]
(eg ["file:///home/snoe/file.clj", 13, 11]
)
done | command | args | notes |
---|---|---|---|
√ | add-missing-import | [document-uri, line, character, import-name] |
|
√ | add-missing-libspec | ||
√ | clean-ns | ||
√ | cycle-coll | ||
√ | cycle-privacy | ||
√ | expand-let | ||
√ | extract-function | [document-uri, line, character, function-name] |
|
√ | inline-symbol | ||
√ | introduce-let | [document-uri, line, character, binding-name] |
|
√ | move-to-let | [document-uri, line, character, binding-name] |
|
√ | thread-first | ||
√ | thread-first-all | ||
√ | thread-last | ||
√ | thread-last-all | ||
√ | unwind-all | ||
√ | unwind-thread | ||
√ | resolve-macro-as | [document-uri, line, character, resolved-full-symbol kondo-config-path] |
|
√ | create-test |
See Vim client section for an example.
Emacs provides all those refactorings via lsp-mode with the lsp-clojure-
prefix.
Other clients might provide a higher level interface to workspace/executeCommand
you need to pass the path, line and character numbers.
Custom methods#
clojure-lsp
has some custom LSP methods that doesn't follow the protocol but aggregate value as a clojure IDE:
Test tree#
Notify client with test tree data to build a UI tree on client side.
Type: Server Notification
Capability: experimental.testTree
Method: clojure/textDocument/testTree
Response: TestTreeParams
-
TestTreeParams
:{:uri string, :tree TestTreeNode}
-
TestTreeNode
:{:name string, name-range: Range, range: Range, :kind TestTreeKind, :children [TestTreeNode]}
-
TestTreeKind
::namespace 1 | :deftest 2 | :testing 3
Project tree#
Request the project tree showing project source-paths and external dependencies. If params is null request the project root nodes, otherwise request the nodes of the passed node. The project tree is lazy, so client should request the nodes of a node when user expand it manually.
Type: Client request with response
Capability: experimental.projectTree
Method: clojure/workspace/projectTree/nodes
Params: ProjectTreeNodeLeaf
| null
Response: ProjectTreeNodeBranch
-
ProjectTreeNode
:ProjectTreeNodeBranch | ProjectTreeNodeLeaf
-
ProjectTreeNodeBranch
:{:name string, :type ProjectTreeNodeType, :uri string?, :detail string?, :id string?, :nodes [ProjectTreeNode]}
-
ProjectTreeNodeLeaf
:{:name string, :type ProjectTreeNodeType, :id string?, :uri string?, :range Range?, :detail string?, final boolean}
-
ProjectTreeNodeType
::project 1 | :source-path 2 | :library 3 | :jar 4 | :ns 5 | :class 6 | :function 7 | :variable 8 | :interface 9
Server Info Raw#
Use to retrieve from server the server configuration information.
Type: Client request with response
Capability: none
Method: clojure/serverInfo/raw
Params: none
Response: Any
Server Info Log#
Use to log to client the server configuration information.
Type: Client request with response
Capability: none
Method: clojure/serverInfo/log
Params: none
Response: none
Cursor Info Log#
Use to log to client the debugging information for the symbol at cursor.
Type: Client request with response
Capability: none
Method: clojure/cursorInfo/log
Params: [uri, line, character]
Response: Any
Clojuredocs raw#
Use to retrieve any Clojuredocs entry. Will return null
if no entry found.
Type: Client request with response
Capability: none
Method: clojure/clojuredocs/raw
Params: [symbol-name, symbol-ns]
Response: Any