Реализация поддержки языка Mermaid.js для IDE на базе платформы IntelliJ
Университет ИТМО
Санкт-Петербург, 2023
Студент: Руководитель: | Бережко Екатерина Игоревна Пости Иван Маркович |
Mermaid.js
[1] GitLab, GitHub, GitBook, MS Azure, Confluence - https://mermaid.js.org/ecosystem/integrations.html
2/14
Бережко Екатерина | Реализация поддержки языка Mermaid.js для IDE на базе платформы IntelliJ
Примеры диаграмм Mermaid.js
3/14
Бережко Екатерина | Реализация поддержки языка Mermaid.js для IDE на базе платформы IntelliJ
flowchart
A --> B
C -.-> D
sequenceDiagram
A ->> B: Text
B -->> A: Text
Поддержка в IntelliJ IDE
4/14
Бережко Екатерина | Реализация поддержки языка Mermaid.js для IDE на базе платформы IntelliJ
Поддержка языка в плагине для IntellIJ
5/14
Бережко Екатерина | Реализация поддержки языка Mermaid.js для IDE на базе платформы IntelliJ
Подсветка синтаксиса и ошибок
6/14
Бережко Екатерина | Реализация поддержки языка Mermaid.js для IDE на базе платформы IntelliJ
Разрешение ссылок
7/14
Бережко Екатерина | Реализация поддержки языка Mermaid.js для IDE на базе платформы IntelliJ
classDiagram
Animal <|-- Duck
class Duck {
+String color
+swim()
+quack()
}
Any <|-- Duck
class Duck {
+int size
}
Дополнение, форматирование и сворачивание кода
8/14
Бережко Екатерина | Реализация поддержки языка Mermaid.js для IDE на базе платформы IntelliJ
Лексер и парсер Mermaid.js
stateDiagram
State1: The state
note right of State1 : The note
9/14
Бережко Екатерина | Реализация поддержки языка Mermaid.js для IDE на базе платформы IntelliJ
Цель и задачи
Цель: Реализовать поддержку языка Mermaid.js с помощью плагина для IDE на базе платформы IntelliJ
Задачи:
10/14
Бережко Екатерина | Реализация поддержки языка Mermaid.js для IDE на базе платформы IntelliJ
Переработка лексера и парсера
Бережко Екатерина | Реализация поддержки языка Mermaid.js для IDE на базе платформы IntelliJ
11/14
Реализация подсветки синтаксиса и ошибок
12/14
Бережко Екатерина | Реализация поддержки языка Mermaid.js для IDE на базе платформы IntelliJ
Функциональность реализованного плагина
13/14
Бережко Екатерина | Реализация поддержки языка Mermaid.js для IDE на базе платформы IntelliJ
Результаты
Бережко Екатерина | Реализация поддержки языка Mermaid.js для IDE на базе платформы IntelliJ
14/14
Mermaid IntelliJ IDE Plugin
15/14
Бережко Екатерина | Реализация поддержки языка Mermaid.js для IDE на базе платформы IntelliJ
Mermaid IntelliJ IDE Plugin on JetBrains Marketplace
https://plugins.jetbrains.com/plugin/20146-mermaid
Поддержка в Mermaid Live Editor
flowchart
direction LR
A --> LR
1
2
3
16/14
Бережко Екатерина | Реализация поддержки языка Mermaid.js для IDE на базе платформы IntelliJ
Реализация отображения диаграмм
17/14
Бережко Екатерина | Реализация поддержки языка Mermaid.js для IDE на базе платформы IntelliJ
Лексер и парсер Mermaid.js
Реализованы с помощью Jison, который имеет ряд особенностей[1]:
18/14
Бережко Екатерина | Реализация поддержки языка Mermaid.js для IDE на базе платформы IntelliJ
Лексер Mermaid.js
<TEXT>\s*":"[^:\n;]+ {
this.popState();
yytext = yytext.substr(2).trim();
return 'TEXT';
}
note left of State1 : This is the note to the left
Входная строка:
Результат:
Правило:
19/14
Бережко Екатерина | Реализация поддержки языка Mermaid.js для IDE на базе платформы IntelliJ
Лексер Mermaid.js
<TEXT>\s*":"[^:\n;]+ {
this.popState();
yytext = yytext.substr(2).trim();
return 'TEXT';
}
note left of State1 : This is the note to the left
Входная строка:
Результат:
Правило:
20/14
Бережко Екатерина | Реализация поддержки языка Mermaid.js для IDE на базе платформы IntelliJ
Лексер Mermaid.js
note left of State1 : This is the note to the left
Входная строка:
Старый результат:
Новый результат:
21/14
Бережко Екатерина | Реализация поддержки языка Mermaid.js для IDE на базе платформы IntelliJ
Лексер Mermaid.js
actor A as Alice
22/14
Бережко Екатерина | Реализация поддержки языка Mermaid.js для IDE на базе платформы IntelliJ
Лексер Mermaid.js
A as Alice .
[^\->:\n,;]+?([\-]*[^\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$)
MATCH 1: A
MATCH 2: as Alice .
23/14
Бережко Екатерина | Реализация поддержки языка Mermaid.js для IDE на базе платформы IntelliJ
Лексер Mermaid.js
A as Alice .
[^\->:\s,;]+?([\-]*[^\->:\s,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$)
MATCH 1: A
24/14
Бережко Екатерина | Реализация поддержки языка Mermaid.js для IDE на базе платформы IntelliJ
Лексер Mermaid.js
A as Alice .
[^\->:\s,;]+?([\-]*[^\->:\s,;]+?)*?
MATCH 1: A
MATCH 2: a
MATCH 3: s
MATCH 4: A
MATCH 5: l
MATCH 6: i …
25/14
Бережко Екатерина | Реализация поддержки языка Mermaid.js для IDE на базе платформы IntelliJ
Лексер Mermaid.js
A as Alice .
[^\->:\s,;]+([\-]*[^\->:\s,;]+)*
MATCH 1: A
MATCH 2: as
MATCH 3: Alice
26/14
Бережко Екатерина | Реализация поддержки языка Mermaid.js для IDE на базе платформы IntelliJ