chore(parser): rearrange rules to make imported rules at the beginning

This commit is contained in:
Reda Al Sulais
2023-11-03 22:28:33 +03:00
parent fe2e46fe60
commit 1cda37659e

View File

@@ -1,5 +1,5 @@
import type { GrammarAST, Stream, TokenBuilderOptions } from 'langium'; import type { GrammarAST, Stream, TokenBuilderOptions } from 'langium';
import type { TokenType } from 'chevrotain'; import type { TokenType, TokenVocabulary } from 'chevrotain';
import { DefaultTokenBuilder } from 'langium'; import { DefaultTokenBuilder } from 'langium';
@@ -11,6 +11,14 @@ export abstract class MermaidTokenBuilder extends DefaultTokenBuilder {
this.keywords = new Set<string>(keywords); this.keywords = new Set<string>(keywords);
} }
public override buildTokens(
grammar: GrammarAST.Grammar,
options?: TokenBuilderOptions | undefined
): TokenVocabulary {
this.rearrangeRules(grammar.rules);
return super.buildTokens(grammar, options);
}
protected override buildKeywordTokens( protected override buildKeywordTokens(
rules: Stream<GrammarAST.AbstractRule>, rules: Stream<GrammarAST.AbstractRule>,
terminalTokens: TokenType[], terminalTokens: TokenType[],
@@ -25,4 +33,12 @@ export abstract class MermaidTokenBuilder extends DefaultTokenBuilder {
}); });
return tokenTypes; return tokenTypes;
} }
private rearrangeRules(rules: GrammarAST.AbstractRule[]): GrammarAST.AbstractRule[] {
const pivotIndex = rules.findIndex((rule) => rule.name === 'TitleAndAccessibilities');
if (pivotIndex === -1) {
return rules;
}
return [...rules.slice(pivotIndex), ...rules.slice(0, pivotIndex)];
}
} }