eslintrc

373 阅读1分钟
module.exports = {
  extends: ['airbnb', 'airbnb/hooks'],
  parser: '@babel/eslint-parser',
  parserOptions: {
    ecmaVersion: 7,
    sourceType: 'module',
  },
  env: {
    browser: true,
  },
  plugins: [
    'import'
  ],
  settings: {
    'import/ignore': ['\\.(?:styl|less|css|scss|vue|json)$'],
    'import/parsers': {
      '@typescript-eslint/parser': [
        '.ts',
        '.tsx'
      ]
    },
    'import/docstyle': [
      'jsdoc',
      'tomdoc'
    ],
    'import/resolver': {
      node: {
        extensions: [
          '.js',
          '.jsx',
          '.ts',
          '.tsx',
          '.vue'
        ]
      }
    }
  },
  rules: {
    'import/extensions': [
      2,
      {
        js: 'never',
        jsx: 'never',
        es: 'never',
        ts: 'never',
        tsx: 'never',
        vue: 'ignore',
        jpg: 'always',
        jpeg: 'always',
        png: 'always',
        svg: 'always',
        gif: 'always',
        webp: 'always',
        ttf: 'always',
        woff: 'always',
        woff2: 'always',
        otf: 'always',
        xml: 'always'
      }
    ],
    'no-unused-vars': [
      1,
      {
        vars: 'local',
        args: 'none'
      }
    ],
    'max-len': [
      2,
      120,
      4,
      {
        code: 120,
        tabWidth: 2,
        ignoreUrls: true,
        ignoreComments: true,
        ignoreRegExpLiterals: true
      }
    ],
    'no-unused-expressions': [
      1,
      {
        allowShortCircuit: true,
        allowTernary: true,
        allowTaggedTemplates: true
      }
    ],
    'comma-dangle': [
      1,
      'only-multiline'
    ],
    'import/no-unresolved': [
      1,
      {
        amd: true,
        commonjs: true,
        caseSensitive: true,
        ignore: ['^[@~]']
      }
    ],
    'object-curly-spacing': [
      2,
      'never'
    ],
    'object-curly-newline': [
      2,
      {
        multiline: true,
        consistent: true
      }
    ],
    'arrow-parens': [
      2,
      'as-needed'
    ],
    'operator-linebreak': [
      2,
      'before'
    ],
    'prefer-object-spread': 1,
    'react/jsx-filename-extension': [2, {extensions: ['.js', '.jsx']}],
    'react/jsx-props-no-spreading': [0],
    'react/prop-types': 1,
    'react/destructuring-assignment': [
      1,
      'always',
      {
        ignoreClassFields: true
      }
    ],
    'react-hooks/exhaustive-deps': [1],
    'no-param-reassign': [1],
    'jsx-a11y/click-events-have-key-events': [0],
    'jsx-a11y/no-static-element-interactions': [0],
  }
};