module.exports = {
'parser': '@typescript-eslint/parser',
'plugins': ['@typescript-eslint'],
'env': {
'commonjs': true,
'browser': true,
'es2021': true,
'node' : true
},
'extends': [
'airbnb',
'airbnb/hooks',
'plugin:@typescript-eslint/recommended'
],
'parserOptions': {
'project': './tsconfig.json',
'ecmaFeatures': {
'jsx': true,
},
'ecmaVersion': 12,
'sourceType': 'module',
},
'rules': {
'indent': [
'error',
'tab',
], // indent๋ tab์ผ๋ก ํต์ผ
'react/jsx-indent' : [2, 'tab'], // jsx์์๋ indent tab์ผ๋ก ํต์ผ
'react/jsx-filename-extension': [1, { 'extensions': ['.js', '.jsx', '.ts'] }], // ํ์ฅ์ ์ค์
'linebreak-style': ['error', 'windows'], // CRLF
'no-unused-vars': 'warn', // ์ ์ ํ ์ฌ์ฉํ์ง ์์ ๋ณ์๋ ๊ฒฝ๊ณ ๋ง ํ๊ธฐ
'no-use-before-define': 1, // ์ ์ ์ ์ ์ฌ์ฉ ๊ธ์ง
'no-console': 0, // console ์ฌ์ฉํ๊ธฐ
'camelcase': ['error', { 'properties': 'always' }], // ์์ฑ์ camelcase ์ฌ์ฉ
'no-tabs': 0, // tab ์ฌ์ฉ ์๋๋ rule
'quote-props': 0, // property์ quote๋ฅผ ์์ฐ์ง ๋ง์์ผํ๋ rule
'operator-linebreak': 0, // ์ฐ์ฐ์๋ ๋ผ์ธ ์์ชฝ์ ์์นํด์ผํ๋ rule
'comma-dangle': 0, // ๋ง์ง๋ง ์์์ ,๋ฅผ ๋ถ์ฌ์ผํ๋ rule
'no-param-reassign': 0, // ํ๋ผ๋ฏธํฐ๋ ์ง์ญ๋ณ์๋ก ๋ฐ์์ ์ฐ๋ผ๋ rule
'import/prefer-default-export': ['off'], // export const ๋ฌธ์ ์ธ๋ ์๋ฌ๋ฅผ ๋ด๋ rule ํด์
'react/prop-types': ['off'], // props์ ํ์
์ฒดํฌ๋ฅผ ์ฒ๋ฆฌ์ proptypes๊ฐ ์๋ typescript ์ฌ์ฉ ์์
'react/jsx-wrap-multilines': 0, // jsx์์ ์ฌ๋ฌ ์ค์ ๊ฑธ์ณ์ ์ ์ํ ๋ ๋ณต์กํ rule ํด์
'react/jsx-indent-props': [2, 'tab'], // jsx์ ์์ฑ์๋ tab์ผ๋ก indent ์ ์ฉ
'@typescript-eslint/explicit-module-boundary-types': 0, // function์ return ํ์
์ ๋ช
์ํด์ผํ๋ rule ํด์
'import/extensions': 0, // ts ํ์ผ์ ๋ถ๋ฌ์ค๊ธฐ ์ํด
'react/jsx-filename-extension': 0, // ts, tsx ํ์ผ์์๋ jsx๋ฅผ ์ฐ๊ธฐ ์ํด
'no-restricted-syntax': ['warn', 'FunctionExpression', 'WithStatement', 'BinaryExpression'], // for in ์ฌ์ฉ
'react/jsx-props-no-spreading': ['warn'], // props๋ก ๋ฐ์ ๊ฒ ๋ฐ๋ก props๋ก ๋๊ธฐ๊ธฐ ํ์ฉ
},
'settings': {
'react': {
'version': 'detect',
},
'import/resolver': {
'node': {
'extensions': ['.js', '.jsx', '.ts', '.tsx']
}
}
},
};
๋ฐ์ํ
Comment