just-lsp
just-lsp is a server implementation of the language server protocol for just, the command runner.
Installation
just-lsp should run on any system, including Linux, MacOS, and the BSDs.
The easiest way to install it is by using cargo, the Rust package manager:
Otherwise, see below for the complete package list:
Cross-platform
Linux
Pre-built binaries
Pre-built binaries for Linux, MacOS, and Windows can be found on the releases page.
Usage
just-lsp can be used with any LSP client, this section documents integration
with some of the more popular ones.
Neovim
You can use the release build of just-lsp by setting up the just server on
lspconfig, so somewhere in your config:
local lsp = require
lsp..
This assumes just-lsp is installed on your system and is in your $PATH.
Features
The server implements a decent amount of the language server protocol specification. This section aims to document some of them.
textDocument/codeAction
We provide a code action for each recipe. These code actions run the selected
recipe using just, populating a buffer with its output (stderr + stdout).
textDocument/completion
Completions are provided to you as you type. We currently show recipes, built-in functions, and constants.
textDocument/definition
You're able to go to a recipe, parameter or assignment definition from an identifier.
textDocument/documentHighlight
Like references, but highlights them inside the document.
textDocument/foldingRange
Code folding for recipes.
textDocument/formatting
You're able to format your justfile. This calls just --fmt --unstable and
writes the result to your buffer.
textDocument/hover
You can request hover information for syntactic elements like recipes, built-in functions, constants, etc. and see information about them.
textDocument/publishDiagnostics
We try to publish useful diagnostics. Some of them include checks for non-existent aliases, dependencies, and syntax errors.
textDocument/references
All references to an identifier can be shown. This includes aliases, dependencies, recipes, and more.
textDocument/rename
Workspace-wide symbol renaming is supported.
Development
I use Neovim to work on this project, and I load the development build of this server to test out my changes instantly. This section describes a development setup using Neovim as the LSP client, for other clients you would need to look up their respective documentation.
First, clone the repository:
git clone https://github.com/terror/just-lsp
Build the project:
cd just-lsp
cargo build
Add this to your editor configuration:
local lsp = require
local configs = require
if not configs.
local on_attach =
local capabilities = -- Define what functionality the LSP client is able to handle
lsp..
n.b. You'll need to replace /path/to/just-lsp/target/debug/just-lsp with
the actual absolute path to the binary.
on_attach is a function that gets called after an LSP client gets attached
to a buffer, mine just sets up a few mappings:
local on_attach =
...and capabilities is a table defining what functionality the LSP client is able
to handle, I use
default capabilities
provided by cmp-nvim-lsp:
local capabilities = require.
n.b. This will require you to have the nvim-lspconfig (and optionally cmp-nvim-lsp) plugin installed.
Prior Art
Check out just, the command runner.