LuaLS / LuaLS/lua-language-server
Two definitions for local function variables
Nessuno ha ancora preso questa issue.
- Lingua principale
- Lua
- Stelle
- 4.4k
- Fork
- 442
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
### How are you using the lua-language-server?
NeoVim
### Which OS are you using?
Linux
### What is the issue affecting?
Other
### Expected Behaviour
Using vim.lsp.buf.definition() to go to the definition of a local function variable (assigned with the `=` operator), should give only a single definition at the local variable name.
### Actual Behaviour
Using vim.lsp.buf.definition() to go to the definition of a local function variable (assigned with the `=` operator), gives two definitions on the same line. One is located at the variable name and the other is located at the beginning of the function key word.
### Reproduction steps
1. Create a lua file with the following content:
```lua
local m = function() print "hello world" end
m()
```
2. Move the cursor on the `m()` function call
3. Execute the neovim command `:lua vim.lsp.buf.definition()`
### Additional Notes
_No response_
### Log File
```
[DEBUG][2023-12-16 17:31:59] .../lua/vim/lsp.lua:1391 "LSP[lua_ls]" "client.request" 1 "textDocument/definition" { position = { character = 0, line = 2 }, textDocument = { uri = "file:///home/tobias/.config/nvim/test.lua" }} 147
[DEBUG][2023-12-16 17:31:59] .../vim/lsp/rpc.lua:284 "rpc.send" { id = 1559, jsonrpc = "2.0", method = "textDocument/definition", params = { position = { character = 0, line = 2 }, textDocument = { uri = "file:///home/tobias/.config/nvim/test.lua" } }}
[DEBUG][2023-12-16 17:31:59] .../vim/lsp/rpc.lua:387 "rpc.receive" { id = 1559, jsonrpc = "2.0", result = { { originSelectionRange = { ["end"] = { character = 1, line = 2 }, start = { character = 0, line = 2 } }, targetRange = { ["end"] = { character = 7, line = 0 }, start = { character = 6, line = 0 } }, targetSelectionRange = { ["end"] = { character = 7, line = 0 }, start = { character = 6, line = 0 } }, targetUri = "file:///home/tobias/.config/nvim/test.lua" }, { originSelectionRange = { ["end"] = { character = 1, line = 2 }, start = { character = 0, line = 2 } }, targetRange = { ["end"] = { character = 44, line = 0 }, start = { character = 10, line = 0 } }, targetSelectionRange = { ["end"] = { character = 44, line = 0 }, start = { character = 10, line = 0 } }, targetUri = "file:///home/tobias/.config/nvim/test.lua" } }}
[DEBUG][2023-12-16 17:32:02] .../lua/vim/lsp.lua:1391 "LSP[lua_ls]" "client.request" 1 "textDocument/codeLens" { textDocument = { uri = "file:///home/tobias/.config/nvim/test.lua" }} 147
[DEBUG][2023-12-16 17:32:02] .../vim/lsp/rpc.lua:284 "rpc.send" { id = 1560, jsonrpc = "2.0", method = "textDocument/codeLens", params = { textDocument = { uri = "file:///home/tobias/.config/nvim/test.lua" } }}
[DEBUG][2023-12-16 17:32:02] .../vim/lsp/rpc.lua:387 "rpc.receive" { id = 1560, jsonrpc = "2.0"}
[DEBUG][2023-12-16 17:32:02] .../lua/vim/lsp.lua:1391 "LSP[lua_ls]" "client.request" 1 "textDocument/documentHighlight" { position = { character = 0, line = 2 }, textDocument = { uri = "file:///home/tobias/.config/nvim/test.lua" }} 147
[DEBUG][2023-12-16 17:32:02] .../vim/lsp/rpc.lua:284 "rpc.send" { id = 1561, jsonrpc = "2.0", method = "textDocument/documentHighlight", params = { position = { character = 0, line = 2 }, textDocument = { uri = "file:///home/tobias/.config/nvim/test.lua" } }}
[DEBUG][2023-12-16 17:32:02] .../vim/lsp/rpc.lua:387 "rpc.receive" { id = 1561, jsonrpc = "2.0", result = { { kind = 3, range = { ["end"] = { character = 7, line = 0 }, start = { character = 6, line = 0 } } }, { kind = 2, range = { ["end"] = { character = 1, line = 2 }, start = { character = 0, line = 2 } } } }}
[TRACE][2023-12-16 17:32:02] ...lsp/handlers.lua:618 "default_handler" "textDocument/documentHighlight" { ctx = '{\n bufnr = 147,\n client_id = 1,\n method = "textDocument/documentHighlight",\n params = {\n position = {\n character = 0,\n line = 2\n },\n textDocument = {\n uri = "file:///home/tobias/.config/nvim/test.lua"\n }\n }\n}', result = { { kind = 3, range = { ["end"] = { character = 7, line = 0 }, start = { character = 6, line = 0 } } }, { kind = 2, range = { ["end"] = { character = 1, line = 2 }, start = { character = 0, line = 2 } } } }}
```
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia dal punto di ingresso textDocument/definition e riproduci il report con lo snippet Lua dell'issue usando vim.lsp.buf.definition() di Neovim. Traccia il motivo per cui l'assegnazione della funzione locale produce intervalli sia per il nome della variabile sia per la parola chiave function; il lavoro è completato quando la richiesta restituisce solo la definizione della variabile locale.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- lua, neovim
- Ambito
- devtools
- Tipo di issue
- Bug
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Stato di attività
- Tranquilla
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 58/100