summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorfiredfox <wangyang0123@gmail.com>2016-03-31 23:39:02 +0800
committersilverwind <me@silverwind.io>2016-04-09 18:40:26 +0200
commit6222e5b76d0f37fe8b5049bd23ca0271cab1821e (patch)
tree3156624296a831316b2c9264a392527ba5f7fd9b /tools
parent05d0e9e6a3ae7ed293ea46d0e978eb35a2b5107f (diff)
downloadandroid-node-v8-6222e5b76d0f37fe8b5049bd23ca0271cab1821e.tar.gz
android-node-v8-6222e5b76d0f37fe8b5049bd23ca0271cab1821e.tar.bz2
android-node-v8-6222e5b76d0f37fe8b5049bd23ca0271cab1821e.zip
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>
Diffstat (limited to 'tools')
-rw-r--r--tools/doc/json.js23
1 files changed, 16 insertions, 7 deletions
diff --git a/tools/doc/json.js b/tools/doc/json.js
index b2165c15d2..3d08026daa 100644
--- a/tools/doc/json.js
+++ b/tools/doc/json.js
@@ -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);