---
env:
  node: true

# Use es6 feature supported by node.js v4
ecmaFeatures:
  arrowFunctions: true
  binaryLiterals: true
  blockBindings: true
  classes: true
  # Not sure
  defaultParams: true
  destructuring: false
  # Not sure
  forOf: true
  generators: true
  modules: false
  objectLiteralComputedProperties: true
  objectLiteralDuplicateProperties: false
  objectLiteralShorthandMethods: true
  objectLiteralShorthandProperties: true
  octalLiterals: true
  regexUFlag: false
  regexYFlag: false
  restParams: false
  spread: true
  superInFunctions: false
  templateStrings: true
  unicodeCodePointEscapes: false
  globalReturn: false
  jsx: false

rules:
  no-alert: 2
  no-array-constructor: 2
  no-caller: 2
  no-catch-shadow: 2
  no-class-assign: 2
  no-cond-assign: 2
  no-console: 1
  no-constant-condition: 2
  no-const-assign: 2
  no-debugger: 1
  no-dupe-args: 2
  no-dupe-class-members: 2
  no-dupe-keys: 2
  no-duplicate-case: 2
  no-else-return: 2
  no-eq-null: 2
  no-empty-character-class: 2
  no-empty-label: 2
  no-empty: 2
  no-eval: 2
  no-ex-assign: 2
  no-extend-native: 2
  no-extra-bind: 2
  no-extra-boolean-cast: 2
  no-extra-parens: [2, functions]
  no-extra-semi: 2
  no-fallthrough: 2
  no-floating-decimal: 2
  no-func-assign: 2
  no-invalid-this: 2
  no-implied-eval: 2
  no-inline-comments: 2
  no-inner-declarations: 2
  no-invalid-regexp: 2
  no-irregular-whitespace: 2
  no-negated-in-lhs: 2
  no-iterator: 2
  no-label-var: 2
  no-labels: 2
  no-lone-blocks: 2
  no-lonely-if: 2
  no-mixed-spaces-and-tabs: 2
  no-multi-spaces: 2
  no-multi-str: 2
  no-native-reassign: 2
  no-new-func: 2
  no-new-object: 2
  no-new: 2
  no-new-wrappers: 2
  no-obj-calls: 2
  no-octal: 2
  no-octal-escape: 2
  no-process-exit: 2
  no-proto: 2
  no-regex-spaces: 2
  no-redeclare: 2
  no-return-assign: 2
  no-sparse-arrays: 2
  no-self-compare: 2
  no-script-url: 2
  no-sequences: 2
  no-shadow: 2
  no-shadow-restricted-names: 2
  no-spaced-func: 2
  no-this-before-super: 2
  no-throw-literal: 2
  no-trailing-spaces: 2
  no-undef-init: 2
  # because of p
  no-underscore-dangle: 0
  no-unexpected-multiline: 2
  no-unneeded-ternary: 2
  # Because of chai assertions like `to.be.empty`, or `to.be.true`
  no-unused-expressions: 0
  no-unused-vars: 2
  no-unreachable: 2
  no-useless-call: 2
  no-useless-concat: 2
  no-use-before-define: 2
  no-var: 2
  no-void: 2
  no-with: 2
  array-bracket-spacing: [2, never]
  arrow-parens: [2, as-needed]
  arrow-spacing: [2, {before: true, after: true}]
  block-spacing: [2, always]
  brace-style: [2, 1tbs]
  camelcase: 2
  comma-dangle: [2, never]
  comma-spacing: 2
  comma-style: [2, last]
  computed-property-spacing: [2, never]
  consistent-return: 2
  consistent-this: [2, self]
  constructor-super: 2
  curly: [2, all]
  dot-notation: [2, {allowKeywords: true}]
  dot-location: [2, object]
  eol-last: 2
  generator-star-spacing: [2, {before: true, after: true}]
  func-style: [2, expression]
  indent: [2, 2]
  jsx-quotes: [2, prefer-single]
  eqeqeq: 2
  key-spacing: [2, {beforeColon: false, afterColon: true}]
  new-cap: 2
  new-parens: 2
  object-curly-spacing: [2, never]
  object-shorthand: [2, always]
  one-var: [2, {var: never, let: never, const: never}]
  operator-assignment: [2, always]
  operator-linebreak: [2, after]
  # TODO padded-blocks: [2, never]
  prefer-arrow-callback: 2
  # Can't use spread on node 4
  prefer-spread: 0
  prefer-template: 2
  quote-props: [2, as-needed, {keywords: true}]
  quotes: [2, single]
  require-jsdoc: 2
  require-yield: 2
  semi-spacing: [2, {before: false, after: true}]
  semi: [2, always]
  space-after-keywords: [2, always]
  space-before-keywords: [2, always]
  space-before-blocks: [2, {functions: always, keywords: always}]
  space-before-function-paren: [2, never]
  space-in-parens: [2, never]
  space-infix-ops: [2, {int32Hint: false}]
  space-return-throw-case: 2
  space-unary-ops: [2, {words: true, nonwords: false}]
  spaced-comment: [2, always]
  use-isnan: 2
  valid-jsdoc: [2, {requireReturn: false}]
  valid-typeof: 2
  yoda: [2, never]
