UNPKG

@agds/cli-plugin-doc

Version:

agds系统doc文档生成器

107 lines (90 loc) 2.83 kB
"use strict"; const handlebars = require('handlebars'); const { isEvent, isPrivate, methodSig, isConstructor, isFunction, parentName, isEnum, optionEquals, isClass, option, isModule } = require('dmd/helpers/ddata'); const arrayify = require('array-back'); const flatten = require('reduce-flatten'); // 当父节点和子节点之间不需要联合符合时忽略父节点 exports.sig = function sig(options) { let data; if (options.data) { data = handlebars.createFrame(options.data || {}); } data.prefix = this.kind === 'constructor' ? 'new' : ''; data.parent = null; data.accessSymbol = null; data.name = isEvent.call(this) ? '"' + this.name + '"' : this.name; data.methodSign = null; data.returnSymbol = null; data.returnTypes = null; data.suffix = this.isExported ? '⏏' : isPrivate.call(this) ? '℗' : ''; data.depOpen = null; data.depClose = null; data.codeOpen = null; data.codeClose = null; const mSig = methodSig.call(this); if (isConstructor.call(this) || isFunction.call(this)) { data.methodSign = '(' + mSig + ')'; } else if (isEvent.call(this)) { if (mSig) data.methodSign = '(' + mSig + ')'; } if (!isEvent.call(this)) { data.accessSymbol = this.scope === 'static' || this.scope === 'instance' ? '.' : this.scope === 'inner' ? '~' : ''; // 当父节点和子节点之间不需要联合符合时忽略父节点 if (data.accessSymbol) { data.parent = parentName.call(this, options); } } if (!isConstructor.call(this)) { if (this.returns) { data.returnSymbol = '⇒'; const typeNames = arrayify(this.returns).map(function (ret) { return ret.type && ret.type.names; }).filter(function (name) { return name; }); if (typeNames.length) { data.returnTypes = typeNames.reduce(flatten, []); } } else if ((this.type || this.kind === 'namespace') && this.kind !== 'event') { data.returnSymbol = ':'; if (isEnum.call(this)) { data.returnTypes = ['enum']; } else if (this.kind === 'namespace') { data.returnTypes = ['object']; } else { data.returnTypes = this.type.names; } } else if (this.chainable) { data.returnSymbol = '↩︎'; } else if (this.augments) { data.returnSymbol = '⇐'; data.returnTypes = [this.augments[0]]; } } if (this.deprecated) { if (optionEquals('no-gfm', true, options) || options.hash['no-gfm']) { data.depOpen = '<del>'; data.depClose = '</del>'; } else { data.depOpen = '~~'; data.depClose = '~~'; } } if (option('name-format', options) && !isClass.call(this) && !isModule.call(this)) { data.codeOpen = '`'; data.codeClose = '`'; } return options.fn(this, { data: data }); };