{
  env: {
    es6: true,
    node: true,
  },
  extends: eslint:recommended,
  parser: "@babel/eslint-parser",
  rules: {
    // Best Practices
    accessor-pairs: error,
    array-callback-return: error,
    block-scoped-var: error,
    class-methods-use-this: off,
    complexity: error,
    consistent-return: error,
    curly: [ error, multi-or-nest, consistent ],
    default-case: error,
    dot-location: [ error, property ],
    dot-notation: error,
    eqeqeq: error,
    guard-for-in: off,
    no-alert: error,
    no-caller: error,
    no-console: [ error, { allow: [ warn ] } ],
    no-case-declarations: off,
    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: off,
    no-with: error,
    prefer-promise-reject-errors: error,
    radix: error,
    require-await: off,
    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, classes: false } ],

    // Node.js
    callback-return: error,
    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, consistent ],
    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: off,
    eol-last: error,
    func-call-spacing: error,
    func-name-matching: error,
    func-names: off,
    func-style: [ error, declaration ],
    function-paren-newline: off,
    id-blacklist: error,
    id-length: off,
    id-match: error,
    implicit-arrow-linebreak: off,
    indent: [ error, 2, { VariableDeclarator: first } ],
    jsx-quotes: error,
    key-spacing: [ error, { mode: minimum } ],
    keyword-spacing: error,
    line-comment-position: off,
    linebreak-style: error,
    lines-around-comment: [ error, { allowBlockStart: true } ],
    lines-between-class-members: error,
    max-depth: error,
    max-len: off,
    max-lines: off,
    max-nested-callbacks: error,
    max-params: [ error, { max: 5 } ],
    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-control-regex: off,
    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, below ],
    object-curly-newline: off,
    object-curly-spacing: [ error, always ],
    object-property-newline: off,
    one-var: off,
    one-var-declaration-per-line: off,
    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, single, { avoidEscape: true } ],
    require-jsdoc: off,
    semi: error,
    semi-spacing: error,
    semi-style: error,
    sort-keys: off,
    sort-vars: off,
    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: error,

    // ECMAScript 6
    arrow-body-style: error,
    arrow-parens: [ error, as-needed ],
    arrow-spacing: error,
    constructor-super: error,
    generator-star-spacing: off,
    no-class-assign: error,
    no-confusing-arrow: off,
    no-const-assign: error,
    no-dupe-class-members: error,
    no-duplicate-imports: error,
    no-new-symbol: error,
    no-restricted-imports: error,
    no-this-before-super: error,
    no-useless-computed-key: error,
    no-useless-constructor: error,
    no-useless-rename: error,
    no-var: error,
    object-shorthand: error,
    prefer-arrow-callback: error,
    prefer-const: [ error, { destructuring: all } ],
    prefer-destructuring: [ error, { array: false, object: true } ],
    prefer-numeric-literals: error,
    prefer-rest-params: error,
    prefer-spread: error,
    prefer-template: error,
    require-yield: error,
    rest-spread-spacing: error,
    sort-imports: off,
    symbol-description: error,
  }
}
