// 이 파일이 하는 일: 프론트 코드의 "문법·버그 냄새"를 기계가 자동으로 잡는 규칙(ESLint) 설정이다. // // 학습 포인트 — 린트(lint)는 "사람이 못 보고 넘긴 실수를 컴파일 전에 잡는 자동 검사"다. // 예: 안 쓰는 변수, 존재하지 않는 전역 참조, React 훅을 조건문 안에서 잘못 쓰는 것 등. // npm run lint 로 로컬에서 돌리고, CI에서도 자동으로 돌아 "에러가 있으면 빨간불"이 된다. // ESLint 9의 "flat config"(배열로 규칙을 겹쳐 쌓는 방식)를 쓴다. import js from '@eslint/js' import globals from 'globals' import reactHooks from 'eslint-plugin-react-hooks' export default [ // 검사에서 제외할 폴더 (빌드 산출물·커버리지·의존성·E2E 리포트) { ignores: ['dist', 'coverage', 'node_modules', 'playwright-report', 'test-results'] }, { files: ['**/*.{js,jsx}'], languageOptions: { ecmaVersion: 2022, sourceType: 'module', // 브라우저 전역(window, self, document…) + Node 전역(process 등)을 "정의됨"으로 인정. globals: { ...globals.browser, ...globals.node }, parserOptions: { ecmaFeatures: { jsx: true } }, }, plugins: { 'react-hooks': reactHooks }, rules: { ...js.configs.recommended.rules, // 존재하지 않는 변수, 중복 선언 등 기본 버그류 = 에러 // React 훅 규칙: 훅을 조건/반복문 안에서 부르는 진짜 버그는 에러, 의존성 배열은 경고. 'react-hooks/rules-of-hooks': 'error', 'react-hooks/exhaustive-deps': 'warn', // 안 쓰는 변수는 경고(빌드는 막지 않음). 대문자 시작(컴포넌트/상수)·_prefix 인자는 예외. 'no-unused-vars': ['warn', { varsIgnorePattern: '^[A-Z_]', argsIgnorePattern: '^_' }], }, }, // 테스트 파일: vitest 전역(describe/it/expect…)을 "정의됨"으로 인정. { files: ['**/*.test.{js,jsx}'], languageOptions: { globals: { describe: 'readonly', it: 'readonly', test: 'readonly', expect: 'readonly', vi: 'readonly', beforeEach: 'readonly', afterEach: 'readonly', beforeAll: 'readonly', afterAll: 'readonly', }, }, }, ]