LuaLS / LuaLS/lua-language-server

Issue when using tables/class with generics?

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

Dieses Issue hat noch niemand übernommen.

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

Type Checking

Expected Behaviour

In the following code:

---@class TestClass
---@field test string
---@field test2 string

---@param test TestClass
local function test_function(test)
	for k, v in pairs(test) do end

	---@type {test: string, test2: string}
	local test_table

	for k, v in pairs(test_table) do end

	---@type {test: string, test2: string}
	local test_table2 = {
		test = "test",
		test2 = "test2",
	}

	for k, v in pairs(test_table2) do end
end

I would hope that the inferred type of k and v would work the same in each instance where k is inferred to be a string and v is inferred to be a string.

Actual Behaviour

In the following code:

---@class TestClass
---@field test string
---@field test2 string

---@param test TestClass
local function test_function(test)
	for k, v in pairs(test) do end

	---@type {test: string, test2: string}
	local test_table

	for k, v in pairs(test_table) do end

	---@type {test: string, test2: string}
	local test_table2 = {
		test = "test",
		test2 = "test2",
	}

	for k, v in pairs(test_table2) do end
end

the k and in line: for k, v in pairs(test) do end and the k in line for k, v in pairs(test_table) do end get the error can not infer type and are typed as unknown.

Screenshot_1

I assume there is some issue here with generics as the pairs definition uses them heavily

---@generic T: table, K, V
---@param t T
---@return fun(table: table<K, V>, index?: K):K, V
---@return T

but this is only a guess.

Reproduction steps
  1. Copy this code:
---@class TestClass
---@field test string
---@field test2 string

---@param test TestClass
local function test_function(test)
	for k, v in pairs(test) do end

	---@type {test: string, test2: string}
	local test_table

	for k, v in pairs(test_table) do end

	---@type {test: string, test2: string}
	local test_table2 = {
		test = "test",
		test2 = "test2",
	}

	for k, v in pairs(test_table2) do end
end
  1. See errors
Additional Notes

No response

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

Beginnen Sie damit, das bereitgestellte Snippet in der Visual Studio Code-Erweiterung zu reproduzieren, und untersuchen Sie anschließend die Definition von pairs und ihre generischen Rückgabetypen. Die Korrektur ist abgeschlossen, wenn k und v für die Fälle TestClass, nicht initialisierte Tabelle und initialisierte Tabelle als string inferiert werden, ohne Fehler vom Typ can not infer type.

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
42/100

Neue Issues direkt in Ihr Postfach

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