Skip to content
This repository has been archived by the owner on Oct 26, 2023. It is now read-only.

Latest commit

 

History

History
59 lines (37 loc) · 2.64 KB

README.md

File metadata and controls

59 lines (37 loc) · 2.64 KB

racket-langserver

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.

Installation and usage

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.

Atom

You can use the atom-ide-racket package. The language server will be automatically installed when atom-ide-racket installs.

VSCode

Use the Magic Racket extension.

Other editors and IDEs

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.

Capabilities

Currently Supported:

  • 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)

Work in Progress:

  • Document Outline (textDocument/documentSymbol)

Notes for Contributers

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.