env:
  node: true

# enable ECMAScript features
ecmaFeatures:
  arrowFunctions: true
  binaryLiterals: true
  blockBindings: true
  classes: true
  forOf: true
  generators: true
  objectLiteralShorthandMethods: true
  objectLiteralShorthandProperties: true
  octalLiterals: true
  templateStrings: true

rules:
  # Possible Errors
  # list: https://github.com/eslint/eslint/tree/master/docs/rules#possible-errors
  ## check debugger sentence
  no-debugger: 2
  ## check duplicate arguments
  no-dupe-args: 2
  ## check duplicate object keys
  no-dupe-keys: 2
  ## check duplicate switch-case
  no-duplicate-case: 2
  ## disallow assignment of exceptional params
  no-ex-assign: 2
  ## disallow use of reserved words as keys like enum, class
  no-reserved-keys: 2
  ## disallow unreachable code
  no-unreachable: 2
  ## require valid typeof compared string like typeof foo === 'strnig'
  valid-typeof: 2

  # Best Practices
  # list: https://github.com/eslint/eslint/tree/master/docs/rules#best-practices
  ## require falls through comment on switch-case
  no-fallthrough: 2

  # Stylistic Issues
  # list: https://github.com/eslint/eslint/tree/master/docs/rules#stylistic-issues
  ## use single quote, we can use double quote when escape chars
  quotes: [2, "single", "avoid-escape"]
  ## 2 space indentation
  indent: [2, 2]
  ## add space after comma
  comma-spacing: 2
  ## put semi-colon
  semi: 2
  ## require spaces operator like var sum = 1 + 1;
  space-infix-ops: 2
  ## require spaces return, throw, case
  space-return-throw-case: 2
  ## no space before function, eg. 'function()'
  space-before-function-paren: [2, "never"]
  ## require space before blocks, eg 'function() {'
  space-before-blocks: [2, "always"]
  ## require parens for Constructor
  new-parens: 2
  ## max 80 length
  max-len: [2, 80, 2]
  ## max 2 consecutive empty lines
  no-multiple-empty-lines: [2, {max: 2}]
  ## require newline at end of files
  eol-last: 2
  ## no trailing spaces
  no-trailing-spaces: 2
  # require space after keywords, eg 'for (..)'
  space-after-keywords: 2

  # ECMAScript 6
  # list: http://eslint.org/docs/rules/#ecmascript-6
  ## Suggest using 'const' wherever possible
  prefer-const: 2

  # Strict Mode
  # list: https://github.com/eslint/eslint/tree/master/docs/rules#strict-mode
  ## 'use strict' on top
  strict: [2, "global"]

  # Variables
  # list: https://github.com/eslint/eslint/tree/master/docs/rules#variables
  ## disallow use of undefined variables (globals)
  no-undef: 2
  ## disallow declaration of variables that are not used in the code
  no-unused-vars: [2, {"args": "none"}]

  # Custom rules in tools/eslint-rules
  require-buffer: 2
  new-with-error: [2, "Error", "RangeError", "TypeError", "SyntaxError", "ReferenceError"]


# Global scoped method and vars
globals:
  DTRACE_HTTP_CLIENT_REQUEST           : false
  LTTNG_HTTP_CLIENT_REQUEST            : false
  COUNTER_HTTP_CLIENT_REQUEST          : false
  DTRACE_HTTP_CLIENT_RESPONSE          : false
  LTTNG_HTTP_CLIENT_RESPONSE           : false
  COUNTER_HTTP_CLIENT_RESPONSE         : false
  DTRACE_HTTP_SERVER_REQUEST           : false
  LTTNG_HTTP_SERVER_REQUEST            : false
  COUNTER_HTTP_SERVER_REQUEST          : false
  DTRACE_HTTP_SERVER_RESPONSE          : false
  LTTNG_HTTP_SERVER_RESPONSE           : false
  COUNTER_HTTP_SERVER_RESPONSE         : false
  DTRACE_NET_STREAM_END                : false
  LTTNG_NET_STREAM_END                 : false
  COUNTER_NET_SERVER_CONNECTION_CLOSE  : false
  DTRACE_NET_SERVER_CONNECTION         : false
  LTTNG_NET_SERVER_CONNECTION          : false
  COUNTER_NET_SERVER_CONNECTION        : false
  escape                               : false
  unescape                             : false
