mirror of
https://github.com/jsdoc/jsdoc.git
synced 2025-12-08 19:46:11 +00:00
if a member name is the same as its namespace's name, set the member's longname correctly (#214)
This commit is contained in:
parent
44b2c364a0
commit
ddbe0315d4
@ -15,6 +15,8 @@ var puncToScope = { '.': 'static', '~': 'inner', '#': 'instance' },
|
|||||||
scopeToPunc = { 'static': '.', 'inner': '~', 'instance': '#' },
|
scopeToPunc = { 'static': '.', 'inner': '~', 'instance': '#' },
|
||||||
Token = Packages.org.mozilla.javascript.Token;
|
Token = Packages.org.mozilla.javascript.Token;
|
||||||
|
|
||||||
|
var DEFAULT_SCOPE = 'static';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Resolves the longname, memberof, variation and name values of the given doclet.
|
Resolves the longname, memberof, variation and name values of the given doclet.
|
||||||
@param {module:jsdoc/doclet.Doclet} doclet
|
@param {module:jsdoc/doclet.Doclet} doclet
|
||||||
@ -36,14 +38,27 @@ exports.resolve = function(doclet) {
|
|||||||
memberof = ('' || memberof).replace(/\.prototype\.?/g, '#');
|
memberof = ('' || memberof).replace(/\.prototype\.?/g, '#');
|
||||||
|
|
||||||
// the name is a fullname, like @name foo.bar, @memberof foo
|
// the name is a fullname, like @name foo.bar, @memberof foo
|
||||||
if (name && name.indexOf(memberof) === 0) {
|
if (name && name.indexOf(memberof) === 0 && name !== memberof) {
|
||||||
about = exports.shorten(name, (doclet.forceMemberof? memberof : undefined));
|
about = exports.shorten(name, (doclet.forceMemberof ? memberof : undefined));
|
||||||
}
|
}
|
||||||
else if (name && /([#.~])$/.test(memberof) ) { // like @memberof foo# or @memberof foo~
|
// the name and memberof are identical and refer to a module,
|
||||||
about = exports.shorten(memberof + name, (doclet.forceMemberof? memberof : undefined));
|
// like @name module:foo, @memberof module:foo (probably a member like 'var exports')
|
||||||
|
else if (name && name === memberof && name.indexOf('module:') === 0) {
|
||||||
|
about = exports.shorten(name, (doclet.forceMemberof ? memberof : undefined));
|
||||||
}
|
}
|
||||||
else if (name && doclet.scope ) { // like @memberof foo# or @memberof foo~
|
// the name and memberof are identical, like @name foo, @memberof foo
|
||||||
about = exports.shorten(memberof + (scopeToPunc[doclet.scope]||'') + name, (doclet.forceMemberof? memberof : undefined));
|
else if (name && name === memberof) {
|
||||||
|
doclet.scope = doclet.scope || DEFAULT_SCOPE;
|
||||||
|
name = memberof + scopeToPunc[doclet.scope] + name;
|
||||||
|
about = exports.shorten(name, (doclet.forceMemberof ? memberof : undefined));
|
||||||
|
}
|
||||||
|
// like @memberof foo# or @memberof foo~
|
||||||
|
else if (name && /([#.~])$/.test(memberof) ) {
|
||||||
|
about = exports.shorten(memberof + name, (doclet.forceMemberof ? memberof : undefined));
|
||||||
|
}
|
||||||
|
else if (name && doclet.scope) {
|
||||||
|
about = exports.shorten(memberof + (scopeToPunc[doclet.scope] || '') + name,
|
||||||
|
(doclet.forceMemberof ? memberof : undefined));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else { // no @memberof
|
else { // no @memberof
|
||||||
@ -81,7 +96,7 @@ exports.resolve = function(doclet) {
|
|||||||
doclet.name = doclet.name.substr(1);
|
doclet.name = doclet.name.substr(1);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
doclet.scope = 'static'; // default scope when none is provided
|
doclet.scope = DEFAULT_SCOPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
doclet.setLongname(doclet.memberof + scopeToPunc[doclet.scope] + doclet.name);
|
doclet.setLongname(doclet.memberof + scopeToPunc[doclet.scope] + doclet.name);
|
||||||
|
|||||||
16
test/fixtures/memberoftag4.js
vendored
Normal file
16
test/fixtures/memberoftag4.js
vendored
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
/**
|
||||||
|
* Namespace doStuff.
|
||||||
|
* @namespace doStuff
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function with the same name as its namespace.
|
||||||
|
* @memberof doStuff
|
||||||
|
*/
|
||||||
|
function doStuff() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function with a different name than the namespace.
|
||||||
|
* @memberof doStuff
|
||||||
|
*/
|
||||||
|
function doOtherStuff() {}
|
||||||
@ -1,3 +1,4 @@
|
|||||||
|
/*global describe: true, expect: true, it: true, jasmine: true */
|
||||||
describe("@memberof tag", function() {
|
describe("@memberof tag", function() {
|
||||||
|
|
||||||
it('When a symbol has an @member tag, the doclet has a long name that includes the parent.', function() {
|
it('When a symbol has an @member tag, the doclet has a long name that includes the parent.', function() {
|
||||||
@ -12,6 +13,22 @@ describe("@memberof tag", function() {
|
|||||||
expect(Data.name).toEqual('Data');
|
expect(Data.name).toEqual('Data');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('A symbol within a namespace for which no scope is specified.', function() {
|
||||||
|
var docSet = jasmine.getDocSetFromFile('test/fixtures/memberoftag4.js'),
|
||||||
|
doOtherStuff = docSet.getByLongname('doStuff.doOtherStuff')[0];
|
||||||
|
|
||||||
|
expect(doOtherStuff).toBeDefined();
|
||||||
|
expect(doOtherStuff.scope).toEqual('static');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('A symbol in which name === memberof.', function() {
|
||||||
|
var docSet = jasmine.getDocSetFromFile('test/fixtures/memberoftag4.js'),
|
||||||
|
doStuff = docSet.getByLongname('doStuff.doStuff')[0];
|
||||||
|
|
||||||
|
expect(doStuff).toBeDefined();
|
||||||
|
expect(doStuff.scope).toEqual('static');
|
||||||
|
});
|
||||||
|
|
||||||
describe ("static", function() {
|
describe ("static", function() {
|
||||||
var docSet = jasmine.getDocSetFromFile('test/fixtures/memberoftag2.js'),
|
var docSet = jasmine.getDocSetFromFile('test/fixtures/memberoftag2.js'),
|
||||||
publish = docSet.getByLongname('Observable#publish')[0],
|
publish = docSet.getByLongname('Observable#publish')[0],
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user