IDE Resolver
IDE Resolver — расширение SXL Studio для VS Code/Cursor: hover-превью токенов в JSON/JSONC и CSS var(...), цепочки alias, автокомплит и переход к источнику.
Overview
IDE Resolver добавляет IntelliSense для дизайн-токенов в VS Code-совместимых редакторах. В маркетплейсах расширение опубликовано как SXL Resolver, поэтому поиск расширения и команды в Command Palette могут использовать это имя.
- hover для
{token.path}в JSON/JSONC; - hover для
var(--token-name)в CSS/SCSS и смежных языках; - автокомплит CSS custom properties внутри
var(--...); - отображение
raw -> resolvedзначения и цепочки ссылок; - переход к определению токена;
- поддержка 35+ типов токенов: color, typography, spacing, sizing, dimension, border, shadow, effects, transition, grid и другие;
- CSS-first стратегия резолва: текущий файл -> настроенные CSS sources -> ближайшие CSS/SCSS файлы -> workspace; fallback в JSON используется только если CSS-переменная не найдена;
- для JSON и CSS используется контекстный scope токенов: сначала ближайший token-root относительно текущего файла, затем более дальние.
Для дизайнеров, которые проверяют JSON
Дизайнеры обычно работают с экспортированными DTCG-style JSON/JSONC файлами. Укажите sxlResolver.tokenPaths и наводите курсор на ссылки вида {color.brand.primary} или {spacing.reg.md}, чтобы увидеть итоговое значение и цепочку alias.
Resolver не изменяет token-файлы. Он только читает JSON/JSONC, резолвит ссылки в памяти и показывает preview. Это безопасно для ревью токенов, проверки naming и аудита того, куда реально указывает токен.
{
"sxlResolver.tokenPaths": [
"tokens",
"packages/design-system/tokens"
]
}
tokenPaths может содержать пути относительно workspace или абсолютные пути. Для командной настройки лучше использовать относительные пути.
Что увидит разработчик в CSS/SCSS
- При наведении на
var(--space-md)вpadding— итоговое число с единицей (8px,12pxи т.д.). - При наведении на
var(--font-title)вfont— typography-превью и раскладка основных свойств (font-family,font-size,line-height,font-weight). - Для color, gradient и effects Resolver показывает визуальный preview-блок и итоговое значение.
- При вводе
var(--...)— подсказки CSS custom properties из текущего workspace и настроенных package sources.
Если CSS-переменные поставляются из другого пакета, настройте sxlResolver.cssVariableSources. Resolver пройдет по entrypoint imports пакета и проиндексирует только разрешенные файлы, без полного сканирования node_modules.
tokens-manifest.json опционален. Без manifest Resolver все равно читает CSS-переменные, резолвит цепочки var(...) и эвристически выводит широкий тип по CSS-значению. Он не генерирует manifest-файлы и не записывает новые файлы в репозиторий пользователя. Добавляйте manifest только когда нужны точные token metadata для CSS-переменных.
Где работает
- JSON:
json,jsonc - CSS:
css,scss,less,sass - Смежные файлы:
typescript,typescriptreact,javascript,javascriptreact,vue,svelte,html
Установка
VS Code
Найдите расширение SXL Resolver в VS Code Marketplace и установите.
Cursor
Cursor использует OpenVSX-совместимый маркетплейс.
Найдите SXL Resolver в панели Extensions Cursor.
Если в поиске пока не появилось из-за кеша маркетплейса, ставьте вручную из VSIX:
- Command Palette
Extensions: Install from VSIX...- Выберите
.vsixpackage
Настройки
| Настройка | По умолчанию | Назначение |
|---|---|---|
sxlResolver.tokenPaths | ["tokens"] | Папки с токенами: относительные или абсолютные пути. |
sxlResolver.showIcons | true | Иконки типов в hover/completion. |
sxlResolver.maxChainLength | 5 | Максимальная глубина цепочки alias в hover. |
sxlResolver.maxSuggestions | 300 | Лимит подсказок автокомплита. |
sxlResolver.allowNoDollar | true | Поддержка type/value/extensions без $. |
sxlResolver.cssVariablePrefix | "--" | Префикс reverse-map fallback для CSS-переменных. |
sxlResolver.enableCssHover | true | Включает hover для var(...). |
sxlResolver.enableCssCompletion | true | Включает автокомплит CSS custom properties внутри var(--...). |
sxlResolver.cssVariableSources | [] | Дополнительные разрешенные источники CSS-переменных из пакетов или workspace paths. |
Где хранить настройки
Настройки Resolver — это настройки IDE, а не runtime-конфиг приложения.
- Используйте
.vscode/settings.jsonв репозитории, если вся команда должна получать одни и те же token/CSS sources. Cursor читает VS Code-compatible workspace settings. - Используйте
.code-workspaceфайл и кладите настройки в верхнеуровневый"settings", если в одном окне IDE открыто несколько репозиториев. - Используйте User Settings JSON для личных absolute paths. В VS Code или Cursor откройте Command Palette и выполните
Preferences: Open User Settings (JSON).
Для командной настройки лучше коммитить .vscode/settings.json с относительными путями. Абсолютные пути используйте только для личных настроек или локальных multi-repository workspace, которые нельзя описать относительно одного root.
CSS Sources
Используйте CSS sources, когда приложение потребляет переменные из опубликованного design-system пакета, например @org/design-system-styles, или из сгенерированных CSS-файлов внутри текущего workspace.
Не включайте широкое сканирование node_modules. Это медленно, может проиндексировать несколько версий одного пакета и смешать переменные разных продуктов или тем. Вместо этого настройте явные source groups.
С manifest или без manifest
Resolver поддерживает оба CSS-режима.
Без manifest укажите только entrypoints или paths. Resolver читает CSS-файлы, проходит относительные @import, резолвит цепочки CSS-переменных и эвристически определяет широкие типы: color, gradient, typography, dimension, duration, number, shadow или text. Он никогда не создает tokens-manifest.json или другие generated files.
С manifest добавьте manifests, если design-system пакет или generated workspace output содержит token metadata. Manifest metadata полезна, когда CSS-значения неоднозначны. Например, 8px может быть spacing, sizing, fontSize, borderRadius или borderWidth; по чистому CSS это нельзя безопасно отличить.
Чтобы сгенерировать tokens-manifest.json, используйте @sxl-studio/token-transformer с output platform: manifest. Если подключаемый design-system пакет уже публикует manifest-файлы, application repositories должны только сослаться на них; запускать Transformer в приложении не нужно.
Manifest metadata может сохранить любой Resolver token type, который отдает ваш token pipeline, включая color, gradient, typography, fontFamily, fontWeight, fontSize, lineHeight, letterSpacing, spacing, sizing, borderRadius, borderWidth, opacity, shadow, boxShadow, blur, effects, grid, transition, duration и composition.
Composite JSON tokens, экспортированные в CSS, показываются как CSS-значение. Если нужен полный breakdown composite object, используйте JSON token files.
Из опубликованного пакета
Замените placeholder package name, entrypoints, manifests и appliesTo globs на значения вашего проекта.
{
"sxlResolver.cssVariableSources": [
{
"name": "Commerce app styles",
"package": "@org/design-system-styles",
"entrypoints": ["commerce/index.css", "components/index.css"],
"manifests": ["commerce/tokens-manifest.json"],
"appliesTo": ["apps/storefront/**", "packages/storefront-ui/**"]
},
{
"name": "Operations app styles",
"package": "@org/design-system-styles",
"entrypoints": ["operations/index.css", "components/index.css"],
"manifests": ["operations/tokens-manifest.json"],
"appliesTo": ["apps/operations/**", "packages/operations-ui/**"]
}
]
}
Из текущего workspace
Используйте paths, если CSS-файлы лежат в текущем репозитории или если нужен абсолютный локальный путь.
{
"sxlResolver.cssVariableSources": [
{
"name": "Local design-system styles",
"paths": [
"packages/design-system/styles/commerce/index.css",
"packages/design-system/styles/components/index.css"
],
"manifests": [
"packages/design-system/styles/commerce/tokens-manifest.json"
],
"appliesTo": ["apps/storefront/**", "packages/storefront-ui/**"]
}
]
}
Поля source
| Поле | Назначение |
|---|---|
name | Человекочитаемое имя источника в деталях автокомплита. Может быть любым понятным названием для команды. |
package | Имя пакета из package.json dependencies. Resolver резолвит пакет от ближайшего workspace package context и поддерживает pnpm, npm и yarn layouts. |
entrypoints | CSS-файлы или папки внутри пакета для индексации. Относительные @import проходят в порядке подключения. |
paths | Алиас для entrypoints. Без package пути считаются относительными от workspace root или абсолютными. |
manifests | Опциональные SXL manifest-файлы с metadata cssVar, type, value, resolvedValue. Resolver читает их для точных CSS token types и никогда не генерирует. |
appliesTo | Workspace-relative glob patterns, которые определяют, какие файлы используют эту source group. Используйте для разделения приложений, пакетов, тем или брендов. |
Приоритет резолва
- Локальные CSS-переменные в текущем файле.
- Подходящие группы из
cssVariableSources. - Другие просканированные workspace CSS-переменные по близости к текущему файлу.
- Fallback в JSON token mapping из
figma.codeSyntax.Webили kebab-case пути токена.
Если два продукта определяют одну и ту же переменную, разнесите их по отдельным source groups и ограничьте через appliesTo. Так файл одного приложения или пакета не получит значение из другого product source.
Команды
Команды установленного расширения используют marketplace-префикс:
SXL Resolver: Force Refresh TokensSXL Resolver: Reveal Token in File
Как пользоваться
- Укажите папки токенов в
sxlResolver.tokenPaths. - Для CSS-переменных из пакетов или сгенерированных workspace-файлов настройте
sxlResolver.cssVariableSources. - Откройте JSON/JSONC или CSS/SCSS файл.
- Наведите курсор на ссылку токена (
{...}) илиvar(--...). - Используйте
Reveal Token in Fileдля быстрого перехода к источнику.
Для команды
Рекомендуемый процесс публикации:
- Публикация в VS Code Marketplace.
- Публикация в Open VSX.
Только публикация в VS Code Marketplace не гарантирует discoverability в Cursor.