2025, Nov 25 03:02

Подсветка кода в Sphinx и Pygments: почему кажется неполной и как выбрать стиль

Разбираем, почему в Sphinx код Python подсвечен частично: роль стиля Pygments, как перечислить доступные стили и выбрать подходящий, чтобы улучшить читаемость.

Подсветка кода в Sphinx, которая не совпадает с тем, что вы видите в редакторе, может удивлять, особенно когда части фрагмента Python остаются неокрашенными. Если ваша документация использует оформление по умолчанию, а вы ожидаете палитру «как в VS Code», корень несоответствия почти всегда в выбранном стиле, а не в ошибке вашей настройки.

Суть проблемы

У вас в Sphinx есть блок кода на Python, и вы замечаете, что подсвечены только отдельные части. Конфигурация использует стиль по умолчанию. Фрагмент выглядит так:

import logging as logsys
logsys.getLogger('mymodule').setLevel(logsys.INFO)

На собранной странице вызовы функций и некоторые имена остаются без подсветки, тогда как ключевые слова и строки могут быть выделены. Если вы рассчитываете на более широкую палитру цветов токенов, как в вашей IDE, это кажется незавершённым.

Что на самом деле происходит

Визуальный результат зависит от активного стиля Pygments. Стиль определяет, какие типы токенов получают цвет, а какие остаются нейтральными. Многие встроенные стили намеренно оставляют места вызова и некоторые имена без оформления. Это дизайнерское решение темы, а не сбой подсветчика. Как отмечено в справочнике по стилям Pygments, в их примерах большинство стилей не раскрашивают функции в местах вызова.

Большинство стилей не раскрашивают функции в местах вызова (Math.fib в тех примерах).

Если «частичная подсветка» выглядит для вас неправильной, вероятнее всего, вам просто нужен другой стиль, который окрашивает больше категорий токенов и лучше соответствует вашим предпочтениям.

Решение

Сначала перечислите, какие стили доступны в вашей среде, чтобы их попробовать. Запустите небольшой помощник:

from pygments.styles import get_all_styles as enumerate_styles
print(list(enumerate_styles()))

Он выведет названия, которые можно подставить в конфигурацию Sphinx. Дальше — обычный перебор: выберите стиль-кандидат из списка, соберите документацию и оцените результат. Если ни один из встроенных вариантов не устраивает, установите плагин, который предоставляет стиль, ближе соответствующий вашим предпочтениям.

Почему это важно

Документация — часть вашего опыта разработчика. Читаемые примеры кода снижают когнитивную нагрузку, ускоряют просмотр и уменьшают вероятность ошибок при копировании. Когда подсветка соответствует тому, как вы мыслите о коде, проще заметить главное в фрагменте — будь то вызовы функций, доступ через пространство имён или уровни логирования. Правильно выбранный стиль — небольшой штрих с высокой отдачей.

Итоги

Если фрагменты Python в Sphinx выглядят «наполовину раскрашенными», это не обязательно баг. Эффект вызван выбранным стилем Pygments, и многие стили по умолчанию намеренно оставляют места вызова и некоторые имена без цвета. Программно перечислите доступные стили, попробуйте несколько и переключитесь на тот, что соответствует вашим визуальным ожиданиям. Если ничего не откликается, поищите внешний плагин со стилем, который лучше вписывается в ваш рабочий процесс.