aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2025-11-14 01:21:55 -0500
committerGitHub <noreply@github.com>2025-11-14 01:21:55 -0500
commit363081b3ad3d670f1b5ba69354a74f53b2ef3038 (patch)
tree9c19e3a62dee7a73a302bd0b7cb5bae7c24a1b4d
parentfix(angularls): reference to invalid field #4184 (diff)
parentfix: luals warnings (diff)
downloadnvim-lspconfig-363081b3ad3d670f1b5ba69354a74f53b2ef3038.tar
nvim-lspconfig-363081b3ad3d670f1b5ba69354a74f53b2ef3038.tar.gz
nvim-lspconfig-363081b3ad3d670f1b5ba69354a74f53b2ef3038.tar.bz2
nvim-lspconfig-363081b3ad3d670f1b5ba69354a74f53b2ef3038.tar.lz
nvim-lspconfig-363081b3ad3d670f1b5ba69354a74f53b2ef3038.tar.xz
nvim-lspconfig-363081b3ad3d670f1b5ba69354a74f53b2ef3038.tar.zst
nvim-lspconfig-363081b3ad3d670f1b5ba69354a74f53b2ef3038.zip
Merge #4185 ci: luals check
-rw-r--r--.emmyrc.json30
-rw-r--r--.github/workflows/lint.yml26
-rw-r--r--.luacheckrc15
-rw-r--r--.luarc.json6
-rw-r--r--Makefile6
-rw-r--r--flake.nix2
-rw-r--r--lsp/apex_ls.lua2
-rw-r--r--lsp/arduino_language_server.lua2
-rw-r--r--lsp/autohotkey_lsp.lua1
-rw-r--r--lsp/basedpyright.lua2
-rw-r--r--lsp/denols.lua1
-rw-r--r--lsp/ds_pinyin_lsp.lua2
-rw-r--r--lsp/eslint.lua3
-rw-r--r--lsp/glint.lua1
-rw-r--r--lsp/julials.lua1
-rw-r--r--lsp/kotlin_language_server.lua2
-rw-r--r--lsp/lua_ls.lua1
-rw-r--r--lsp/pyright.lua4
-rw-r--r--lsp/roslyn_ls.lua5
-rw-r--r--lsp/smarty_ls.lua2
-rw-r--r--lsp/svelte.lua1
-rw-r--r--lsp/ts_ls.lua10
-rw-r--r--selene.toml7
23 files changed, 83 insertions, 49 deletions
diff --git a/.emmyrc.json b/.emmyrc.json
new file mode 100644
index 00000000..d5678fdb
--- /dev/null
+++ b/.emmyrc.json
@@ -0,0 +1,30 @@
+{
+ "$schema": "https://raw.githubusercontent.com/EmmyLuaLs/emmylua-analyzer-rust/refs/heads/main/crates/emmylua_code_analysis/resources/schema.json",
+ "runtime": {
+ "version": "LuaJIT"
+ },
+ "diagnostics" : {
+ "disable" : [
+ "unnecessary-if"
+ ],
+ "enables": [
+ "iter-variable-reassign",
+ "non-literal-expressions-in-assert",
+ "incomplete-signature-doc",
+ "missing-global-doc"
+ ]
+ },
+ "strict": {
+ "typeCall": true,
+ "arrayIndex": true
+ },
+ "codeAction": {
+ "insertSpace": true
+ },
+ "workspace": {
+ "ignoreDir": [
+ "lspconfig/lua/",
+ "deps"
+ ]
+ }
+}
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index f80ce4cc..479a9276 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -21,22 +21,26 @@ jobs:
exit 1
fi
- luacheck:
+ luals:
runs-on: ubuntu-latest
+ env:
+ LUALS_VERSION: 3.15.0
steps:
- uses: actions/checkout@v5
- - uses: lunarmodules/luacheck@v1
+ - uses: rhysd/action-setup-vim@v1
with:
- args: lua/* test/*
+ neovim: true
+ version: nightly # Remove this to use stable.
+ - name: Install lua-language-server
+ run: |
+ mkdir -p build/luals
+ curl -L -o build/luals.tar.gz https://github.com/LuaLS/lua-language-server/releases/download/${LUALS_VERSION}/lua-language-server-${LUALS_VERSION}-linux-x64.tar.gz
+ tar -xzf build/luals.tar.gz -C build/luals
+ - name: Run luals
+ run: |
+ export VIMRUNTIME="$(nvim --headless --cmd 'echo $VIMRUNTIME' +q 2>&1)"
+ ./build/luals/bin/lua-language-server --configpath=$(pwd)/.luarc.json --check=lsp/ --checklevel=Hint
- selene:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v5
- - uses: NTBBloodbath/selene-action@v1.0.0
- with:
- token: ${{ secrets.GITHUB_TOKEN }}
- args: --display-style=quiet .
stylua:
runs-on: ubuntu-latest
diff --git a/.luacheckrc b/.luacheckrc
deleted file mode 100644
index ac6af148..00000000
--- a/.luacheckrc
+++ /dev/null
@@ -1,15 +0,0 @@
--- vim: ft=lua tw=80
-
--- Rerun tests only if their modification time changed.
-cache = true
-
-ignore = {
- "122", -- Setting a read-only field of a global variable.
- "212", -- Unused argument, In the case of callback function, _arg_name is easier to understand than _, so this option is set to off.
- "631", -- max_line_length, vscode pkg URL is too long
-}
-
--- Global objects defined by the C code
-read_globals = {
- "vim",
-}
diff --git a/.luarc.json b/.luarc.json
index 2aa780f6..ca279bae 100644
--- a/.luarc.json
+++ b/.luarc.json
@@ -1,5 +1,11 @@
{
"$schema": "https://raw.githubusercontent.com/LuaLS/vscode-lua/master/setting/schema.json",
+ "diagnostics" : {
+ "disable" : [
+ "inject-field",
+ "undefined-global"
+ ]
+ },
"runtime": {
"version": "LuaJIT"
},
diff --git a/Makefile b/Makefile
index af2557f1..3e05b8c7 100644
--- a/Makefile
+++ b/Makefile
@@ -2,11 +2,9 @@ test:
vusted ./test
lint:
- @printf "\nRunning luacheck\n"
- luacheck -q lua/* test/*
- @printf "\nRunning selene\n"
- selene --display-style=quiet .
@printf "\nRunning stylua\n"
stylua --check .
+ @printf "\nRunning emmylua\n"
+ emmylua_check .
.PHONY: test lint
diff --git a/flake.nix b/flake.nix
index 04681a1c..77fc8778 100644
--- a/flake.nix
+++ b/flake.nix
@@ -13,9 +13,7 @@
default = pkgs.mkShell {
packages = [
pkgs.stylua
- pkgs.luaPackages.luacheck
pkgs.luajitPackages.vusted
- pkgs.selene
];
};
});
diff --git a/lsp/apex_ls.lua b/lsp/apex_ls.lua
index 01616c9e..7052c192 100644
--- a/lsp/apex_ls.lua
+++ b/lsp/apex_ls.lua
@@ -36,6 +36,7 @@
---@type vim.lsp.Config
return {
cmd = function(dispatchers, config)
+ ---@diagnostic disable: undefined-field
local local_cmd = {
vim.env.JAVA_HOME and (vim.env.JAVA_HOME .. '/bin/java') or 'java',
'-cp',
@@ -48,6 +49,7 @@ return {
if config.apex_jvm_max_heap then
table.insert(local_cmd, '-Xmx' .. config.apex_jvm_max_heap)
end
+ ---@diagnostic enable: undefined-field
table.insert(local_cmd, 'apex.jorje.lsp.ApexLanguageServerLauncher')
return vim.lsp.rpc.start(local_cmd, dispatchers)
diff --git a/lsp/arduino_language_server.lua b/lsp/arduino_language_server.lua
index 0feccd56..769a9173 100644
--- a/lsp/arduino_language_server.lua
+++ b/lsp/arduino_language_server.lua
@@ -82,9 +82,11 @@ return {
},
capabilities = {
textDocument = {
+ ---@diagnostic disable-next-line: assign-type-mismatch
semanticTokens = vim.NIL,
},
workspace = {
+ ---@diagnostic disable-next-line: assign-type-mismatch
semanticTokens = vim.NIL,
},
},
diff --git a/lsp/autohotkey_lsp.lua b/lsp/autohotkey_lsp.lua
index cb92330b..fe11d153 100644
--- a/lsp/autohotkey_lsp.lua
+++ b/lsp/autohotkey_lsp.lua
@@ -16,6 +16,7 @@ return {
cmd = { 'autohotkey_lsp', '--stdio' },
filetypes = { 'autohotkey' },
root_markers = { 'package.json' },
+ ---@diagnostic disable-next-line: missing-fields
flags = { debounce_text_changes = 500 },
--capabilities = capabilities,
--on_attach = custom_attach,
diff --git a/lsp/basedpyright.lua b/lsp/basedpyright.lua
index 0dcaaa3b..8ae1a06b 100644
--- a/lsp/basedpyright.lua
+++ b/lsp/basedpyright.lua
@@ -12,6 +12,7 @@ local function set_python_path(command)
}
for _, client in ipairs(clients) do
if client.settings then
+ ---@diagnostic disable-next-line: param-type-mismatch
client.settings.python = vim.tbl_deep_extend('force', client.settings.python or {}, { pythonPath = path })
else
client.config.settings = vim.tbl_deep_extend('force', client.config.settings, { python = { pythonPath = path } })
@@ -52,6 +53,7 @@ return {
-- Using client.request() directly because "basedpyright.organizeimports" is private
-- (not advertised via capabilities), which client:exec_cmd() refuses to call.
-- https://github.com/neovim/neovim/blob/c333d64663d3b6e0dd9aa440e433d346af4a3d81/runtime/lua/vim/lsp/client.lua#L1024-L1030
+ ---@diagnostic disable-next-line: param-type-mismatch
client.request('workspace/executeCommand', params, nil, bufnr)
end, {
desc = 'Organize Imports',
diff --git a/lsp/denols.lua b/lsp/denols.lua
index 8c051fbf..a55aa87a 100644
--- a/lsp/denols.lua
+++ b/lsp/denols.lua
@@ -96,6 +96,7 @@ return {
on_attach = function(client, bufnr)
vim.api.nvim_buf_create_user_command(bufnr, 'LspDenolsCache', function()
client:exec_cmd({
+ title = 'DenolsCache',
command = 'deno.cache',
arguments = { {}, vim.uri_from_bufnr(bufnr) },
}, { bufnr = bufnr }, function(err, _, ctx)
diff --git a/lsp/ds_pinyin_lsp.lua b/lsp/ds_pinyin_lsp.lua
index 68a99faa..84bf67e9 100644
--- a/lsp/ds_pinyin_lsp.lua
+++ b/lsp/ds_pinyin_lsp.lua
@@ -23,6 +23,7 @@ end
local function ds_pinyin_lsp_off(bufnr)
local ds_pinyin_lsp_client = vim.lsp.get_clients({ bufnr = bufnr, name = 'ds_pinyin_lsp' })[1]
if ds_pinyin_lsp_client then
+ ---@diagnostic disable-next-line: param-type-mismatch
ds_pinyin_lsp_client:notify('$/turn/completion', {
['completion_on'] = false,
})
@@ -34,6 +35,7 @@ end
local function ds_pinyin_lsp_on(bufnr)
local ds_pinyin_lsp_client = vim.lsp.get_clients({ bufnr = bufnr, name = 'ds_pinyin_lsp' })[1]
if ds_pinyin_lsp_client then
+ ---@diagnostic disable-next-line: param-type-mismatch
ds_pinyin_lsp_client:notify('$/turn/completion', {
['completion_on'] = true,
})
diff --git a/lsp/eslint.lua b/lsp/eslint.lua
index c200adc1..593d602a 100644
--- a/lsp/eslint.lua
+++ b/lsp/eslint.lua
@@ -128,6 +128,7 @@ return {
-- Refer to https://github.com/Microsoft/vscode-eslint#settings-options for documentation.
settings = {
validate = 'on',
+ ---@diagnostic disable-next-line: assign-type-mismatch
packageManager = nil,
useESLintClass = false,
experimental = {
@@ -202,7 +203,7 @@ return {
local pnp_js = root_dir .. '/.pnp.js'
if vim.uv.fs_stat(pnp_cjs) or vim.uv.fs_stat(pnp_js) then
local cmd = config.cmd
- config.cmd = vim.list_extend({ 'yarn', 'exec' }, cmd)
+ config.cmd = vim.list_extend({ 'yarn', 'exec' }, type(cmd) == 'table' and cmd or {})
end
end
end,
diff --git a/lsp/glint.lua b/lsp/glint.lua
index 7da94146..4485a85c 100644
--- a/lsp/glint.lua
+++ b/lsp/glint.lua
@@ -25,6 +25,7 @@
---@type vim.lsp.Config
return {
cmd = function(dispatchers, config)
+ ---@diagnostic disable-next-line: undefined-field
local cmd = (config.init_options.glint.useGlobal or not config.root_dir) and { 'glint-language-server' }
or { config.root_dir .. '/node_modules/.bin/glint-language-server' }
return vim.lsp.rpc.start(cmd, dispatchers)
diff --git a/lsp/julials.lua b/lsp/julials.lua
index a31ac1cc..a181bfb3 100644
--- a/lsp/julials.lua
+++ b/lsp/julials.lua
@@ -36,6 +36,7 @@ local function activate_env(path)
local function _activate_env(environment)
if environment then
for _, julials_client in ipairs(julials_clients) do
+ ---@diagnostic disable-next-line: param-type-mismatch
julials_client:notify('julia/activateenvironment', { envPath = environment })
end
vim.notify('Julia environment activated: \n`' .. environment .. '`', vim.log.levels.INFO)
diff --git a/lsp/kotlin_language_server.lua b/lsp/kotlin_language_server.lua
index b5446e2e..ee18f32a 100644
--- a/lsp/kotlin_language_server.lua
+++ b/lsp/kotlin_language_server.lua
@@ -37,6 +37,6 @@ return {
cmd = { 'kotlin-language-server' },
init_options = {
-- Enables caching and use project root to store cache data.
- storagePath = vim.fs.root(vim.fn.expand '%:p:h', root_files),
+ storagePath = vim.fs.root(vim.fn.expand '%:p:h', root_files) --[[@as string]],
},
}
diff --git a/lsp/lua_ls.lua b/lsp/lua_ls.lua
index 85bd8846..9b159ef7 100644
--- a/lsp/lua_ls.lua
+++ b/lsp/lua_ls.lua
@@ -73,6 +73,7 @@ return {
cmd = { 'lua-language-server' },
filetypes = { 'lua' },
root_markers = {
+ '.emmyrc.json',
'.luarc.json',
'.luarc.jsonc',
'.luacheckrc',
diff --git a/lsp/pyright.lua b/lsp/pyright.lua
index b67afffd..b73407c2 100644
--- a/lsp/pyright.lua
+++ b/lsp/pyright.lua
@@ -12,7 +12,8 @@ local function set_python_path(command)
}
for _, client in ipairs(clients) do
if client.settings then
- client.settings.python = vim.tbl_deep_extend('force', client.settings.python, { pythonPath = path })
+ client.settings.python =
+ vim.tbl_deep_extend('force', client.settings.python --[[@as table]], { pythonPath = path })
else
client.config.settings = vim.tbl_deep_extend('force', client.config.settings, { python = { pythonPath = path } })
end
@@ -52,6 +53,7 @@ return {
-- Using client.request() directly because "pyright.organizeimports" is private
-- (not advertised via capabilities), which client:exec_cmd() refuses to call.
-- https://github.com/neovim/neovim/blob/c333d64663d3b6e0dd9aa440e433d346af4a3d81/runtime/lua/vim/lsp/client.lua#L1024-L1030
+ ---@diagnostic disable-next-line: param-type-mismatch
client.request('workspace/executeCommand', params, nil, bufnr)
end, {
desc = 'Organize Imports',
diff --git a/lsp/roslyn_ls.lua b/lsp/roslyn_ls.lua
index e332443f..6aa3e759 100644
--- a/lsp/roslyn_ls.lua
+++ b/lsp/roslyn_ls.lua
@@ -48,8 +48,7 @@ end
---@param client vim.lsp.Client
local function refresh_diagnostics(client)
- local buffers = vim.lsp.get_buffers_by_client_id(client.id)
- for _, buf in ipairs(buffers) do
+ for buf, _ in pairs(vim.lsp.get_client_by_id(client.id).attached_buffers) do
if vim.api.nvim_buf_is_loaded(buf) then
client:request(
vim.lsp.protocol.Methods.textDocument_diagnostic,
@@ -118,6 +117,7 @@ return {
local args = command.arguments or {}
local uri, edit = args[1], args[2]
+ ---@diagnostic disable: undefined-field
if uri and edit and edit.newText and edit.range then
local workspace_edit = {
changes = {
@@ -130,6 +130,7 @@ return {
},
}
vim.lsp.util.apply_workspace_edit(workspace_edit, client.offset_encoding)
+ ---@diagnostic enable: undefined-field
else
vim.notify('roslyn_ls: completionComplexEdit args not understood: ' .. vim.inspect(args), vim.log.levels.WARN)
end
diff --git a/lsp/smarty_ls.lua b/lsp/smarty_ls.lua
index ab7012f3..26ddba76 100644
--- a/lsp/smarty_ls.lua
+++ b/lsp/smarty_ls.lua
@@ -31,6 +31,6 @@ return {
},
},
init_options = {
- storageDir = nil,
+ storageDir = vim.NIL,
},
}
diff --git a/lsp/svelte.lua b/lsp/svelte.lua
index 53f3e73e..bf562365 100644
--- a/lsp/svelte.lua
+++ b/lsp/svelte.lua
@@ -33,6 +33,7 @@ return {
group = vim.api.nvim_create_augroup('lspconfig.svelte', {}),
callback = function(ctx)
-- internal API to sync changes that have not yet been saved to the file system
+ ---@diagnostic disable-next-line: param-type-mismatch
client:notify('$/onDidChangeTsOrJsFile', { uri = ctx.match })
end,
})
diff --git a/lsp/ts_ls.lua b/lsp/ts_ls.lua
index a47039e6..8b77c6a5 100644
--- a/lsp/ts_ls.lua
+++ b/lsp/ts_ls.lua
@@ -93,7 +93,7 @@ return {
local client = assert(vim.lsp.get_client_by_id(ctx.client_id))
local file_uri, position, references = unpack(command.arguments)
- local quickfix_items = vim.lsp.util.locations_to_items(references, client.offset_encoding)
+ local quickfix_items = vim.lsp.util.locations_to_items(references --[[@as any]], client.offset_encoding)
vim.fn.setqflist({}, ' ', {
title = command.title,
items = quickfix_items,
@@ -104,12 +104,13 @@ return {
})
vim.lsp.util.show_document({
- uri = file_uri,
+ uri = file_uri --[[@as string]],
range = {
- start = position,
- ['end'] = position,
+ start = position --[[@as lsp.Position]],
+ ['end'] = position --[[@as lsp.Position]],
},
}, client.offset_encoding)
+ ---@diagnostic enable: assign-type-mismatch
vim.cmd('botright copen')
end,
@@ -125,6 +126,7 @@ return {
vim.lsp.buf.code_action({
context = {
only = source_actions,
+ diagnostics = {},
},
})
end, {})
diff --git a/selene.toml b/selene.toml
deleted file mode 100644
index 08829537..00000000
--- a/selene.toml
+++ /dev/null
@@ -1,7 +0,0 @@
-std = "neovim"
-
-[rules]
-global_usage = "allow"
-multiple_statements = "allow"
-incorrect_standard_library_use = "allow"
-mixed_table = "allow"