LuaLS / LuaLS/lua-language-server

`@overload` does not cooperate with `@class` when adding overloads to an inherited class method

Aberta
#3,364 1 comentário 0 reações 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?

NeoVim

Which OS are you using?

Linux

What is the issue affecting?

Completion

Expected Behaviour

Adding an overload to a function inherited from another class should result in both the parent class' overloads and the new overload being suggested as autocomplete and hover tooltip entries.

Actual Behaviour

Adding an overload to a function inherited from another class makes that overload the only one that is recognized for the current class.

Reproduction steps
---@meta

---@class ParentClass
ParentClass = {}

---@param arg string
---@return unknown
---@overload fun(self, arg: "bar"): boolean
function ParentClass:foo(arg) end

---@class ChildClass : ParentClass
---@field foo fun(self, arg: "baz"): number
ChildClass = {}

ChildClass:foo(--[[Should suggest both "bar" and "baz", but only suggests "baz" and "bar" raises a param-type-mismatch]])

Redefining the function and adding an @overload there yields the same result.

Additional Notes

Having some way to mark a function redefinition as an overload (with strict checking that it does exist in the class defined as inherited from) would probably help solve this issue.

Log File

No response

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

Comece com o comportamento das anotações e do preenchimento automático de Lua mostrado na reprodução, concentrando-se em como a herança de @class e as declarações @overload são tratadas. Reproduza o caso no NeoVim e verifique se o preenchimento automático e o hover exibem tanto o overload "bar" herdado quanto o overload "baz" filho, sem incompatibilidade no tipo do parâmetro.

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
4/5
Tempo estimado
3-5 dias
Status de atividade
Estagnada
Clareza
Claramente especificada
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.