.assets | ||
.github/workflows | ||
src | ||
tests | ||
.gitignore | ||
.gitmodules | ||
build.zig | ||
LICENSE.md | ||
README.md |
Zig Language Server, or zls
, is a language server for Zig. The Zig wiki states that "The Zig community is decentralized" and "There is no concept of 'official' or 'unofficial'", so instead of calling zls
unofficial, and I'm going to call it a cool option, one of many.
Table Of Contents
Installation
Installing zls
is pretty simple. You will need a build of Zig master (or >0.6) to build ZLS.
git clone --recurse-submodules https://github.com/zigtools/zls
cd zls
zig build
# To configure ZLS:
zig build config
Build Options
Option | Type | Default Value | What it Does |
---|---|---|---|
-Ddata_version |
string (master or 0.6.0) |
0.6.0 | The data file version. This selects the files in the src/data folder that correspond to the Zig version being served. |
Then, you can use the zls
executable in an editor of your choice that has a Zig language server client!
Configuration Options
You can configure zls by providing a zls.json file.
zls will look for a zls.json configuration file in multiple locations with the following priority:
- In the folders open in your workspace (this applies for files in those folders)
- In the local configuration folder of your OS (as provided by known-folders)
- In the same directory as the executable
The following options are currently available.
Option | Type | Default value | What it Does |
---|---|---|---|
enable_snippets |
bool |
false |
Enables snippet completions when the client also supports them. |
zig_lib_path |
?[]const u8 |
null |
zig library path, e.g. /path/to/zig/lib/zig , used to analyze std library imports. |
zig_exe_path |
?[]const u8 |
null |
zig executable path, e.g. /path/to/zig/zig , used to run the custom build runner. If null , zig is looked up in PATH . Will be used to infer the zig standard library path if none is provided. |
warn_style |
bool |
false |
Enables warnings for style guideline mismatches |
build_runner_path |
?[]const u8 |
null |
Path to the build_runner.zig file provided by zls. This option must be present in one of the global configuration files to have any effect. null is equivalent to ${executable_directory}/build_runner.zig |
enable_semantic_tokens |
bool |
false | Enables semantic token support when the client also supports it. |
Usage
zls
will supercharge your Zig programming experience with autocomplete, function documentation, and more! Follow the instructions for your specific editor below:
VSCode
Install the zls-vscode
extension from here.
Sublime Text 3
- Install the
LSP
package from here or via Package Control. - Add this snippet to
LSP's
user settings:
{
"clients": {
"zig":{
"command": ["zls"],
"enabled": true,
"languageId": "zig",
"scopes": ["source.zig"],
"syntaxes": ["Packages/Zig Language/Syntaxes/Zig.tmLanguage"]
}
}
}
Kate
- Enable
LSP client
plugin in Kate settings. - Add this snippet to
LSP client's
user settings (e.g. /$HOME/.config/kate/lspclient) (or paste it inLSP client's
GUI settings)
{
"servers": {
"zig": {
"command": ["zls"],
"url": "https://github.com/zigtools/zls",
"highlightingModeRegex": "^Zig$"
}
}
}
Neovim/Vim8
- Install the CoC engine from here.
- Issue
:CocConfig
from within your Vim editor, and the following snippet:
{
"languageserver": {
"zls" : {
"command": "command_or_path_to_zls",
"filetypes": ["zig"]
}
}
}
Emacs
(require 'lsp)
(add-to-list 'lsp-language-id-configuration '(zig-mode . "zig"))
(lsp-register-client
(make-lsp-client
:new-connection (lsp-stdio-connection "<path to zls>")
:major-modes '(zig-mode)
:server-id 'zls))
Related Projects
sublime-zig-language
by @prime31- Supports basic language features
- Uses data provided by
src/data
to perform builtin autocompletion
zig-lsp
by @xackus- Inspiration for
zls
- Inspiration for
known-folders
by @ziglibs- Provides API to access known folders on Linux, Windows and Mac OS
License
MIT