---
env:
  node: true

rules:
  brace-style: [2, 1tbs]
  camelcase: 2
  comma-dangle: [2, never]
  comma-spacing: [2, {before: false, after: true}]
  comma-style: [2, last]
  computed-property-spacing: [2, never]
  consistent-return: 0
  consistent-this: [1, self]
  curly: [2, all]
  default-case: 2
  dot-location: [2, property]
  dot-notation: [2, { allowKeywords: true, allowPattern: "^long$" }]
  eol-last: 2
  eqeqeq: 2
  func-style: [2, declaration]
  guard-for-in: 2                                                          # TODO: Change to error
  handle-callback-err: [2, ^(err|error)$]
  indent: [2, 2, { SwitchCase: 1 }]
  key-spacing: [2, { beforeColon: false, afterColon: true }]
  max-len: [0, 80, 2]                                                      # TODO: Change to error
  max-params: [1, 4]
  new-cap: 0                                                               # TODO: Change to error
  new-parens: 2
  no-alert: 2
  no-array-constructor: 0
  no-bitwise: 0
  no-caller: 2
  no-catch-shadow: 2
  no-cond-assign: [1, except-parens]                                       # TODO: Change to error
  no-console: 0
  no-constant-condition: 0
  no-control-regex: 2
  no-debugger: 1
  no-delete-var: 2
  no-dupe-args: 2
  no-dupe-keys: 2
  no-duplicate-case: 2
  no-else-return: 2
  no-empty: 2
  no-empty-character-class: 2
  no-eq-null: 0
  no-eval: 2
  no-ex-assign: 2
  no-extend-native: 2
  no-extra-bind: 2
  no-extra-boolean-cast: 2
  no-extra-semi: 2
  no-fallthrough: 2
  no-floating-decimal: 0
  no-func-assign: 2
  no-implied-eval: 2
  no-inner-declarations: [2, functions]
  no-invalid-regexp: 2
  no-irregular-whitespace: 2
  no-iterator: 2
  no-labels: 2
  no-lone-blocks: 2
  no-lonely-if: 2
  no-loop-func: 2
  no-mixed-requires: [0, false]
  no-mixed-spaces-and-tabs: [2, false]
  no-multi-spaces: 2
  no-multi-str: 2
  no-multiple-empty-lines: [2, { max: 1 }]
  no-native-reassign: 2
  no-negated-in-lhs: 2
  no-nested-ternary: 2
  no-new: 2
  no-new-func: 2
  no-new-object: 2
  no-new-require: 2
  no-new-wrappers: 2
  no-obj-calls: 2
  no-octal: 2
  no-octal-escape: 2
  no-path-concat: 2
  no-process-exit: 2
  no-proto: 1                                                              # TODO: Change to error
  no-redeclare: 2
  no-regex-spaces: 2
  no-return-assign: 2
  no-script-url: 2
  no-self-compare: 2
  no-sequences: 2
  no-shadow: 0
  no-shadow-restricted-names: 2
  no-spaced-func: 2
  no-sparse-arrays: 2
  no-trailing-spaces: 2
  no-undef: 2
  no-undef-init: 2
  no-underscore-dangle: 0                                                  # TODO: Change to error
  no-unneeded-ternary: 2
  no-unreachable: 2
  no-unused-expressions: 0
  no-unused-vars: [2, { vars: all, args: after-used }]
  no-use-before-define: 0
  no-void: 2
  no-with: 2
  object-curly-spacing: [2, always]
  one-var: [2, never]
  operator-assignment: [2, always]
  operator-linebreak: [2, before]
  padded-blocks: [2, never]
  quote-props: [2, as-needed]
  quotes: [2, single, avoid-escape]
  radix: 2
  semi: [2, always]
  semi-spacing: [2, { before: false, after: true }]
  space-after-keywords: [2, always]
  space-before-blocks: [2, always]
  space-before-function-paren: [2, never]
  space-in-parens: [2, never]
  space-infix-ops: 2
  space-return-throw-case: 2
  space-unary-ops: [2, { words: true, nonwords: false }]
  spaced-comment: [2, always, { exceptions: ['!'] }]
  strict: [0, global]                                                      # TODO: Change to error
  use-isnan: 2
  valid-jsdoc: [0, { requireReturn: false }]                               # TODO: Change to warning
  valid-typeof: 2
  vars-on-top: 0
  wrap-iife: 2
  wrap-regex: 2
  yoda: [2, never]