mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-08-23 10:16:43 +02:00
Merge pull request #6725 from mermaid-js/use-treemap-in-languim
Use treemap in languim
This commit is contained in:
5
.changeset/stale-crabs-deny.md
Normal file
5
.changeset/stale-crabs-deny.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'mermaid': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
chore: use Treemap instead of TreemapDoc in parser.
|
@@ -8,7 +8,7 @@ export {
|
|||||||
Architecture,
|
Architecture,
|
||||||
GitGraph,
|
GitGraph,
|
||||||
Radar,
|
Radar,
|
||||||
TreemapDoc,
|
Treemap,
|
||||||
Branch,
|
Branch,
|
||||||
Commit,
|
Commit,
|
||||||
Merge,
|
Merge,
|
||||||
@@ -20,7 +20,7 @@ export {
|
|||||||
isPieSection,
|
isPieSection,
|
||||||
isArchitecture,
|
isArchitecture,
|
||||||
isGitGraph,
|
isGitGraph,
|
||||||
isTreemapDoc,
|
isTreemap,
|
||||||
isBranch,
|
isBranch,
|
||||||
isCommit,
|
isCommit,
|
||||||
isMerge,
|
isMerge,
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
import type { ValidationAcceptor, ValidationChecks } from 'langium';
|
import type { ValidationAcceptor, ValidationChecks } from 'langium';
|
||||||
import type { MermaidAstType, TreemapDoc } from '../generated/ast.js';
|
import type { MermaidAstType, Treemap } from '../generated/ast.js';
|
||||||
import type { TreemapServices } from './module.js';
|
import type { TreemapServices } from './module.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -9,10 +9,10 @@ export function registerValidationChecks(services: TreemapServices) {
|
|||||||
const validator = services.validation.TreemapValidator;
|
const validator = services.validation.TreemapValidator;
|
||||||
const registry = services.validation.ValidationRegistry;
|
const registry = services.validation.ValidationRegistry;
|
||||||
if (registry) {
|
if (registry) {
|
||||||
// Use any to bypass type checking since we know TreemapDoc is part of the AST
|
// Use any to bypass type checking since we know Treemap is part of the AST
|
||||||
// but the type system is having trouble with it
|
// but the type system is having trouble with it
|
||||||
const checks: ValidationChecks<MermaidAstType> = {
|
const checks: ValidationChecks<MermaidAstType> = {
|
||||||
TreemapDoc: validator.checkSingleRoot.bind(validator),
|
Treemap: validator.checkSingleRoot.bind(validator),
|
||||||
// Remove unused validation for TreemapRow
|
// Remove unused validation for TreemapRow
|
||||||
};
|
};
|
||||||
registry.register(checks, validator);
|
registry.register(checks, validator);
|
||||||
@@ -27,7 +27,7 @@ export class TreemapValidator {
|
|||||||
* Validates that a treemap has only one root node.
|
* Validates that a treemap has only one root node.
|
||||||
* A root node is defined as a node that has no indentation.
|
* A root node is defined as a node that has no indentation.
|
||||||
*/
|
*/
|
||||||
checkSingleRoot(doc: TreemapDoc, accept: ValidationAcceptor): void {
|
checkSingleRoot(doc: Treemap, accept: ValidationAcceptor): void {
|
||||||
let rootNodeIndentation;
|
let rootNodeIndentation;
|
||||||
|
|
||||||
for (const row of doc.TreemapRows) {
|
for (const row of doc.TreemapRows) {
|
||||||
|
@@ -34,14 +34,14 @@ interface ClassDefStatement {
|
|||||||
className: string
|
className: string
|
||||||
styleText: string // Optional style text
|
styleText: string // Optional style text
|
||||||
}
|
}
|
||||||
interface TreemapDoc {
|
interface Treemap {
|
||||||
TreemapRows: TreemapRow[]
|
TreemapRows: TreemapRow[]
|
||||||
title?: string
|
title?: string
|
||||||
accTitle?: string
|
accTitle?: string
|
||||||
accDescr?: string
|
accDescr?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
entry TreemapDoc returns TreemapDoc:
|
entry Treemap returns Treemap:
|
||||||
TREEMAP_KEYWORD
|
TREEMAP_KEYWORD
|
||||||
(
|
(
|
||||||
TitleAndAccessibilities
|
TitleAndAccessibilities
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
import { describe, expect, it } from 'vitest';
|
import { describe, expect, it } from 'vitest';
|
||||||
import { expectNoErrorsOrAlternatives } from './test-util.js';
|
import { expectNoErrorsOrAlternatives } from './test-util.js';
|
||||||
import type { TreemapDoc, Section, Leaf, TreemapRow } from '../src/language/generated/ast.js';
|
import type { Treemap, Section, Leaf, TreemapRow } from '../src/language/generated/ast.js';
|
||||||
import type { LangiumParser } from 'langium';
|
import type { LangiumParser } from 'langium';
|
||||||
import { createTreemapServices } from '../src/language/treemap/module.js';
|
import { createTreemapServices } from '../src/language/treemap/module.js';
|
||||||
|
|
||||||
@@ -9,21 +9,21 @@ describe('Treemap Parser', () => {
|
|||||||
const parser: LangiumParser = services.parser.LangiumParser;
|
const parser: LangiumParser = services.parser.LangiumParser;
|
||||||
|
|
||||||
const parse = (input: string) => {
|
const parse = (input: string) => {
|
||||||
return parser.parse<TreemapDoc>(input);
|
return parser.parse<Treemap>(input);
|
||||||
};
|
};
|
||||||
|
|
||||||
describe('Basic Parsing', () => {
|
describe('Basic Parsing', () => {
|
||||||
it('should parse empty treemap', () => {
|
it('should parse empty treemap', () => {
|
||||||
const result = parse('treemap');
|
const result = parse('treemap');
|
||||||
expectNoErrorsOrAlternatives(result);
|
expectNoErrorsOrAlternatives(result);
|
||||||
expect(result.value.$type).toBe('TreemapDoc');
|
expect(result.value.$type).toBe('Treemap');
|
||||||
expect(result.value.TreemapRows).toHaveLength(0);
|
expect(result.value.TreemapRows).toHaveLength(0);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should parse a section node', () => {
|
it('should parse a section node', () => {
|
||||||
const result = parse('treemap\n"Root"');
|
const result = parse('treemap\n"Root"');
|
||||||
expectNoErrorsOrAlternatives(result);
|
expectNoErrorsOrAlternatives(result);
|
||||||
expect(result.value.$type).toBe('TreemapDoc');
|
expect(result.value.$type).toBe('Treemap');
|
||||||
expect(result.value.TreemapRows).toHaveLength(1);
|
expect(result.value.TreemapRows).toHaveLength(1);
|
||||||
if (result.value.TreemapRows[0].item) {
|
if (result.value.TreemapRows[0].item) {
|
||||||
expect(result.value.TreemapRows[0].item.$type).toBe('Section');
|
expect(result.value.TreemapRows[0].item.$type).toBe('Section');
|
||||||
@@ -39,7 +39,7 @@ describe('Treemap Parser', () => {
|
|||||||
"Child2" : 200
|
"Child2" : 200
|
||||||
`);
|
`);
|
||||||
expectNoErrorsOrAlternatives(result);
|
expectNoErrorsOrAlternatives(result);
|
||||||
expect(result.value.$type).toBe('TreemapDoc');
|
expect(result.value.$type).toBe('Treemap');
|
||||||
expect(result.value.TreemapRows).toHaveLength(3);
|
expect(result.value.TreemapRows).toHaveLength(3);
|
||||||
|
|
||||||
if (result.value.TreemapRows[0].item) {
|
if (result.value.TreemapRows[0].item) {
|
||||||
@@ -95,7 +95,7 @@ describe('Treemap Parser', () => {
|
|||||||
|
|
||||||
// We're only checking that the multiple root nodes parse successfully
|
// We're only checking that the multiple root nodes parse successfully
|
||||||
// The validation errors would be reported by the validator during validation
|
// The validation errors would be reported by the validator during validation
|
||||||
expect(result.value.$type).toBe('TreemapDoc');
|
expect(result.value.$type).toBe('Treemap');
|
||||||
expect(result.value.TreemapRows).toHaveLength(2);
|
expect(result.value.TreemapRows).toHaveLength(2);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -104,7 +104,7 @@ describe('Treemap Parser', () => {
|
|||||||
it('should parse a treemap with title', () => {
|
it('should parse a treemap with title', () => {
|
||||||
const result = parse('treemap\ntitle My Treemap Diagram\n"Root"\n "Child": 100');
|
const result = parse('treemap\ntitle My Treemap Diagram\n"Root"\n "Child": 100');
|
||||||
expectNoErrorsOrAlternatives(result);
|
expectNoErrorsOrAlternatives(result);
|
||||||
expect(result.value.$type).toBe('TreemapDoc');
|
expect(result.value.$type).toBe('Treemap');
|
||||||
// We can't directly test the title property due to how Langium processes TitleAndAccessibilities
|
// We can't directly test the title property due to how Langium processes TitleAndAccessibilities
|
||||||
// but we can verify the TreemapRows are parsed correctly
|
// but we can verify the TreemapRows are parsed correctly
|
||||||
expect(result.value.TreemapRows).toHaveLength(2);
|
expect(result.value.TreemapRows).toHaveLength(2);
|
||||||
@@ -113,7 +113,7 @@ describe('Treemap Parser', () => {
|
|||||||
it('should parse a treemap with accTitle', () => {
|
it('should parse a treemap with accTitle', () => {
|
||||||
const result = parse('treemap\naccTitle: Accessible Title\n"Root"\n "Child": 100');
|
const result = parse('treemap\naccTitle: Accessible Title\n"Root"\n "Child": 100');
|
||||||
expectNoErrorsOrAlternatives(result);
|
expectNoErrorsOrAlternatives(result);
|
||||||
expect(result.value.$type).toBe('TreemapDoc');
|
expect(result.value.$type).toBe('Treemap');
|
||||||
// We can't directly test the accTitle property due to how Langium processes TitleAndAccessibilities
|
// We can't directly test the accTitle property due to how Langium processes TitleAndAccessibilities
|
||||||
expect(result.value.TreemapRows).toHaveLength(2);
|
expect(result.value.TreemapRows).toHaveLength(2);
|
||||||
});
|
});
|
||||||
@@ -123,7 +123,7 @@ describe('Treemap Parser', () => {
|
|||||||
'treemap\naccDescr: This is an accessible description\n"Root"\n "Child": 100'
|
'treemap\naccDescr: This is an accessible description\n"Root"\n "Child": 100'
|
||||||
);
|
);
|
||||||
expectNoErrorsOrAlternatives(result);
|
expectNoErrorsOrAlternatives(result);
|
||||||
expect(result.value.$type).toBe('TreemapDoc');
|
expect(result.value.$type).toBe('Treemap');
|
||||||
// We can't directly test the accDescr property due to how Langium processes TitleAndAccessibilities
|
// We can't directly test the accDescr property due to how Langium processes TitleAndAccessibilities
|
||||||
expect(result.value.TreemapRows).toHaveLength(2);
|
expect(result.value.TreemapRows).toHaveLength(2);
|
||||||
});
|
});
|
||||||
@@ -136,7 +136,7 @@ accDescr: This is an accessible description
|
|||||||
"Root"
|
"Root"
|
||||||
"Child": 100`);
|
"Child": 100`);
|
||||||
expectNoErrorsOrAlternatives(result);
|
expectNoErrorsOrAlternatives(result);
|
||||||
expect(result.value.$type).toBe('TreemapDoc');
|
expect(result.value.$type).toBe('Treemap');
|
||||||
// We can't directly test these properties due to how Langium processes TitleAndAccessibilities
|
// We can't directly test these properties due to how Langium processes TitleAndAccessibilities
|
||||||
expect(result.value.TreemapRows).toHaveLength(2);
|
expect(result.value.TreemapRows).toHaveLength(2);
|
||||||
});
|
});
|
||||||
|
Reference in New Issue
Block a user