Блоки кода
Rspress V2 использует Shiki для подсветки синтаксиса на этапе компиляции, что обеспечивает лучшую производительность во время выполнения.
При использовании блоков кода на нескольких языках соответствующий язык автоматически определяется на этапе компиляции, а размер бандла во время выполнения не увеличивается. Список поддерживаемых языков программирования смотрите в списке языков, поддерживаемых Shiki.
Базовое использование
Вы можете использовать синтаксис ``` для создания блоков кода. Например:
Отобразится так:
Заголовок блока кода
Вы можете добавить заголовок к блоку кода с помощью атрибута title="...".
Отобразится так:
Блок кода из файла
Вы можете использовать атрибут file="./path/to/file" без написания содержимого блока кода — это позволит подгрузить содержимое из внешнего файла.
Относительные пути
Используйте относительные пути, начинающиеся с ./ или ../, чтобы ссылаться на файлы относительно текущего MDX-файла:
Отобразится так:
Абсолютные пути с префиксом <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 включена глобально, все блоки кода по умолчанию будут показывать нумерацию строк.
Перенос длинных строк
Вы можете включить перенос длинных строк в отдельных блоках кода с помощью мета-атрибута wrapCode:
Отобразится так:
Вы также можете включить перенос длинных строк глобально, указав опцию defaultWrapCode в конфигурации:
Когда опция defaultWrapCode включена глобально, все блоки кода по умолчанию будут выполнять перенос длинных строк.
Комбинирование мета-атрибутов
Вы можете одновременно использовать несколько мета-атрибутов:
Отобразится так:
Блок кода с подсветкой различий
Отобразится так:
Трансформеры Shiki
Rspress V2 использует 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 только в случаях, когда это действительно необходимо, поскольку он увеличивает размер бандла во время выполнения и лишает возможности воспользоваться преимуществами подсветки синтаксиса на этапе компиляции.

