Skip to content

Commit 69eb4a6

Browse files
firedfoxMyles Borins
authored andcommitted
tools,doc: fix json for grouped optional params
Current tools/doc/json.js only supports one bracket style for optional params methodName(param0[,param1],param2). Add support to other styles such as methodName(param0,[param1,]param2) or methodName(param0[,param1,param2]) or methodName(param0[,param1[,param2]]). PR-URL: #5977Fixes: #5976 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Robert Lindstädt <robert.lindstaedt@gmail.com> Reviewed-By: Roman Reiss <me@silverwind.io>
1 parent a2dd848 commit 69eb4a6

1 file changed

Lines changed: 16 additions & 7 deletions

File tree

‎tools/doc/json.js‎

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -280,21 +280,30 @@ function parseSignature(text, sig) {
280280
varparams=text.match(paramExpr);
281281
if(!params)return;
282282
params=params[1];
283-
// the [ is irrelevant. ] indicates optionalness.
284-
params=params.replace(/\[/g,'');
285283
params=params.split(/,/);
284+
varoptionalLevel=0;
285+
varoptionalCharDict={'[': 1,' ': 0,']': -1};
286286
params.forEach(function(p,i,_){
287287
p=p.trim();
288288
if(!p)return;
289289
varparam=sig.params[i];
290290
varoptional=false;
291291
vardef;
292-
// [foo] -> optional
293-
if(p.charAt(p.length-1)===']'){
294-
optional=true;
295-
p=p.replace(/\]/g,'');
296-
p=p.trim();
292+
293+
// for grouped optional params such as someMethod(a[, b[, c]])
294+
varpos;
295+
for(pos=0;pos<p.length;pos++){
296+
if(optionalCharDict[p[pos]]===undefined){break;}
297+
optionalLevel+=optionalCharDict[p[pos]];
298+
}
299+
p=p.substring(pos);
300+
optional=(optionalLevel>0);
301+
for(pos=p.length-1;pos>=0;pos--){
302+
if(optionalCharDict[p[pos]]===undefined){break;}
303+
optionalLevel+=optionalCharDict[p[pos]];
297304
}
305+
p=p.substring(0,pos+1);
306+
298307
vareq=p.indexOf('=');
299308
if(eq!==-1){
300309
def=p.substr(eq+1);

0 commit comments

Comments
 (0)