From 1310c515430bce56bc776ab4674a48d834da6d48 Mon Sep 17 00:00:00 2001 From: Ku6epXBOCTuK Date: Tue, 1 Sep 2026 22:03:04 +0500 Subject: [PATCH] chore: add design tokens\css lint rules --- AGENTS.md | 63 +- pnpm-lock.yaml | 72 +- web/eslint-plugins/design-tokens/lists.js | 50 + .../design-tokens/no-category-mismatch.js | 81 ++ .../design-tokens/no-hardcoded-in-svelte.js | 156 +++ .../no-token-definition-in-svelte.js | 82 ++ .../design-tokens/no-undefined-in-svelte.js | 91 ++ .../design-tokens/style-context.js | 19 + web/eslint-plugins/index.js | 25 + web/eslint.config.js | 19 + web/package.json | 8 +- web/pnpm-lock.yaml | 913 +++++++++++++++++- web/scripts/audit-cdp-responsive.mjs | 12 +- web/scripts/audit-cdp.mjs | 66 +- web/scripts/audit-css.mjs | 145 +-- web/scripts/audit-dom.mjs | 37 +- web/scripts/check-token-parity.mjs | 125 +++ web/scripts/lint-all.mjs | 49 + web/src/lib/components/kit/ToolView.svelte | 91 +- web/src/lib/preview/catalog.ts | 54 +- web/src/lib/preview/tool-views.ts | 31 +- web/stylelint.config.js | 73 ++ 22 files changed, 2017 insertions(+), 245 deletions(-) create mode 100644 web/eslint-plugins/design-tokens/lists.js create mode 100644 web/eslint-plugins/design-tokens/no-category-mismatch.js create mode 100644 web/eslint-plugins/design-tokens/no-hardcoded-in-svelte.js create mode 100644 web/eslint-plugins/design-tokens/no-token-definition-in-svelte.js create mode 100644 web/eslint-plugins/design-tokens/no-undefined-in-svelte.js create mode 100644 web/eslint-plugins/design-tokens/style-context.js create mode 100644 web/eslint-plugins/index.js create mode 100644 web/scripts/check-token-parity.mjs create mode 100644 web/scripts/lint-all.mjs create mode 100644 web/stylelint.config.js diff --git a/AGENTS.md b/AGENTS.md index 58c6dfc..35202ed 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -27,6 +27,13 @@ реальные маршруты), на C19 при переименовании `kit/`→`ui/` — и компонентный glob. Не оставлять устаревшие пути в `eslint.config.js`. - Для `*.svelte` выключен `prefer-const` (пропсы в Svelte 5 пишутся через `let`). +- **Единый запуск всей дизайн-проверки: `pnpm --dir web lint:all`** + (`web/scripts/lint-all.mjs`) — гоняет по очереди: ESLint (все правила, + включая design-tokens), stylelint (`lint:css`) и токен-аудит + (`lint:tokens`). Каждый шаг выполняется, даже если предыдущий упал; выход + ненулевой, если хоть один не прошёл. Текущие «ожидаемые долги» (hardcoded + размеры в kit, не-Prefix токены в preview.css и т.п.) — техдолг: чинить + только по заведённым tasks, не игнорировать правилом. ## Правила кода @@ -70,6 +77,58 @@ используется. - Все повторяющиеся визуальные элементы — отдельные компоненты в `web/src/lib/components/kit/`, даже «просто div с двумя стилями». -- Токены нового дизайна живут в `design2.css`; `refs/` и `refs-html/` — - одноразовый источник, не поддерживаемый (правки дизайна — сразу в код). + +### Линтинг дизайн-токенов («единая точка правды» дизайна) + +Запрещено «захардкоживать» дизайн: цвета, размеры, длительности и z-index +обязаны приходить из CSS-переменных. Стек: **stylelint** прогоняется по всем +CSS-файлам (`web/stylelint.config.js`), **ESLint** лезет в `