diff options
author | firedfox <wangyang0123@gmail.com> | 2016-03-31 23:39:02 +0800 |
---|---|---|
committer | silverwind <me@silverwind.io> | 2016-04-09 18:40:26 +0200 |
commit | 6222e5b76d0f37fe8b5049bd23ca0271cab1821e (patch) | |
tree | 3156624296a831316b2c9264a392527ba5f7fd9b /tools | |
parent | 05d0e9e6a3ae7ed293ea46d0e978eb35a2b5107f (diff) | |
download | android-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.js | 23 |
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); |