diff options
| author | Justin M. Keyes <justinkz@gmail.com> | 2025-11-14 01:21:55 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-11-14 01:21:55 -0500 |
| commit | 363081b3ad3d670f1b5ba69354a74f53b2ef3038 (patch) | |
| tree | 9c19e3a62dee7a73a302bd0b7cb5bae7c24a1b4d | |
| parent | fix(angularls): reference to invalid field #4184 (diff) | |
| parent | fix: luals warnings (diff) | |
| download | nvim-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.json | 30 | ||||
| -rw-r--r-- | .github/workflows/lint.yml | 26 | ||||
| -rw-r--r-- | .luacheckrc | 15 | ||||
| -rw-r--r-- | .luarc.json | 6 | ||||
| -rw-r--r-- | Makefile | 6 | ||||
| -rw-r--r-- | flake.nix | 2 | ||||
| -rw-r--r-- | lsp/apex_ls.lua | 2 | ||||
| -rw-r--r-- | lsp/arduino_language_server.lua | 2 | ||||
| -rw-r--r-- | lsp/autohotkey_lsp.lua | 1 | ||||
| -rw-r--r-- | lsp/basedpyright.lua | 2 | ||||
| -rw-r--r-- | lsp/denols.lua | 1 | ||||
| -rw-r--r-- | lsp/ds_pinyin_lsp.lua | 2 | ||||
| -rw-r--r-- | lsp/eslint.lua | 3 | ||||
| -rw-r--r-- | lsp/glint.lua | 1 | ||||
| -rw-r--r-- | lsp/julials.lua | 1 | ||||
| -rw-r--r-- | lsp/kotlin_language_server.lua | 2 | ||||
| -rw-r--r-- | lsp/lua_ls.lua | 1 | ||||
| -rw-r--r-- | lsp/pyright.lua | 4 | ||||
| -rw-r--r-- | lsp/roslyn_ls.lua | 5 | ||||
| -rw-r--r-- | lsp/smarty_ls.lua | 2 | ||||
| -rw-r--r-- | lsp/svelte.lua | 1 | ||||
| -rw-r--r-- | lsp/ts_ls.lua | 10 | ||||
| -rw-r--r-- | selene.toml | 7 |
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" }, @@ -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 @@ -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" |
