{
    "env": {
        "node": true,
        "browser": true
    },
    "globals": {
        "ArrayBuffer": true,
        "Uint8Array": true,
        "Float32Array": true,
        "Float64Array": true,
        "define": true,
        "global": true,
        "XMLHttpRequest": true,
        "Promise": true
    },
    "parserOptions": {
        "ecmaVersion": 5
    },
    "extends": "eslint:recommended",
    "rules": {

        // Possible errors
        "no-extra-parens": 1,               // turned on as the daily lecture
        "no-prototype-builtins": 1,
        "no-template-curly-in-string": 1,
        "no-unsafe-negation": 1,
        "valid-jsdoc": 1,

        // Best practices
        "accessor-pairs": 1,
        "array-callback-return": 1,
        "block-scoped-var": 1,
        "class-methods-use-this": 1,
        "complexity": 0,                    // is sometimes necessary
        "consistent-return": 1,
        "curly": 0,                         // sometimes more braces than code
        "default-case": 0,                  // just forces unnecessary code
        "dot-location": 0,                  // looks nicer for chainables
        "dot-notation": 0,                  // not compatible with some reserved properties
        "eqeqeq": 1,
        "guard-for-in": 1,
        "no-alert": 1,
        "no-caller": 1,
        "no-cond-assign": 0,
        "no-div-regex": 1,
        "no-else-return": 1,
        "no-empty-function": 1,
        "no-eq-null": 1,
        "no-eval": 1,
        "no-extend-native": 1,
        "no-extra-bind": 1,
        "no-extra-label": 1,
        "no-floating-decimal": 1,
        "no-global-assign": 1,
        "no-implicit-coercion": 1,
        "no-implicit-globals": 1,
        "no-implied-eval": 1,
        "no-invalid-this": 1,
        "no-iterator": 1,
        "no-labels": 1,
        "no-lone-blocks": 1,
        "no-loop-func": 1,
        "no-magic-numbers": 0,              // it's actually fun to turn this on here
        "no-new-func": 1,
        "no-new-wrappers": 1,
        "no-new": 1,
        "no-octal-escape": 1,
        "no-param-reassign": 0,             // is necessary for varargs functions
        "no-proto": 1,
        "no-restricted-properties": 1,
        "no-sequences": 1,
        "no-script-url": 1,
        "no-self-compare": 1,
        "no-throw-literal": 1,
        "no-unmodified-loop-condition": 1,
        "no-unused-expressions": 1,
        "no-useless-call": 1,
        "no-useless-concat": 1,
        "no-useless-escape": 1,
        "no-useless-return": 1,
        "no-void": 1,
        "no-warning-comments": 1,
        "no-with": 1,
        "radix": 1,
        "vars-on-top": 0,                   // makes code harder to read, not faster
        "wrap-iife": 0,                     // used frequently where polyfilling
        "yoda": 1,

        // Strict mode
        "strict": 1,

        // Variables
        "init-declarations": 0,             // because no-undef-init is on and we actually want undefineds
        "no-catch-shadow": 0,               // no IE8 support anyway
        "no-label-var": 1,
        "no-restricted-globals": 1,
        "no-return-assign": 0,              // can make sense.
        "no-shadow-restricted-names": 1,
        "no-shadow": 0,                     // this is javascript. it has forEach and all that stuff.
        "no-undef-init": 1,
        "no-undef": 1,
        "no-undefined": 0,                  // produces shorter code when testing against this
        "no-use-before-define": 0,          // can actually be used for a better overview, i.e. with module.exports
 
        // Node.js and CommonJS
        "callback-return": 1,
        "global-require": 0,                // only way to resolve cyclic references
        "handle-callback-err": 1,
        "no-mixed-requires": 1,
        "no-new-require": 1,
        "no-path-concat": 1,
        "no-process-env": 1,
        "no-process-exit": 1,
        "no-restricted-modules": 1,
        "no-sync": 0,                       // for loadSync

        // Stylistic Issues
        "semi": 1,                          // maybe next time
        "no-extra-semi": 1,
        "quotes": 1,                        // useful for gzip
        "no-trailing-spaces": 1,
        "no-unneeded-ternary": 1,
        "unicode-bom": [2, "never"]

        // ECMAScript 6                     // maybe next time
    }
}
