Блоки кода
Rspress использует Shiki для подсветки синтаксиса на этапе компиляции, что обеспечивает лучшую производительность во время выполнения.
При использовании блоков кода на нескольких языках соответствующий язык автоматически определяется на этапе компиляции, а размер бандла во время выполнения не увеличивается. Список поддерживаемых языков программирования смотрите в списке языков, поддерживаемых Shiki.
Базовое использование
Вы можете использовать синтаксис ``` для создания блоков кода. Например:
Это отображается как:
Заголовок блока кода
Вы можете добавить заголовок к блоку кода с помощью атрибута title="...".
Это отображается как:
Блок кода из файла
Вы можете использовать атрибут file="./path/to/file" без написания содержимого блока кода — это позволит подгрузить содержимое из внешнего файла.
Относительные пути
Используйте относительные пути, начинающиеся с ./ или ../, чтобы ссылаться на файлы относительно текущего MDX-файла:
Это отображается как:
Абсолютные пути с префиксом /
Используйте префикс / для ссылки на файлы с помощью абсолютных путей относительно директории docs. Это полезно, когда нужно ссылаться на общие файлы кода из разных мест документации:
Например, если ваша директория docs находится в /project/docs, то /components/Button.tsx будет указывать на /project/docs/components/Button.tsx.
Абсолютные пути с префиксом <root>/
Используйте префикс <root>/, чтобы ссылаться на файлы по абсолютному пути относительно корневой директории проекта. Это удобно, когда нужно обращаться к общим файлам кода из разных мест в документации:
Например, если корень вашего проекта — /project, то путь <root>/src/components/Button.tsx будет указывать на файл, расположенный по адресу /project/src/components/Button.tsx.
При использовании блоков кода из внешних файлов их часто комбинируют с соглашениями о маршрутах. Называйте такие файлы с подчёркиванием в начале — _.
Подсветка отдельных строк
Вы можете подсвечивать отдельные строки кода с помощью трансформеров Shiki и специального трансформера transformerNotationHighlight, а также комментариев вида // [!code highlight]:
Это отображается как:
Подсветка строк через meta-информацию
При использовании meta-информации для подсветки строк помните, что автоформаттеры и другие инструменты могут менять нумерацию строк. Для лучшей поддержки и удобства рекомендуется использовать подсветку через специальные комментарии.
Вы можете подсвечивать строки кода с помощью трансформера transformerCompatibleMetaHighlight из пакета @rspress/core/shiki-transformers и meta-информации в заголовке блока кода.
Это отображается как:
Нумерация строк
Вы можете включить отображение номеров строк для отдельных блоков кода с помощью мета-атрибута lineNumbers:
Это отображается как:
Вы также можете включить нумерацию строк глобально, указав опцию showLineNumbers в конфигурации:
Когда опция showLineNumbers включена глобально, все блоки кода по умолчанию отображают номера строк. Вы можете отключить номера строк для конкретного блока кода, используя lineNumbers=false:
Перенос длинных строк
Вы можете включить перенос длинных строк в отдельных блоках кода с помощью мета-атрибута wrapCode:
Это отображается как:
Вы также можете включить перенос длинных строк глобально, указав опцию defaultWrapCode в конфигурации:
Когда опция defaultWrapCode включена глобально, все блоки кода по умолчанию будут переносить длинные строки. Вы можете отключить перенос кода для конкретного блока кода, используя wrapCode=false:
Высота блока кода
Вы можете управлять поведением высоты блоков кода, используя мета-атрибуты height и fold. Есть три варианта:
fold: сворачиваемый блок кода с кнопкой разворачивания. Высота по умолчанию 300px.height=X: фиксированная высота с вертикальной полосой прокрутки. Если используется вместе сfold, блок кода будет сворачиваться до указанной высоты.- Без мета-атрибутов: полностью развёрнут по умолчанию. Вы можете изменить это глобально через
markdown.defaultCodeOverflow.
Сворачивание
Используйте атрибут fold для включения функциональности разворачивания/сворачивания. Вы также можете настроить высоту свёрнутого блока через атрибут height (в пикселях, по умолчанию 300):
Это отображается как:
Кнопка разворачивания/сворачивания не будет отображаться, если фактическая высота содержимого меньше height.
Прокрутка
Используйте атрибут height отдельно (без fold), чтобы задать фиксированную высоту с вертикальной полосой прокрутки:
Это отображается как:
Комбинирование мета-атрибутов
Вы можете одновременно использовать несколько мета-атрибутов:
Это отображается как:
Блок кода с подсветкой различий
Это отображается как:
Трансформеры Shiki
Rspress использует Shiki для подсветки кода на этапе компиляции, что даёт широкие возможности по кастомизации блоков кода.
Вы можете подключать собственные трансформеры Shiki через опцию markdown.shiki.transformers — это позволяет получать более богатые эффекты в блоках кода.
Помимо уже упомянутого выше transformerNotationHighlight, Rspress по умолчанию включает следующие трансформеры из пакета @shikijs/transformers:
transformerNotationDiff
Это отображается как:
transformerNotationErrorLevel
Это отображается как:
transformerNotationFocus
Это отображается как:
Twoslash
Twoslash — это формат разметки для кода на TypeScript, который позволяет создавать полностью автономные примеры кода, автоматически дополняя их информацией о типах и подсказками от компилятора TypeScript. Он широко используется на официальном сайте TypeScript.
Rspress предоставляет плагин @rspress/plugin-twoslash, который включает поддержку Twoslash в Rspress. Подробности — в документации @rspress/plugin-twoslash.
Подсветка синтаксиса во время выполнения
Когда нужно динамически отображать блоки кода во время выполнения — например, в интерактивной документации или при подгрузке кода с сервера, — Rspress предоставляет компонент CodeBlockRuntime.
Пример использования:
Используйте CodeBlockRuntime только при необходимости. Он увеличивает размер runtime-бандла и не позволяет использовать преимущества подсветки кода на этапе сборки.

