@1stg/eslint-config
Version:
Personal but Shareable ESLint Configuration for all 1stG.me projects
123 lines (118 loc) • 3.06 kB
JavaScript
const { isTsAvailable } = require('@pkgr/utils')
const { getGlobals } = require('eslint-plugin-mdx')
const {
isWebpackAvailable,
magicNumbers,
webpackSpecVars,
prettierExtends,
} = require('./_util')
module.exports = {
extends: [
'eslint:recommended',
'plugin:eslint-comments/recommended',
'plugin:css/recommended',
'plugin:import/recommended',
'plugin:n/recommended',
'plugin:promise/recommended',
'plugin:regexp/recommended',
'plugin:sonarjs/recommended',
isTsAvailable && 'plugin:sonar/recommended',
'plugin:unicorn/recommended',
'standard',
...prettierExtends,
].filter(Boolean),
plugins: ['es-x', 'simple-import-sort'],
globals: isWebpackAvailable ? getGlobals(webpackSpecVars) : undefined,
rules: {
'arrow-body-style': 2,
camelcase: [
2,
{
properties: 'never',
ignoreDestructuring: true,
allow: isWebpackAvailable ? webpackSpecVars : undefined,
},
],
curly: [2, 'all'],
'eslint-comments/disable-enable-pair': [
2,
{
allowWholeFile: true,
},
],
'eslint-comments/no-unused-disable': 2,
'import/first': 2,
'import/newline-after-import': 2,
'import/no-duplicates': 2,
'import/order': [
2,
{
alphabetize: {
order: 'asc',
},
'newlines-between': 'always',
},
],
'no-else-return': [
2,
{
allowElseIf: false,
},
],
'no-empty': [
2,
{
allowEmptyCatch: true,
},
],
'no-empty-function': 2,
'no-labels': isTsAvailable ? 0 : 2, // sonar/no-labels
'no-magic-numbers': [
2,
{
enforceConst: true,
ignore: magicNumbers,
ignoreArrayIndexes: true,
},
],
'no-negated-condition': 2,
'no-process-exit': 0, // suspended by unicorn/no-process-exit
// The following rules are duplicate with `eslint-plugin-import`
'n/no-extraneous-import': 0,
'n/no-extraneous-require': 0,
'n/no-missing-import': 0,
'n/no-missing-require': 0,
'n/no-unsupported-features/es-syntax': 0,
'n/no-unsupported-features/node-builtins': 0,
'n/no-unpublished-import': 0,
'n/no-unpublished-require': 0,
'prefer-const': 2,
'prefer-object-spread': 2,
'simple-import-sort/exports': 2,
'unicorn/catch-error-name': [
2,
{
name: 'error',
ignore: ['^e(rr)?$'],
},
],
'unicorn/consistent-function-scoping': 0,
'unicorn/filename-case': [
2,
{
cases: {
kebabCase: true,
pascalCase: true,
},
// ignore UPPER_CASE markdown or yaml filenames
ignore: [/^[A-Z](([\dA-Z]+_)*[\dA-Z]+)?\.(mdx?|ya?ml)$/],
},
],
'unicorn/no-array-reduce': 0,
'unicorn/no-null': 0,
'unicorn/no-unreadable-array-destructuring': 0, // conflict with `no-unused-vars`
'unicorn/prefer-module': 0,
'unicorn/prefer-object-from-entries': 0,
'unicorn/prevent-abbreviations': 0,
},
}