# For a detailed list of all options please see here:
# http://eslint.org/docs/configuring/

# By default, ESLint uses Espree as its parser.
parser: espree

# Most environment options are not explicitly enabled or disabled, only
# included here for completeness' sake. They are commented out, because the
# global updates.py script would otherwise override them during a global
# requirements synchronization.
#
# Individual projects should choose which platforms they deploy to.

env:

  # browser global variables.
  # browser: true

  # Node.js global variables and Node.js-specific rules.
  # node: true

  # web workers global variables.
  # worker: true

  # defines require() and define() as global variables as per the amd spec.
  # amd: true

  # Adds all of the Jasmine testing global variables for version 1.3 and 2.0.
  # jasmine: true

  # phantomjs global variables.
  # phantomjs: true

  # jquery global variables.
  # jquery: true

  # prototypejs global variables.
  # prototypejs: true

  # shelljs global variables.
  # shelljs: true

  # meteor global variables.
  # meteor: true

  # OpenStack uses Jasmine, not Mocha.
  # mocha: false

  # Enables ES6 flags in ecmaFeatures.
  # es6: false


# Below we activate and configure the linting rules for all javascript in
# OpenStack. These will be synchronized across all projects that make use of
# them.
rules:

  #############################################################################
  # Possible Errors
  #############################################################################

  # Prevent the assignment of a variable in a conditional.
  # http://eslint.org/docs/rules/no-cond-assign
  no-cond-assign: 2

  # Do not permit the use of console logging statements.
  # http://eslint.org/docs/rules/no-console
  no-console: 2

  # Do not permit if (true) or if(false)
  # http://eslint.org/docs/rules/no-constant-condition
  no-constant-condition: 2

  # Do not permit ASCII 0-31 (control characters) in regular expressions.
  # http://eslint.org/docs/rules/no-control-regex
  no-control-regex: 2

  # Do not permit debugger; statements.
  # http://eslint.org/docs/rules/no-debugger
  no-debugger: 2

  # Do not permit duplicate argument names in function declaration.
  # http://eslint.org/docs/rules/no-dupe-args
  no-dupe-args: 2

  # Do not permit duplicate keys in object declarations.
  # http://eslint.org/docs/rules/no-dupe-keys
  no-dupe-keys: 2

  # Do not permit duplicate cases in switch statements.
  # http://eslint.org/docs/rules/no-duplicate-case
  no-duplicate-case: 2

  # Do not require that all imports from a single module exist in a single
  # import statement.
  #http://eslint.org/docs/rules/no-duplicate-imports
  no-duplicate-imports: 0

  # Disallow empty regex character classes. (/[]/)
  # http://eslint.org/docs/rules/no-empty-character-class
  no-empty-character-class: 2

  # Disallow empty block statements.
  # http://eslint.org/docs/rules/no-empty
  no-empty: 2

  # Disallow assigning of the exception parameter in a catch block.
  # http://eslint.org/docs/rules/no-ex-assign
  no-ex-assign: 2

  # Disallow the use of double negation (!!foo) if already in a boolean context
  # http://eslint.org/docs/rules/no-extra-boolean-cast
  no-extra-boolean-cast: 2

  # Disallow extraneous parentheses around functions.
  # http://eslint.org/docs/rules/no-extra-parens
  no-extra-parens:
    - 2
    - "all"

  # Disallow extraneous semicolons.
  # http://eslint.org/docs/rules/no-extra-semi
  no-extra-semi: 2

  # Disallow overwriting functions written as function declarations
  # http://eslint.org/docs/rules/no-func-assign
  no-func-assign: 2

  # Disallow function or variable declarations in nested blocks
  # http://eslint.org/docs/rules/no-inner-declarations
  no-inner-declarations: 2

  # Disallow invalid regular expression strings in the RegExp constructor
  # http://eslint.org/docs/rules/no-invalid-regexp
  no-invalid-regexp: 2

  # Disallow irregular whitespace outside of strings and comments
  # http://eslint.org/docs/rules/no-irregular-whitespace
  no-irregular-whitespace: 2

  # Allow mixes of different operators without parantheses
  # http://eslint.org/docs/rules/no-mixed-operators
  no-mixed-operators: 0

  # Disallow negation of the left operand of an in expression
  # http://eslint.org/docs/rules/no-negated-in-lhs
  no-negated-in-lhs: 2

  # Disallow the use of object properties of the global object (Math and JSON) as functions
  # http://eslint.org/docs/rules/no-obj-calls
  no-obj-calls: 2

  # Allow use of Object.prototypes builtins directly
  # http://eslint.org/docs/rules/no-prototype-builtins
  no-prototype-builtins: 0

  # Disallow multiple spaces in a regular expression literal
  # http://eslint.org/docs/rules/no-regex-spaces
  no-regex-spaces: 2

  # Disallow sparse arrays
  # http://eslint.org/docs/rules/no-sparse-arrays
  no-sparse-arrays: 2

  # Disallow unreachable statements
  # http://eslint.org/docs/rules/no-unreachable
  no-unreachable: 2

  # Re-allow return, throw, break, and continue statements inside finally blocks.
  # http://eslint.org/docs/rules/no-unsafe-finally
  no-unsafe-finally: 0

  # Allow unnecessary computed property keys on objects
  # http://eslint.org/docs/rules/no-useless-computed-key
  no-useless-computed-key: 0

  # Allow unnecessary escape usage
  # http://eslint.org/docs/rules/no-useless-escape
  no-useless-escape: 0

  # Allow renaming import, export, and destructured assignments to the same name
  # http://eslint.org/docs/rules/no-useless-rename
  no-useless-rename: 0

  # Disallow comparisons with the value NaN
  # http://eslint.org/docs/rules/use-isnan
  use-isnan: 2

  # Ensure JSDoc comments are valid
  # http://eslint.org/docs/rules/valid-jsdoc
  valid-jsdoc: 2

  # Ensure that the results of typeof are compared against a valid string
  # http://eslint.org/docs/rules/valid-typeof
  valid-typeof: 2

  # Avoid code that looks like two expressions but is actually one
  # http://eslint.org/docs/rules/no-unexpected-multiline
  no-unexpected-multiline: 0

  # Disallow space before function opening parenthesis
  # http://eslint.org/docs/rules/space-before-function-paren
  space-before-function-paren:
    - 2
    - "never"

  #############################################################################
  # Best Practices
  #############################################################################

  # Enforces getter/setter pairs in objects
  # http://eslint.org/docs/rules/accessor-pairs
  accessor-pairs: 2

  # Enforces return statements in callbacks of array’s methods
  # http://eslint.org/docs/rules/array-callback-return
  array-callback-return: 0

  # Treat var statements as if they were block scoped
  # http://eslint.org/docs/rules/block-scoped-var
  block-scoped-var: 2

  # Specify the maximum cyclomatic complexity allowed in a program
  # http://eslint.org/docs/rules/complexity
  complexity:
    - 1
    - 10

  # Require return statements to either always or never specify values
  # http://eslint.org/docs/rules/consistent-return
  consistent-return: 2

  # Specify curly brace conventions for all control statements
  # http://eslint.org/docs/rules/curly
  curly: 2

  # Require default case in switch statements
  # http://eslint.org/docs/rules/default-case
  default-case: 0

  # encourages use of dot notation whenever possible
  # http://eslint.org/docs/rules/dot-notation
  dot-notation: 2

  # Enforces consistent newlines before or after dots
  # http://eslint.org/docs/rules/dot-location
  dot-location: 0

  # Require the use of === and !==
  # http://eslint.org/docs/rules/eqeqeq
  eqeqeq: 2

  # Make sure for-in loops have an if statement
  # http://eslint.org/docs/rules/guard-for-in
  guard-for-in: 1

  # Disallow the use of alert, confirm, and prompt
  # http://eslint.org/docs/rules/no-alert
  no-alert: 2

  # Disallow use of arguments.caller or arguments.callee
  # http://eslint.org/docs/rules/no-caller
  no-caller: 2

  # disallow lexical declarations in case clauses
  # http://eslint.org/docs/rules/no-case-declarations
  no-case-declarations: 2

  # Disallow division operators explicitly at beginning of regular expression
  # http://eslint.org/docs/rules/no-div-regex
  no-div-regex: 2

  # Disallow else after a return in an if
  # http://eslint.org/docs/rules/no-else-return
  no-else-return: 0

  # Disallow use of empty functions
  # http://eslint.org/docs/rules/no-empty-function
  no-empty-function: 0

  # disallow use of empty destructuring patterns
  # http://eslint.org/docs/rules/no-empty-pattern
  no-empty-pattern: 2

  # Disallow comparisons to null without a type-checking operator
  # http://eslint.org/docs/rules/no-eq-null
  no-eq-null: 2

  # Disallow use of eval()
  # http://eslint.org/docs/rules/no-eval
  no-eval: 2

  # Disallow adding to native types
  # http://eslint.org/docs/rules/no-extend-native
  no-extend-native: 2

  # Disallow unnecessary function binding
  # http://eslint.org/docs/rules/no-extra-bind
  no-extra-bind: 2

  # disallow unnecessary labels
  # http://eslint.org/docs/rules/no-extra-label
  no-extra-label: 0

  # Disallow fallthrough of case statements
  # http://eslint.org/docs/rules/no-fallthrough
  no-fallthrough: 2

  # Disallow the use of leading or trailing decimal points in numeric literals
  # http://eslint.org/docs/rules/no-floating-decimal
  no-floating-decimal: 2

  # disallow the type conversions with shorter notations
  # http://eslint.org/docs/rules/no-implicit-coercion
  no-implicit-coercion: 0

  # disallow var and named functions in global scope
  # http://eslint.org/docs/rules/no-implicit-globals
  no-implicit-globals: 0

  # Disallow use of eval()-like methods
  # http://eslint.org/docs/rules/no-implied-eval
  no-implied-eval: 2

  # disallow this keywords outside of classes or class-like objects
  # http://eslint.org/docs/rules/no-invalid-this
  no-invalid-this: 0

  # Disallow usage of __iterator__ property
  # http://eslint.org/docs/rules/no-iterator
  no-iterator: 2

  # Disallow use of labeled statements
  # http://eslint.org/docs/rules/no-labels
  no-labels: 2

  # Disallow unnecessary nested blocks
  # http://eslint.org/docs/rules/no-lone-blocks
  no-lone-blocks: 2

  # Disallow creation of functions within loops
  # http://eslint.org/docs/rules/no-loop-func
  no-loop-func: 2

  # disallow the use of magic numbers
  # http://eslint.org/docs/rules/no-magic-numbers
  no-magic-numbers: 0

  # Disallow use of multiple spaces
  # http://eslint.org/docs/rules/no-multi-spaces
  no-multi-spaces: 2

  # Disallow use of multiline strings
  # http://eslint.org/docs/rules/no-multi-str
  no-multi-str: 2

  # Disallow reassignments of native objects
  # http://eslint.org/docs/rules/no-native-reassign
  no-native-reassign: 2

  # Disallow use of new operator for Function object
  # http://eslint.org/docs/rules/no-new-func
  no-new-func: 2

  # Disallows creating new instances of String,Number, and Boolean
  # http://eslint.org/docs/rules/no-new-wrappers
  no-new-wrappers: 2

  # Disallow use of new operator when not part of the assignment or comparison
  # http://eslint.org/docs/rules/no-new
  no-new: 2

  # Disallow use of octal escape sequences in string literals, such as var foo = "Copyright \251";
  # http://eslint.org/docs/rules/no-octal-escape
  no-octal-escape: 2

  # Disallow use of octal literals
  # http://eslint.org/docs/rules/no-octal
  no-octal: 2

  # Disallow reassignment of function parameters
  # http://eslint.org/docs/rules/no-param-reassign
  no-param-reassign: 0

  # Disallow use of process.env
  #
  # Please consolidate all your env access to one single file, and apply
  # by-line exceptions there.
  #
  # http://eslint.org/docs/rules/no-process-env
  no-process-env: 2

  # Disallow usage of __proto__ property
  # http://eslint.org/docs/rules/no-proto
  no-proto: 2

  # Disallow declaring the same variable more than once
  # http://eslint.org/docs/rules/no-redeclare
  no-redeclare:
  - 2
  - builtinGlobals: true

  # Disallow use of assignment in return statement
  # http://eslint.org/docs/rules/no-return-assign
  no-return-assign: 2

  # Disallow use of javascript: urls.
  # http://eslint.org/docs/rules/no-script-url
  no-script-url: 2

  # Disallow assignments where both sides are exactly the same
  # http://eslint.org/docs/rules/no-self-assign
  no-self-assign: 2

  # Disallow comparisons where both sides are exactly the same
  # http://eslint.org/docs/rules/no-self-compare
  no-self-compare: 2

  # Disallow use of comma operator
  # http://eslint.org/docs/rules/no-sequences
  no-sequences: 2

  # Restrict what can be thrown as an exception
  # http://eslint.org/docs/rules/no-throw-literal
  no-throw-literal: 2

  # disallow unmodified conditions of loops
  # http://eslint.org/docs/rules/no-unmodified-loop-condition
  no-unmodified-loop-condition: 2

  # Disallow usage of expressions in statement position
  # http://eslint.org/docs/rules/no-unused-expressions
  no-unused-expressions: 2

  # disallow unused labels
  # http://eslint.org/docs/rules/no-unused-labels
  no-unused-labels: 0

  # disallow unnecessary .call() and .apply()
  # http://eslint.org/docs/rules/no-useless-call
  no-useless-call: 0

  # disallow unnecessary concatenation of literals or template literals
  # http://eslint.org/docs/rules/no-useless-concat
  no-useless-concat: 0

  # Disallow use of void operator
  # http://eslint.org/docs/rules/no-void
  no-void: 2

  # Disallow usage of configurable warning terms in comments - e.g. TODO
  # http://eslint.org/docs/rules/no-warning-comments
  no-warning-comments:
    - 1
    - terms:
      - "todo"
      - "xxx"
      - "fixme"

  # Disallow use of the with statement
  # http://eslint.org/docs/rules/no-with
  no-with: 2

  # Require use of the second argument for parseInt()
  # http://eslint.org/docs/rules/radix
  radix: 2

  # Requires to declare all vars on top of their containing scope
  #
  # http://eslint.org/docs/rules/vars-on-top
  vars-on-top: 0

  # Require immediate function invocation to be wrapped in parentheses
  # http://eslint.org/docs/rules/wrap-iife
  wrap-iife:
    - 2
    - "any"

  # Require or disallow Yoda conditions.
  # http://eslint.org/docs/rules/yoda
  yoda: 0


  #############################################################################
  # Strict Mode
  #############################################################################
  # controls location of Use Strict Directives
  # http://eslint.org/docs/rules/strict
  strict:
    - 2
    - "function"

  #############################################################################
  # Variable declaration rules
  #############################################################################
  # enforce or disallow variable initializations at definition
  # http://eslint.org/docs/rules/init-declarations
  init-declarations: 0

  # Disallow the catch clause parameter name being the same as a variable in
  # the outer scope
  # http://eslint.org/docs/rules/no-catch-shadow
  no-catch-shadow: 2

  # Disallow deletion of variables
  # http://eslint.org/docs/rules/no-delete-var
  no-delete-var: 2

  # Disallow labels that share a name with a variable
  # http://eslint.org/docs/rules/no-label-var
  no-label-var: 2

  # restrict usage of specified global variables
  # http://eslint.org/docs/rules/no-restricted-globals
  no-restricted-globals: 0

  # Disallow shadowing of names such as arguments
  # http://eslint.org/docs/rules/no-shadow-restricted-names
  no-shadow-restricted-names: 2

  # Disallow declaration of variables already declared in the outer scope
  # http://eslint.org/docs/rules/no-shadow
  no-shadow: 0

  # Disallow use of undefined when initializing variables
  # http://eslint.org/docs/rules/no-undef-init
  no-undef-init: 2

  # Disallow use of undeclared variables unless mentioned in a /*global */ block
  # http://eslint.org/docs/rules/no-undef
  no-undef: 0

  # Disallow use of undefined variable
  # http://eslint.org/docs/rules/no-undefined
  no-undefined: 0

  # Disallow declaration of variables that are not used in the code
  # http://eslint.org/docs/rules/no-unused-vars
  no-unused-vars: 2

  # Disallow use of variables before they are defined
  # http://eslint.org/docs/rules/no-use-before-define
  no-use-before-define:
    - 2
    - "nofunc"

  #############################################################################
  # Node.js rules
  #############################################################################

  # enforce return after a callback
  # http://eslint.org/docs/rules/callback-return
  callback-return: 2

  # disallow require() outside of the top-level module scope
  # http://eslint.org/docs/rules/global-require
  global-require: 0

  # Enforces error handling in callbacks
  # http://eslint.org/docs/rules/handle-callback-err
  handle-callback-err: 2

  # Disallow mixing regular variable and require declarations
  # http://eslint.org/docs/rules/no-mixed-requires
  no-mixed-requires: 2

  # Disallow use of new operator with the require function
  # http://eslint.org/docs/rules/no-new-require
  no-new-require: 2

  # Disallow string concatenation with __dirname and __filename
  # http://eslint.org/docs/rules/no-path-concat
  no-path-concat: 2

  # Disallow process.exit()
  # http://eslint.org/docs/rules/no-process-exit
  no-process-exit: 2

  # Restrict usage of specified node modules
  # http://eslint.org/docs/rules/no-restricted-modules
  no-restricted-modules: 0

  # Disallow use of synchronous methods
  # http://eslint.org/docs/rules/no-sync
  no-sync: 2


  #############################################################################
  # Stylistic Changes
  #############################################################################

  # enforce spacing inside array brackets
  # http://eslint.org/docs/rules/array-bracket-spacing
  array-bracket-spacing: 0

  # disallow or enforce spaces inside of single line blocks
  # http://eslint.org/docs/rules/block-spacing
  block-spacing: 0

  # Enforce one true brace style
  # http://eslint.org/docs/rules/brace-style
  brace-style:
   - 2
   - "1tbs"
   - allowSingleLine: true

  # Require camel case names
  # http://eslint.org/docs/rules/camelcase
  camelcase:
   - 2
   - properties: "never"

  # Do not require or disallow trailing commas
  # http://eslint.org/docs/rules/comma-dangle
  comma-dangle: 0

  # Enforce spacing before and after comma
  # http://eslint.org/docs/rules/comma-spacing
  comma-spacing: 0

  # Enforce one true comma style
  # http://eslint.org/docs/rules/comma-style
  comma-style: 2

  # require or disallow padding inside computed properties.
  # http://eslint.org/docs/rules/computed-property-spacing
  computed-property-spacing: 0

  # Enforces consistent naming when capturing the current execution context
  # http://eslint.org/docs/rules/consistent-this
  consistent-this:
    - 0
    - "self"

  # Enforce newline at the end of file, with no multiple empty lines
  # http://eslint.org/docs/rules/eol-last
  eol-last: 2

  # Require function expressions to have a name
  # http://eslint.org/docs/rules/func-names
  func-names: 0

  # Enforces use of function declarations or expressions
  # http://eslint.org/docs/rules/func-style
  func-style: 0

  # blacklist certain identifiers to prevent them being used
  # http://eslint.org/docs/rules/id-blacklist
  id-blacklist: 0

  # this option enforces minimum and maximum identifier lengths (variable names, property names...)
  # http://eslint.org/docs/rules/id-length
  id-length: 0

  # require identifiers to match the provided regular expression
  # http://eslint.org/docs/rules/id-match
  id-match: 0

  # This option sets a specific tab width for your code
  # http://eslint.org/docs/rules/indent
  indent:
    - 2
    - 2
    - SwitchCase: 1

  # specify whether double or single quotes should be used in JSX attributes
  # http://eslint.org/docs/rules/jsx-quotes
  jsx-quotes: 0

  # Enforces spacing between keys and values in object literal properties
  # http://eslint.org/docs/rules/key-spacing
  key-spacing: 0

  # enforce spacing before and after keywords
  # http://eslint.org/docs/rules/keyword-spacing
  keyword-spacing: 2

  # Enforces empty lines around comments
  # http://eslint.org/docs/rules/lines-around-comment
  lines-around-comment: 0

  # Disallow mixed 'LF' and 'CRLF' as linebreaks
  # http://eslint.org/docs/rules/linebreak-style
  linebreak-style:
    - 2
    - "unix"

  # Do not enforce a maximum file length
  # http://eslint.org/docs/rules/max-lines
  max-lines: 0

  # Specify the maximum depth callbacks can be nested
  # http://eslint.org/docs/rules/max-nested-callbacks
  max-nested-callbacks:
    - 0
    - 3

  # Do not enforce a maximum number of statements allowed per line
  #http://eslint.org/docs/rules/max-statements-per-line
  max-statements-per-line: 0

  # Require a capital letter for constructors
  # http://eslint.org/docs/rules/new-cap
  new-cap: 0

  # Disallow the omission of parentheses when invoking a constructor
  # http://eslint.org/docs/rules/new-parens
  new-parens: 2

  # allow/disallow an empty newline after var statement
  # http://eslint.org/docs/rules/newline-after-var
  newline-after-var: 0

  # require newline before return statement
  # http://eslint.org/docs/rules/newline-before-return
  newline-before-return: 0

  # enforce newline after each call when chaining the calls
  # http://eslint.org/docs/rules/newline-per-chained-call
  newline-per-chained-call: 0

  # Disallow use of the Array constructor
  # http://eslint.org/docs/rules/no-array-constructor
  no-array-constructor: 0

  # Disallow use of the continue statement
  # http://eslint.org/docs/rules/no-continue
  no-continue: 0

  # Disallow comments inline after code
  # http://eslint.org/docs/rules/no-inline-comments
  no-inline-comments: 0

  # disallow if as the only statement in an else block
  # http://eslint.org/docs/rules/no-lonely-if
  no-lonely-if: 0

  # Disallow mixed spaces and tabs for indentation
  # http://eslint.org/docs/rules/no-mixed-spaces-and-tabs
  no-mixed-spaces-and-tabs: 2

  # Disallow multiple empty lines
  # http://eslint.org/docs/rules/no-multiple-empty-lines
  no-multiple-empty-lines:
    - 2
    - max: 1

  # Disallow negated conditions
  # http://eslint.org/docs/rules/no-negated-condition
  no-negated-condition: 0

  # Disallow nested ternary expressions
  # http://eslint.org/docs/rules/no-nested-ternary
  no-nested-ternary: 0

  # Disallow use of the Object constructor
  # http://eslint.org/docs/rules/no-new-object
  no-new-object: 1

  # Disallow certain syntax (no-restricted-syntax)
  # http://eslint.org/docs/rules/no-restricted-syntax
  no-restricted-syntax: 0

  # Disallow space between function identifier and application
  # http://eslint.org/docs/rules/no-spaced-func
  no-spaced-func: 0

  # Disallow the use of ternary operators
  # http://eslint.org/docs/rules/no-ternary
  no-ternary: 0

  # Disallow trailing whitespace at the end of lines
  # http://eslint.org/docs/rules/no-trailing-spaces
  no-trailing-spaces: 2

  # Disallow dangling underscores in identifiers
  # http://eslint.org/docs/rules/no-underscore-dangle
  no-underscore-dangle: 0

  # Disallow the use of Boolean literals in conditional expressions
  # http://eslint.org/docs/rules/no-unneeded-ternary
  no-unneeded-ternary: 2

  # disallow whitespace before properties
  # http://eslint.org/docs/rules/no-whitespace-before-property
  no-whitespace-before-property: 0

  # Do not enforce consistent line breaks inside braces
  # http://eslint.org/docs/rules/object-curly-newline
  object-curly-newline: 0

  # Require or disallow padding inside curly braces
  # http://eslint.org/docs/rules/object-curly-spacing
  object-curly-spacing: 0

  # Do not enforce placing object properties on separate lines
  # http://eslint.org/docs/rules/object-property-newline
  object-property-newline: 0

  # Allow or disallow one variable declaration per function
  # http://eslint.org/docs/rules/one-var
  one-var:
    - 2
    - uninitialized: "always"
      initialized: "never"

  # require or disallow an newline around variable declarations
  # http://eslint.org/docs/rules/one-var-declaration-per-line
  one-var-declaration-per-line: 0

  # Prevent assignment operator shorthand where possible
  # http://eslint.org/docs/rules/operator-assignment
  operator-assignment:
    - 0
    - "never"

  # Enforce operators to be placed before or after line breaks
  # http://eslint.org/docs/rules/operator-linebreak
  operator-linebreak: 2

  # Enforce padding within blocks
  # http://eslint.org/docs/rules/padded-blocks
  padded-blocks: 0

  # Require quotes around object literal property names
  # http://eslint.org/docs/rules/quote-props
  quote-props:
    - 2
    - "as-needed"

  # Specify whether backticks, double or single quotes should be used
  # http://eslint.org/docs/rules/quotes
  quotes: 0

  # Require JSDoc comment
  # http://eslint.org/docs/rules/require-jsdoc
  require-jsdoc: 0

  # Do not enforce spacing between rest and spread operators and their expressions
  # http://eslint.org/docs/rules/rest-spread-spacing
  rest-spread-spacing: 0

  # Enforce spacing before and after semicolons
  # http://eslint.org/docs/rules/semi-spacing
  semi-spacing:
    - 2
    - before: false
      after: true

  # sort import declarations within module
  # http://eslint.org/docs/rules/sort-imports
  sort-imports: 0

  # Require or disallow use of semicolons instead of ASI
  # http://eslint.org/docs/rules/semi
  semi:
    - 2
    - 'always'

  # Sort variables within the same declaration block
  # http://eslint.org/docs/rules/sort-vars
  sort-vars: 0

  # require or disallow space before blocks
  # http://eslint.org/docs/rules/space-before-blocks
  space-before-blocks:
   - 2
   - "always"

  # require or disallow spaces inside parentheses
  # http://eslint.org/docs/rules/space-in-parens
  space-in-parens:
    - 2
    - "never"

  # Require spaces around operators
  # http://eslint.org/docs/rules/space-infix-ops
  space-infix-ops: 2

  # Require or disallow spaces before/after unary operators (words on by default, nonwords)
  # http://eslint.org/docs/rules/space-unary-ops
  space-unary-ops:
    - 2
    - words: true
      nonwords: false

  # require or disallow a space immediately following the // or /* in a comment
  # http://eslint.org/docs/rules/spaced-comment
  spaced-comment: 0

  # Do not require or disallow the Unicode Byte Order Mark (BOM)
  # http://eslint.org/docs/rules/unicode-bom
  unicode-bom: 0

  # require regex literals to be wrapped in parentheses
  # http://eslint.org/docs/rules/wrap-regex
  wrap-regex: 0


  #############################################################################
  # ECMAScript 6
  #############################################################################
  # require braces in arrow function body
  # http://eslint.org/docs/rules/arrow-body-style
  arrow-body-style: 0

  # require parens in arrow function arguments
  # http://eslint.org/docs/rules/arrow-parens
  arrow-parens: 2

  # require space before/after arrow function's arrow
  # http://eslint.org/docs/rules/arrow-spacing
  arrow-spacing: 2

  # verify calls of super() in constructors
  # http://eslint.org/docs/rules/constructor-super
  constructor-super: 2

  # enforce the spacing around the * in generator functions
  # http://eslint.org/docs/rules/generator-star-spacing
  generator-star-spacing: 0

  # disallow modifying variables of class declarations
  # http://eslint.org/docs/rules/no-class-assign
  no-class-assign: 2

  # disallow arrow functions where they could be confused with comparisons
  # http://eslint.org/docs/rules/no-confusing-arrow
  no-confusing-arrow: 0

  # disallow modifying variables that are declared using const
  # http://eslint.org/docs/rules/no-const-assign
  no-const-assign: 2

  # disallow duplicate name in class members
  # http://eslint.org/docs/rules/no-dupe-class-members
  no-dupe-class-members: 2

  # disallow use of the new operator with the Symbol object
  # http://eslint.org/docs/rules/no-new-symbol
  no-new-symbol: 0

  # restrict usage of specified modules when loaded by import declaration
  # http://eslint.org/docs/rules/no-restricted-imports
  no-restricted-imports: 0

  # disallow use of this/super before calling super() in constructors
  # http://eslint.org/docs/rules/no-this-before-super
  no-this-before-super: 2

  # disallow unnecessary constructor
  # http://eslint.org/docs/rules/no-useless-constructor
  no-useless-constructor: 0

  # require let or const instead of var
  # http://eslint.org/docs/rules/no-var
  no-var: 0

  # require method and property shorthand syntax for object literals
  # http://eslint.org/docs/rules/object-shorthand
  object-shorthand: 0

  # suggest using arrow functions as callbacks
  # http://eslint.org/docs/rules/prefer-arrow-callback
  prefer-arrow-callback: 0

  # suggest using of const declaration for variables that are never modified after declared
  # http://eslint.org/docs/rules/prefer-const
  prefer-const: 0

  # suggest using the spread operator instead of .apply().
  # http://eslint.org/docs/rules/prefer-spread
  prefer-spread: 0

  # suggest using Reflect methods where applicable
  # http://eslint.org/docs/rules/prefer-reflect
  prefer-reflect: 0

  # suggest using the rest parameters instead of arguments
  # http://eslint.org/docs/rules/prefer-rest-params
  prefer-rest-params: 0

  # suggest using template literals instead of strings concatenation
  # http://eslint.org/docs/rules/prefer-template
  prefer-template: 0

  # disallow generator functions that do not have yield
  # http://eslint.org/docs/rules/require-yield
  require-yield: 0

  # enforce spacing around embedded expressions of template strings
  # http://eslint.org/docs/rules/template-curly-spacing
  template-curly-spacing: 0

  # enforce spacing around the * in yield* expressions
  # http://eslint.org/docs/rules/yield-star-spacing
  yield-star-spacing: 0

  #############################################################################
  # Legacy
  #############################################################################
  # specify the maximum depth that blocks can be nested
  # http://eslint.org/docs/rules/max-depth
  max-depth: 0

  # specify the maximum length of a line in your program
  # http://eslint.org/docs/rules/max-len
  max-len:
    - 2
    - 100
    - 2

  # Limits the number of parameters that can be used in function declaration.
  # http://eslint.org/docs/rules/max-params
  max-params: 0

  # Specify the maximum number of statements allowed in a function
  # http://eslint.org/docs/rules/max-statements
  max-statements: 0

  # Disallow use of bitwise operators
  # http://eslint.org/docs/rules/no-bitwise
  no-bitwise: 0

  # Disallow use of unary operators, ++ and --
  # http://eslint.org/docs/rules/no-plusplus
  no-plusplus: 0


# Parser options are used to specify language-level options which you want to
# supprt. The defaults enable ECMAScript 5, which may be overridden on a per
# project basis. Please enable these settings to meet the needs of your own
# project.
#
parserOptions:

  # The ECMAScript version. Supported values are: 3, 5, 6, 7.
  # ecmaVersion: 5

  # Set sourceType to "module" if your project uses ES6 modules.
  # sourceType: script

  ecmaFeatures:

    # Permit return statements in the global scope.
    globalReturn: false

    # Enable global strict mode (if ecmaVersion is 5 or greater)
    impliedStrict: false

    # Enable JSX
    jsx: false

    # Enable support for the experimental object rest/spread properties
    experimentalObjectRestSpread: false
