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': '#' },
|
||||
Token = Packages.org.mozilla.javascript.Token;
|
||||
|
||||
var DEFAULT_SCOPE = 'static';
|
||||
|
||||
/**
|
||||
Resolves the longname, memberof, variation and name values of the given doclet.
|
||||
@param {module:jsdoc/doclet.Doclet} doclet
|
||||
@ -36,14 +38,27 @@ exports.resolve = function(doclet) {
|
||||
memberof = ('' || memberof).replace(/\.prototype\.?/g, '#');
|
||||
|
||||
// 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));
|
||||
}
|
||||
else if (name && /([#.~])$/.test(memberof) ) { // like @memberof foo# or @memberof foo~
|
||||
// the name and memberof are identical and refer to a module,
|
||||
// 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));
|
||||
}
|
||||
// the name and memberof are identical, like @name foo, @memberof foo
|
||||
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 ) { // like @memberof foo# or @memberof foo~
|
||||
about = exports.shorten(memberof + (scopeToPunc[doclet.scope]||'') + 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
|
||||
@ -81,7 +96,7 @@ exports.resolve = function(doclet) {
|
||||
doclet.name = doclet.name.substr(1);
|
||||
}
|
||||
else {
|
||||
doclet.scope = 'static'; // default scope when none is provided
|
||||
doclet.scope = DEFAULT_SCOPE;
|
||||
}
|
||||
|
||||
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() {
|
||||
|
||||
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');
|
||||
});
|
||||
|
||||
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() {
|
||||
var docSet = jasmine.getDocSetFromFile('test/fixtures/memberoftag2.js'),
|
||||
publish = docSet.getByLongname('Observable#publish')[0],
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user