LuaLS / LuaLS/lua-language-server

Duplicate "go to definition" results when using table assignment syntax in a module

Aberta
#3,243 1 comentário 1 reação 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Linguagem predominante
Lua
Estrelas
4.4k
Forks
442
Métricas de merge de PRs
Nenhum PR com merge em 30d

Descrição

### How are you using the lua-language-server?

Kakoune

### Which OS are you using?

MacOS

### What is the issue affecting?

Other

### Expected Behaviour

When a module is written by assigning functions to table members with the following syntax:

```lua
local lib={}

lib.func = function()
-- ...
end

return lib
```

Performing a "Go to definition" on this function from another file that `require`s the module should go to the function defintion.

### Actual Behaviour

Instead when doing a "Go to defintion", there are 2 results, and the user must choose one. They both point to the same line, one points to the table member's name and the other to the start of the `function` declaration.

Image

### Reproduction steps

1. Create a project with two files, `lib.lua` and `other.lua`, and populate them as follows:

`lib.lua`:
```lua
local lib={}

lib.func = function() end

return lib
```

`other.lua`:
```lua
local lib = require('lib')

lib.func()
```

2. From `other.lua`, perform a "Go to definition" on `func`. Note that it has two results that must be chosen, one will take you to the table member's name, and the other will take you to the start of the function declaration.

3. Change `lib.lua` to:
```lua
local lib={}

function lib.func() end

return lib
```

4. From `other.lua`, perform a "Go to definition" on `func`. It takes you directly to the start of the function declaration (which is also the table member's name).

### Additional Notes

I know that the `function lib.func()` syntax is preferred, but this is an issue for me when using libraries that use the `lib.func = function()` syntax. I wasn't able to find any discussions of this issue, but it seems likely that others have run into it, so I am wondering if there is a solution that I just haven't found.

### Log File

[file_Users_evanjohnson_sandbox_lua-lsp-test.log](https://github.com/user-attachments/files/21456083/file_Users_evanjohnson_sandbox_lua-lsp-test.log)

Guia de contribuição

Abrir o guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Direção de pesquisa

Reproduza os resultados duplicados com o exemplo de dois arquivos lib.lua e other.lua e, em seguida, compare-o com a forma function lib.func(). Comece rastreando o tratamento de go-to-definition do servidor de linguagem para a sintaxe de atribuição de tabela e use o arquivo de log fornecido como contexto. O trabalho estará concluído quando a forma de atribuição retornar um único resultado de definição na declaração da função.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
lua
Domínio
devtools
Tipo de issue
Bug
Dificuldade
3/5
Tempo estimado
1-2 dias
Status de atividade
Estagnada
Clareza
Razoavelmente clara
Facilidade para iniciantes
45/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.