{
  // This is a set of basic and sensible rules that should not change except at major ESLint versions
  "extends": [
    "eslint:recommended",
    "plugin:promise/recommended"
  ],

  "parserOptions": {
    "ecmaVersion": 2018
  },

  // Environments that we run in
  "env": {
    "node": true,
    "mocha": true,
    "es6": true,
    "browser": true
  },

  // Extra plugins required
  "plugins": [
    "ideal", // for tabs in file
    "promise"
  ],

  // Additional rules
  "rules": {
    "array-bracket-spacing": ["error", "never"],
    "brace-style": ["error", "1tbs", {"allowSingleLine": true}],
    "dot-notation": "error",
    "eqeqeq": "error",
    "ideal/no-tabs-in-file": "error",
    "indent": ["error", 4, {"SwitchCase": 1}],
    "max-len": ["error", 1000, {"ignoreComments": true}],
    "new-cap": ["error", {"capIsNewExceptions": ["Router"]}],
    "no-console": "error",
    "no-eval": "error",
    "no-implied-eval": "error",
    "no-floating-decimal": "error",
    "no-lonely-if": "error",
    "no-spaced-func": "error",
    "no-throw-literal": "off",
    "no-trailing-spaces": "error",
    "no-use-before-define": ["error", {"functions": false}],
    "no-useless-call": "error",
    "no-with": "error",
    "operator-linebreak": ["error", "after"],
    "require-jsdoc": ["error", {
      "require": {
        "ClassDeclaration": true,
        "MethodDefinition": true,
        "FunctionDeclaration": true
      }
    }],
    "semi": ["error", "always"],
    "strict": ["error", "function"],
    "valid-jsdoc": ["error", {"requireReturn": false}]
  }
}
