164 lines
3.9 KiB
JavaScript
164 lines
3.9 KiB
JavaScript
const babelOptions = {
|
|
plugins: [
|
|
[
|
|
require.resolve('@babel/plugin-proposal-decorators'),
|
|
{
|
|
legacy: true,
|
|
},
|
|
],
|
|
[
|
|
require.resolve('@babel/plugin-proposal-class-properties'),
|
|
{
|
|
loose: true,
|
|
},
|
|
],
|
|
require.resolve('@babel/plugin-proposal-object-rest-spread'),
|
|
require.resolve('@babel/plugin-proposal-optional-catch-binding'),
|
|
require.resolve('@babel/plugin-proposal-async-generator-functions'),
|
|
require.resolve('@babel/plugin-proposal-export-namespace-from'),
|
|
require.resolve('@babel/plugin-proposal-export-default-from'),
|
|
require.resolve('@babel/plugin-proposal-nullish-coalescing-operator'),
|
|
require.resolve('@babel/plugin-proposal-optional-chaining'),
|
|
[
|
|
require.resolve('@babel/plugin-proposal-pipeline-operator'),
|
|
{
|
|
proposal: 'minimal',
|
|
},
|
|
],
|
|
require.resolve('@babel/plugin-proposal-do-expressions'),
|
|
require.resolve('@babel/plugin-proposal-function-bind'),
|
|
require.resolve('@babel/plugin-syntax-dynamic-import'),
|
|
require.resolve('@babel/plugin-syntax-jsx'),
|
|
],
|
|
};
|
|
|
|
/** @type {(import('eslint').Linter.Config)[]} */
|
|
module.exports = [
|
|
{
|
|
files: ['**/*.?(m|c)js?(x)'],
|
|
rules: {
|
|
'no-import-assign': 'error',
|
|
'no-extra-semi': 'error',
|
|
'no-undef': 'error',
|
|
'no-unused-vars': [
|
|
'error',
|
|
{
|
|
argsIgnorePattern: '^_',
|
|
},
|
|
],
|
|
'comma-dangle': ['error', 'always-multiline'],
|
|
'no-array-constructor': 'error',
|
|
'dot-notation': 'error',
|
|
'constructor-super': 'error',
|
|
'no-this-before-super': 'error',
|
|
'no-useless-constructor': 'error',
|
|
'getter-return': [
|
|
'error',
|
|
{
|
|
allowImplicit: true,
|
|
},
|
|
],
|
|
'no-setter-return': 'error',
|
|
'no-dupe-class-members': 'error',
|
|
'default-param-last': 'error',
|
|
'no-func-assign': 'error',
|
|
'no-unsafe-negation': 'error',
|
|
'valid-typeof': 'error',
|
|
'no-empty-function': 'error',
|
|
quotes: [
|
|
'error',
|
|
'single',
|
|
{
|
|
avoidEscape: true,
|
|
},
|
|
],
|
|
'no-loss-of-precision': 'error',
|
|
'no-magic-numbers': [
|
|
'warn',
|
|
{
|
|
ignoreArrayIndexes: true,
|
|
ignoreDefaultValues: true,
|
|
enforceConst: true,
|
|
ignore: [0, 1, -1],
|
|
ignoreClassFieldInitialValues: true,
|
|
},
|
|
],
|
|
'no-unreachable': 'error',
|
|
'no-throw-literal': 'error',
|
|
'no-implied-eval': 'error',
|
|
'no-new-symbol': 'error',
|
|
'no-obj-calls': 'error',
|
|
camelcase: [
|
|
'error',
|
|
{
|
|
properties: 'never',
|
|
allow: ['^UNSAFE_'],
|
|
ignoreDestructuring: true,
|
|
},
|
|
],
|
|
'unicorn/filename-case': [
|
|
'error',
|
|
{
|
|
cases: {
|
|
kebabCase: true,
|
|
},
|
|
},
|
|
],
|
|
'max-lines-per-function': [
|
|
'error',
|
|
{
|
|
max: 300,
|
|
IIFEs: true,
|
|
},
|
|
],
|
|
},
|
|
languageOptions: {
|
|
parser: require('@babel/eslint-parser'),
|
|
parserOptions: {
|
|
ecmaVersion: 11,
|
|
sourceType: 'module',
|
|
ecmaFeatures: {
|
|
jsx: true,
|
|
legacyDecorators: true,
|
|
},
|
|
requireConfigFile: false,
|
|
babelOptions,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
// for jsx
|
|
files: ['**/*.?(m|c)jsx'],
|
|
rules: {
|
|
'react/jsx-uses-react': 'error',
|
|
'react/jsx-uses-vars': 'error',
|
|
'unicorn/filename-case': [
|
|
'warn',
|
|
{
|
|
cases: {
|
|
kebabCase: true,
|
|
snakeCase: true,
|
|
pascalCase: true,
|
|
},
|
|
ignore: ['^(?!.*?\\.jsx$)(?!.*?\\.tsx$).+'],
|
|
},
|
|
],
|
|
'max-lines-per-function': [
|
|
'warn',
|
|
{
|
|
max: 300,
|
|
IIFEs: true,
|
|
},
|
|
],
|
|
'max-lines': [
|
|
'error',
|
|
{
|
|
max: 500,
|
|
skipComments: true,
|
|
skipBlankLines: true,
|
|
},
|
|
],
|
|
},
|
|
},
|
|
];
|