33 lines
1.4 KiB
JavaScript
33 lines
1.4 KiB
JavaScript
// 최소 게이트 — 전체 스타일 린트가 아니라, tsc 가 못 잡는 런타임 크래시 버그만 막는다.
|
|
// 도입 계기: QuotationDetailSheet 에서 로컬 const canManage 가 동명 import 를 가려
|
|
// zustand 셀렉터가 TDZ 참조 → 프로덕션 크래시(Cannot access 'k' before initialization).
|
|
// 그 케이스는 순환 타입 추론으로 tsc --noEmit 도 통과했다.
|
|
import tseslint from 'typescript-eslint';
|
|
import reactHooks from 'eslint-plugin-react-hooks';
|
|
|
|
export default tseslint.config({
|
|
files: ['src/**/*.{ts,tsx}'],
|
|
ignores: ['src/api/generated/**'],
|
|
languageOptions: {
|
|
parser: tseslint.parser,
|
|
},
|
|
plugins: {
|
|
'@typescript-eslint': tseslint.plugin,
|
|
'react-hooks': reactHooks,
|
|
},
|
|
rules: {
|
|
// 훅 호출 순서 위반은 런타임 크래시라 error, deps 누락은 기존 코드가 많아 warn.
|
|
'react-hooks/rules-of-hooks': 'error',
|
|
'react-hooks/exhaustive-deps': 'warn',
|
|
// 선언보다 위에서 변수를 쓰는 것(TDZ) 차단. 함수/타입 호이스팅은 안전하므로 허용.
|
|
'no-use-before-define': 'off',
|
|
'@typescript-eslint/no-use-before-define': [
|
|
'error',
|
|
{ functions: false, classes: false, typedefs: false, enums: false, variables: true },
|
|
],
|
|
// 상위 스코프(import 포함) 이름을 가리는 재선언 차단.
|
|
'no-shadow': 'off',
|
|
'@typescript-eslint/no-shadow': 'error',
|
|
},
|
|
});
|