A Language Server (LSP) for the Janet programming language.
The goal of this project is to provide an augmented editor/tooling experience for Janet, via a self-contained, Language Server Protocol-compliant language server (which is itself implemented in Janet!).
Current features include:
- Auto-completion based on symbols in the Janet Standard Library and defined in user code
- On-hover definition of symbols as returned by
(doc ,symbol)
- Inline compiler errors
- Pop-up signature help
Planned features include:
- Jump to definition/implementation
- Find references from definition/implementation
- Refactoring helps
- Symbol renaming helps
Possible (but de-prioritized) features include:
- Syntax highlighting for Janet via semantic tokens
Desirable, but possibly more complicated/difficult features include:
- Stand-alone (i.e. non-Editor-dependent) usage via API/CLI
- MacOS support is mostly untested (but as far as I know there shouldn't be major differences).
- The only editor integration currently tested against is Visual Studio Code.
- I've never written a language server before, so I don't really know what I'm doing. Help me, if you'd like!
Currently, Janet LSP is being regularly tested and is expected to work out of the box with two major editors:
- Visual Studio Code, which you can try/take advantage of by installing the Janet++ extension from the VS Code marketplace, and
- Neovim, which ships with support for LSP servers.
Other editors that implement LSP client protocols, either built-in or through editor extensions, include:
- Emacs
- Vim
- Sublime Text
- Helix
- Kakoune
- Zed
If you get Janet LSP working with any of these options, please let me know!
$ git clone https://github.com/CFiggers/janet-lsp
$ cd janet-lsp
$ jpm deps
$ jpm build
A .jimage (Janet image) file will be generated in /build
. Using a .jimage file makes Janet LSP fully cross-platform (wherever there is a compatible Janet binary on the user's path). But it also means that you must have a Janet binary to use Janet LSP (this author struggles to imagine a scenario where you would both need the LSP and NOT have Janet itself installed).
After running the commands above, the following command will copy the janet-lsp
binscript to a location that can be executed via the command line.
$ jpm install
Test successful install by running the following:
$ janet-lsp --version
Starting in version 0.0.3, you can start a debug console by passing --console
to any invocation of Janet LSP, including any of the following:
$ ./build/janet-lsp --console
OR
$ janet ./build/janet-lsp.jimage --console
OR
$ janet ./src/main.janet --console
In this mode, the LSP will launch a simple RPC server that listens on port 8037 (by default, configurable with the --debug-port
flag). Janet LSPs with version >= 0.0.3
will check for a listening server on port 8037 (or the port specified by --debug-port
) and, if found, transmit anything sent through the (logging/log)
function to be printed out by the debug console.
In the future, the debug console may function as a networked REPL allowing commands to be sent to the running language server process (but right now it functions in listen-only mode).
Issues and Pull Requests welcome.
This project is a hard fork from (with much appreciation to) JohnDoneth/janet-language-server, which is Copyright (c) 2022 JohnDoneth and contributors.