-
Notifications
You must be signed in to change notification settings - Fork 8
/
.eslintrc.json
80 lines (80 loc) ยท 4.66 KB
/
.eslintrc.json
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
{
"env": {
"browser": true,
"es2021": true
},
"extends": [
"eslint:recommended",
"plugin:react/recommended",
"plugin:@typescript-eslint/recommended",
"plugin:import/recommended",
"plugin:import/typescript"
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaFeatures": {
"jsx": true
},
"ecmaVersion": "latest",
"sourceType": "module"
},
"plugins": [
"react",
"react-hooks",
"simple-import-sort",
"prettier",
"jsx-a11y",
"import",
"@typescript-eslint/eslint-plugin"
],
"rules": { // 0: off 1: warn 2: error ๋ก ํ๊ธฐ ๊ฐ๋ฅ
"indent": ["error", 2, { "SwitchCase": 1 }], // ๋ค์ฌ์ฐ๊ธฐ ๋ช ์นธ? ๊ธฐ๋ณธ 2์นธ์ผ๋ก ํ๋, switch๋ฌธ์์๋ 1์นธ์ผ๋ก ์ง์
"quotes": ["error", "double", { "avoidEscape": true }], // ํ๋ฐ์ดํ๊ฐ ์๋ ์๋ฐ์ดํ๋ฅผ ์ฌ์ฉ
"semi": ["error", "always"], // semi colon์ ๊ฐ์ ํจ
"no-multiple-empty-lines": ["error", { "max": 1, "maxEOF": 0 }],
"comma-dangle": ["error", "always-multiline"], // ๋ ์ค ์ด์์ ๊ฒฝ์ฐ์๋ ํํ ์ผํ๋ฅผ ํญ์ ์ฌ์ฉ, ํ ๊ฐ ์ผ ๋๋ ์ฌ์ฉํ์ง ์์
"object-curly-spacing": ["error", "always"], // ๊ฐ์ฒด ๊ดํธ ์ ๋ค ๊ณต๋ฐฑ ์ถ๊ฐ
"space-in-parens": ["error", "never"], // ์ผ๋ฐ ๊ดํธ ์ ๋ค ๊ณต๋ฐฑ ์ถ๊ฐ
"computed-property-spacing": ["error", "never"], // ๋๊ดํธ ์ ๋ค ๊ณต๋ฐฑ ์ถ๊ฐํ์ง ์์
"comma-spacing": ["error", { "before": false, "after": true }], // ๋ฐ์ ์ ๋ค ๊ณต๋ฐฑ: ์์๋ ์๊ณ , ๋ค์๋ ์๊ฒ
"eol-last": ["error", "always"], // line์ ๊ฐ์ฅ ๋ง์ง๋ง ์ค์๋ ๊ฐํ ๋ฃ๊ธฐ
"no-tabs": ["error", { "allowIndentationTabs": true }], // \t์ ์ฌ์ฉ์ ๊ธ์งํ๊ณ tabํค์ ์ฌ์ฉ์ ํ์ฉ
"object-shorthand": "error", // ๊ฐ์ฒด์ ๊ฐํธ ์ฌ์ฉ(es6)์ ๊ฐ์ ํ ๊ฒ์ธ๊ฐ? -> https://eslint.org/docs/rules/object-shorthand
"padding-line-between-statements": [
"error",
{ "blankLine": "always", "prev": "*", "next": "return" },
{ "blankLine": "always", "prev": ["const", "let", "var"], "next": "*" },
{ "blankLine": "any", "prev": ["const", "let", "var"], "next": ["const", "let", "var"] }
],
// prev : ์ด์ ์ ๋ฌด์์ด ์์๋ blankLine์ ๋ฃ์๊ฒ์ธ๊ฐ? // const,let,var, case
// next : ๋ค์์ ๋ฌด์์ด ์์๋ blankLine์ ๋ฃ์ ๊ฒ์ธ๊ฐ? // return
// ํ์๋ค๊ณผ ๊ตฌ์ฒด์ ์ผ๋ก ์์ํ๊ธฐ - ๊ทผ๋ฐ ์ด๊ฑฐ ๋๋ฌด ์ ๊ฒฝ์ฐ์ง ์๊ณ recommend ์ฌ์ฉํด๋ ๋ ๋ฏ!
"react-hooks/rules-of-hooks": "error", // Checks rules of Hooks
"react-hooks/exhaustive-deps": "off", // Checks effect dependencies
"react/react-in-jsx-scope": "off", // import React from "react"๊ฐ ํ์์๋ ์๊ธฐ์ ํ์ํ ๊ท์น
"simple-import-sort/imports": "error",
"simple-import-sort/exports": "error",
// // eslint-plugin-import์ static analysis
// "import/named": 2, // export/import ์ด๋ฆ์ ์ ํํ๊ฒ ์ฌ์ฉํ๊ณ ์๋์ง๋ฅผ ํ์ธ
// "import/namespace": 2, // ์ด๋ฏธ ์กด์ฌํ๋ ์ด๋ฆ๋ง ๊ฐ์ ธ์ค๋๋ก ํจ
// "import/export": 2, // ์ด๋ฆ์ด๋ ๊ธฐ๋ณธ๊ฐ์ ๋ฐ๋ณต์ ์ธ ๋ด๋ณด๋ด๊ธฐ์ ๊ฐ์ ๋ด๋ณด๋ด๊ธฐ์ ๊ด๋ จ๋ ๊ฒ์ ์ฒดํฌ
// "import/no-absolute-path": 2, // ์ ๋๊ฒฝ๋ก๋ก ํ์ผ ๋ถ๋ฌ์ค๊ธฐ ๊ธ์ง
// "import/no-relative-packages": 2, // ์๋๊ฒฝ๋ก๋ก ํจํค์ง ๋ถ๋ฌ์ค๊ธฐ ๊ธ์ง
// // eslint-plugin-import์ helpful warnings
// "import/default": 2, // default๋ก export๋ ์์ด๋ค์ ์ฐพ์์ ๊ฐ์ ธ์ด
"import/no-named-as-default": 0 // default๋ก ์ ์๋์ง ์์ ์์ด๋ค์ ๋ถ๋ฌ์์์ ์๋ ค์ค
// "import/no-named-as-default-member": 2, // default export์ ์์ฑ์ผ๋ก exported name์ ์ฌ์ฉ์ ๋ณด๊ณ
// // eslint-plugin-import์ style guide
// "import/no-duplicates": 2 // ๊ฐ์ ๋ชจ๋์์ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ๋ถ๋ฌ์ค๋ ๊ฒ์ ๋ง๊ธฐ ์ํจ (from mod.js์ from mod)
},
"settings": {
"import/resolver": {
"node": {
"extensions": [".js", ".jsx", ".ts", ".tsx"]
}
},
"react": {
"version": "detect"
}
}
}