Skip to content

Commit 9a833e6

Browse files
authored
Merge pull request #1180 from C3pa/master
Add optional flag (?) to overloads in `love2d` and `lovr` builders
2 parents 7eaec04 + 96c969c commit 9a833e6

File tree

2 files changed

+34
-30
lines changed

2 files changed

+34
-30
lines changed

tools/love-api.lua

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -50,17 +50,20 @@ local function formatIndex(key)
5050
return ('[%q]'):format(key)
5151
end
5252

53-
local function isTableOptional(tbl)
54-
if not tbl then
55-
return false
56-
end
57-
local optional = true
58-
for _, field in ipairs(tbl) do
59-
if field.default == nil then
60-
optional = nil
61-
end
62-
end
63-
return optional
53+
local function getOptional(param)
54+
if param.type == 'table' then
55+
if not param.table then
56+
return ''
57+
end
58+
for _, field in ipairs(param.table) do
59+
if field.default == nil then
60+
return ''
61+
end
62+
end
63+
return '?'
64+
else
65+
return (param.default ~= nil) and '?' or ''
66+
end
6467
end
6568

6669
local buildType
@@ -125,9 +128,9 @@ local function buildDocFunc(variant, overload)
125128
params[#params+1] = '...'
126129
else
127130
if param.name:find '^[\'"]' then
128-
params[#params+1] = ('%s: %s|%q'):format(param.name:sub(2, -2), getTypeName(param.type), param.name)
131+
params[#params+1] = ('%s%s: %s|%q'):format(param.name:sub(2, -2), getOptional(param), getTypeName(param.type), param.name)
129132
else
130-
params[#params+1] = ('%s: %s'):format(param.name, getTypeName(param.type))
133+
params[#params+1] = ('%s%s: %s'):format(param.name, getOptional(param), getTypeName(param.type))
131134
end
132135
end
133136
end
@@ -159,10 +162,9 @@ local function buildFunction(func, node, typeName)
159162
for _, param in ipairs(func.variants[1].arguments or {}) do
160163
for paramName in param.name:gmatch '[%a_][%w_]*' do
161164
params[#params+1] = paramName
162-
local optional = param.type == 'table' and isTableOptional(param.table) or (param.default ~= nil)
163165
text[#text+1] = ('---@param %s%s %s # %s'):format(
164166
paramName,
165-
optional and '?' or '',
167+
getOptional(param),
166168
buildType(param),
167169
param.description
168170
)

tools/lovr-api.lua

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -51,17 +51,20 @@ local function formatIndex(key)
5151
return ('[%q]'):format(key)
5252
end
5353

54-
local function isTableOptional(tbl)
55-
if not tbl then
56-
return false
57-
end
58-
local optional = true
59-
for _, field in ipairs(tbl) do
60-
if field.default == nil then
61-
optional = nil
62-
end
63-
end
64-
return optional
54+
local function getOptional(param)
55+
if param.type == 'table' then
56+
if not param.table then
57+
return ''
58+
end
59+
for _, field in ipairs(param.table) do
60+
if field.default == nil then
61+
return ''
62+
end
63+
end
64+
return '?'
65+
else
66+
return (param.default ~= nil) and '?' or ''
67+
end
6568
end
6669

6770
local buildType
@@ -129,9 +132,9 @@ local function buildDocFunc(variant, overload)
129132
params[#params+1] = '...'
130133
else
131134
if param.name:find '^[\'"]' then
132-
params[#params+1] = ('%s: %s|%q'):format(param.name:sub(2, -2), getTypeName(param.type), param.name)
135+
params[#params+1] = ('%s%s: %s|%q'):format(param.name:sub(2, -2), getOptional(param), getTypeName(param.type), param.name)
133136
else
134-
params[#params+1] = ('%s: %s'):format(param.name, getTypeName(param.type))
137+
params[#params+1] = ('%s%s: %s'):format(param.name, getOptional(param), getTypeName(param.type))
135138
end
136139
end
137140
end
@@ -163,10 +166,9 @@ local function buildFunction(func, typeName)
163166
for _, param in ipairs(func.variants[1].arguments or {}) do
164167
for paramName in param.name:gmatch '[%a_][%w_]*' do
165168
params[#params+1] = paramName
166-
local optional = param.type == 'table' and isTableOptional(param.table) or (param.default ~= nil)
167169
text[#text+1] = ('---@param %s%s %s # %s'):format(
168170
paramName,
169-
optional and '?' or '',
171+
getOptional(param),
170172
buildType(param),
171173
param.description
172174
)

0 commit comments

Comments
 (0)