jane/eslint-plugin-jane

View on GitHub
rules/index.js

Summary

Maintainability
A
0 mins
Test Coverage
const { jestRules } = require('./jest')
const { nodeRules } = require('./node')
const prettierFormat = require('./prettier')
const { a11yRules, reactRules } = require('./react')
const { baseRules } = require('./recommended')
const { typescriptRules } = require('./typescript')

const prettierRules = {
  'prettier/prettier': [2, prettierFormat],
}

const defaultParserOptions = {
  ecmaVersion: 9,
  sourceType: 'module',
}

const defaultPlugins = ['babel', 'unicorn', 'promise', 'import']

const plugin = {
  environments: {
    browser: {
      globals: {
        _jane: false,
      },
    },
  },
  configs: {
    recommended: {
      plugins: defaultPlugins,
      settings: {
        'import/internal-regex': '^(@/|@:).+',
      },
      extends: ['plugin:import/warnings'],
      rules: baseRules,
    },
    react: {
      parserOptions: Object.assign({}, defaultParserOptions, {
        ecmaFeatures: {
          jsx: true,
        },
      }),
      env: {
        browser: true,
      },
      plugins: ['react', 'jsx-a11y', 'react-hooks'],
      extends: ['plugin:import/warnings', 'prettier'],
      rules: Object.assign({}, reactRules, a11yRules),
    },
    node: {
      env: {
        node: true,
      },
      extends: [
        'plugin:import/warnings',
        'plugin:node/recommended',
        'prettier',
      ],
      rules: nodeRules,
    },
    jest: {
      env: {
        jest: true,
      },
      plugins: ['jest'],
      extends: ['plugin:import/warnings', 'prettier'],
      rules: jestRules,
    },
    prettier: {
      plugins: ['prettier'],
      extends: ['plugin:import/warnings', 'prettier'],
      rules: prettierRules,
    },
    typescript: {
      plugins: ['@typescript-eslint'],
      extends: [
        'plugin:import/warnings',
        'plugin:@typescript-eslint/recommended',
        'prettier',
      ],
      rules: typescriptRules,
      parser: '@typescript-eslint/parser',
      parserOptions: { project: './tsconfig.json' },
    },
  },
}

module.exports = plugin