LuaLS / LuaLS/lua-language-server

Exact Class with `__index` Assignment Result in Loss of All Class Methods

Aperta
#2,883 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

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?

Visual Studio Code Extension (sumneko.lua)

Which OS are you using?

Windows

What is the issue affecting?

Completion, Hover

Expected Behaviour

Method :method and :method2 is shown.

Actual Behaviour

No method is shown.
gambar

Reproduction steps

Test code:

---@class (exact) Foo
local Foo = {}
Foo.__index = Foo ---@diagnostic disable-line inject-field

function Foo:method()
end

function Foo:method2(value)
end

---@return Foo
local function foo()
end

local b = foo()

Variable b has type of Foo. However typing b: won't show method and method2. The self variable inside Foo:nethod and Foo:method2 will also have same issue if used.

Removing the (exact) make it work works as expected. Removing the __index assignment also make it works as expected. However, silencing the __index inject field with ---@field __index Foo instead of using ---@diagnostic still result in same issue.

Hovering to b also won't show any of the methods. However hovering to Foo works.

Additional Notes

Typing the method name manually (e.g. :method2) will show completion normally and will make b show method2 after it's used once. But only method2 in that specific case. method still not be shown.

Log File

file_d%3A_Data_Development_love-11.3-win64_luals-report.log

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Riproduci lo snippet Lua fornito e analizza il comportamento del completamento e dell'hover per le classi esatte con un'assegnazione di __index. Usa come punto di partenza per il confronto la differenza segnalata tra le classi esatte e quelle non esatte. Il lavoro è completato quando i metodi di Foo compaiono per b e self nel completamento e nell'hover, senza dover digitare prima il nome del metodo.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
lua
Ambito
devtools
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
42/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.