chore(eslint): give widget apps their own Preact-aware root config so host airbnb and react rules stop flagging valid Preact code in pre-commit
This commit is contained in:
parent
8d8b39e897
commit
408b9eefc3
1 changed files with 60 additions and 0 deletions
60
apps/.eslintrc.cjs
Normal file
60
apps/.eslintrc.cjs
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
// Per-package ESLint config for the Preact widget apps under `apps/`.
|
||||
//
|
||||
// `root: true` stops ESLint from walking up to the host's
|
||||
// `cinny/.eslintrc.cjs`, which extends airbnb + the React plugin. Those
|
||||
// rule sets are tuned for the React host and flag legitimate Preact /
|
||||
// small-widget patterns as errors (`class=` attributes, arrow-fn
|
||||
// components, inline icon sub-components, for-of loops, etc.). Keeping
|
||||
// the hierarchy open would force every widget file to fight host style
|
||||
// for no real win.
|
||||
//
|
||||
// Widgets keep a minimal but real lint pass via the rule sets below:
|
||||
//
|
||||
// * `eslint:recommended` — catches genuine bugs (no-undef, no-dupe-*,
|
||||
// no-redeclare, no-unused-vars, …) without enforcing style.
|
||||
// * `@typescript-eslint/recommended` — TS-aware variants of the above
|
||||
// plus type-level checks the recommended set ships.
|
||||
//
|
||||
// We deliberately DON'T extend `plugin:react/recommended` —
|
||||
// `react/react-in-jsx-scope` and `react/no-unknown-property` both flag
|
||||
// Preact-correct code as errors, and disabling them one by one creates
|
||||
// a long suppression list. Widget JSX is type-checked by each app's
|
||||
// `tsc --noEmit` (run by `vite build`), which is the better signal for
|
||||
// JSX correctness anyway.
|
||||
module.exports = {
|
||||
root: true,
|
||||
// `node` covers `module.exports` in this very file (CommonJS config);
|
||||
// `browser` is the runtime widget code itself sees.
|
||||
env: { browser: true, es2021: true, node: true },
|
||||
extends: [
|
||||
'eslint:recommended',
|
||||
'plugin:@typescript-eslint/recommended',
|
||||
// preact/hooks has the same dep-array semantics as react/hooks, and
|
||||
// the widget code already carries `// eslint-disable-next-line
|
||||
// react-hooks/exhaustive-deps` directives at the relevant sites;
|
||||
// loading the plugin (a) keeps those directives meaningful (without
|
||||
// it ESLint errors on the «unknown rule» referenced by the comment)
|
||||
// and (b) catches the real exhaustive-deps mistakes in widget hooks
|
||||
// for free.
|
||||
'plugin:react-hooks/recommended',
|
||||
],
|
||||
parser: '@typescript-eslint/parser',
|
||||
parserOptions: {
|
||||
ecmaVersion: 'latest',
|
||||
sourceType: 'module',
|
||||
ecmaFeatures: { jsx: true },
|
||||
},
|
||||
plugins: ['@typescript-eslint', 'react-hooks'],
|
||||
rules: {
|
||||
// Underscore-prefixed args are intentionally unused (Preact event
|
||||
// handlers receive args the body doesn't need); match the host's
|
||||
// convention so lint reads consistently across both trees.
|
||||
'@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
|
||||
// Widget bridge-protocol regexes occasionally escape `-` inside
|
||||
// character classes for visual clarity (e.g. `[0-9\-]`). The escape
|
||||
// is harmless and pre-existing across all three widgets — keeping
|
||||
// the rule on would force a churn-y diff in code that's been stable
|
||||
// since the v0.7.6 bridge dialect work.
|
||||
'no-useless-escape': 'off',
|
||||
},
|
||||
};
|
||||
Loading…
Add table
Reference in a new issue