From 554968f8f26129451efcc123f37ca25172829990 Mon Sep 17 00:00:00 2001 From: ahocevar Date: Sat, 12 May 2018 19:18:02 +0200 Subject: [PATCH] Inline constructor options --- config/jsdoc/api/conf.json | 3 +- config/jsdoc/api/plugins/inline-options.js | 49 ++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 config/jsdoc/api/plugins/inline-options.js diff --git a/config/jsdoc/api/conf.json b/config/jsdoc/api/conf.json index 714834478b..0b5b66be93 100644 --- a/config/jsdoc/api/conf.json +++ b/config/jsdoc/api/conf.json @@ -15,7 +15,8 @@ }, "plugins": [ "plugins/markdown", - "config/jsdoc/api/plugins/default-export", + "config/jsdoc/api/plugins/normalize-exports", + "config/jsdoc/api/plugins/inline-options", "config/jsdoc/api/plugins/events", "config/jsdoc/api/plugins/observable", "config/jsdoc/api/plugins/api" diff --git a/config/jsdoc/api/plugins/inline-options.js b/config/jsdoc/api/plugins/inline-options.js new file mode 100644 index 0000000000..02d6cb8ea6 --- /dev/null +++ b/config/jsdoc/api/plugins/inline-options.js @@ -0,0 +1,49 @@ +/** + * @filedesc + * Inlines option params from typedefs + */ + +const properties = {}; + +exports.handlers = { + + /** + * Collects all typedefs, keyed by longname + * @param {Object} e Event object. + */ + newDoclet: function(e) { + if (e.doclet.kind == 'typedef' && e.doclet.properties) { + properties[e.doclet.longname] = e.doclet.properties; + } + }, + + /** + * Adds `options.*` params for options that match the longname of one of the + * collected typedefs. + * @param {Object} e Event object. + */ + parseComplete: function(e) { + const doclets = e.doclets; + for (let i = 0, ii = doclets.length; i < ii; ++i) { + const doclet = doclets[i]; + if (doclet.params) { + const params = doclet.params; + for (let j = 0, jj = params.length; j < jj; ++j) { + const param = params[j]; + if (param.type && param.type.names) { + const type = param.type.names[0]; + if (type in properties) { + param.type.names[0] = type; + params.push.apply(params, properties[type].map(p => { + const property = Object.assign({}, p); + property.name = `${param.name}.${property.name}`; + return property; + })); + } + } + } + } + } + } + +};