diff --git a/packages/langium/src/parser/cst-node-builder.ts b/packages/langium/src/parser/cst-node-builder.ts index 1d6902502..72c89a160 100644 --- a/packages/langium/src/parser/cst-node-builder.ts +++ b/packages/langium/src/parser/cst-node-builder.ts @@ -68,6 +68,8 @@ export class CstNodeBuilder { current.content.push(...nodes); return; } + // Otherwise we are at a newly created node + // Instead of adding the hidden nodes here, we search for the first parent node with content while (current.container) { const index = current.container.content.indexOf(current); if (index > 0) { diff --git a/packages/langium/src/parser/langium-parser.ts b/packages/langium/src/parser/langium-parser.ts index d94e50b0e..03a28b207 100644 --- a/packages/langium/src/parser/langium-parser.ts +++ b/packages/langium/src/parser/langium-parser.ts @@ -275,7 +275,7 @@ export class LangiumParser extends AbstractLangiumParser { }; } - private getHiddenTokens(token: IToken): IToken[] { + private extractHiddenTokens(token: IToken): IToken[] { const hiddenTokens = this.lexerResult!.hidden; if (!hiddenTokens.length) { return []; @@ -293,7 +293,7 @@ export class LangiumParser extends AbstractLangiumParser { consume(idx: number, tokenType: TokenType, feature: AbstractElement): void { const token = this.wrapper.wrapConsume(idx, tokenType); if (!this.isRecording() && this.isValidToken(token)) { - const hiddenTokens = this.getHiddenTokens(token); + const hiddenTokens = this.extractHiddenTokens(token); this.nodeBuilder.addHiddenNodes(hiddenTokens); const leafNode = this.nodeBuilder.buildLeafNode(token, feature); const { assignment, isCrossRef } = this.getAssignment(feature);