# General Translation React SDKs (gt-react, gt-next): Правила линтера URL: https://generaltranslation.com/ru/docs/react/reference/lint-rules.mdx --- title: Правила линтера description: Справочник по правилам линтера General Translation React Core, которые помогают сохранять переводимый контент статичным и корректным. Справочник API по правилам линтера React Core. --- Линтер General Translation React Core (`@generaltranslation/react-core-linter`) — это плагин ESLint, который выявляет типичные ошибки интеграции: динамический контент внутри переводимых компонентов, нестатические строки в функциях перевода и неподдерживаемые атрибуты. Его конфигурация `recommended` включает все правила с уровнем ошибки, а два из трёх правил поддерживают автоисправление. Инструкции по установке и настройке ESLint см. в руководстве [Проверка кода линтером](/docs/react/guides/linting-your-code). *Правила определяют компоненты и функции General Translation по источнику импорта. `gt-react`, `gt-next` и `gt-react-native` распознаются по умолчанию; чтобы добавить другие пакеты, например `gt-tanstack-start`, используйте опцию [`libs`](#libs).* ## Правила [#rules] | Правило | Что выявляет | Автоисправление | | ------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------- | | [`static-string`](#static-string) | Динамические или нестатические строки, передаваемые в функции перевода ([`useGT`](/docs/react/reference/hooks/use-gt), [`getGT`](/docs/node/reference/functions/get-gt), [`msg`](/docs/react/reference/functions/msg)), а также нестатические sugar-переменные. | Да | | [`static-jsx`](#static-jsx) | Динамический контент внутри [``](/docs/react/reference/components/t), не обёрнутый в variable component. | Да | | [`no-data-attrs-on-branch`](#no-data-attrs) | Атрибуты `data-*` в [``](/docs/react/reference/components/branch), которые компонент игнорирует. | Нет | Все три правила имеют уровень `error` в конфигурации `recommended` и принимают общий параметр [`libs`](#libs). ## `static-string` [#static-string] **Автоисправление** Да · **Рекомендуется** `error` Функции регистрации, такие как `gt` (из [`useGT`](/docs/react/reference/hooks/use-gt) или `getGT`) и [`msg`](/docs/react/reference/functions/msg), могут принимать только статические строки, потому что компилятор извлекает их содержимое во время сборки. Это правило помечает динамический первый аргумент и рекомендует использовать интерполяцию в стиле ICU, при которой переменные передаются через объект параметров, а не конкатенируются со строкой. ### Как это работает * **Требуется статический контент.** Первый аргумент должен быть строковым литералом (или, в случае [`msg`](/docs/react/reference/functions/msg), массивом строковых литералов). Конкатенация строк и шаблонные литералы с интерполяцией переменных помечаются как ошибки. * **Автоисправление ICU.** Если используется формат ICU (по умолчанию), правило преобразует исправимые динамические выражения в ICU-строку и объект параметров. Тернарные операторы превращаются в конструкции `select`, а остальные выражения — в заполнители `{varN}`. * **[`derive`](/docs/react/reference/functions/derive) допускается.** Вызов [`derive`](/docs/react/reference/functions/derive) — отдельно или в конкатенации со статическими частями — разрешён, поскольку его варианты вычисляются на этапе сборки. * **Статические служебные переменные.** Ключи метаданных в объекте параметров должны быть статическими, но требуемый тип у них различается: `$id` и `$format` должны быть статическими строками, `$context` — статической строкой или вызовом [`derive`](/docs/react/reference/functions/derive), `$maxChars` — числовым литералом, а `$requiresReview` — булевым литералом. * **Проверка ICU.** Если строка использует формат ICU, правило проверяет её синтаксис и сообщает об ошибке `Invalid ICU message format`, если сообщение некорректно. ### Примеры ```tsx // ❌ Неверно — динамическое значение конкатенируется со строкой const gt = useGT(); gt('Hello ' + name); gt(`Hello ${name}!`); // ✅ Верно — интерполяция ICU, переменная передаётся в объект параметров const gt = useGT(); gt('Hello {name}!', { name }); ``` ```tsx // ❌ Неверно — sugar-переменная не является статической строкой msg('Save', { $context: label }); // ✅ Верно — статическая sugar-переменная msg('Save', { $context: 'a button label' }); // ✅ Верно — варианты времени сборки с derive gt('Hello ' + derive(getName())); ``` ### Параметры Поддерживает общий параметр [`libs`](#libs). ## `static-jsx` [#static-jsx] **Автоисправление** Да · **Рекомендуется** `error` Компонент [``](/docs/react/reference/components/t) должен содержать только статические дочерние элементы, чтобы компилятор мог их извлечь. Это правило помечает динамический контент — переменные, вызовы функций и выражения доступа к свойствам — внутри `` и требует оборачивать такой контент в компонент переменной: [``](/docs/react/reference/components/var), [``](/docs/react/reference/components/num), [``](/docs/react/reference/components/currency) или [``](/docs/react/reference/components/datetime). ### Как это работает * **Только статические дочерние элементы.** Внутри `` допускаются только строки, числа, булевы значения и шаблонные литералы без интерполяции. Любое другое выражение помечается. * **Автоматическое оборачивание в ``.** Помеченное выражение оборачивается в [``](/docs/react/reference/components/var) (при необходимости с добавлением импорта), чтобы значение отображалось без перевода. * **Преобразование ветвлений.** Тернарное выражение (`cond ? a : b`) или выражение с логическим И (`cond && a`) вместо этого преобразуется в [``](/docs/react/reference/components/branch). * **Атрибуты с ветвлением.** Правило также проверяет ветви содержимого [``](/docs/react/reference/components/branch) и [``](/docs/react/reference/components/plural), требуя, чтобы значение в каждой ветви было статическим или JSX. ### Примеры ```tsx // ❌ Неверно — динамический контент напрямую внутри {name}; {getGreeting()}; // ✅ Верно — динамический контент обёрнут в компонент переменной {name}; You have {count} messages.; ``` ```tsx // ❌ Неверно — inline условие внутри {isActive ? 'Active' : 'Inactive'}; // ✅ Верно — автоисправление преобразует это в Inactive ; ``` ### Параметры Поддерживает общий параметр [`libs`](#libs). ## `no-data-attrs-on-branch` [#no-data-attrs] **Автоисправление** Нет · **Рекомендуется** `error` Компонент [``](/docs/react/reference/components/branch) игнорирует любые атрибуты с префиксом `data-`, потому что воспринимает все незарезервированные пропсы как значения ветки. Это правило помечает атрибуты `data-*` у ``, чтобы они не терялись без предупреждения. Автоисправления нет; удалите атрибут или перенесите его на оборачивающий элемент. ### Примеры ```tsx // ❌ Неверно — атрибут data-* игнорируется компонентом ; // ✅ Верно — перенесите атрибут в оборачивающий элемент ; ``` ### Параметры Поддерживает общий параметр [`libs`](#libs). ## Параметры [#options] У всех правил один и тот же параметр. ### `libs` [#libs] **Тип** `string[]` · **Необязательно** · **По умолчанию** `['gt-react', 'gt-next', 'gt-react-native', 'gt-i18n', '@generaltranslation/react-core/components', '@generaltranslation/react-core/components-rsc', '@generaltranslation/react-core/hooks', '@generaltranslation/react-core/pure']` Список исходных модулей, которые правило считает пакетами General Translation. Компонент или функция проверяется только в том случае, если они импортируются из одного из этих модулей, поэтому импорты с алиасами разрешаются корректно. Добавьте пакет своего фреймворка, если его нет в списке по умолчанию — например, `gt-tanstack-start`: ```js title="eslint.config.js" const libs = ['gt-tanstack-start']; export default [ { plugins: { '@generaltranslation/react-core-linter': gtLint }, rules: { '@generaltranslation/react-core-linter/static-jsx': ['error', { libs }], '@generaltranslation/react-core-linter/static-string': ['error', { libs }], '@generaltranslation/react-core-linter/no-data-attrs-on-branch': ['error', { libs }], }, }, ]; ```