Private
Public Access
1
0
Files
MineSeeker/eslint.config.mjs

115 lines
3.3 KiB
JavaScript

import globals from 'globals';
import reactPlugin from 'eslint-plugin-react';
import reactHooksPlugin from 'eslint-plugin-react-hooks';
import stylisticPlugin from '@stylistic/eslint-plugin';
export default [
{
ignores: ['node_modules/**', 'vendor/**', 'var/**', 'public/build/**'],
},
{
files: ['**/*.jsx'],
rules: {
'react/jsx-uses-vars': 'error',
},
},
{
files: ['**/*.{js,mjs,cjs,jsx,ts,tsx}'],
plugins: {
react: reactPlugin,
'react-hooks': reactHooksPlugin,
'@stylistic': stylisticPlugin,
},
languageOptions: {
globals: {
...globals.browser,
...globals.node,
},
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
ecmaFeatures: {
jsx: true,
},
},
},
settings: {
react: {
version: 'detect',
},
},
rules: {
'yoda': ['error', 'always'],
'arrow-body-style': ['error', 'as-needed'],
'no-empty': ['error', { 'allowEmptyCatch': true }],
'no-multiple-empty-lines': 1,
'no-unused-vars': ['error', {
'vars': 'all',
'args': 'after-used',
'caughtErrors': 'none',
'ignoreRestSiblings': false,
'reportUsedIgnorePattern': false,
}],
'react/react-in-jsx-scope': 'off',
'react/prop-types': 'off',
'react-hooks/rules-of-hooks': 'error',
'react-hooks/exhaustive-deps': 'warn',
'@stylistic/semi': 0,
'@stylistic/comma-dangle': [1, {
arrays: 'only-multiline',
objects: 'only-multiline',
imports: 'only-multiline',
exports: 'only-multiline',
functions: 'only-multiline',
}],
'@stylistic/operator-linebreak': ['error', 'before'],
'@stylistic/indent': ['error', 2, { SwitchCase: 1 }],
'@stylistic/space-before-function-paren': ['error', {
anonymous: 'never',
named: 'never',
asyncArrow: 'always',
}],
'@stylistic/arrow-parens': ['error', 'as-needed', {
requireForBlockBody: false,
}],
'@stylistic/arrow-spacing': ['error', {
before: true,
after: true,
}],
'@stylistic/no-mixed-spaces-and-tabs': 1,
'@stylistic/jsx-closing-bracket-location': 1,
'@stylistic/jsx-closing-tag-location': 1,
'@stylistic/jsx-curly-brace-presence': [1, 'never'],
'@stylistic/jsx-curly-spacing': 1,
'@stylistic/jsx-equals-spacing': 1,
'@stylistic/jsx-first-prop-new-line': [1, 'multiline-multiprop'],
'@stylistic/jsx-pascal-case': [1, {
allowAllCaps: false,
allowNamespace: true,
allowLeadingUnderscore: false,
}],
'@stylistic/no-multi-spaces': 1,
'@stylistic/jsx-self-closing-comp': ['error', {
component: true,
html: true,
}],
'@stylistic/jsx-wrap-multilines': [1, {
declaration: 'parens-new-line',
assignment: 'parens-new-line',
return: 'parens-new-line',
arrow: 'parens-new-line',
condition: 'ignore',
logical: 'parens-new-line',
prop: 'parens-new-line',
propertyValue: 'parens-new-line',
}],
'@stylistic/jsx-tag-spacing': [1, {
closingSlash: 'never',
beforeSelfClosing: 'always',
afterOpening: 'never',
beforeClosing: 'allow',
}],
},
},
];