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: https://github.com/nodejs/node/pull/5977 Fixes: https://github.com/nodejs/node/issues/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>
This commit is contained in:
parent
05d0e9e6a3
commit
6222e5b76d
@ -280,21 +280,30 @@ function parseSignature(text, sig) {
|
||||
var params = text.match(paramExpr);
|
||||
if (!params) return;
|
||||
params = params[1];
|
||||
// the [ is irrelevant. ] indicates optionalness.
|
||||
params = params.replace(/\[/g, '');
|
||||
params = params.split(/,/);
|
||||
var optionalLevel = 0;
|
||||
var optionalCharDict = {'[': 1, ' ': 0, ']': -1};
|
||||
params.forEach(function(p, i, _) {
|
||||
p = p.trim();
|
||||
if (!p) return;
|
||||
var param = sig.params[i];
|
||||
var optional = false;
|
||||
var def;
|
||||
// [foo] -> optional
|
||||
if (p.charAt(p.length - 1) === ']') {
|
||||
optional = true;
|
||||
p = p.replace(/\]/g, '');
|
||||
p = p.trim();
|
||||
|
||||
// for grouped optional params such as someMethod(a[, b[, c]])
|
||||
var pos;
|
||||
for (pos = 0; pos < p.length; pos++) {
|
||||
if (optionalCharDict[p[pos]] === undefined) { break; }
|
||||
optionalLevel += optionalCharDict[p[pos]];
|
||||
}
|
||||
p = p.substring(pos);
|
||||
optional = (optionalLevel > 0);
|
||||
for (pos = p.length - 1; pos >= 0; pos--) {
|
||||
if (optionalCharDict[p[pos]] === undefined) { break; }
|
||||
optionalLevel += optionalCharDict[p[pos]];
|
||||
}
|
||||
p = p.substring(0, pos + 1);
|
||||
|
||||
var eq = p.indexOf('=');
|
||||
if (eq !== -1) {
|
||||
def = p.substr(eq + 1);
|
||||
|
Loading…
x
Reference in New Issue
Block a user