From a570167f3cd6a6ee05d08022b88689685202efff Mon Sep 17 00:00:00 2001 From: C3pa <41503714+C3pa@users.noreply.github.com> Date: Sat, 28 May 2022 21:10:54 +0200 Subject: [PATCH 1/2] Add optional for overloads --- tools/love-api.lua | 5 +++-- tools/lovr-api.lua | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/tools/love-api.lua b/tools/love-api.lua index 31284cd6b..e217f5e59 100644 --- a/tools/love-api.lua +++ b/tools/love-api.lua @@ -124,10 +124,11 @@ local function buildDocFunc(variant, overload) if param.name == '...' then params[#params+1] = '...' else + local optional = (param.type == 'table' and isTableOptional(param.table) or (param.default ~= nil)) and '?' or '' if param.name:find '^[\'"]' then - params[#params+1] = ('%s: %s|%q'):format(param.name:sub(2, -2), getTypeName(param.type), param.name) + params[#params+1] = ('%s%s: %s|%q'):format(param.name:sub(2, -2), optional, getTypeName(param.type), param.name) else - params[#params+1] = ('%s: %s'):format(param.name, getTypeName(param.type)) + params[#params+1] = ('%s%s: %s'):format(param.name, optional, getTypeName(param.type)) end end end diff --git a/tools/lovr-api.lua b/tools/lovr-api.lua index d61bfdb7f..dfa2bff82 100644 --- a/tools/lovr-api.lua +++ b/tools/lovr-api.lua @@ -128,10 +128,11 @@ local function buildDocFunc(variant, overload) if param.name == '...' then params[#params+1] = '...' else + local optional = (param.type == 'table' and isTableOptional(param.table) or (param.default ~= nil)) and '?' or '' if param.name:find '^[\'"]' then - params[#params+1] = ('%s: %s|%q'):format(param.name:sub(2, -2), getTypeName(param.type), param.name) + params[#params+1] = ('%s%s: %s|%q'):format(param.name:sub(2, -2), optional, getTypeName(param.type), param.name) else - params[#params+1] = ('%s: %s'):format(param.name, getTypeName(param.type)) + params[#params+1] = ('%s%s: %s'):format(param.name, optional, getTypeName(param.type)) end end end From 96c969c432959fd7f21778153f9b3dd5c532f488 Mon Sep 17 00:00:00 2001 From: C3pa <41503714+C3pa@users.noreply.github.com> Date: Sat, 28 May 2022 21:29:59 +0200 Subject: [PATCH 2/2] A refactoring change --- tools/love-api.lua | 33 +++++++++++++++++---------------- tools/lovr-api.lua | 33 +++++++++++++++++---------------- 2 files changed, 34 insertions(+), 32 deletions(-) diff --git a/tools/love-api.lua b/tools/love-api.lua index e217f5e59..c5f402883 100644 --- a/tools/love-api.lua +++ b/tools/love-api.lua @@ -50,17 +50,20 @@ local function formatIndex(key) return ('[%q]'):format(key) end -local function isTableOptional(tbl) - if not tbl then - return false - end - local optional = true - for _, field in ipairs(tbl) do - if field.default == nil then - optional = nil - end - end - return optional +local function getOptional(param) + if param.type == 'table' then + if not param.table then + return '' + end + for _, field in ipairs(param.table) do + if field.default == nil then + return '' + end + end + return '?' + else + return (param.default ~= nil) and '?' or '' + end end local buildType @@ -124,11 +127,10 @@ local function buildDocFunc(variant, overload) if param.name == '...' then params[#params+1] = '...' else - local optional = (param.type == 'table' and isTableOptional(param.table) or (param.default ~= nil)) and '?' or '' if param.name:find '^[\'"]' then - params[#params+1] = ('%s%s: %s|%q'):format(param.name:sub(2, -2), optional, getTypeName(param.type), param.name) + params[#params+1] = ('%s%s: %s|%q'):format(param.name:sub(2, -2), getOptional(param), getTypeName(param.type), param.name) else - params[#params+1] = ('%s%s: %s'):format(param.name, optional, getTypeName(param.type)) + params[#params+1] = ('%s%s: %s'):format(param.name, getOptional(param), getTypeName(param.type)) end end end @@ -160,10 +162,9 @@ local function buildFunction(func, node, typeName) for _, param in ipairs(func.variants[1].arguments or {}) do for paramName in param.name:gmatch '[%a_][%w_]*' do params[#params+1] = paramName - local optional = param.type == 'table' and isTableOptional(param.table) or (param.default ~= nil) text[#text+1] = ('---@param %s%s %s # %s'):format( paramName, - optional and '?' or '', + getOptional(param), buildType(param), param.description ) diff --git a/tools/lovr-api.lua b/tools/lovr-api.lua index dfa2bff82..4875707d9 100644 --- a/tools/lovr-api.lua +++ b/tools/lovr-api.lua @@ -51,17 +51,20 @@ local function formatIndex(key) return ('[%q]'):format(key) end -local function isTableOptional(tbl) - if not tbl then - return false - end - local optional = true - for _, field in ipairs(tbl) do - if field.default == nil then - optional = nil - end - end - return optional +local function getOptional(param) + if param.type == 'table' then + if not param.table then + return '' + end + for _, field in ipairs(param.table) do + if field.default == nil then + return '' + end + end + return '?' + else + return (param.default ~= nil) and '?' or '' + end end local buildType @@ -128,11 +131,10 @@ local function buildDocFunc(variant, overload) if param.name == '...' then params[#params+1] = '...' else - local optional = (param.type == 'table' and isTableOptional(param.table) or (param.default ~= nil)) and '?' or '' if param.name:find '^[\'"]' then - params[#params+1] = ('%s%s: %s|%q'):format(param.name:sub(2, -2), optional, getTypeName(param.type), param.name) + params[#params+1] = ('%s%s: %s|%q'):format(param.name:sub(2, -2), getOptional(param), getTypeName(param.type), param.name) else - params[#params+1] = ('%s%s: %s'):format(param.name, optional, getTypeName(param.type)) + params[#params+1] = ('%s%s: %s'):format(param.name, getOptional(param), getTypeName(param.type)) end end end @@ -164,10 +166,9 @@ local function buildFunction(func, typeName) for _, param in ipairs(func.variants[1].arguments or {}) do for paramName in param.name:gmatch '[%a_][%w_]*' do params[#params+1] = paramName - local optional = param.type == 'table' and isTableOptional(param.table) or (param.default ~= nil) text[#text+1] = ('---@param %s%s %s # %s'):format( paramName, - optional and '?' or '', + getOptional(param), buildType(param), param.description )