From 053ace645b7e1ab80baad31efc8091a4c2be111c Mon Sep 17 00:00:00 2001 From: Jeff Williams Date: Sun, 5 Oct 2025 10:03:42 -0700 Subject: [PATCH] fix(jsdoc-name): don't mangle names like `prototypeMethod` --- packages/jsdoc-name/lib/name.js | 3 ++- packages/jsdoc/test/fixtures/specialnames.js | 3 +++ packages/jsdoc/test/specs/documentation/specialnames.js | 5 +++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/jsdoc-name/lib/name.js b/packages/jsdoc-name/lib/name.js index c5990ebc..6439f4e2 100644 --- a/packages/jsdoc-name/lib/name.js +++ b/packages/jsdoc-name/lib/name.js @@ -114,7 +114,8 @@ export function prototypeToPunc(name) { return name; } - return name.replace(/(?:^|\.)prototype\.?/g, SCOPE.PUNC.INSTANCE); + // If there's a trailing open bracket ([), as in `Foo.prototype['bar']`, keep it. + return name.replace(/(?:^|\.)prototype(?:$|\.|(\[))/g, `${SCOPE.PUNC.INSTANCE}$1`); } /** diff --git a/packages/jsdoc/test/fixtures/specialnames.js b/packages/jsdoc/test/fixtures/specialnames.js index 81c1403e..7e7513c5 100644 --- a/packages/jsdoc/test/fixtures/specialnames.js +++ b/packages/jsdoc/test/fixtures/specialnames.js @@ -12,3 +12,6 @@ var prototype = { /** document me */ var hasOwnProperty = Object.prototype.hasOwnProperty; + +/** document me */ +function prototypeMethod() {} diff --git a/packages/jsdoc/test/specs/documentation/specialnames.js b/packages/jsdoc/test/specs/documentation/specialnames.js index e6c200e3..6648f817 100644 --- a/packages/jsdoc/test/specs/documentation/specialnames.js +++ b/packages/jsdoc/test/specs/documentation/specialnames.js @@ -20,6 +20,7 @@ describe('documenting symbols with special names', () => { const hasOwnProp = docSet.getByLongname('hasOwnProperty')[0]; const proto = docSet.getByLongname('prototype')[0]; const protoValueOf = docSet.getByLongname('prototype.valueOf')[0]; + const protoMethod = docSet.getByLongname('prototypeMethod')[0]; it('When a symbol is named "constructor", the symbol should appear in the docs.', () => { expect(construct).toBeObject(); @@ -40,4 +41,8 @@ describe('documenting symbols with special names', () => { it('When a symbol is named "prototype", its members are resolved correctly.', () => { expect(protoValueOf).toBeObject(); }); + + it('preserves names that start with `prototype`', () => { + expect(protoMethod).toBeObject(); + }); });