A luau-lsp extension to improve your experience in neovim.
demo.mp4
{
"lopi-py/luau-lsp.nvim",
opts = {
...
},
dependencies = {
"nvim-lua/plenary.nvim",
},
}
use {
"lopi-py/luau-lsp.nvim",
config = function()
require("luau-lsp").setup {
...
}
end,
requires = {
"nvim-lua/plenary.nvim",
},
}
Caution
Calling lspconfig's setup may result in problems where the server is not properly set up
require("lspconfig").luau_lsp.setup { ... }
Use luau-lsp.nvim
's setup instead
require("luau-lsp").setup { ... }
require("mason-lspconfig").setup_handlers {
luau_lsp = function()
require("luau-lsp").setup {
...
}
end,
}
Roblox types and sourcemap generation are supported:
require("luau-lsp").setup {
sourcemap = {
enabled = true,
autogenerate = true, -- automatic generation when the server is attached
rojo_project_file = "default.project.json"
},
types = {
roblox = true,
roblox_security_level = "PluginSecurity",
},
}
:LuauRegenerateSourcemap
is provided to start sourcemap generation with the project file passed as argument or the one configured in sourcemap.rojo_project_file
, will stop the current job and start a new one if required.
require("luau-lsp").setup {
types = {
definition_files = { "path/to/definitions/file" },
documentation_files = { "path/to/documentation/file" },
},
}
require("luau-lsp").setup {
fflags = {
sync = true, -- sync currently enabled fflags with roblox's published fflags
override = {
LuauTarjanChildLimit = 0,
},
},
}
:LuauBytecode
and :LuauCompilerRemarks
open a new window and show the current Luau file bytecode and compiler remarks. It will automatically update if you change the file or edit it. Close with q
.
bytecode.mp4
require("luau-lsp").setup {
server = {
settings = {
-- https://github.com/folke/neoconf.nvim/blob/main/schemas/luau_lsp.json
["luau-lsp"] = {
completion = {
imports = {
enabled = true, -- enable auto imports
},
},
},
},
},
}
It is allowed to config a project with :h 'exrc'
vim.o.exrc = true
-- .nvim.lua
require("luau-lsp").config {
...
}
luau-lsp.nvim
comes with the following defaults:
---@class LuauLspConfig
local defaults = {
sourcemap = {
enabled = true,
autogenerate = true,
rojo_path = "rojo",
rojo_project_file = "default.project.json",
include_non_scripts = true,
},
types = {
---@type string[]
definition_files = {},
---@type string[]
documentation_files = {},
roblox = true,
roblox_security_level = "PluginSecurity",
},
fflags = {
enable_by_default = false,
sync = true,
---@type table<string, "True"|"False"|number>
override = {},
},
---@type table<string, any>
server = {
cmd = { "luau-lsp", "lsp" },
root_dir = function(path)
local compat = require "luau-lsp.compat"
return vim.fs.dirname(vim.fs.find(function(name)
return name:match ".*%.project.json$"
or compat.list_contains({
".git",
".luaurc",
".stylua.toml",
"stylua.toml",
"selene.toml",
"selene.yml",
}, name)
end, {
upward = true,
path = path,
})[1])
end,
-- see https://github.com/folke/neoconf.nvim/blob/main/schemas/luau_lsp.json
settings = {},
},
}
Don't lazy load the plugin if you are on neovim v0.9.x
Make sure to pass the client capabilities in the server settings
local capabilities = vim.lsp.procotol.make_client_capabilities()
require("luau-lsp").setup {
server = {
capabilities = capabilities,
},
}
If you are using nvim-cmp, check this guide
Neovim is asking for diagnostics to the server but it hasn't loaded the configuration yet, you can just ignore this error. This is monkey patched but may not work on v0.9.x
Try installing the luau
treesitter parser (:TSInstall luau
)
Enable :help 'exrc'
and add this into .nvim.lua
:
vim.filetype.add {
extension = {
lua = function(path)
return path:match ".nvim.lua$" and "lua" or "luau"
end,
},
}