{
  extends: "eslint:recommended",

  env: {
    node: true,
    es6: true
  },

  rules: {
    // Best Practices
    accessor-pairs: "error",
    array-callback-return: "error",
    block-scoped-var: "error",
    class-methods-use-this: "error",
    complexity: "off",
    consistent-return: "error",
    curly: "error",
    default-case: "error",
    dot-location: ["error", "property"],
    dot-notation: "error",
    eqeqeq: "error",
    guard-for-in: "error",
    no-alert: "error",
    no-caller: "error",
    no-case-declarations: "error",
    no-console: ["error", { allow: ["warn"] }],
    no-div-regex: "error",
    no-else-return: "error",
    no-empty-function: "error",
    no-empty-pattern: "error",
    no-eq-null: "error",
    no-eval: "error",
    no-extend-native: "error",
    no-extra-bind: "error",
    no-extra-label: "error",
    no-fallthrough: "error",
    no-floating-decimal: "error",
    no-global-assign: "error",
    no-implicit-coercion: "error",
    no-implicit-globals: "error",
    no-implied-eval: "error",
    no-invalid-this: "error",
    no-iterator: "error",
    no-labels: "error",
    no-lone-blocks: "error",
    no-loop-func: "error",
    no-magic-numbers: "off",
    no-multi-spaces: "error",
    no-multi-str: "error",
    no-new: "error",
    no-new-func: "error",
    no-new-wrappers: "error",
    no-octal: "error",
    no-octal-escape: "error",
    no-param-reassign: "off",
    no-proto: "error",
    no-redeclare: "error",
    no-restricted-properties: "error",
    no-return-assign: "error",
    no-return-await: "error",
    no-script-url: "error",
    no-self-assign: "error",
    no-self-compare: "error",
    no-sequences: "error",
    no-throw-literal: "error",
    no-unmodified-loop-condition: "error",
    no-unused-expressions: "error",
    no-unused-labels: "error",
    no-useless-call: "error",
    no-useless-concat: "error",
    no-useless-escape: "error",
    no-useless-return: "error",
    no-void: "error",
    no-warning-comments: "error",
    no-with: "error",
    prefer-promise-reject-errors: "error",
    radix: "error",
    require-await: "error",
    vars-on-top: "off",
    wrap-iife: "error",

    // Strict Mode
    strict: ["error", "never"],

    // Variables
    init-declarations: "off",
    no-catch-shadow: "error",
    no-delete-var: "error",
    no-label-var: "error",
    no-restricted-globals: "error",
    no-shadow: "error",
    no-shadow-restricted-names: "error",
    no-undef: "error",
    no-undef-init: "error",
    no-undefined: "off",
    no-unused-vars: "error",
    no-use-before-define: ["error", { "functions": false }],

    // Node.js
    callback-return: "off",
    global-require: "error",
    handle-callback-err: "error",
    no-buffer-constructor: "error",
    no-mixed-requires: "error",
    no-new-require: "error",
    no-path-concat: "error",
    no-process-env: "error",
    no-process-exit: "error",
    no-restricted-modules: "error",
    no-sync: "error",

    // Stylistic Issues
    array-bracket-newline: "error",
    array-bracket-spacing: "error",
    array-element-newline: "off",
    block-spacing: "error",
    brace-style: ["error", "stroustrup", { allowSingleLine: true }],
    camelcase: "error",
    capitalized-comments: "off",
    comma-dangle: ["error", "always-multiline"],
    comma-spacing: "error",
    comma-style: "error",
    computed-property-spacing: "error",
    consistent-this: ["error", "self"],
    eol-last: "error",
    func-call-spacing: "error",
    func-name-matching: "error",
    func-names: "off",
    func-style: ["error", "declaration"],
    function-paren-newline: "error",
    id-blacklist: "error",
    id-length: "off",
    id-match: "error",
    implicit-arrow-linebreak: "error",
    indent: ["error", 2],
    jsx-quotes: "error",
    key-spacing: "error",
    keyword-spacing: "error",
    line-comment-position: "off",
    linebreak-style: "error",
    lines-around-comment: "error",
    lines-between-class-members: "error",
    max-depth: "error",
    max-len: "off",
    max-lines: "off",
    max-nested-callbacks: "error",
    max-params: "error",
    max-statements: "off",
    max-statements-per-line: "error",
    multiline-comment-style: ["error", "separate-lines"],
    multiline-ternary: "off",
    new-cap: "error",
    new-parens: "error",
    newline-per-chained-call: "off",
    no-array-constructor: "error",
    no-bitwise: "error",
    no-continue: "error",
    no-inline-comments: "off",
    no-lonely-if: "error",
    no-mixed-operators: "off",
    no-mixed-spaces-and-tabs: "error",
    no-multi-assign: "off",
    no-multiple-empty-lines: "error",
    no-negated-condition: "off",
    no-nested-ternary: "error",
    no-new-object: "error",
    no-plusplus: "off",
    no-restricted-syntax: "error",
    no-tabs: "error",
    no-ternary: "off",
    no-trailing-spaces: "error",
    no-underscore-dangle: "off",
    no-unneeded-ternary: "error",
    no-whitespace-before-property: "error",
    nonblock-statement-body-position: "error",
    object-curly-newline: "off",
    object-curly-spacing: ["error", "always"],
    object-property-newline: "off",
    one-var: "off",
    one-var-declaration-per-line: "error",
    operator-assignment: "error",
    operator-linebreak: ["error", "after", { overrides: { ":": "after" } }],
    padded-blocks: ["error", "never"],
    padding-line-between-statements: "error",
    quote-props: ["error", "consistent-as-needed"],
    quotes: "error",
    require-jsdoc: "off",
    semi: "error",
    semi-spacing: "error",
    semi-style: "error",
    sort-keys: "off",
    sort-vars: "error",
    space-before-blocks: "error",
    space-before-function-paren: ["error", {"anonymous": "always", "named": "never"}],
    space-in-parens: "error",
    space-infix-ops: "error",
    space-unary-ops: "error",
    spaced-comment: "error",
    switch-colon-spacing: "error",
    template-tag-spacing: "error",
    unicode-bom: "error",
    wrap-regex: "off",
  },
}
