-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy patheslint.config.js
More file actions
42 lines (41 loc) · 1.77 KB
/
Copy patheslint.config.js
File metadata and controls
42 lines (41 loc) · 1.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import js from '@eslint/js'
import globals from 'globals'
import reactHooks from 'eslint-plugin-react-hooks'
import reactRefresh from 'eslint-plugin-react-refresh'
import tseslint from 'typescript-eslint'
import { defineConfig, globalIgnores } from 'eslint/config'
export default defineConfig([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
js.configs.recommended,
tseslint.configs.recommended,
reactHooks.configs.flat.recommended,
reactRefresh.configs.vite,
],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
},
rules: {
// Downgraded to a warning so `npm run lint` can gate CI on real errors
// today. There are ~58 of these, mostly Supabase row payloads and form
// answer values that have no generated types yet. They are genuine debt:
// as the types land, promote this back to 'error'.
'@typescript-eslint/no-explicit-any': 'warn',
// These files intentionally export a hook or a variants object alongside
// their component (AuthContext/useAuth, SmoothScroll/useLenis,
// button/buttonVariants). That costs Fast Refresh granularity in dev and
// nothing in production, so it is a warning, not a build blocker.
'react-refresh/only-export-components': 'warn',
// Six pre-existing occurrences, all the same shape: an effect that
// derives state from a prop or from an instance it just created. Each
// needs its own restructuring (refs, useSyncExternalStore, or lifting the
// value out of state) and carries real behavioural risk, so they are
// tracked as warnings rather than being rushed. Promote to 'error' once
// they are worked through.
'react-hooks/set-state-in-effect': 'warn',
},
},
])