diff --git a/packages/jsdoc-ast/lib/ast-node.js b/packages/jsdoc-ast/lib/ast-node.js index f8e85bd8..537f1880 100644 --- a/packages/jsdoc-ast/lib/ast-node.js +++ b/packages/jsdoc-ast/lib/ast-node.js @@ -171,20 +171,19 @@ export function nodeToValue(node) { case Syntax.ExportNamedDeclaration: if (node.declaration) { - // like `var` in: export var foo = 'bar'; - // we need a single value, so we use the first variable name + // Like the declaration in: `export const foo = 'bar';` + // We need a single value, so we use the first variable name. if (node.declaration.declarations) { - str = `exports.${nodeToValue(node.declaration.declarations[0])}`; + str = `${LONGNAMES.MODULE_EXPORT}.${nodeToValue(node.declaration.declarations[0])}`; } else { - str = `exports.${nodeToValue(node.declaration)}`; + str = `${LONGNAMES.MODULE_EXPORT}.${nodeToValue(node.declaration)}`; } } - // otherwise we'll use the ExportSpecifier nodes break; case Syntax.ExportSpecifier: - str = `exports.${nodeToValue(node.exported)}`; + str = `${LONGNAMES.MODULE_EXPORT}.${nodeToValue(node.exported)}`; break; case Syntax.ArrowFunctionExpression: diff --git a/packages/jsdoc-core/lib/name.js b/packages/jsdoc-core/lib/name.js index 76e05551..daa5cc71 100644 --- a/packages/jsdoc-core/lib/name.js +++ b/packages/jsdoc-core/lib/name.js @@ -36,6 +36,8 @@ export const LONGNAMES = { GLOBAL: '', /** Longname for the default export in an ES2015 module. */ MODULE_DEFAULT_EXPORT: '', + /** Longname prefix for an export in an ES2015 module. */ + MODULE_EXPORT: '', }; // Module namespace prefix. diff --git a/packages/jsdoc-core/test/specs/lib/name.js b/packages/jsdoc-core/test/specs/lib/name.js index f121ca1c..99bbedf8 100644 --- a/packages/jsdoc-core/test/specs/lib/name.js +++ b/packages/jsdoc-core/test/specs/lib/name.js @@ -196,6 +196,10 @@ describe('@jsdoc/core.name', () => { it('has a MODULE_DEFAULT_EXPORT property', () => { expect(name.LONGNAMES.MODULE_DEFAULT_EXPORT).toBeString(); }); + + it('has a MODULE_EXPORT property', () => { + expect(name.LONGNAMES.MODULE_EXPORT).toBeString(); + }); }); // TODO: longnamesToTree tests diff --git a/packages/jsdoc-parse/lib/handlers.js b/packages/jsdoc-parse/lib/handlers.js index 18640b9a..1d91eaa8 100644 --- a/packages/jsdoc-parse/lib/handlers.js +++ b/packages/jsdoc-parse/lib/handlers.js @@ -20,8 +20,11 @@ import escape from 'escape-string-regexp'; const PROTOTYPE_OWNER_REGEXP = /^(.+?)(\.prototype|#)$/; const { LONGNAMES, SCOPE } = name; -const ESCAPED_MODULE_LONGNAMES = - escape(LONGNAMES.MODULE_DEFAULT_EXPORT) + '|' + escape('module.exports'); +const ESCAPED_MODULE_LONGNAMES = [ + escape(LONGNAMES.MODULE_DEFAULT_EXPORT), + escape(LONGNAMES.MODULE_EXPORT), + escape('module.exports'), +].join('|'); let currentModule = null; // Modules inferred from the value of an `@alias` tag, like `@alias module:foo.bar`.