Синтаксическое дерево (AST, Abstract Syntax Tree) в экосистеме JavaScript — это структурированное представление документа, где каждый элемент текста, разметки или кода превращается в узел дерева с определённым типом и свойствами. Remark и Rehype строят такие деревья для Markdown и HTML соответственно, превращая документ в объект, с которым можно безопасно и эффективно работать программно.
heading, paragraph, text,
link для Remark; element, text,
comment для Rehype), который определяет его роль и
допустимые свойства.text, уровни заголовка для
heading, URL для link. Дополнительно можно
хранить метаданные через поля data или
position.Remark и Rehype следуют философии одинакового обращения с контентом: вне зависимости от исходного формата, документ преобразуется в дерево с однородной структурой. Это даёт возможность:
mdast (Markdown Abstract Syntax
Tree).hast (HTML Abstract Syntax Tree).Это разделение позволяет оптимизировать работу с каждым форматом, сохраняя концепцию единого дерева. Для трансформации между Markdown и HTML используют промежуточное представление и последовательность плагинов.
Узлы AST можно:
Плагины Remark и Rehype работают через посещения узлов. Типичная структура плагина:
function plugin() {
return (tree) => {
visit(tree, 'type', (node) => {
// логика обработки узла
});
};
}
Где visit рекурсивно проходит по дереву, находя узлы
определённого типа, и выполняет заданные действия.
В экосистеме часто применяется подход чистой трансформации: дерево не изменяется напрямую, а создаётся его новая версия с нужными изменениями. Это позволяет:
AST позволяет строить сложные инструменты:
{
"type": "heading",
"depth": 2,
"children": [
{
"type": "text",
"value": "Философия синтаксических деревьев"
}
]
}
type: "heading" — тип узла.depth: 2 — уровень заголовка.children — массив вложенных узлов, в данном случае
текстовый узел.Pipeline обычно выглядит так:
mdast.mdast.mdast преобразуется в hast с помощью
remark-rehype.hast.hast в HTML.Это последовательное использование AST разных уровней позволяет гибко управлять контентом на всех стадиях.
Хотя деревья AST могут показаться сложными, их философия строится на трёх ключевых принципах: структура, однородность и модульность. Понимание этих принципов открывает возможности для глубокого анализа, трансформации и генерации контента в JavaScript.