2020-05-15 17:44:49 +01:00

2020-04-24 23:19:03 +01:00
2020-05-14 15:07:14 +01:00


2020-05-07 18:54:58 +01:00
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 ](https://github.com/search?q=zig+language+server ).
2020-04-24 23:19:03 +01:00
2020-05-15 05:01:54 +01:00
<!-- omit in toc -->
## Table Of Contents
2020-05-15 05:00:44 +01:00
- [Installation ](#installation )
- [Build Options ](#build-options )
- [Configuration Options ](#configuration-options )
- [Usage ](#usage )
- [VSCode ](#vscode )
2020-05-24 16:56:51 +01:00
- [Sublime Text 3 ](#sublime-text-3 )
2020-05-15 05:00:44 +01:00
- [Related Projects ](#related-projects )
- [License ](#license )
2020-04-24 23:19:03 +01:00
## Installation
2020-05-07 19:02:59 +01:00
Installing `zls` is pretty simple;
2020-05-07 18:54:58 +01:00
2020-04-24 23:19:03 +01:00
```bash
2020-05-20 01:44:37 +01:00
git clone --recurse-submodules https://github.com/zigtools/zls
2020-04-24 23:19:03 +01:00
cd zls
zig build
```
2020-05-07 18:54:58 +01:00
### Build Options
2020-05-18 17:56:43 +01:00
| 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.
2020-05-07 18:54:58 +01:00
2020-04-24 23:19:03 +01:00
Then, you can use the `zls` executable in an editor of your choice that has a Zig language server client!
2020-05-24 16:56:51 +01:00
*Note: `zls` itself must be built using the master branch of zig currently due to a bug in `std.json` which was [fixed ](https://github.com/ziglang/zig/pull/5167 ) after 0.6.0 was released, as well as various parser changes that have happened since.*
2020-05-15 14:35:28 +01:00
2020-05-15 05:00:44 +01:00
### Configuration Options
2020-05-09 19:45:13 +01:00
2020-05-19 20:22:02 +01:00
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 ](https://github.com/ziglibs/known-folders#folder-list ))
- In the same directory as the executable
2020-05-09 19:45:13 +01:00
The following options are currently available.
| Option | Type | Default value | What it Does |
| --- | --- | --- | --- |
2020-05-21 12:36:14 +01:00
| `enable_snippets` | `bool` | `false` | Enables snippet completion, set to false for compatibility with language clients that do not support snippets (such as ale). |
| `zig_lib_path` | `?[]const u8` | `null` | zig library path, e.g. `/path/to/zig/lib/zig` , used to analyze std library imports. |
2020-05-15 20:10:53 +01:00
| `warn_style` | `bool` | `false` | Enables warnings for style *guideline* mismatches |
2020-05-25 18:04:23 +01:00
| `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` |
2020-05-09 19:45:13 +01:00
2020-04-24 23:19:03 +01:00
## Usage
2020-05-24 16:56:51 +01:00
`zls` will supercharge your Zig programming experience with autocomplete, function documentation, and more! Follow the instructions for your specific editor below:
2020-04-24 23:19:03 +01:00
### VSCode
2020-05-15 05:00:44 +01:00
Install the `zls-vscode` extension from [here ](https://github.com/zigtools/zls-vscode/releases ).
2020-05-07 18:54:58 +01:00
2020-05-24 16:45:09 +01:00
### Sublime Text 3
- Install the `LSP` package from [here ](https://github.com/sublimelsp/LSP/releases ) or via Package Control.
- Add this snippet to `LSP's` user settings:
```json
{
"clients": {
"zig":{
"command": ["zls"],
"enabled": true,
"languageId": "zig",
"document_selector": "source.zig",
"syntaxes": ["Packages/Zig/Syntaxes/Zig.tmLanguage"]
}
}
}
```
2020-05-07 18:54:58 +01:00
## Related Projects
- [`sublime-zig-language` by @prime31 ](https://github.com/prime31/sublime-zig-language )
- Supports basic language features
- Uses data provided by `src/data` to perform builtin autocompletion
2020-05-15 05:00:44 +01:00
- [`zig-lsp` by @xackus ](https://github.com/xackus/zig-lsp )
- Inspiration for `zls`
2020-05-19 20:22:02 +01:00
- [`known-folders` by @ziglibs ](https://github.com/ziglibs/known-folders )
- Provides API to acces known folders on Linux, Windows and Mac OS
2020-05-07 18:54:58 +01:00
## License
MIT