---
  env:
    browser: true
    node: false

  globals:
    global: false
    module: false
    require: false
    define: false
    exports: false
    console: false
    debugger: false
  # 0 disabled, 1 warning, 2 error
  rules:
    # possible errors
    no-comma-dangle: 2
    no-cond-assign:
      - 2
      - "always"
    no-console: 1
    no-constant-condition: 2
    no-control-regex: 2
    no-debugger: 1
    no-dupe-keys: 2
    no-empty: 2
    no-empty-class: 2
    no-ex-assign: 2
    no-extra-boolean-cast: 2
    no-extra-parens: 2
    no-extra-semi: 2
    no-func-assign: 2
    no-inner-declarations: 2
    no-invalid-regexp: 2
    no-irregular-whitespace: 2
    no-negated-in-lhs: 2
    no-obj-calls: 2
    no-regex-spaces: 2
    no-reserved-keys: 2
    no-sparse-arrays: 2
    no-unreachable: 2
    use-isnan: 2
    valid-jsdoc: 2
    valid-typeof: 2

    # best practices
    block-scoped-var: 2
    complexity: 0
    consistent-return: 2
    curly:
      - 2
      - "all"
    default-case: 2
    dot-notation: 2
    eqeqeq:
      - 2
      - "allow-null"
    guard-for-in: 2
    no-alert: 1
    no-caller: 2
    no-div-regex: 0
    no-else-return: 2
    no-empty-label: 2
    no-eq-null: 0
    no-eval: 2
    no-native-reassign: 2
    no-extra-bind: 2
    no-fallthrough: 2
    no-floating-decimal: 2
    no-implied-eval: 2
    no-iterator: 2
    no-labels: 2
    no-lone-blocks: 2
    no-loop-func: 2
    no-multi-spaces: 2
    no-multi-str: 2
    no-native-reassign: 2
    no-new: 2
    no-new-func: 2
    no-new-wrappers: 2
    no-octal: 2
    no-octal-escape: 2
    no-process-env: 0
    no-proto: 2
    no-redeclare: 2
    no-return-assign: 2
    no-script-url: 2
    no-self-compare: 2
    no-sequences: 2
    no-throw-literal: 2
    no-unused-expressions: 2
    no-void: 2
    no-warning-comments:
      - 1
      - terms:
        - "todo"
        - "fixme"
        location: "anywhere"
    no-with: 2
    radix: 2
    vars-on-top: 2
    wrap-iife:
      - 2
      - "inside"
    yoda:
      - 2
      - "never"

    # strict mode
    global-strict:
      - 2
      - "always"
    no-extra-strict: 2
    strict: 2

    # variables
    no-catch-shadow: 2
    no-delete-var: 2
    no-label-var: 2
    no-shadow: 2
    no-shadow-restricted-names: 2
    no-undef: 2
    no-undef-init: 2
    no-undefined: 2
    no-unused-vars: 2
    no-use-before-define:
      - 2
      - "nofunc"

    # node.js

    # stylistic stuff
    indent:
      - 2
      - 2
    brace-style:
      - 2
      - "1tbs"
      - allowSingleLine: true
    camelcase: 2
    comma-spacing:
      - 2
      - before: false
        after: true
    comma-style:
      - 2
      - "last"
    consistent-this:
      - 2
      - "self"
    eol-last: 2
    func-names: 0
    func-style:
      - 2
      - "declaration"
    key-spacing:
      - 2
      - beforeColon: false
        afterColon: true
    max-nested-callbacks: 0
    new-cap:
      - 2
      - newIsCap: true
        capIsNew: true
    new-parens: 2
    no-array-constructor: 2
    no-inline-comments: 0
    no-lonely-if: 2
    no-mixed-spaces-and-tabs: 2
    no-multiple-empty-lines:
      - 2
      - max: 1
    no-nested-ternary: 2
    no-new-object: 2
    no-space-before-semi: 2
    no-spaced-func: 2
    no-ternary: 0
    no-trailing-spaces: 2
    no-underscore-dangle: 0
    no-wrap-func: 2
    one-var: 0
    operator-assignment:
      - 2
      - "always"
    padded-blocks:
      - 2
      - "never"
    quote-props:
      - 2
      - "as-needed"
    quotes:
      - 2
      - "single"
      - "avoid-escape"
    semi:
      - 2
      - "always"
    sort-vars: 0
    space-after-keywords:
      - 2
      - "always"
      - checkFunctionKeyword: true
    space-before-blocks:
      - 2
      - "always"
    space-in-brackets: 0
    space-in-parens:
      - 2
      - "never"
    space-infix-ops: 2
    space-return-throw-case: 2
    space-unary-ops:
      - 2
      - words: true
        nonwords: false
    spaced-line-comment:
      - 2
      - "always"
    wrap-regex: 0

