Перейти к содержимому
GitHubXDiscord

@triggery/eslint-plugin

ESLint-плагин для Triggery: ловит неправильное использование createTrigger и API хуков, навязывает соглашения и держит файлы триггеров читабельными как спецификации. Поставляется с пресетами recommended и strict для flat-config ESLint 9.x.

npm bundle

pnpm add -D @triggery/eslint-plugin eslint typescript

Peer-зависимости: eslint >= 9.0.0, typescript >= 5.0.0.

ПравилоRecommendedStrictAuto-fix
no-dynamic-iderrorerror
no-event-cascadeerrorerror
hook-ruleserrorerror
exhaustive-conditionswarnerror
exhaustive-requiredwarnerror
max-handler-sizewarn (≤50)error (≤30)
max-ports-per-triggerwarn (≤12)error (≤8)
prefer-named-hookoffwarn (≥3)

Flat-config (ESLint 9.x):

eslint.config.js
import triggery from '@triggery/eslint-plugin';

export default [
  triggery.configs.recommended,
  // Or, dialled up:
  // triggery.configs.strict,
];

Выборочные правила:

import triggery from '@triggery/eslint-plugin';

export default [
  {
    plugins: { '@triggery': triggery },
    rules: {
      '@triggery/no-dynamic-id':       'error',
      '@triggery/no-event-cascade':    'error',
      '@triggery/max-handler-size':    ['warn', { max: 40 }],
    },
  },
];
  • no-dynamic-idcreateTrigger({ id }) обязан быть строковым литералом. Id триггеров — это ключи реестра, метки в devtools и якоря в графе; они должны быть детерминированными.
  • no-event-cascade — запрещает useEvent(...) внутри обработчика useAction(...). Каскады допустимы в рантайме, но писать их inline — значит прятать межтриггерный поток управления.
  • hook-rules — framework-нейтральные rules-of-hooks для useEvent / useCondition / useAction / useInlineTrigger.
  • exhaustive-conditions — для каждого имени в required: [...] есть соответствующий useCondition в том же файле.
  • exhaustive-required — каждый вызов createTrigger({...}) должен содержать явный ключ required: (используй required: [], если гейт не нужен).
  • max-handler-size / max-ports-per-trigger — держи триггеры спецификационно-компактными; когда разрастаются — бери codemod extract-trigger.