From cf1880343bc9527d024a5c8e731163d13c2d7892 Mon Sep 17 00:00:00 2001 From: Reda Al Sulais Date: Sun, 5 Nov 2023 02:03:58 +0300 Subject: [PATCH] fix: make `rearrangeRules` update the array itself --- .../src/language/common/tokenBuilder.ts | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/packages/parser/src/language/common/tokenBuilder.ts b/packages/parser/src/language/common/tokenBuilder.ts index fe48fe4fb..df1c3864a 100644 --- a/packages/parser/src/language/common/tokenBuilder.ts +++ b/packages/parser/src/language/common/tokenBuilder.ts @@ -34,12 +34,26 @@ export abstract class MermaidTokenBuilder extends DefaultTokenBuilder { return tokenTypes; } - private rearrangeRules(rules: GrammarAST.AbstractRule[]): GrammarAST.AbstractRule[] { - const pivotIndex = rules.findIndex((rule) => rule.name === 'TitleAndAccessibilities'); - if (pivotIndex === -1) { - return rules; + /** + * Reorders rules using a pivot rule. + * + * We use this function to reorder rules because imported rules are + * inserted at the end of the array. + * + * @param rules - the grammar rules. + */ + private rearrangeRules(rules: GrammarAST.AbstractRule[]): void { + const index = rules.findIndex((rule) => rule.name === 'TitleAndAccessibilities'); + if (index === -1) { + return; } - return [...rules.slice(pivotIndex), ...rules.slice(0, pivotIndex)]; + + const [item] = rules.splice(index, 1); + + rules.unshift(item); + + const itemsToMove = rules.splice(1, index); + rules.push(...itemsToMove); } }