racket-langserver
is a Language Server Protocol implementation for Racket. This project seeks to use DrRacket's public APIs to provide functionality that mimics DrRacket's code tools as closely as possible.
A Racket runtime is a prerequisite, so before using racket-langserver
, ensure that a Racket runtime is installed. You can install an from the official download page or install one from your package manager.
You can use the atom-ide-racket package. The language server will be automatically installed when atom-ide-racket
installs.
Use the Magic Racket extension.
First, install an LSP runtime for your editor.
Next, install the package via raco
:
raco pkg install racket-langserver
Once it is installed, you can configure your editor to use a custom LSP client for Racket files (.rkt
), and set the command for the custom client to
racket -l racket-langserver
You may need to restart your LSP runtime or your editor for racket-langserver
to start.
- Hover (textDocument/hover)
- Jump to Definition (textDocument/definition)
- Find References (textDocument/references)
- Note: Currently only considers references within the current file.
- Document Highlight (textDocument/documentHighlight)
- Diagnostics (textDocument/publishDiagnostics)
- Code Formatting (textDocument/formatting & textDocument/rangeFormatting & textDocument/onTypeFormatting)
- Signature Help (textDocument/signatureHelp)
- Rename (textDocument/rename & textDocument/prepareRename)
- Note: Currently only allows renaming symbols defined within the current file.
- Code completion (textDocument/completion)
- Document Outline (textDocument/documentSymbol)
It is useful to think of this project as a "headless mode" for DrRacket. Contributions to this project should seek to avoid re-implementing functionality that is already exposed through DrRacket's public API.
Currently, we do not support workspace-wide (or project-wide) methods because the underlying DrRacket code tools only operate on one file at a time. If multi-file code tools are a desirable feature, then they should be considered for inclusion into DrRacket proper before being implemented in this project.