Contributing
February 1, 2026 ยท View on GitHub
Thank you for contributing to racket-langserver!
Setup
-
Clone
git clone https://github.com/jeapostrophe/racket-langserver.git cd racket-langserver -
Install Standard (installs dependencies and compiles project):
raco pkg install --auto # Or with a custom package name: raco pkg install --auto -n my-package-name
Compilation
The project is automatically compiled during installation (raco pkg install).
If you modify files, Racket will automatically use the updated source code (ignoring the older bytecode). To improve startup time after changes, you can optionally:
Compile specific file (and its dependencies):
raco make path/to/file.rkt
Compile entire project:
raco make **/*.rkt
Formatting
We use fixw (6cdh/fixw). Custom indentation rules are defined in .lispwords.
Run it manually:
raco pkg install fixw
raco fixw .
Or use pre-commit (the repository provides the necessary .pre-commit-config.yaml):
pip install pre-commit
pre-commit install
Testing
raco test tests/
In headless environments, use xvfb-run.
Pull Requests
- Format code with
fixw. - Ensure tests pass.
- CI checks builds, tests, formatting, and
resyntaxintegration.
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.
jeapostrophe commented on Apr 29, 2020
I think that the right way to implement most features in Racket-LSP is to find the corresponding feature in DrRacket and then disentangle from DrR's GUI and then expose the feature through the LSP. In many cases, DrR has already been internally organized to do that, but we just haven't done enough spelunking yet.