diff --git a/lib/jsdoc/name.js b/lib/jsdoc/name.js index a16ee02c..7aa0c1c2 100644 --- a/lib/jsdoc/name.js +++ b/lib/jsdoc/name.js @@ -217,6 +217,11 @@ exports.hasAncestor = function(parent, child) { return hasAncestor; } + // fast path for obvious non-ancestors + if (child.indexOf(parent) !== 0) { + return hasAncestor; + } + do { memberof = exports.shorten(memberof).memberof; diff --git a/test/specs/jsdoc/name.js b/test/specs/jsdoc/name.js index 8805f089..0b034f0f 100644 --- a/test/specs/jsdoc/name.js +++ b/test/specs/jsdoc/name.js @@ -293,6 +293,12 @@ describe('jsdoc/name', function() { expect(hasAncestor).toBe(true); }); + it('should correctly identify when a non-ancestor is passed in', function() { + var hasAncestor = jsdoc.name.hasAncestor('module:foo', 'foo'); + + expect(hasAncestor).toBe(false); + }); + it('should not say that a longname is its own ancestor', function() { var hasAncestor = jsdoc.name.hasAncestor('module:foo', 'module:foo');