Skip to content

Configuration File

carsakiller edited this page Aug 10, 2023 · 7 revisions

⚠️Warning

This wiki has been replaced by the wiki on our website. This wiki will be removed in the future.

The Configuration File

There are multiple ways to provide a configuration file to customize how the language server operates. A full list of the available configuration settings can be found on the settings page.

The server loads its settings from one of the following sources, in order of priority:

  1. The file specified by --configpath
  2. A .luarc.json file in the workspace
  3. The configuration file sent from the LSP client (like from VS Code)

JSON Schema

A JSON schema is available in multiple languages to help make the creation of a JSON configuration file easier.

In VS Code, this schema is already injected into .vscode/settings.json and .luarc.json but for other editors where this is not the case, it can be added manually by adding the following to the start of your JSON file:

{
"$schema": "https://raw.githubusercontent.com/sumneko/vscode-lua/master/setting/schema.json"
}

Visual Studio Code

In Visual Studio Code, you can use the settings UI or write directly to the settings.json file. You can also use a .luarc.json file.

The settings.json file can be found in the following OS-dependent locations:

OSPath
Windows%APPDATA%\Code\User\settings.json
Linux$HOME/.config/Code/User/settings.json
MacOS$HOME/Library/Application\ Support/Code/User/settings.json

You can also define your settings on a workspace-specific basis, which can help improve speeds and is recommended for project-specific settings.

For more details, read the VS Code documentation.

.luarc.json

A .luarc.json file can be added to your workspace to apply a certain configuration to the server. This file must be written in JSON and can use the same JSON schema and settings as the other configuration files - which is highly recommended.

Note: The Lua. prefix for settings is not necessary in a .luarc.json file!

Here is a basic example of a .luarc.json file:

{
"workspace.library": ["path/to/library/directory"],
"runtime.version": "Lua 5.3",
"hint.enable": false
}

Custom Config File

If you want to use your own custom configuration file, with whatever name you please, that is also an option - although it must be written in Lua or JSON.

This file can then be loaded by using the --configpath flag.

If writing the file in Lua, the configuration file can consist of nested tables;

return {
Lua= {
runtime= {
version="Lua 5.1"
}
}
}

keys;

return {
["Lua.runtime.version"] ="Lua 5.1"
}

or even a combination of both!

return {
Lua= {
runtime= {
version="Lua 5.1"
},
["completion.enable"] =false
}
}

Other Clients

Each client may handle the configuration file differently, below are some examples of how to get going with other clients.

Neovim with built-in LSP client

This guide assumes that you are already familiar with how the built-in client works.

Settings are defined as a nested Lua table, like so:

require'lspconfig'.sumneko_lua.setup {
settings= {
-- Settings go here!
}
}

Because the settings must be a nested table, this means when you see "Lua.runtime.version": "5.3" in the JSON schema, you must write:

Lua= {
runtime= {
version="Lua 5.1"
}
}

Here is an example configuration file that can be used when writing standalone Lua scripts with luarocks libraries:

-- You will have to adjust your values according to your systemsettings= {
Lua= {
runtime= {
version='Lua 5.3',
path= {
'?.lua',
'?/init.lua',
vim.fn.expand'~/.luarocks/share/lua/5.3/?.lua',
vim.fn.expand'~/.luarocks/share/lua/5.3/?/init.lua',
'/usr/share/5.3/?.lua',
'/usr/share/lua/5.3/?/init.lua'
}
},
workspace= {
library= {
vim.fn.expand'~/.luarocks/share/lua/5.3',
'/usr/share/lua/5.3'
}
}
}
}

ℹ️ Notice that we are able to execute Lua like vim.fn.expand to dynamically build the correct value.

Neovim with coc.nvim

Thanks to gustavo-hms

  1. Execute :CocConfig;
  2. A JSON file will open
  3. Write your settings in the opened JSON file
Example
{
// ... many unrelated options here ..."languageserver": {
"lua": {
"cwd": "full path of lua-language-server directory", // (not sure this one is really necessary)"command": "full path to lua-language-server executable",
"filetypes": ["lua"],
"rootPatterns": [".git/"]
}
},
"settings": {
"Lua": {
"workspace": {
"library": [
"/path/to/hammerspoon-completion/build/stubs",
"/path/to/neovim/runtime/lua"
],
"maxPreload": 2000,
"preloadFileSize": 1000
},
"runtime": {
"version": "Lua 5.4"
},
"diagnostics": {
"enable": true,
"globals": ["hs", "vim", "it", "describe", "before_each", "after_each"],
"disable": ["lowercase-global"]
},
"completion": {
"keywordSnippet": "Disable"
}
}
}
}

Make sure you have kak-lsp installed.

Installation

If using plug.kak, place the following in your kakrc:

plug "kak-lsp/kak-lsp" do %{ cargo install --locked --force --path . }

If running standalone, place the kak-lsp binary on your PATH and then place the following in your kakrc:

evaluate-commands %sh{
kak-lsp --kakoune -s $kak_session
}

Initialization

Place the following in your kakrc:

# Enable kak-lsp for Lua files
hook global WinSetOption filetype=lua %{
lsp-enable-window
}
# Close kak-lsp when kakoune is terminated
hook global KakEnd .* lsp-exit

And the below in your kak-lsp.toml to inform it of the existence of the language server:

[language.lua]
filetypes = ["lua"]
roots = [".git/"]
command = "lua-language-server"

Configuration

To define server settings, place them under [language.lua.settings] in your kak-lsp.toml:

[language.lua.settings]
Lua.diagnostics.severity = { undefined-global = "Error" }
Lua.runtime.version = "Lua 5.2"Lua.telemetry.enable = false

Clone this wiki locally