Освоєння списків Markdown: стандарти відступів CommonMark та GitHub Flavored Markdown (GFM)
Технічна основа відображення списків Markdown
Markdown зарекомендував себе як стандартна мова розмітки для сучасної документації програмного забезпечення, технічних специфікацій, особистих баз знань та комунікації розробників. Хоча однорівневі марковані списки (- пункт) та нумеровані списки (1. пункт) виглядають просто, створення глибоко вкладених ієрархічних структур додає значної складності у форматуванні. Різні парсери Markdown — такі як CommonMark, GitHub Flavored Markdown (GFM), Python-Markdown та Pandoc — застосовують суворі правила щодо вибору маркерів, співвідношення табуляцій і пробілів та відступів дочірніх блоків.
Коли списки копіюються з різних текстових редакторів (таких як VS Code, Sublime Text, Xcode, Apple Notes або Microsoft Word), виникають приховані помилки відступів. Один пропущений пробіл у дочірньому пункті призводить до того, що компілятор Markdown інтерпретує вкладений вузол як елемент верхнього рівня або окремий абзац. Інструмент Nested List & Indentation Formatter від Utiliome усуває ці аномалії, аналізуючи AST (абстрактне синтаксичне дерево) вхідного тексту та регенеруючи стандартизований Markdown.
Правила відступів: 2 пробіли проти 4 пробілів
Одною з найпоширеніших дискусій при створенні технічної документації є вибір між 2 та 4 пробілами для відступу вкладених списків. Вибір залежить від специфікації цільового парсера:
Правило 2 пробілів (стандарт GFM та Prettier): У сучасних екосистемах вебдокументації, таких як GitHub, Docusaurus, Nextra та Obsidian, стандартним вважається відступ у 2 пробіли на рівень. Це правило вирівнює дочірній вміст під початком тексту батьківського пункту:
- Елемент верхнього рівня 1 - Вкладений дочірній елемент 1.1 - Вкладений дочірній елемент 1.2 - Глибоко вкладений елемент 1.2.1 - Елемент верхнього рівня 2Правило 4 пробілів (суворий CommonMark та Python-Markdown): Суворі реалізації CommonMark вимагають, щоб дочірні блоки, фрагменти коду та вкладені списки всередині нумерованих списків мали відступ у 4 пробіли (або 1 табуляцію) для правильної вкладеності:
1. Перший крок у робочому процесі - Пов'язаний підпункт A - Пов'язаний підпункт B 2. Другий крок у робочому процесіПастки табуляцій та пробілів: Змішування символів табуляції (
\t) із пробілами ASCII (\x20) є головною причиною порушення відображення документації Markdown. Вебрушії інтерпретують табуляцію неоднорідно (часто як 4 або 8 колонок), через що вкладені елементи візуально зміщуються. Utiliome автоматично конвертує всі символи табуляції у пробіли відповідно до ваших налаштувань.
Нормалізація маркерів та виправлення нумерації
Markdown підтримує три різні символи маркерів для маркованих списків: дефіс (-), зірочку (*) та плюс (+). Хоча всі три створюють коректні елементи HTML (<ul>), змішування типів маркерів в одному документі створює візуальний хаос і не проходить автоматичні перевірки лінтера (наприклад, правило MD004 у markdownlint).
Крім того, нумерація списків часто порушується під час редагування. Автори часто вставляють пункти в середину нумерованого списку або покладаються на синтаксис 1.:
<!-- Невідформатований / порушений вхідний текст -->
* Функція A
- Функція B
+ Функція C
1. Початковий крок
1. Другий крок (скопійовано з чернетки)
4. Крок з порушеним порядком
Форматер Utiliome нормалізує всі маркери до обраного єдиного символу (наприклад, замінює все на -) та послідовно перенумеровує списки (1., 2., 3.) або стандартизує їх до одиничних інкрементів (1., 1., 1.) відповідно до гайдлайнів вашої команди.