eslint-config-minsug
Version:
Minsug shareable ESLint config (v9 Flat)
103 lines (92 loc) • 3.11 kB
JavaScript
import js from "@eslint/js";
import globals from "globals";
import tseslint from "typescript-eslint";
import reactHooks from "eslint-plugin-react-hooks";
import react from "eslint-plugin-react";
import jsxA11y from "eslint-plugin-jsx-a11y";
import importPlugin from "eslint-plugin-import";
import unusedImports from "eslint-plugin-unused-imports";
import simpleImportSort from "eslint-plugin-simple-import-sort";
import prettier from "eslint-plugin-prettier";
import { defineConfig, globalIgnores } from "eslint/config";
const minsugConfig = defineConfig([
globalIgnores(["dist"]),
{
extends: [
js.configs.recommended,
tseslint.configs.recommendedTypeChecked,
reactHooks.configs["recommended-latest"],
jsxA11y.flatConfigs.recommended,
],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
parserOptions: {
projectService: true,
tsconfigRootDir: import.meta.dirname,
},
},
plugins: {
react,
import: importPlugin,
"unused-imports": unusedImports,
"simple-import-sort": simpleImportSort,
prettier,
},
rules: {
// ===== React/JSX =====
"react/react-in-jsx-scope": "off", // React 17+ 자동 JSX 트랜스폼
"react/jsx-props-no-spreading": "off",
"react/require-default-props": "off",
// ===== Hooks =====
// preset에 포함되지만 강하게 enforce
"react-hooks/exhaustive-deps": "error",
// ===== TS 우선 룰 구성 =====
// 기본 no-unused-vars는 TS 버전으로 대체
"no-unused-vars": "off",
"@typescript-eslint/no-unused-vars": [
"error",
{
vars: "all",
varsIgnorePattern: "^_",
args: "after-used",
argsIgnorePattern: "^_",
ignoreRestSiblings: true,
},
],
"@typescript-eslint/consistent-type-imports": [
"error",
{ fixStyle: "inline-type-imports" },
],
"@typescript-eslint/consistent-type-assertions": [
"error",
{ assertionStyle: "never" },
],
"@typescript-eslint/switch-exhaustiveness-check": "error",
// ===== Import 관리 =====
// unused-imports로 실제 미사용 import 제거/신고
"unused-imports/no-unused-imports": "error",
"unused-imports/no-unused-vars": [
"warn",
{
vars: "all",
varsIgnorePattern: "^_",
args: "after-used",
argsIgnorePattern: "^_",
},
],
"import/no-duplicates": ["error", { "prefer-inline": true }],
"simple-import-sort/imports": "error",
"simple-import-sort/exports": "error",
"import/no-extraneous-dependencies": "off",
"import/prefer-default-export": "off",
"import/extensions": "off",
// ===== 기타 팀 컨벤션 =====
"no-console": ["error", { allow: ["warn", "error"] }],
// ===== Prettier 연동 =====
// flat-config에서는 plugin 기반으로 직접 켭니다.
"prettier/prettier": "error",
},
},
]);
export default minsugConfig;