LuaLS / LuaLS/lua-language-server

Returning a value as a class doesnt set the fields

Offen
#2,321 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Vorherrschende Sprache
Lua
Sterne
4.4k
Forks
442
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

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

Annotations, Type Checking

### Expected Behaviour

`value` be member of `MyClass`

### Actual Behaviour

![grafik](https://github.com/LuaLS/lua-language-server/assets/15840247/d0ede492-0113-4d95-beb5-391a77508f8f)
`value` is not a member

### Reproduction steps

```lua
local function myConstructor()
---@class MyClass
return { value = true }
end

local o = myConstructor()
print(o.value)
```

### Additional Notes

This should also work with a `setmetatable` variant:

```lua
---@class MyClass
local MyClass = {}
MyClass.__index = MyClass

local function myConstructor()
---@class MyClass
return setmetatable({ value = true }, MyClass)
end

local o = myConstructor()
print(o.value)
```

It does work with this workarround:

```lua
local function myConstructor()
---@class MyClass
local o = setmetatable({ value = true }, MyClass)
return o
end
```

### Log File

_No response_

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne damit, die beiden Konstruktorbeispiele aus dem Issue zu reproduzieren, und verfolge, wie der Language Server die Annotation @class bei einer zurückgegebenen Tabelle interpretiert. Vergleiche dies mit dem funktionierenden Workaround mit einer lokalen Variable und füge einen Regressionstest hinzu, der sowohl direkte Rückgaben als auch setmetatable-Rückgaben abdeckt. Als erledigt gilt die Aufgabe, wenn der Wert während der Typprüfung als Mitglied von MyClass erkannt wird.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
lua
Bereich
devtools
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
45/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.