Skip to content

Commit b85199f

Browse files
committed
possible option is to return indent length instead of actual indent (speculative since indent works locally, but not in pipeline)
1 parent 0cfe0d3 commit b85199f

5 files changed

Lines changed: 28 additions & 10 deletions

File tree

packages/mermaid/src/diagrams/treeView/parser.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ import { parse, type TreeView } from '@mermaid-js/parser';
66

77
const populate = (ast: TreeView) => {
88
populateCommonDb(ast, db);
9-
ast.nodes.map((node) => db.addNode(node.indent?.length ?? 0, node.name));
9+
ast.nodes.map((node) =>
10+
db.addNode(node.indentLength ? parseInt(node.indentLength) : 0, node.name)
11+
);
1012
};
1113

1214
export const parser: ParserDefinition = {

packages/parser/src/language/treeView/module.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {
1212
inject,
1313
} from 'langium';
1414

15-
import { CommonValueConverter } from '../common/valueConverter.js';
15+
import { TreeViewValueConverter } from './valueConverter.js';
1616
import {
1717
MermaidGeneratedSharedModule,
1818
TreeViewGrammarGeneratedModule as TreeViewGeneratedModule,
@@ -25,7 +25,7 @@ import { TreeViewTokenBuilder } from './tokenBuilder.js';
2525
interface TreeViewAddedServices {
2626
parser: {
2727
TokenBuilder: TreeViewTokenBuilder;
28-
ValueConverter: CommonValueConverter;
28+
ValueConverter: TreeViewValueConverter;
2929
};
3030
}
3131

@@ -44,7 +44,7 @@ export const TreeViewModule: Module<
4444
> = {
4545
parser: {
4646
TokenBuilder: () => new TreeViewTokenBuilder(),
47-
ValueConverter: () => new CommonValueConverter(),
47+
ValueConverter: () => new TreeViewValueConverter(),
4848
},
4949
};
5050

packages/parser/src/language/treeView/treeView.langium

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ hidden terminal ML_COMMENT: /\%\%[^\n]*/;
3434
hidden terminal NL: /\r?\n/;
3535

3636
TreeNode:
37-
indent=INDENTATION?
37+
// actually contains the indent, but is converted to a length value by valueConverter
38+
indentLength=INDENTATION?
3839
name=TEXT
3940
;
4041

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import type { CstNode, GrammarAST, ValueType } from 'langium';
2+
import { AbstractMermaidValueConverter } from '../common/index.js';
3+
4+
export class TreeViewValueConverter extends AbstractMermaidValueConverter {
5+
protected runCustomConverter(
6+
rule: GrammarAST.AbstractRule,
7+
input: string,
8+
_cstNode: CstNode
9+
): ValueType | undefined {
10+
if (rule.name === 'INDENTATION') {
11+
return input?.length || 0;
12+
}
13+
return undefined;
14+
}
15+
}

packages/parser/tests/treeView.test.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ describe('TreeView Parser', () => {
2626
expect(result.value.$type).toBe('TreeView');
2727
expect(result.value.nodes).toHaveLength(1);
2828
expect(result.value.nodes[0].name).toBe('Root');
29-
expect(result.value.nodes[0].indent).toBe(undefined);
29+
expect(result.value.nodes[0].indentLength).toBe(undefined);
3030
});
3131

3232
it('should parse a treeView with child nodes', () => {
@@ -36,16 +36,16 @@ describe('TreeView Parser', () => {
3636
expect(result.value.nodes).toHaveLength(4);
3737

3838
expect(result.value.nodes[0].name).toBe('Root');
39-
expect(result.value.nodes[0].indent).toBe(undefined);
39+
expect(result.value.nodes[0].indentLength).toBe(undefined);
4040

4141
expect(result.value.nodes[1].name).toBe('Child1');
42-
// expect(result.value.nodes[1].indent?.length).toBe(4);
42+
expect(result.value.nodes[1].indentLength).toBe(4);
4343

4444
expect(result.value.nodes[2].name).toBe('Child2');
45-
// expect(result.value.nodes[2].indent?.length).toBe(4);
45+
expect(result.value.nodes[2].indentLength).toBe(4);
4646

4747
expect(result.value.nodes[3].name).toBe('Child3');
48-
// expect(result.value.nodes[3].indent?.length).toBe(8);
48+
expect(result.value.nodes[3].indentLength).toBe(8);
4949
});
5050
});
5151

0 commit comments

Comments
 (0)