-
-
Notifications
You must be signed in to change notification settings - Fork 326
Configuration File
⚠️ WarningThis wiki has been replaced by the wiki on our website. This wiki will be removed in the future.
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:
- The file specified by
--configpath
- A
.luarc.json
file in the workspace - The configuration file sent from the LSP client (like from VS Code)
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"
}
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:
OS | Path |
---|---|
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.
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
}
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
}
}
Each client may handle the configuration file differently, below are some examples of how to get going with other clients.
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 system
settings = {
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
- Execute
:CocConfig;
- A JSON file will open
- 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.
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
}
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"
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