{
  "root": true,
  "parser": "babel-eslint",
  "plugins": ["import"],

  "env": {
    "browser": true,
    "commonjs": true,
    "es6": true,
    "node": true
  },

  "parserOptions": {
    "ecmaVersion": 6,
    "sourceType": "module",
    "ecmaFeatures": {
      "experimentalObjectRestSpread": true
    }
  },

  "settings": {
    "import/ignore": ["node_modules"],
    "import/extensions": [".js"],
    "import/resolver": {
      "node": {
        "extensions": [".js", ".json"]
      }
    }
  },

  "rules": {
    // http://eslint.org/docs/rules/
    "array-callback-return": "warn",
    "default-case": ["warn", { "commentPattern": "^no default$" }],
    "dot-location": ["warn", "property"],
    "eqeqeq": ["warn", "allow-null"],
    "new-parens": "warn",
    "no-array-constructor": "warn",
    "no-caller": "warn",
    "no-cond-assign": ["warn", "always"],
    "no-const-assign": "warn",
    "no-control-regex": "warn",
    "no-delete-var": "warn",
    "no-dupe-args": "warn",
    "no-dupe-class-members": "warn",
    "no-dupe-keys": "warn",
    "no-duplicate-case": "warn",
    "no-empty-character-class": "warn",
    "no-empty-pattern": "warn",
    "no-eval": "warn",
    "no-ex-assign": "warn",
    "no-extend-native": "warn",
    "no-extra-bind": "warn",
    "no-extra-label": "warn",
    "no-fallthrough": "warn",
    "no-func-assign": "warn",
    "no-implied-eval": "warn",
    "no-invalid-regexp": "warn",
    "no-iterator": "warn",
    "no-label-var": "warn",
    "no-labels": ["warn", { "allowLoop": false, "allowSwitch": false }],
    "no-lone-blocks": "warn",
    "no-loop-func": "warn",
    "no-mixed-operators": [
      "warn",
      {
        "groups": [
          ["&", "|", "^", "~", "<<", ">>", ">>>"],
          ["==", "!=", "===", "!==", ">", ">=", "<", "<="],
          ["&&", "||"],
          ["in", "instanceof"]
        ],
        "allowSamePrecedence": false
      }
    ],
    "no-multi-str": "warn",
    "no-native-reassign": "warn",
    "no-negated-in-lhs": "warn",
    "no-new-func": "warn",
    "no-new-object": "warn",
    "no-new-symbol": "warn",
    "no-new-wrappers": "warn",
    "no-obj-calls": "warn",
    "no-octal": "warn",
    "no-octal-escape": "warn",
    "no-redeclare": "warn",
    "no-regex-spaces": "warn",
    "no-restricted-syntax": ["warn", "LabeledStatement", "WithStatement"],
    "no-script-url": "warn",
    "no-self-assign": "warn",
    "no-self-compare": "warn",
    "no-sequences": "warn",
    "no-shadow-restricted-names": "warn",
    "no-sparse-arrays": "warn",
    "no-template-curly-in-string": "warn",
    "no-this-before-super": "warn",
    "no-throw-literal": "warn",
    "no-undef": "error",
    "no-restricted-globals": ["error", "event"],
    "no-unexpected-multiline": "warn",
    "no-unreachable": "warn",
    "no-unused-expressions": [
      "warn",
      {
        "allowShortCircuit": true,
        "allowTernary": true
      }
    ],
    "no-unused-labels": "warn",
    "no-unused-vars": [
      "warn",
      {
        "vars": "local",
        "varsIgnorePattern": "^_",
        "args": "none",
        "ignoreRestSiblings": true
      }
    ],
    "no-use-before-define": ["warn", "nofunc"],
    "no-useless-computed-key": "warn",
    "no-useless-concat": "warn",
    "no-useless-constructor": "warn",
    "no-useless-escape": "warn",
    "no-useless-rename": [
      "warn",
      {
        "ignoreDestructuring": false,
        "ignoreImport": false,
        "ignoreExport": false
      }
    ],
    "no-with": "warn",
    "no-whitespace-before-property": "warn",
    "operator-assignment": ["warn", "always"],
    "radix": "warn",
    "require-yield": "warn",
    "rest-spread-spacing": ["warn", "never"],
    "strict": ["warn", "never"],
    "unicode-bom": ["warn", "never"],
    "use-isnan": "warn",
    "valid-typeof": "warn",
    "no-restricted-properties": [
      "error",
      {
        "object": "require",
        "property": "ensure",
        "message": "Please use import() instead. More info: https://webpack.js.org/guides/code-splitting-import/#dynamic-import"
      },
      {
        "object": "System",
        "property": "import",
        "message": "Please use import() instead. More info: https://webpack.js.org/guides/code-splitting-import/#dynamic-import"
      }
    ],

    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/

    // TODO: import rules are temporarily disabled because they don"t play well
    // with how eslint-loader only checks the file you change. So if module A
    // imports module B, and B is missing a default export, the linter will
    // record this as an issue in module A. Now if you fix module B, the linter
    // will not be aware that it needs to re-lint A as well, so the error
    // will stay until the next restart, which is really confusing.

    // This is probably fixable with a patch to eslint-loader.
    // When file A is saved, we want to invalidate all files that import it
    // *and* that currently have lint errors. This should fix the problem.
    // (As an exception, import/no-webpack-loader-syntax can be enabled already
    // because it doesn"t depend on whether the file exists, so this issue
    // doesn"t apply to it.)

    // "import/default": "warn",
    // "import/export": "warn",
    // "import/named": "warn",
    // "import/namespace": "warn",
    // "import/no-amd": "warn",
    // "import/no-duplicates": "warn",
    // "import/no-extraneous-dependencies": "warn",
    // "import/no-named-as-default": "warn",
    // "import/no-named-as-default-member": "warn",
    // "import/no-unresolved": ["warn", { commonjs: true }],
  },
}
