Added build artifact uploads to the github actions CI and removed duplicate READMEs (#300)
This commit is contained in:
parent
902c91e98f
commit
6a5664e018
279
.github/README.md
vendored
279
.github/README.md
vendored
@ -1,279 +0,0 @@
|
|||||||
![Zig Language Server](./assets/zls.svg)
|
|
||||||
|
|
||||||
![CI](https://github.com/zigtools/zls/workflows/CI/badge.svg)
|
|
||||||
![Zig Tools](./assets/zigtools.svg)
|
|
||||||
|
|
||||||
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).
|
|
||||||
|
|
||||||
<!-- omit in toc -->
|
|
||||||
## Table Of Contents
|
|
||||||
|
|
||||||
- [Installation](#installation)
|
|
||||||
- [Build Options](#build-options)
|
|
||||||
- [Configuration Options](#configuration-options)
|
|
||||||
- [Usage](#usage)
|
|
||||||
- [VSCode](#vscode)
|
|
||||||
- [Sublime Text 3](#sublime-text-3)
|
|
||||||
- [Kate](#kate)
|
|
||||||
- [Neovim/Vim8](#neovimvim8)
|
|
||||||
- [Emacs](#emacs)
|
|
||||||
- [Doom Emacs](#doom-emacs)
|
|
||||||
- [Related Projects](#related-projects)
|
|
||||||
- [License](#license)
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
Installation starts with downloading an official release from the [Releases page](https://github.com/zigtools/zls/releases).
|
|
||||||
|
|
||||||
See [Downloading and Building ZLS](https://github.com/zigtools/zls/wiki/Downloading-and-Building-ZLS) on the Wiki, or the page about [using ZLS with Visual Studio Code](https://github.com/zigtools/zls/wiki/Installing-for-Visual-Studio-Code) for a guide to help get `zls` running in your editor.
|
|
||||||
|
|
||||||
### Installing binaries
|
|
||||||
|
|
||||||
#### MacOS
|
|
||||||
|
|
||||||
You can install the latest release into `$HOME/zls` using e.g.:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
brew install xz
|
|
||||||
mkdir $HOME/zls && cd $HOME/zls && curl -L https://github.com/zigtools/zls/releases/download/0.1.0/x86_64-macos.tar.xz | tar -xJ --strip-components=1 -C .
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Linux
|
|
||||||
|
|
||||||
You can install the latest release into `$HOME/zls` using e.g.:
|
|
||||||
|
|
||||||
```
|
|
||||||
sudo apt install xz-utils
|
|
||||||
mkdir $HOME/zls && cd $HOME/zls && curl -L https://github.com/zigtools/zls/releases/download/0.1.0/x86_64-linux.tar.xz | tar -xJ --strip-components=1 -C .
|
|
||||||
```
|
|
||||||
|
|
||||||
### From Source
|
|
||||||
|
|
||||||
Building `zls` is very easy. You will need [a build of Zig master](https://ziglang.org/download/) to build zls.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git clone --recurse-submodules https://github.com/zigtools/zls
|
|
||||||
cd zls
|
|
||||||
zig build -Drelease-safe
|
|
||||||
zig build config # Configure ZLS
|
|
||||||
```
|
|
||||||
|
|
||||||
*For detailed building instructions, see the Wiki page about [Cloning With Git](https://github.com/zigtools/zls/wiki/Downloading-and-Building-ZLS#cloning-with-git).*
|
|
||||||
|
|
||||||
#### Build Options
|
|
||||||
|
|
||||||
<!-- When updating this table, be sure to copy changes to the Wiki page about building from source. -->
|
|
||||||
<!-- If this table grows too large, then delete this one and move it all over to the Wiki page about building from source. -->
|
|
||||||
| Option | Type | Default Value | What it Does |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `-Ddata_version` | `string` (master, 0.7.0 or 0.7.1) | master | The data file version. This selects the files in the `src/data` folder that correspond to the Zig version being served.|
|
|
||||||
|
|
||||||
### 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 local configuration folder of your OS (as provided by [known-folders](https://github.com/ziglibs/known-folders#folder-list))
|
|
||||||
- In the global configuration folder of your OS (as provided by [known-folders](https://github.com/ziglibs/known-folders#folder-list))
|
|
||||||
|
|
||||||
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. `null` is equivalent to `${executable_directory}/build_runner.zig` |
|
|
||||||
| `build_runner_cache_path` | `?[]const u8` | `null` | Path to a directroy that will be used as zig's cache when running `zig run build_runner.zig ...`. `null` is equivalent to `${KnownFloders.Cache}/zls` |
|
|
||||||
| `enable_semantic_tokens` | `bool` | `true` | Enables semantic token support when the client also supports it. |
|
|
||||||
| `operator_completions` | `bool` | `true` | Enables `*` and `?` operators in completion lists. |
|
|
||||||
| `skip_std_references` | `bool` | `false` | When true, skips searching for references in std. Improves lookup speed for functions in user's code. Renaming and go-to-definition will continue to work as is.
|
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
`zls` supports most language features, including simple type function support, usingnamespace, payload capture type resolution, custom packages and others.
|
|
||||||
Notable language features that are not currently implemented include `@cImport` as well as most forms of compile time evaluation.
|
|
||||||
|
|
||||||
The following LSP features are supported:
|
|
||||||
- Completions
|
|
||||||
- Hover
|
|
||||||
- Goto definition/declaration
|
|
||||||
- Document symbols
|
|
||||||
- Find references
|
|
||||||
- Rename symbol
|
|
||||||
- Formatting using `zig fmt`
|
|
||||||
- Semantic token highlighting (LSP 3.16 proposed feature, implemented by a few clients including VSCode, kak and emacs lsp-mode)
|
|
||||||
|
|
||||||
You can install `zls` using the instuctions for your text editor below:
|
|
||||||
|
|
||||||
### VSCode
|
|
||||||
|
|
||||||
Install the `zls-vscode` extension from [here](https://github.com/zigtools/zls-vscode/releases) and provide a path to the build `zls` executable.
|
|
||||||
|
|
||||||
### 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",
|
|
||||||
"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 in `LSP client's` GUI settings)
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"servers": {
|
|
||||||
"zig": {
|
|
||||||
"command": ["zls"],
|
|
||||||
"url": "https://github.com/zigtools/zls",
|
|
||||||
"highlightingModeRegex": "^Zig$"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Neovim/Vim8
|
|
||||||
#### CoC
|
|
||||||
|
|
||||||
- Install the CoC engine from [here](https://github.com/neoclide/coc.nvim).
|
|
||||||
- Issue `:CocConfig` from within your Vim editor, and the following snippet:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"languageserver": {
|
|
||||||
"zls" : {
|
|
||||||
"command": "command_or_path_to_zls",
|
|
||||||
"filetypes": ["zig"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### YouCompleteMe
|
|
||||||
- Install YouCompleteMeFrom [here](https://github.com/ycm-core/YouCompleteMe.git).
|
|
||||||
- Add these lines to your vimrc:
|
|
||||||
|
|
||||||
```vim
|
|
||||||
"ensure zig is a recognized filetype
|
|
||||||
autocmd BufNewFile,BufRead *.zig set filetype=zig
|
|
||||||
|
|
||||||
let g:ycm_language_server =
|
|
||||||
\ [
|
|
||||||
\{
|
|
||||||
\ 'name': 'zls',
|
|
||||||
\ 'filetypes': [ 'zig' ],
|
|
||||||
\ 'cmdline': [ '/path/to/zls_executable' ]
|
|
||||||
\ }
|
|
||||||
\ ]
|
|
||||||
```
|
|
||||||
|
|
||||||
#### nvim-lspconfig
|
|
||||||
|
|
||||||
Requires Nvim 0.5 (HEAD)!
|
|
||||||
|
|
||||||
- Install nvim-lspconfig from [here](https://github.com/neovim/nvim-lspconfig).
|
|
||||||
- Install zig.vim from [here](https://github.com/ziglang/zig.vim).
|
|
||||||
|
|
||||||
nvim-lspconfig already ships a configuration for zls. A simple `init.vim` might look like this:
|
|
||||||
```vim
|
|
||||||
call plug#begin('~/.config/nvim/plugged')
|
|
||||||
Plug 'neovim/nvim-lspconfig'
|
|
||||||
Plug 'nvim-lua/completion-nvim'
|
|
||||||
Plug 'ziglang/zig.vim'
|
|
||||||
call plug#end()
|
|
||||||
|
|
||||||
:lua << EOF
|
|
||||||
local lspconfig = require('lspconfig')
|
|
||||||
|
|
||||||
local on_attach = function(_, bufnr)
|
|
||||||
vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
|
|
||||||
require('completion').on_attach()
|
|
||||||
end
|
|
||||||
|
|
||||||
local servers = {'zls'}
|
|
||||||
for _, lsp in ipairs(servers) do
|
|
||||||
lspconfig[lsp].setup {
|
|
||||||
on_attach = on_attach,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
EOF
|
|
||||||
|
|
||||||
" Set completeopt to have a better completion experience
|
|
||||||
set completeopt=menuone,noinsert,noselect
|
|
||||||
|
|
||||||
" Enable completions as you type
|
|
||||||
let g:completion_enable_auto_popup = 1
|
|
||||||
```
|
|
||||||
|
|
||||||
#### LanguageClient-neovim
|
|
||||||
|
|
||||||
- Install the LanguageClient-neovim from [here](https://github.com/autozimu/LanguageClient-neovim)
|
|
||||||
- Edit your neovim configuration and add `zls` for zig filetypes:
|
|
||||||
|
|
||||||
```vim
|
|
||||||
let g:LanguageClient_serverCommands = {
|
|
||||||
\ 'zig': ['~/code/zls/zig-cache/bin/zls'],
|
|
||||||
\ }
|
|
||||||
```
|
|
||||||
|
|
||||||
### Emacs
|
|
||||||
|
|
||||||
- Install [lsp-mode](https://github.com/emacs-lsp/lsp-mode) from melpa
|
|
||||||
- [zig mode](https://github.com/ziglang/zig-mode) is also useful
|
|
||||||
|
|
||||||
```elisp
|
|
||||||
;; Setup lsp-mode as desired.
|
|
||||||
;; See https://emacs-lsp.github.io/lsp-mode/page/installation/ for more information.
|
|
||||||
(require 'lsp-mode)
|
|
||||||
|
|
||||||
;; Either place zls in your PATH or add the following:
|
|
||||||
(setq lsp-zig-zls-executable "<path to zls>")
|
|
||||||
```
|
|
||||||
|
|
||||||
### Doom Emacs
|
|
||||||
|
|
||||||
- Enable the `lsp` module
|
|
||||||
- Install the [zig-mode](https://github.com/ziglang/zig-mode) package (add `(package! zig-mode)` to your `packages.el` file
|
|
||||||
|
|
||||||
```elisp
|
|
||||||
(use-package! zig-mode
|
|
||||||
:hook ((zig-mode . lsp-deferred))
|
|
||||||
:custom (zig-format-on-save nil)
|
|
||||||
:config
|
|
||||||
(after! lsp-mode
|
|
||||||
(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](https://github.com/prime31/sublime-zig-language)
|
|
||||||
- Supports basic language features
|
|
||||||
- Uses data provided by `src/data` to perform builtin autocompletion
|
|
||||||
- [`zig-lsp` by @xackus](https://github.com/xackus/zig-lsp)
|
|
||||||
- Inspiration for `zls`
|
|
||||||
- [`known-folders` by @ziglibs](https://github.com/ziglibs/known-folders)
|
|
||||||
- Provides API to access known folders on Linux, Windows and Mac OS
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
MIT
|
|
26
.github/workflows/main.yml
vendored
26
.github/workflows/main.yml
vendored
@ -32,3 +32,29 @@ jobs:
|
|||||||
- name: Run Tests
|
- name: Run Tests
|
||||||
if: ${{ matrix.os == 'ubuntu-latest' }}
|
if: ${{ matrix.os == 'ubuntu-latest' }}
|
||||||
run: zig build test
|
run: zig build test
|
||||||
|
|
||||||
|
- name: Build artifacts
|
||||||
|
if: ${{ matrix.os == 'ubuntu-latest' }}
|
||||||
|
run: |
|
||||||
|
declare -a targets=("x86_64-windows" "x86_64-linux" "x86_64-macos" "i386-windows" "i386-linux")
|
||||||
|
mkdir -p "artifacts/"
|
||||||
|
|
||||||
|
for target in "${targets[@]}"; do
|
||||||
|
mkdir -p artifacts/$target
|
||||||
|
echo "Building target ${target}..."
|
||||||
|
zig build -Dtarget=${target} -Drelease-safe --cache-dir artifacts/${target}/
|
||||||
|
sed -e '1,5d' < README.md > artifacts/${target}/README.md
|
||||||
|
cp LICENSE.md artifacts/${target}/
|
||||||
|
cd artifacts/${target}/
|
||||||
|
tar cfJ ${target}.tar.xz *.md bin/*
|
||||||
|
mv ${target}.tar.xz ../
|
||||||
|
cd ../..
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Upload artifacts
|
||||||
|
if: ${{ matrix.os == 'ubuntu-latest' }}
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: builds
|
||||||
|
path: artifacts/*.tar.xz
|
||||||
|
|
||||||
|
559
README.md
559
README.md
@ -1,279 +1,280 @@
|
|||||||
# Zig Language Server
|
![Zig Language Server](./.github/assets/zls.svg)
|
||||||
|
|
||||||
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).
|
![CI](https://github.com/zigtools/zls/workflows/CI/badge.svg)
|
||||||
|
![Zig Tools](./.github/assets/zigtools.svg)
|
||||||
<!-- omit in toc -->
|
|
||||||
## Table Of Contents
|
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).
|
||||||
|
|
||||||
- [Installation](#installation)
|
<!-- omit in toc -->
|
||||||
- [Build Options](#build-options)
|
## Table Of Contents
|
||||||
- [Configuration Options](#configuration-options)
|
|
||||||
- [Usage](#usage)
|
- [Installation](#installation)
|
||||||
- [VSCode](#vscode)
|
- [Build Options](#build-options)
|
||||||
- [Sublime Text 3](#sublime-text-3)
|
- [Configuration Options](#configuration-options)
|
||||||
- [Kate](#kate)
|
- [Usage](#usage)
|
||||||
- [Neovim/Vim8](#neovimvim8)
|
- [VSCode](#vscode)
|
||||||
- [Emacs](#emacs)
|
- [Sublime Text 3](#sublime-text-3)
|
||||||
- [Doom Emacs](#doom-emacs)
|
- [Kate](#kate)
|
||||||
- [Related Projects](#related-projects)
|
- [Neovim/Vim8](#neovimvim8)
|
||||||
- [License](#license)
|
- [Emacs](#emacs)
|
||||||
|
- [Doom Emacs](#doom-emacs)
|
||||||
## Installation
|
- [Related Projects](#related-projects)
|
||||||
|
- [License](#license)
|
||||||
Installation starts with downloading an official release from the [Releases page](https://github.com/zigtools/zls/releases).
|
|
||||||
|
## Installation
|
||||||
See [Downloading and Building ZLS](https://github.com/zigtools/zls/wiki/Downloading-and-Building-ZLS) on the Wiki, or the page about [using ZLS with Visual Studio Code](https://github.com/zigtools/zls/wiki/Installing-for-Visual-Studio-Code) for a guide to help get `zls` running in your editor.
|
|
||||||
|
Installation starts with downloading an official release from the [Releases page](https://github.com/zigtools/zls/releases).
|
||||||
### Installing binaries
|
Up to date builds from master branch are also available in the latest successful CI run, contained in the `builds` artifact.
|
||||||
|
|
||||||
#### MacOS
|
See [Downloading and Building ZLS](https://github.com/zigtools/zls/wiki/Downloading-and-Building-ZLS) on the Wiki, or the page about [using ZLS with Visual Studio Code](https://github.com/zigtools/zls/wiki/Installing-for-Visual-Studio-Code) for a guide to help get `zls` running in your editor.
|
||||||
|
|
||||||
You can install the latest release into `$HOME/zls` using e.g.:
|
### Installing binaries
|
||||||
|
|
||||||
```sh
|
#### MacOS
|
||||||
brew install xz
|
|
||||||
mkdir $HOME/zls && cd $HOME/zls && curl -L https://github.com/zigtools/zls/releases/download/0.1.0/x86_64-macos.tar.xz | tar -xJ --strip-components=1 -C .
|
You can install the latest release into `$HOME/zls` using e.g.:
|
||||||
```
|
|
||||||
|
```sh
|
||||||
#### Linux
|
brew install xz
|
||||||
|
mkdir $HOME/zls && cd $HOME/zls && curl -L https://github.com/zigtools/zls/releases/download/0.1.0/x86_64-macos.tar.xz | tar -xJ --strip-components=1 -C .
|
||||||
You can install the latest release into `$HOME/zls` using e.g.:
|
```
|
||||||
|
|
||||||
```
|
#### Linux
|
||||||
sudo apt install xz-utils
|
|
||||||
mkdir $HOME/zls && cd $HOME/zls && curl -L https://github.com/zigtools/zls/releases/download/0.1.0/x86_64-linux.tar.xz | tar -xJ --strip-components=1 -C .
|
You can install the latest release into `$HOME/zls` using e.g.:
|
||||||
```
|
|
||||||
|
```
|
||||||
### From Source
|
sudo apt install xz-utils
|
||||||
|
mkdir $HOME/zls && cd $HOME/zls && curl -L https://github.com/zigtools/zls/releases/download/0.1.0/x86_64-linux.tar.xz | tar -xJ --strip-components=1 -C .
|
||||||
Building `zls` is very easy. You will need [a build of Zig master](https://ziglang.org/download/) to build zls.
|
```
|
||||||
|
|
||||||
```bash
|
### From Source
|
||||||
git clone --recurse-submodules https://github.com/zigtools/zls
|
|
||||||
cd zls
|
Building `zls` is very easy. You will need [a build of Zig master](https://ziglang.org/download/) to build zls.
|
||||||
zig build -Drelease-safe
|
|
||||||
cd zig-cache\bin
|
```bash
|
||||||
zls config # Configure ZLS
|
git clone --recurse-submodules https://github.com/zigtools/zls
|
||||||
```
|
cd zls
|
||||||
|
zig build -Drelease-safe
|
||||||
*For detailed building instructions, see the Wiki page about [Cloning With Git](https://github.com/zigtools/zls/wiki/Downloading-and-Building-ZLS#cloning-with-git).*
|
zig build config # Configure ZLS
|
||||||
|
```
|
||||||
#### Build Options
|
|
||||||
|
*For detailed building instructions, see the Wiki page about [Cloning With Git](https://github.com/zigtools/zls/wiki/Downloading-and-Building-ZLS#cloning-with-git).*
|
||||||
<!-- When updating this table, be sure to copy changes to the Wiki page about building from source. -->
|
|
||||||
<!-- If this table grows too large, then delete this one and move it all over to the Wiki page about building from source. -->
|
#### Build Options
|
||||||
| Option | Type | Default Value | What it Does |
|
|
||||||
| --- | --- | --- | --- |
|
<!-- When updating this table, be sure to copy changes to the Wiki page about building from source. -->
|
||||||
| `-Ddata_version` | `string` (master, 0.7.0 or 0.7.1) | master | The data file version. This selects the files in the `src/data` folder that correspond to the Zig version being served.|
|
<!-- If this table grows too large, then delete this one and move it all over to the Wiki page about building from source. -->
|
||||||
|
| Option | Type | Default Value | What it Does |
|
||||||
### Configuration Options
|
| --- | --- | --- | --- |
|
||||||
|
| `-Ddata_version` | `string` (master, 0.7.0 or 0.7.1) | master | The data file version. This selects the files in the `src/data` folder that correspond to the Zig version being served.|
|
||||||
You can configure zls by running `zls config`.
|
|
||||||
zls will look for a zls.json configuration file in multiple locations with the following priority:
|
### Configuration Options
|
||||||
- In the local configuration folder of your OS (as provided by [known-folders](https://github.com/ziglibs/known-folders#folder-list))
|
|
||||||
- In the global configuration folder of your OS (as provided by [known-folders](https://github.com/ziglibs/known-folders#folder-list))
|
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:
|
||||||
The following options are currently available.
|
- In the local configuration folder of your OS (as provided by [known-folders](https://github.com/ziglibs/known-folders#folder-list))
|
||||||
|
- In the global configuration folder of your OS (as provided by [known-folders](https://github.com/ziglibs/known-folders#folder-list))
|
||||||
| Option | Type | Default value | What it Does |
|
|
||||||
| --- | --- | --- | --- |
|
The following options are currently available.
|
||||||
| `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. |
|
| Option | Type | Default value | What it Does |
|
||||||
| `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 |
|
| `enable_snippets` | `bool` | `false` | Enables snippet completions when the client also supports them. |
|
||||||
| `build_runner_path` | `?[]const u8` | `null` | Path to the build_runner.zig file provided by zls. `null` is equivalent to `${executable_directory}/build_runner.zig` |
|
| `zig_lib_path` | `?[]const u8` | `null` | zig library path, e.g. `/path/to/zig/lib/zig`, used to analyze std library imports. |
|
||||||
| `build_runner_cache_path` | `?[]const u8` | `null` | Path to a directroy that will be used as zig's cache when running `zig run build_runner.zig ...`. `null` is equivalent to `${KnownFloders.Cache}/zls` |
|
| `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. |
|
||||||
| `enable_semantic_tokens` | `bool` | `true` | Enables semantic token support when the client also supports it. |
|
| `warn_style` | `bool` | `false` | Enables warnings for style *guideline* mismatches |
|
||||||
| `operator_completions` | `bool` | `true` | Enables `*` and `?` operators in completion lists. |
|
| `build_runner_path` | `?[]const u8` | `null` | Path to the build_runner.zig file provided by zls. `null` is equivalent to `${executable_directory}/build_runner.zig` |
|
||||||
| `skip_std_references` | `bool` | `false` | When true, skips searching for references in std. Improves lookup speed for functions in user's code. Renaming and go-to-definition will continue to work as is.
|
| `build_runner_cache_path` | `?[]const u8` | `null` | Path to a directroy that will be used as zig's cache when running `zig run build_runner.zig ...`. `null` is equivalent to `${KnownFloders.Cache}/zls` |
|
||||||
| `include_at_in_builtins` | `bool` | `false` | Most editors (except Sublime Text, it seems) generate a duplicate @ if a completion starts with it.
|
| `enable_semantic_tokens` | `bool` | `true` | Enables semantic token support when the client also supports it. |
|
||||||
| `max_detail_length` | `usize` | `1048576` | Completion detail fields are truncated to this length. Decrease if previews lag your editor.
|
| `operator_completions` | `bool` | `true` | Enables `*` and `?` operators in completion lists. |
|
||||||
|
| `skip_std_references` | `bool` | `false` | When true, skips searching for references in std. Improves lookup speed for functions in user's code. Renaming and go-to-definition will continue to work as is.
|
||||||
## Features
|
|
||||||
|
## Features
|
||||||
`zls` supports most language features, including simple type function support, usingnamespace, payload capture type resolution, custom packages and others.
|
|
||||||
Notable language features that are not currently implemented include `@cImport` as well as most forms of compile time evaluation.
|
`zls` supports most language features, including simple type function support, usingnamespace, payload capture type resolution, custom packages and others.
|
||||||
|
Notable language features that are not currently implemented include `@cImport` as well as most forms of compile time evaluation.
|
||||||
The following LSP features are supported:
|
|
||||||
- Completions
|
The following LSP features are supported:
|
||||||
- Hover
|
- Completions
|
||||||
- Goto definition/declaration
|
- Hover
|
||||||
- Document symbols
|
- Goto definition/declaration
|
||||||
- Find references
|
- Document symbols
|
||||||
- Rename symbol
|
- Find references
|
||||||
- Formatting using `zig fmt`
|
- Rename symbol
|
||||||
- Semantic token highlighting (LSP 3.16 proposed feature, implemented by a few clients including VSCode, kak and emacs lsp-mode)
|
- Formatting using `zig fmt`
|
||||||
|
- Semantic token highlighting (LSP 3.16 proposed feature, implemented by a few clients including VSCode, kak and emacs lsp-mode)
|
||||||
You can install `zls` using the instuctions for your text editor below:
|
|
||||||
|
You can install `zls` using the instuctions for your text editor below:
|
||||||
### VSCode
|
|
||||||
|
### VSCode
|
||||||
Install the `zls-vscode` extension from [here](https://github.com/zigtools/zls-vscode/releases) and provide a path to the build `zls` executable.
|
|
||||||
|
Install the `zls-vscode` extension from [here](https://github.com/zigtools/zls-vscode/releases) and provide a path to the build `zls` executable.
|
||||||
### Sublime Text 3
|
|
||||||
|
### 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:
|
- 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
|
|
||||||
{
|
```json
|
||||||
"clients": {
|
{
|
||||||
"zig":{
|
"clients": {
|
||||||
"command": ["zls"],
|
"zig":{
|
||||||
"enabled": true,
|
"command": ["zls"],
|
||||||
"languageId": "zig",
|
"enabled": true,
|
||||||
"scopes": ["source.zig"],
|
"languageId": "zig",
|
||||||
"syntaxes": ["Packages/Zig Language/Syntaxes/Zig.tmLanguage"]
|
"scopes": ["source.zig"],
|
||||||
}
|
"syntaxes": ["Packages/Zig Language/Syntaxes/Zig.tmLanguage"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
}
|
||||||
|
```
|
||||||
### Kate
|
|
||||||
|
### Kate
|
||||||
- Enable `LSP client` plugin in Kate settings.
|
|
||||||
- Add this snippet to `LSP client's` user settings (e.g. /$HOME/.config/kate/lspclient)
|
- Enable `LSP client` plugin in Kate settings.
|
||||||
(or paste it in `LSP client's` GUI settings)
|
- Add this snippet to `LSP client's` user settings (e.g. /$HOME/.config/kate/lspclient)
|
||||||
|
(or paste it in `LSP client's` GUI settings)
|
||||||
```json
|
|
||||||
{
|
```json
|
||||||
"servers": {
|
{
|
||||||
"zig": {
|
"servers": {
|
||||||
"command": ["zls"],
|
"zig": {
|
||||||
"url": "https://github.com/zigtools/zls",
|
"command": ["zls"],
|
||||||
"highlightingModeRegex": "^Zig$"
|
"url": "https://github.com/zigtools/zls",
|
||||||
}
|
"highlightingModeRegex": "^Zig$"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
}
|
||||||
|
```
|
||||||
### Neovim/Vim8
|
|
||||||
#### CoC
|
### Neovim/Vim8
|
||||||
|
#### CoC
|
||||||
- Install the CoC engine from [here](https://github.com/neoclide/coc.nvim).
|
|
||||||
- Issue `:CocConfig` from within your Vim editor, and the following snippet:
|
- Install the CoC engine from [here](https://github.com/neoclide/coc.nvim).
|
||||||
|
- Issue `:CocConfig` from within your Vim editor, and the following snippet:
|
||||||
```json
|
|
||||||
{
|
```json
|
||||||
"languageserver": {
|
{
|
||||||
"zls" : {
|
"languageserver": {
|
||||||
"command": "command_or_path_to_zls",
|
"zls" : {
|
||||||
"filetypes": ["zig"]
|
"command": "command_or_path_to_zls",
|
||||||
}
|
"filetypes": ["zig"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
}
|
||||||
|
```
|
||||||
#### YouCompleteMe
|
|
||||||
- Install YouCompleteMeFrom [here](https://github.com/ycm-core/YouCompleteMe.git).
|
#### YouCompleteMe
|
||||||
- Add these lines to your vimrc:
|
- Install YouCompleteMeFrom [here](https://github.com/ycm-core/YouCompleteMe.git).
|
||||||
|
- Add these lines to your vimrc:
|
||||||
```vim
|
|
||||||
"ensure zig is a recognized filetype
|
```vim
|
||||||
autocmd BufNewFile,BufRead *.zig set filetype=zig
|
"ensure zig is a recognized filetype
|
||||||
|
autocmd BufNewFile,BufRead *.zig set filetype=zig
|
||||||
let g:ycm_language_server =
|
|
||||||
\ [
|
let g:ycm_language_server =
|
||||||
\{
|
\ [
|
||||||
\ 'name': 'zls',
|
\{
|
||||||
\ 'filetypes': [ 'zig' ],
|
\ 'name': 'zls',
|
||||||
\ 'cmdline': [ '/path/to/zls_executable' ]
|
\ 'filetypes': [ 'zig' ],
|
||||||
\ }
|
\ 'cmdline': [ '/path/to/zls_executable' ]
|
||||||
\ ]
|
\ }
|
||||||
```
|
\ ]
|
||||||
|
```
|
||||||
#### nvim-lspconfig
|
|
||||||
|
#### nvim-lspconfig
|
||||||
Requires Nvim 0.5 (HEAD)!
|
|
||||||
|
Requires Nvim 0.5 (HEAD)!
|
||||||
- Install nvim-lspconfig from [here](https://github.com/neovim/nvim-lspconfig).
|
|
||||||
- Install zig.vim from [here](https://github.com/ziglang/zig.vim).
|
- Install nvim-lspconfig from [here](https://github.com/neovim/nvim-lspconfig).
|
||||||
|
- Install zig.vim from [here](https://github.com/ziglang/zig.vim).
|
||||||
nvim-lspconfig already ships a configuration for zls. A simple `init.vim` might look like this:
|
|
||||||
```vim
|
nvim-lspconfig already ships a configuration for zls. A simple `init.vim` might look like this:
|
||||||
call plug#begin('~/.config/nvim/plugged')
|
```vim
|
||||||
Plug 'neovim/nvim-lspconfig'
|
call plug#begin('~/.config/nvim/plugged')
|
||||||
Plug 'nvim-lua/completion-nvim'
|
Plug 'neovim/nvim-lspconfig'
|
||||||
Plug 'ziglang/zig.vim'
|
Plug 'nvim-lua/completion-nvim'
|
||||||
call plug#end()
|
Plug 'ziglang/zig.vim'
|
||||||
|
call plug#end()
|
||||||
:lua << EOF
|
|
||||||
local lspconfig = require('lspconfig')
|
:lua << EOF
|
||||||
|
local lspconfig = require('lspconfig')
|
||||||
local on_attach = function(_, bufnr)
|
|
||||||
vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
|
local on_attach = function(_, bufnr)
|
||||||
require('completion').on_attach()
|
vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
|
||||||
end
|
require('completion').on_attach()
|
||||||
|
end
|
||||||
local servers = {'zls'}
|
|
||||||
for _, lsp in ipairs(servers) do
|
local servers = {'zls'}
|
||||||
lspconfig[lsp].setup {
|
for _, lsp in ipairs(servers) do
|
||||||
on_attach = on_attach,
|
lspconfig[lsp].setup {
|
||||||
}
|
on_attach = on_attach,
|
||||||
end
|
}
|
||||||
EOF
|
end
|
||||||
|
EOF
|
||||||
" Set completeopt to have a better completion experience
|
|
||||||
set completeopt=menuone,noinsert,noselect
|
" Set completeopt to have a better completion experience
|
||||||
|
set completeopt=menuone,noinsert,noselect
|
||||||
" Enable completions as you type
|
|
||||||
let g:completion_enable_auto_popup = 1
|
" Enable completions as you type
|
||||||
```
|
let g:completion_enable_auto_popup = 1
|
||||||
|
```
|
||||||
#### LanguageClient-neovim
|
|
||||||
|
#### LanguageClient-neovim
|
||||||
- Install the LanguageClient-neovim from [here](https://github.com/autozimu/LanguageClient-neovim)
|
|
||||||
- Edit your neovim configuration and add `zls` for zig filetypes:
|
- Install the LanguageClient-neovim from [here](https://github.com/autozimu/LanguageClient-neovim)
|
||||||
|
- Edit your neovim configuration and add `zls` for zig filetypes:
|
||||||
```vim
|
|
||||||
let g:LanguageClient_serverCommands = {
|
```vim
|
||||||
\ 'zig': ['~/code/zls/zig-cache/bin/zls'],
|
let g:LanguageClient_serverCommands = {
|
||||||
\ }
|
\ 'zig': ['~/code/zls/zig-cache/bin/zls'],
|
||||||
```
|
\ }
|
||||||
|
```
|
||||||
### Emacs
|
|
||||||
|
### Emacs
|
||||||
- Install [lsp-mode](https://github.com/emacs-lsp/lsp-mode) from melpa
|
|
||||||
- [zig mode](https://github.com/ziglang/zig-mode) is also useful
|
- Install [lsp-mode](https://github.com/emacs-lsp/lsp-mode) from melpa
|
||||||
|
- [zig mode](https://github.com/ziglang/zig-mode) is also useful
|
||||||
```elisp
|
|
||||||
;; Setup lsp-mode as desired.
|
```elisp
|
||||||
;; See https://emacs-lsp.github.io/lsp-mode/page/installation/ for more information.
|
;; Setup lsp-mode as desired.
|
||||||
(require 'lsp-mode)
|
;; See https://emacs-lsp.github.io/lsp-mode/page/installation/ for more information.
|
||||||
|
(require 'lsp-mode)
|
||||||
;; Either place zls in your PATH or add the following:
|
|
||||||
(setq lsp-zig-zls-executable "<path to zls>")
|
;; Either place zls in your PATH or add the following:
|
||||||
```
|
(setq lsp-zig-zls-executable "<path to zls>")
|
||||||
|
```
|
||||||
### Doom Emacs
|
|
||||||
|
### Doom Emacs
|
||||||
- Enable the `lsp` module
|
|
||||||
- Install the [zig-mode](https://github.com/ziglang/zig-mode) package (add `(package! zig-mode)` to your `packages.el` file
|
- Enable the `lsp` module
|
||||||
|
- Install the [zig-mode](https://github.com/ziglang/zig-mode) package (add `(package! zig-mode)` to your `packages.el` file
|
||||||
```elisp
|
|
||||||
(use-package! zig-mode
|
```elisp
|
||||||
:hook ((zig-mode . lsp-deferred))
|
(use-package! zig-mode
|
||||||
:custom (zig-format-on-save nil)
|
:hook ((zig-mode . lsp-deferred))
|
||||||
:config
|
:custom (zig-format-on-save nil)
|
||||||
(after! lsp-mode
|
:config
|
||||||
(add-to-list 'lsp-language-id-configuration '(zig-mode . "zig"))
|
(after! lsp-mode
|
||||||
(lsp-register-client
|
(add-to-list 'lsp-language-id-configuration '(zig-mode . "zig"))
|
||||||
(make-lsp-client
|
(lsp-register-client
|
||||||
:new-connection (lsp-stdio-connection "<path to zls>")
|
(make-lsp-client
|
||||||
:major-modes '(zig-mode)
|
:new-connection (lsp-stdio-connection "<path to zls>")
|
||||||
:server-id 'zls))))
|
:major-modes '(zig-mode)
|
||||||
```
|
:server-id 'zls))))
|
||||||
|
```
|
||||||
## Related Projects
|
|
||||||
|
## Related Projects
|
||||||
- [`sublime-zig-language` by @prime31](https://github.com/prime31/sublime-zig-language)
|
|
||||||
- Supports basic language features
|
- [`sublime-zig-language` by @prime31](https://github.com/prime31/sublime-zig-language)
|
||||||
- Uses data provided by `src/data` to perform builtin autocompletion
|
- Supports basic language features
|
||||||
- [`zig-lsp` by @xackus](https://github.com/xackus/zig-lsp)
|
- Uses data provided by `src/data` to perform builtin autocompletion
|
||||||
- Inspiration for `zls`
|
- [`zig-lsp` by @xackus](https://github.com/xackus/zig-lsp)
|
||||||
- [`known-folders` by @ziglibs](https://github.com/ziglibs/known-folders)
|
- Inspiration for `zls`
|
||||||
- Provides API to access known folders on Linux, Windows and Mac OS
|
- [`known-folders` by @ziglibs](https://github.com/ziglibs/known-folders)
|
||||||
|
- Provides API to access known folders on Linux, Windows and Mac OS
|
||||||
## License
|
|
||||||
|
## License
|
||||||
MIT
|
|
||||||
|
MIT
|
||||||
|
Loading…
Reference in New Issue
Block a user