Added build artifact uploads to the github actions CI and removed duplicate READMEs (#300)

This commit is contained in:
Alexandros Naskos 2021-04-05 06:58:52 -07:00 committed by GitHub
parent 902c91e98f
commit 6a5664e018
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 306 additions and 558 deletions

279
.github/README.md vendored
View File

@ -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

View File

@ -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
View File

@ -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