Swap Params codeAction breaks code

Abierto
#3,413 1 comentario 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
68/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Tranquilo
Stack tecnológico
lua, neovim
Área
devtools, tooling

Línea de trabajo

Empieza reproduciendo el problema en NeoVim con acciones de código activadas al guardar, usando el ejemplo de argumento posicional del informe. Después inspecciona script/core/code-action.lua alrededor de la línea 462 y sigue la edición «Swap Params»; se considera terminado cuando el ejemplo permanece sin cambios después de ejecutar la acción de código.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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.

Lenguaje dominante
Lua
Estrellas
4.4k
Forks
442
Métricas de merge de PR
Sin PR fusionados en 30 d

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de LuaLS/lua-language-server

Todos los issues de LuaLS/lua-language-server

Issues similares

Más issues de Lua

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.