mirror of
https://github.com/jsdoc/jsdoc.git
synced 2025-12-08 19:46:11 +00:00
autodetect default and repeatable parameters when a function is assigned to a variable (#1054)
This commit is contained in:
parent
0e4f1a9575
commit
6275e69e85
@ -362,7 +362,10 @@ Parser.prototype.astnodeToMemberof = function(node) {
|
||||
else if (type === Syntax.MethodDefinition && node.kind === 'constructor') {
|
||||
doclet = this._getDocletById(node.enclosingScope.nodeId);
|
||||
|
||||
result.memberof = doclet.memberof + jsdoc.name.SCOPE.PUNC.INNER;
|
||||
// global classes aren't a member of anything
|
||||
if (doclet.memberof) {
|
||||
result.memberof = doclet.memberof + jsdoc.name.SCOPE.PUNC.INNER;
|
||||
}
|
||||
}
|
||||
else {
|
||||
// check local references for aliases
|
||||
|
||||
@ -184,7 +184,10 @@ function makeRestParamFinisher() {
|
||||
}
|
||||
|
||||
documentedParams = doclet.params = doclet.params || [];
|
||||
restNode = findRestParam(e.code.node.params || e.code.node.value.params);
|
||||
restNode = findRestParam(e.code.node.params ||
|
||||
(e.code.node.value && e.code.node.value.params) ||
|
||||
(e.code.node.init && e.code.node.init.params) ||
|
||||
[]);
|
||||
|
||||
if (restNode) {
|
||||
for (var i = documentedParams.length - 1; i >= 0; i--) {
|
||||
@ -247,7 +250,7 @@ function makeDefaultParamFinisher() {
|
||||
}
|
||||
|
||||
documentedParams = doclet.params = doclet.params || [];
|
||||
params = e.code.node.params || e.code.node.value.params;
|
||||
params = e.code.node.params || (e.code.node.value && e.code.node.value.params) || [];
|
||||
defaultValues = findDefaultParams(params);
|
||||
|
||||
for (var i = 0, j = 0, l = params.length; i < l; i++) {
|
||||
@ -314,7 +317,7 @@ function makeConstructorFinisher(parser) {
|
||||
if (!parentDoclet.description && doclet.description) {
|
||||
parentDoclet.description = doclet.description;
|
||||
}
|
||||
if (!parentDoclet.params && doclet.params) {
|
||||
if ( (!parentDoclet.params || !parentDoclet.params.length) && doclet.params) {
|
||||
parentDoclet.params = doclet.params.slice(0);
|
||||
}
|
||||
|
||||
@ -794,6 +797,10 @@ Visitor.prototype.makeSymbolFoundEvent = function(node, parser, filename) {
|
||||
// like: var i = 0;
|
||||
case Syntax.VariableDeclarator:
|
||||
extras.finishers = [
|
||||
// handle cases where at least one parameter has a default value
|
||||
makeDefaultParamFinisher(),
|
||||
// handle rest parameters
|
||||
makeRestParamFinisher(),
|
||||
// handle async functions
|
||||
makeAsyncFunctionFinisher(),
|
||||
// handle generator functions
|
||||
|
||||
7
test/fixtures/defaultparams.js
vendored
7
test/fixtures/defaultparams.js
vendored
@ -62,3 +62,10 @@ function setDogName(dogName = '') {}
|
||||
* @param {PizzaToppings} toppings - The user's favorite toppings.
|
||||
*/
|
||||
function setPizzaToppings(toppings = PIZZA_TOPPING_DEFAULTS) {}
|
||||
|
||||
/**
|
||||
* Set whether the user is a ninja.
|
||||
*
|
||||
* @param {boolean} isNinja - Set to `true` if the user is a ninja; otherwise, `false`.
|
||||
*/
|
||||
var setIsNinja = function(isNinja = true) {};
|
||||
|
||||
7
test/fixtures/restparams.js
vendored
7
test/fixtures/restparams.js
vendored
@ -14,3 +14,10 @@ function setAdmins(...users) {}
|
||||
* @param {User} users - The users who will receive rights to access the widget.
|
||||
*/
|
||||
function setWidgetAccess(widget, ...users) {}
|
||||
|
||||
/**
|
||||
* Set the list of users who are managers.
|
||||
*
|
||||
* @param {User} users - The users who are managers.
|
||||
*/
|
||||
var setManagers = function(...users) {};
|
||||
|
||||
@ -7,6 +7,7 @@ describe('default parameters', function() {
|
||||
var setBirthYear = docSet.getByLongname('setBirthYear')[0];
|
||||
var setDogName = docSet.getByLongname('setDogName')[0];
|
||||
var setFirstName = docSet.getByLongname('setFirstName')[0];
|
||||
var setIsNinja = docSet.getByLongname('setIsNinja')[0];
|
||||
var setLastName = docSet.getByLongname('setLastName')[0];
|
||||
var setName = docSet.getByLongname('setName')[0];
|
||||
var setPizzaToppings = docSet.getByLongname('setPizzaToppings')[0];
|
||||
@ -49,6 +50,10 @@ describe('default parameters', function() {
|
||||
expect(setPizzaToppings.params[0].defaultvalue).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should work when the function is assigned to a variable', function() {
|
||||
expect(setIsNinja.params[0].defaultvalue).toBe(true);
|
||||
});
|
||||
|
||||
describe('ES2015 methods', function() {
|
||||
var docSet2 = jasmine.getDocSetFromFile('test/fixtures/defaultparams2.js');
|
||||
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
describe('rest parameters', function() {
|
||||
var docSet = jasmine.getDocSetFromFile('test/fixtures/restparams.js');
|
||||
var setAdmins = docSet.getByLongname('setAdmins')[0];
|
||||
var setManagers = docSet.getByLongname('setManagers')[0];
|
||||
var setWidgetAccess = docSet.getByLongname('setWidgetAccess')[0];
|
||||
|
||||
it('should automatically mark standalone rest parameters as repeatable', function() {
|
||||
@ -19,6 +20,13 @@ describe('rest parameters', function() {
|
||||
expect(restParam.variable).toBe(true);
|
||||
});
|
||||
|
||||
it('should automatically mark rest parameters as repeatable when the function is assigned to a variable', function() {
|
||||
var restParam = setManagers.params[0];
|
||||
|
||||
expect(restParam.name).toBe('users');
|
||||
expect(restParam.variable).toBe(true);
|
||||
});
|
||||
|
||||
describe('ES2015 methods', function() {
|
||||
var docSet2 = jasmine.getDocSetFromFile('test/fixtures/restparams2.js');
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user