{
  "env": {
    "es6": true,
  },
  "parserOptions": {
    "ecmaVersion": 2017,
    "sourceType": "module",
  },
  "settings": {
    "flowtype": {
      "onlyFilesWithFlowAnnotation": true,
    },
  },
  "plugins": [
    "babel",
    "flowtype",
    "import",
    "promise",
    "you-dont-need-lodash-underscore",
  ],
  "rules": {
    "arrow-body-style": [
      "error",
      "as-needed",
    ],
    "arrow-spacing": "error",
    "class-methods-use-this": "error",
    "comma-dangle": [
      "error",
      {
        "arrays": "always-multiline",
        "exports": "always-multiline",
        "functions": "always-multiline",
        "imports": "always-multiline",
        "objects": "always-multiline",
      },
    ],
    "consistent-this": "off",
    "constructor-super": "error",
    "import/default": "error",
    "import/export": "error",
    "import/extensions": [
      "error",
      "never",
    ],
    "import/first": "error",
    "generator-star-spacing": "error",
    "import/max-dependencies": [
      "error",
      {
        "max": 30,
      },
    ],
    "import/named": "error",
    "new-cap": "off",
    "babel/new-cap": "error",
    "import/newline-after-import": "error",
    "import/no-absolute-path": "error",
    "no-await-in-loop": "error",
    "no-class-assign": "error",
    "no-confusing-arrow": [
      "error",
      {
        "allowParens": true,
      },
    ],
    "no-constant-condition": "error",
    "no-const-assign": "error",
    "import/no-deprecated": "error",
    "no-dupe-class-members": "error",
    "no-duplicate-imports": "error",
    "no-empty-pattern": "error",
    "babel/no-invalid-this": "error",
    "no-loop-func": "off",
    "no-magic-numbers": [
      "warn",
      {
        "enforceConst": true,
        "ignore": [0, 1],
        "ignoreArrayIndexes": true,
      },
    ],
    "no-mixed-requires": "error",
    "no-multi-spaces": "error",
    "import/no-mutable-exports": "error",
    "import/no-named-default": "error",
    "import/no-namespace": "error",
    "no-new-symbol": "error",
    "import/no-unresolved": [
      "error",
      {
        "amd": true,
        "commonjs": true,
        "ignore": [
          "build/locales/getLocales$",
          "js/render/prerenderSimple$",
        ],
      },
    ],
    "no-param-reassign": "error",
    "no-return-await": "error",
    "no-template-curly-in-string": "error",
    "no-this-before-super": "error",
    "no-useless-concat": "error",
    "no-useless-constructor": "error",
    "no-var": "error",
    "import/no-webpack-loader-syntax": "error",
    "object-shorthand": "error",
    "prefer-arrow-callback": "error",
    "prefer-const": "error",
    "prefer-rest-params": "error",
    "prefer-spread": "error",
    "prefer-template": "error",
    "require-await": "error",
    "require-yield": "error",

    // TODO: Implement a version more tailored to our needs.
    // "sort-imports": "error",
    "strict": [
      "error",
      "never",
    ],
    "template-curly-spacing": "error",
    "yield-star-spacing": "error",

    // Promises.
    "promise/always-return": "error",
    "promise/catch-or-return": "error",
    "promise/param-names": "error",
    "promise/no-return-wrap": "error",

    // Flow.
    "flowtype/boolean-style": "error",
    "flowtype/define-flow-type": "error",
    "flowtype/delimiter-dangle": [
      "error",
      "always-multiline",
    ],
    "flowtype/no-dupe-keys": "error",
    "flowtype/no-primitive-constructor-types": "error",
    "flowtype/object-type-delimiter": "error",
    "flowtype/require-parameter-type": [
      "error",
      {
        "excludeArrowFunctions": true,
      },
    ],
    "flowtype/require-return-type": [
      "error",
      {
        "excludeArrowFunctions": true,
      },
    ],
    "flowtype/require-valid-file-annotation": [
      "error",
      "never",
      {
        "annotationStyle": "block",
      },
    ],
    "flowtype/semi": "error",
    "flowtype/sort-keys": [
      "error",
      "asc",
      {
        "caseSensitive": true,
        "natural": true,
      },
    ],
    "flowtype/space-after-type-colon": "error",
    "flowtype/space-before-generic-bracket": "error",
    "flowtype/space-before-type-colon": "error",
    "flowtype/type-id-match": [
      "error",
      "^([A-Z][A-Za-z0-9]*)+(?:Type)?$",
    ],
    "flowtype/union-intersection-spacing": "error",
    "flowtype/use-flow-type": "error",

    // Lo-Dash
    "lodash/prefer-startswith": "off",
    "lodash/prefer-includes": "off",
    "you-dont-need-lodash-underscore/assign": "error",
    "you-dont-need-lodash-underscore/concat": "error",
    "you-dont-need-lodash-underscore/each": "error",
    "you-dont-need-lodash-underscore/fill": "error",
    "you-dont-need-lodash-underscore/find-index": "error",
    "you-dont-need-lodash-underscore/index-of": "error",
    "you-dont-need-lodash-underscore/is-nan": "error",
    "you-dont-need-lodash-underscore/join": "error",
    "you-dont-need-lodash-underscore/keys": "error",
    "you-dont-need-lodash-underscore/last-index-of": "error",
    "you-dont-need-lodash-underscore/repeat": "error",
    "you-dont-need-lodash-underscore/reverse": "error",
    "you-dont-need-lodash-underscore/size": "error",
    "you-dont-need-lodash-underscore/to-lower": "error",
    "you-dont-need-lodash-underscore/to-upper": "error",
    "you-dont-need-lodash-underscore/trim": "error",
  },
}
