@@ -50,17 +50,20 @@ local function formatIndex(key)
5050 return (' [%q]' ):format (key )
5151end
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
6467end
6568
6669local 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 )
0 commit comments