diff --git a/changelog.md b/changelog.md index 271cf1ef1..a9bf83ed7 100644 --- a/changelog.md +++ b/changelog.md @@ -2,7 +2,7 @@ ## Unreleased -`2024-11-26` +* `FIX` missing-fields diagnostic now warns about missing inherited fields * `CHG` Update Love2d version ## 3.13.2 diff --git a/script/core/diagnostics/missing-fields.lua b/script/core/diagnostics/missing-fields.lua index 089d14d43..2459f7cf8 100644 --- a/script/core/diagnostics/missing-fields.lua +++ b/script/core/diagnostics/missing-fields.lua @@ -41,7 +41,8 @@ return function (uri, callback) for className, samedefs in pairs(sortedDefs) do local missedKeys = {} for _, def in ipairs(samedefs) do - if not def.fields or #def.fields == 0 then + local fields = vm.getFields(def) + if #fields == 0 then goto continue end @@ -55,7 +56,7 @@ return function (uri, callback) end end - for _, field in ipairs(def.fields) do + for _, field in ipairs(fields) do if not field.optional and not vm.compileNode(field):isNullable() then local key = vm.getKeyName(field) diff --git a/test/diagnostics/missing-fields.lua b/test/diagnostics/missing-fields.lua index 8c1ffbbb1..4b460531c 100644 --- a/test/diagnostics/missing-fields.lua +++ b/test/diagnostics/missing-fields.lua @@ -352,4 +352,114 @@ TEST[[ ---@type A local t = -]] \ No newline at end of file +]] + +-- Inheritance + +TEST[[ +---@class A +---@field x number + +---@class B: A + +---@type B +local t = +]] + +TEST[[ +---@class A +---@field x number +---@field y number + +---@class B: A + +---@type B +local t = +]] + +TEST[[ +---@class A +---@field x number + +---@class B: A +---@field y number + +---@type B +local t = +]] + +-- Inheritance + optional + +TEST[[ +---@class A +---@field x? number + +---@class B: A + +---@type B +local t = {} +]] + +TEST[[ +---@class A +---@field x? number +---@field y number + +---@class B: A + +---@type B +local t = {y = 1} +]] + +TEST[[ +---@class A +---@field x? number + +---@class B: A +---@field y number + +---@type B +local t = {y = 1} +]] + +-- Inheritance + function call + +TEST[[ +---@class A +---@field x number + +---@class B: A + +---@param b B +local function f(b) end + +f +]] + +TEST[[ +---@class A +---@field x number +---@field y number + +---@class B: A + +---@param b B +local function f(b) end + +f +]] + +TEST[[ +---@class A +---@field x number + +---@class B: A +---@field y number + +---@param b B +local function f(b) end + +f +]] + +--