Violet Ops раскрашивает роли Ansible по смыслу. Модуль, его параметры, ключи задачи и переменные получают разные цвета, поэтому опечатку в параметре видно до запуска плейбука. Jinja, Helm, Jenkinsfile, shell, Go, Python и SQL тоже размечены.
В YAML всё выглядит одинаково: ключ, двоеточие, значение. Расширение Ansible от Red Hat знает, где модуль, а где его параметр. Тема дала каждой роли свой цвет.
ansible.builtin.template, community.general.ufw: розовый, жирный.src, dest, mode: бирюзовый. Красятся только параметры из документации модуля, поэтому опечатка остаётся синей среди бирюзовых.name, when, loop, register, become: сиреневый, жирный.{{ }} жёлтая, объявление и использование не спутать.| default, | selectattr, | join: изумрудные.Стандартная грамматика Groovy не знает декларативный пайплайн, и блоки остаются белыми. В теме есть своя небольшая грамматика: блоки stages, steps и post сиреневые, шаги sh и checkout синие, обращения к env и params жёлтые.
Действия шаблона, значения из values и переменные, функции Sprig и скобки шаблона различаются цветом. Жирным выражение целиком не выделяется, поэтому сплошной жирной стены нет.
Функции синие, типы золотые, аргументы коралловые, переменные окружения жёлтые. В SQL алиасы таблиц и колонки разного цвета.
Заголовки разных уровней разного цвета, жирный текст белый, код в обратных кавычках зелёный.

Тема ставится из каталога расширений или из файла. Файл удобен там, где каталог закрыт прокси или недоступен.
В Cursor, VSCodium и Windsurf найдите Violet Ops в каталоге расширений. В VS Code поставьте из файла:
code --install-extension violet-ops-1.0.0.vsix
Ctrl+K, затем Ctrl+T (на macOS Cmd+K, Cmd+T), выберите Violet Ops.
Откройте задачу Ansible и посмотрите в строку состояния справа внизу. Там должно быть Ansible, а не YAML. Иначе модули и параметры останутся одного цвета.
Тема только назначает цвета. Смысл ключей определяет языковой сервер расширения Ansible, поэтому без него задача выглядит как обычный YAML.
Оно размечает модули, их параметры и ключи задачи, а ещё подсвечивает Jinja внутри строк.
Расширение узнаёт роли по путям вроде roles/*/tasks/main.yml. Если у вас другая раскладка, добавьте в настройки:
"files.associations": {
"**/roles/**/*.yml": "ansible",
"**/playbooks/*.yml": "ansible"
}
Оно включает язык helm для файлов в templates/.
На тёмном фоне тонкий шрифт выглядит бледно. Хорошо работает JetBrains Mono с толщиной 500: "editor.fontWeight": "500".
Цвета ролей во всех вариантах одни и те же, отличаются фон и насыщенность.
Основной: яркие цвета на глубоком фиолетовом фоне.
Те же цвета на нейтральном графитовом фоне, для тех, кому фиолетового много.
Приглушённая палитра для долгих вечеров.

Тему можно не ставить. Четыре правила в настройках дают ту же раскраску задач в любой теме.
"editor.semanticTokenColorCustomizations": {
"rules": {
"class:ansible": { "foreground": "#FF7ED0", "bold": true },
"method:ansible": "#52F0FF",
"keyword:ansible": { "foreground": "#B897FF", "bold": true },
"property:ansible": "#7AB4FF"
}
}
Не убирайте суффикс :ansible. Без него те же правила перекрасят классы и методы в Python, Go и любом другом языке, где есть смысловая подсветка.
Так сложилось: ключевые слова сиреневые, фон глубокий фиолетовый. Если фиолетового много, включите вариант Graphite, там те же цвета кода на нейтральном фоне.
В расширении нет исполняемого кода. Внутри три файла с цветами и одна грамматика для Jenkinsfile, всё в формате JSON. Исходник открыт на GitHub, файл можно сверить по контрольной сумме.
Пока тема опубликована в Open VSX, на GitHub и здесь. В VS Code она ставится из файла одной командой.
Сборка темы считает контраст каждого цвета кода к фону и останавливается, если у основного варианта он ниже 7:1. Отдельно проверяется, что цвета, которые стоят рядом, различаются по оттенку, а не только по яркости. Модули и ключи задачи вдобавок жирные, это помогает при нарушениях цветового зрения.
Да. Любой цвет перекрывается в настройках через editor.tokenColorCustomizations и editor.semanticTokenColorCustomizations. Палитра целиком задаётся в начале build.py в репозитории.