Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

Swap Params codeAction breaks code

Offen
#3,413 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Anfängerfreundlichkeit
68/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Ruhig
Tech-Stack
lua, neovim
Bereich
devtools, tooling

Rechercherichtung

Beginne damit, das Problem in NeoVim mit beim Speichern ausgelösten Codeaktionen anhand des Positionsargument-Beispiels aus dem Bericht zu reproduzieren. Untersuche dann script/core/code-action.lua im Bereich um Zeile 462 und verfolge die „Swap Params“-Änderung; erledigt ist die Aufgabe, wenn das Beispiel nach der Ausführung der Codeaktion unverändert bleibt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

How are you using the lua-language-server?

NeoVim

Which OS are you using?

MacOS

What is the issue affecting?

Formatting

Expected Behaviour

Write lua code in neovim with codeActions triggered on buffer save. The lua code looks like the following:

vim.api.nvim_create_autocmd('BufWritePre', {})

and save, it will remain unchanged.

Actual Behaviour

It changes the code to the following:

vim.api.nvim_create_autocmd({}, 'BufWritePre')
Reproduction steps
  1. Install lua-language-server
  2. Setup lua lsp in neovim (can expand if needed)
  3. Add the following autocmd to run codeactions on save
vim.api.nvim_create_autocmd('BufWritePre', {
	group = vim.api.nvim_create_augroup('auto-format', { clear = false }),
	buffer = ev.buf,
	callback = function(evt)
		local params = vim.lsp.util.make_range_params()
		params.context = { }
		local result = vim.lsp.buf_request_sync(evt.buf, "textDocument/codeAction", params)
		for _, res in pairs(result or {}) do
			for _, r in pairs(res.result or {}) do
				if r.edit then
					local enc = client.offset_encoding or "utf-16"
					vim.lsp.util.apply_workspace_edit(r.edit, enc)
				end
			end
		end

		vim.lsp.buf.format({ bufnr = ev.buf, id = client.id, timeout_ms = 1000, async = false })
	end,
})
  1. Write some lua code and save that lua code with the cursor still on the same line.
Additional Notes

I was editing my neovim config and the lsp kept switching params like the following:

vim.api.nvim_create_autocmd('BufWritePre', {})

And after my PreWrite autocmd calls codeActions

vim.api.nvim_create_autocmd({}, 'BufWritePre')

which immediately breaks the code because the params are position sensitive.

It only does this if the cursor is on the line of the method call which I suppose makes sense since the code action is called with a range. My full autocmd works like this:

vim.api.nvim_create_autocmd('BufWritePre', {
	group = vim.api.nvim_create_augroup('auto-format', { clear = false }),
	buffer = ev.buf,
	callback = function(evt)
		local params = vim.lsp.util.make_range_params()
		params.context = { }
		local result = vim.lsp.buf_request_sync(evt.buf, "textDocument/codeAction", params)
		for _, res in pairs(result or {}) do
			for _, r in pairs(res.result or {}) do
				if r.edit then
					local enc = client.offset_encoding or "utf-16"
					vim.lsp.util.apply_workspace_edit(r.edit, enc)
				end
			end
		end

		vim.lsp.buf.format({ bufnr = ev.buf, id = client.id, timeout_ms = 1000, async = false })
	end,
})

I narrowed it down to this code action here https://github.com/LuaLS/lua-language-server/blob/b5e57c36a9a27b89eb283861fb8946fa787e37d8/script/core/code-action.lua#L462

Maybe I am holding it wrong and it is not supposed to be used in this way but I don't have a problem with other LSPs.

Log File

No log entry was added during this behaviour.

Vorherrschende Sprache
Lua
Sterne
4.4k
Forks
442
Ø Merge
8 T. 9 Std.
Gemergte PRs (30 T.)
1

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus LuaLS/lua-language-server

Alle Issues in LuaLS/lua-language-server

Ähnliche Issues

Weitere Issues zu Lua

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.