From ca6f5dac008906d3c07e78f1639fcd8168df23a5 Mon Sep 17 00:00:00 2001 From: Mohamed Shams El-Deen Date: Tue, 2 Jun 2026 18:14:38 +0300 Subject: [PATCH 1/2] feat(parameters): implement parameters logic via reduce Refactors formatParams to use reduce() instead of map(), enabling nested optional and rest parameter syntax as per doc-kit specification. --- plugins/shared/titles.mjs | 42 +++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/plugins/shared/titles.mjs b/plugins/shared/titles.mjs index 97c30114..a8d00065 100644 --- a/plugins/shared/titles.mjs +++ b/plugins/shared/titles.mjs @@ -63,21 +63,33 @@ export const fullName = model => { return `${root.name}.${name}`; }; -export const formatParams = (params = []) => - params - .map(({ name, flags }, i) => { - const paramName = flags?.isRest ? `...${name}` : name; - if (flags?.isRest) return i ? `, ${paramName}` : paramName; - - return flags?.isOptional - ? i - ? `[, ${paramName}]` - : `[${paramName}]` - : i - ? `, ${paramName}` - : paramName; - }) - .join(''); +export const formatParams = (params = []) => { + const { result, openBrackets } = params.reduce( + (acc, param, i) => { + const { name, flags } = param; + + const isRest = flags?.isRest ?? false; + const isOptional = isRest || (flags?.isOptional ?? false); + const paramName = isRest ? `...${name}` : name; + + if (isOptional) { + acc.result += i ? `[, ${paramName}` : `[${paramName}`; + acc.openBrackets++; + } else { + if (acc.openBrackets) { + acc.result += ']'.repeat(acc.openBrackets); + acc.openBrackets = 0; + } + acc.result += i ? `, ${paramName}` : paramName; + } + + return acc; + }, + { result: '', openBrackets: 0 } + ); + + return openBrackets ? result + ']'.repeat(openBrackets) : result; +}; export const signatureExpression = ( model, From 6d0425b2145c7a4d418e46dcff36c8ac9a729ca5 Mon Sep 17 00:00:00 2001 From: Mohamed Shams El-Deen <68347231+moshams272@users.noreply.github.com> Date: Fri, 5 Jun 2026 14:22:54 +0300 Subject: [PATCH 2/2] Enhance the code with `for` loop instead of `reduce` Co-authored-by: Aviv Keller --- plugins/shared/titles.mjs | 42 ++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/plugins/shared/titles.mjs b/plugins/shared/titles.mjs index a8d00065..e8920d4a 100644 --- a/plugins/shared/titles.mjs +++ b/plugins/shared/titles.mjs @@ -64,31 +64,27 @@ export const fullName = model => { }; export const formatParams = (params = []) => { - const { result, openBrackets } = params.reduce( - (acc, param, i) => { - const { name, flags } = param; - - const isRest = flags?.isRest ?? false; - const isOptional = isRest || (flags?.isOptional ?? false); - const paramName = isRest ? `...${name}` : name; - - if (isOptional) { - acc.result += i ? `[, ${paramName}` : `[${paramName}`; - acc.openBrackets++; - } else { - if (acc.openBrackets) { - acc.result += ']'.repeat(acc.openBrackets); - acc.openBrackets = 0; - } - acc.result += i ? `, ${paramName}` : paramName; + let result = ''; + let openBrackets = 0; + + for (let i = 0; i < params.length; i++) { + const { name, flags } = params[i]; + const isRest = flags?.isRest ?? false; + const paramName = isRest ? `...${name}` : name; + + if (isRest || flags?.isOptional) { + result += (i ? '[, ' : '[') + paramName; + openBrackets++; + } else { + if (openBrackets) { + result += ']'.repeat(openBrackets); + openBrackets = 0; } + result += (i ? ', ' : '') + paramName; + } + } - return acc; - }, - { result: '', openBrackets: 0 } - ); - - return openBrackets ? result + ']'.repeat(openBrackets) : result; + return result + ']'.repeat(openBrackets); }; export const signatureExpression = (