DRX AI OPS Обсудить задачу

Тема VS Code, в которой задачу Ansible видно по цвету

Violet Ops раскрашивает роли Ansible по смыслу. Модуль, его параметры, ключи задачи и переменные получают разные цвета, поэтому опечатку в параметре видно до запуска плейбука. Jinja, Helm, Jenkinsfile, shell, Go, Python и SQL тоже размечены.

Задачи Ansible в теме Violet Ops: модуль розовый, параметры бирюзовые, ключи задачи сиреневые, переменные в фигурных скобках жёлтые
Роль nginx в теме Violet Ops. Образец кода выдуманный, файлы лежат в репозитории темы.

Что видно с первого взгляда

В YAML всё выглядит одинаково: ключ, двоеточие, значение. Расширение Ansible от Red Hat знает, где модуль, а где его параметр. Тема дала каждой роли свой цвет.

Модуль
ansible.builtin.template, community.general.ufw: розовый, жирный.
Параметр модуля
src, dest, mode: бирюзовый. Красятся только параметры из документации модуля, поэтому опечатка остаётся синей среди бирюзовых.
Ключ задачи
name, when, loop, register, become: сиреневый, жирный.
Переменные в defaults и vars
Синие. Та же переменная внутри {{ }} жёлтая, объявление и использование не спутать.
Фильтры Jinja
| default, | selectattr, | join: изумрудные.

Jenkinsfile

Стандартная грамматика Groovy не знает декларативный пайплайн, и блоки остаются белыми. В теме есть своя небольшая грамматика: блоки stages, steps и post сиреневые, шаги sh и checkout синие, обращения к env и params жёлтые.

Helm

Действия шаблона, значения из values и переменные, функции Sprig и скобки шаблона различаются цветом. Жирным выражение целиком не выделяется, поэтому сплошной жирной стены нет.

Shell, Go, Python, SQL

Функции синие, типы золотые, аргументы коралловые, переменные окружения жёлтые. В SQL алиасы таблиц и колонки разного цвета.

README и Changelog

Заголовки разных уровней разного цвета, жирный текст белый, код в обратных кавычках зелёный.

Образцы кода в теме Violet Ops: defaults, Jinja, Helm, Jenkinsfile, Groovy, shell, Python, Go, SQL, Markdown

Скачать версию 1.0.0

Тема ставится из каталога расширений или из файла. Файл удобен там, где каталог закрыт прокси или недоступен.

Контрольная сумма SHA-256
violet-ops-1.0.0.vsix d9653a8ebed86a29c03ac81950952bf6de88eab998e78879c275e933e24b8f28
  1. Установите

    В Cursor, VSCodium и Windsurf найдите Violet Ops в каталоге расширений. В VS Code поставьте из файла:

    code --install-extension violet-ops-1.0.0.vsix
  2. Включите тему

    Ctrl+K, затем Ctrl+T (на macOS Cmd+K, Cmd+T), выберите Violet Ops.

  3. Проверьте язык файла

    Откройте задачу Ansible и посмотрите в строку состояния справа внизу. Там должно быть Ansible, а не YAML. Иначе модули и параметры останутся одного цвета.

Чтобы раскраска Ansible заработала

Тема только назначает цвета. Смысл ключей определяет языковой сервер расширения Ansible, поэтому без него задача выглядит как обычный YAML.

  1. Поставьте расширение Ansible от Red Hat

    Оно размечает модули, их параметры и ключи задачи, а ещё подсвечивает Jinja внутри строк.

  2. Привяжите роли к языку Ansible

    Расширение узнаёт роли по путям вроде roles/*/tasks/main.yml. Если у вас другая раскладка, добавьте в настройки:

"files.associations": {
  "**/roles/**/*.yml": "ansible",
  "**/playbooks/*.yml": "ansible"
}
  1. Для Helm поставьте расширение Kubernetes

    Оно включает язык helm для файлов в templates/.

  2. По желанию возьмите шрифт с промежуточной толщиной

    На тёмном фоне тонкий шрифт выглядит бледно. Хорошо работает JetBrains Mono с толщиной 500: "editor.fontWeight": "500".

Три варианта

Цвета ролей во всех вариантах одни и те же, отличаются фон и насыщенность.

Violet Ops

Основной: яркие цвета на глубоком фиолетовом фоне.

Violet Ops Graphite

Те же цвета на нейтральном графитовом фоне, для тех, кому фиолетового много.

Violet Ops Calm

Приглушённая палитра для долгих вечеров.

Три варианта темы Violet Ops на одной и той же задаче Ansible

Нужны только цвета Ansible в своей теме

Тему можно не ставить. Четыре правила в настройках дают ту же раскраску задач в любой теме.

"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, файл можно сверить по контрольной сумме.

Почему нет в магазине Microsoft?

Пока тема опубликована в Open VSX, на GitHub и здесь. В VS Code она ставится из файла одной командой.

Как проверялась читаемость?

Сборка темы считает контраст каждого цвета кода к фону и останавливается, если у основного варианта он ниже 7:1. Отдельно проверяется, что цвета, которые стоят рядом, различаются по оттенку, а не только по яркости. Модули и ключи задачи вдобавок жирные, это помогает при нарушениях цветового зрения.

Можно поправить цвет под себя?

Да. Любой цвет перекрывается в настройках через editor.tokenColorCustomizations и editor.semanticTokenColorCustomizations. Палитра целиком задаётся в начале build.py в репозитории.