From d18057db714c853681003ba72cf7a5773d915b04 Mon Sep 17 00:00:00 2001 From: NISHIZAWA Shuntaro Date: Fri, 19 Dec 2025 03:38:41 +0900 Subject: [PATCH] fix: improve plugin search logic to prevent infinite recursion --- src/utils.ts | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/utils.ts b/src/utils.ts index be411ab..9b8a8e8 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -277,7 +277,25 @@ async function formatCode( } const findPluginByParser = (parserName: string, options: ParserOptions) => { - const tsPlugin = options.plugins.find((plugin) => { + const plugins = options.plugins ?? []; + + // Only consider plugins that appear *before* prettier-plugin-jsdoc. + // Plugins that appear after us typically wrap our parser; delegating to them + // from our parse/preprocess hooks can create infinite recursion. + const jsdocIndex = plugins.findIndex((plugin) => { + return ( + typeof plugin === "object" && + plugin !== null && + !(plugin instanceof URL) && + (plugin as any).name && + (plugin as any).name === "prettier-plugin-jsdoc" + ); + }); + + const searchPlugins = + jsdocIndex === -1 ? plugins : plugins.slice(0, jsdocIndex); + + const tsPlugin = searchPlugins.find((plugin) => { return ( typeof plugin === "object" && plugin !== null &&