LuaLS / LuaLS/lua-language-server

Two definitions for local function variables

Ouverte
#2,451 6 commentaires 8 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Langage dominant
Lua
Étoiles
4.4k
Forks
442
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

### 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 } } } }}

```

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez au point d’entrée textDocument/definition et reproduisez le rapport avec l’extrait Lua de l’issue en utilisant vim.lsp.buf.definition() de Neovim. Suivez pourquoi l’affectation de la fonction locale produit des plages à la fois pour le nom de la variable et pour le mot-clé function ; le travail est terminé lorsque la requête ne renvoie que la définition de la variable locale.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
lua, neovim
Domaine
devtools
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
Calme
Clarté
Plutôt claire
Accessibilité débutants
58/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.