const { features } = require('./feature')

module.exports = {
  root: true,
  env: {
    browser: true,
    node: true,
    es6: true
  },
  extends: [
    'plugin:vue/recommended',
    'eslint:recommended'
  ],
  parserOptions: {
    parser: '@babel/eslint-parser',
    sourceType: 'module'
  },
  globals: (function (map) {
    Object.keys(features).forEach(key => {
      map[key] = true
    })
    return map
  }({})),
  // add your custom rules here
  rules: {
    'vue/multi-word-component-names': 0,
    'vue/no-mutating-props': 0,
    'vue/max-attributes-per-line': [2, {
      'singleline': 1,
      'multiline': 1
    }],
    'vue/singleline-html-element-content-newline': 0,
    'vue/multiline-html-element-content-newline': 0,
    'vue/component-definition-name-casing': [2, 'PascalCase'],
    'vue/no-v-html': 0,
    // 8.17.0
    // Possible Problems
    'array-callback-return': 2,
    'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
    'no-constructor-return': 2,
    'no-duplicate-imports': 2,
    'no-self-compare': 2,
    'no-unmodified-loop-condition': 2,
    'no-unused-vars': [2, {
      'vars': 'all',
      'args': 'after-used',
      'ignoreRestSiblings': true
    }],
    'no-use-before-define': [2, 'nofunc'],
    'no-template-curly-in-string': 2,
    'no-unreachable-loop': 2,
    'valid-typeof': [2, { 'requireStringLiterals': true }],
    // Suggestions
    'accessor-pairs': 2,
    'arrow-body-style': [2, 'as-needed', { 'requireReturnForObjectLiteral': true }],
    'block-scoped-var': 2,
    'camelcase': [0, {
      'properties': 'always',
      'ignoreDestructuring': true
    }],
    'complexity': [0, 3],
    'consistent-return': [2, {
      'treatUndefinedAsUnspecified': true
    }],
    'consistent-this': [2, 'self'],
    'curly': [2, 'all'],
    'default-case': 2,
    'default-case-last': 2,
    'default-param-last': 2,
    'eqeqeq': ['error', 'always', { 'null': 'ignore' }],
    'func-name-matching': 2,
    'func-names': [2, 'never'],
    'func-style': [2, 'declaration', { 'allowArrowFunctions': true }],
    'grouped-accessor-pairs': [2, 'getBeforeSet'],
    'guard-for-in': 2,
    'max-depth': [2, 4],
    'max-nested-callbacks': [2, 4],
    'max-params': [2, 4],
    'new-cap': [2, {
      'newIsCap': true,
      'capIsNew': false
    }],
    'no-alert': 2,
    'no-array-constructor': 2,
    'no-caller': 2,
    'no-console': 0,
    'no-div-regex': 2,
    'no-else-return': [2, { 'allowElseIf': true }],
    'no-empty-function': [2, { 'allow': ['arrowFunctions'] }],
    'no-eval': 2,
    'no-extend-native': 2,
    'no-extra-bind': 2,
    'no-extra-label': 2,
    'no-floating-decimal': 2,
    'no-implied-eval': 2,
    'no-invalid-this': 2,
    'no-iterator': 2,
    'no-label-var': 2,
    'no-labels': [2, {
      'allowLoop': false,
      'allowSwitch': false
    }],
    'no-lone-blocks': 2,
    'no-lonely-if': 2,
    'no-loop-func': 2,
    'no-multi-assign': [2, { 'ignoreNonDeclaration': true }],
    'no-multi-str': 2,
    'no-negated-condition': 2,
    'no-new-func': 2,
    'no-new-object': 2,
    'no-new-wrappers': 2,
    'no-octal-escape': 2,
    'no-proto': 2,
    'no-return-assign': [2, 'except-parens'],
    'no-return-await': 2,
    'no-script-url': 2,
    'no-sequences': 2,
    'no-throw-literal': 2,
    'no-undef-init': 2,
    'no-undefined': 2,
    'no-unneeded-ternary': [2, {
      'defaultAssignment': false
    }],
    'no-unused-expressions': [2, {
      'allowShortCircuit': true,
      'allowTernary': true
    }],
    'no-useless-call': 2,
    'no-useless-computed-key': 2,
    'no-useless-concat': 2,
    'no-useless-constructor': 2,
    'no-useless-rename': 2,
    'no-useless-return': 2,
    'no-var': 2,
    'object-shorthand': [2, 'always'],
    'one-var': [2, 'never'],
    'operator-assignment': 2,
    'prefer-arrow-callback': [2, {
      'allowNamedFunctions': false,
      'allowUnboundThis': false
    }],
    'prefer-const': 2,
    'prefer-exponentiation-operator': 2,
    'prefer-object-spread': 2,
    'prefer-regex-literals': 2,
    'prefer-rest-params': 2,
    'prefer-spread': 2,
    'prefer-template': 2,
    'require-await': 2,
    'spaced-comment': [2, 'always', {
      'markers': [
        'global',
        'globals',
        'eslint',
        'eslint-disable',
        '*package',
        '!',
        ','
      ]
    }],
    'symbol-description': 2,
    'yoda': [2, 'never'],
    // Layout & Formatting
    'array-bracket-spacing': [2, 'never'],
    'array-element-newline': [2, 'consistent'],
    'arrow-parens': [2, 'as-needed'],
    'arrow-spacing': [2, {
      'before': true,
      'after': true
    }],
    'block-spacing': [2, 'always'],
    'brace-style': [2, '1tbs', {
      'allowSingleLine': true
    }],
    'comma-dangle': [2, 'never'],
    'comma-spacing': [2, {
      'before': false,
      'after': true
    }],
    'comma-style': [2, 'last'],
    'computed-property-spacing': [2, 'never'],
    'dot-location': [2, 'property'],
    'eol-last': [2, 'always'],
    'func-call-spacing': [2, 'never'],
    'function-call-argument-newline': [2, 'consistent'],
    'function-paren-newline': [2, 'multiline-arguments'],
    'generator-star-spacing': [2, 'before'],
    'implicit-arrow-linebreak': [2, 'beside'],
    'indent': [2, 2, {
      'VariableDeclarator': 'first',
      'SwitchCase': 1,
      'MemberExpression': 1,
      'ArrayExpression': 'first',
      'ObjectExpression': 'first',
      'ImportDeclaration': 'first',
      'flatTernaryExpressions': false,
      'ignoreComments': false
    }],
    'jsx-quotes': [2, 'prefer-single'],
    'key-spacing': [2, {
      'beforeColon': false,
      'afterColon': true
    }],
    'keyword-spacing': [2, {
      'before': true,
      'after': true
    }],
    'max-statements-per-line': [2, { 'max': 2 }],
    'multiline-ternary': [2, 'always-multiline'],
    'new-parens': [2, 'always'],
    'newline-per-chained-call': [2, { 'ignoreChainWithDepth': 3 }],
    'no-extra-parens': [2, 'functions'],
    'no-multi-spaces': 2,
    'no-multiple-empty-lines': [2, { 'max': 1 }],
    'no-tabs': 2,
    'no-trailing-spaces': 2,
    'no-whitespace-before-property': 2,
    'nonblock-statement-body-position': [2, 'beside'],
    'object-curly-newline': [2, {
      'ObjectPattern': {
        'multiline': true
      },
      'ImportDeclaration': {
        'multiline': true,
        'minProperties': 2
      },
      'ExportDeclaration': 'never'
    }],
    'object-curly-spacing': [2, 'always', {
      'arraysInObjects': true,
      'objectsInObjects': true
    }],
    'operator-linebreak': [2, 'after', {
      'overrides': {
        '?': 'before',
        ':': 'before',
        '&&': 'before',
        '||': 'before'
      }
    }],
    'padded-blocks': [2, 'never'],
    'quotes': [2, 'single', {
      'avoidEscape': true,
      'allowTemplateLiterals': true
    }],
    'rest-spread-spacing': [2, 'never'],
    'semi': [2, 'never'],
    'semi-spacing': [2, {
      'before': false,
      'after': true
    }],
    'space-before-blocks': [2, 'always'],
    'space-before-function-paren': [2, 'always'],
    'space-in-parens': [2, 'never'],
    'space-infix-ops': 2,
    'space-unary-ops': [2, {
      'words': true,
      'nonwords': false
    }],
    'switch-colon-spacing': [2, {
      'before': false,
      'after': true
    }],
    'template-curly-spacing': [2, 'never'],
    'template-tag-spacing': [2, 'never'],
    'wrap-iife': [2, 'any'],
    'yield-star-spacing': [2, 'before']
  }
}
