// Copyright (c) Microsoft Corporation.  All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information.
{
    /*
        ENFORCING Options: When set to true, (or in some cases an integer value) these options will make JSHint produce more warnings about your code.
        http://www.jshint.com/docs/options/#enforcing-options
    */
    "bitwise": false, // Prohibits the use of bitwise operators. Bitwise operators are very rare in JavaScript programs and quite often & is simply a mistyped &&.
    "camelcase": false, // Allows you to force all variable names to use either camelCase style or UPPER_CASE with underscores.
    "curly": true, // Requires you to always put curly braces around blocks in loops and conditionals.
    "eqeqeq": true, // Prohibits the use of == and != in favor of === and !==
    "es3": false, // Prohibits the use of syntax beynd ECMAScript 3 specification.
    "forin": false, // Requires all for in loops to filter object's items.
    "freeze": true, // Prohibits overwriting prototypes of native objects such as Array, Date and so on.
    "immed": true, // Prohibits the use of immediate function invocations without wrapping them in parentheses.
    "indent": false, // Enforces specific tab width for your code.
    "latedef": false, // Prohibits the use of a variable before it was defined
    "newcap": false, // Requires you to capitalize names of constructor functions
    "noarg": true, // Prohibits the use of arguments.caller and arguments.callee.
    "noempty": false, // Warns when you have an empty block in your code.
    "nonbsp": true, // Warns about "non-breaking whitespace" characters.
    "nonew": true, // Prohibits the use of constructor functions for side-effects.
    "plusplus": false, // Prohibits the use of unary increment and decrement operators.
    "quotmark": false, // Enforces the consistency of quotation marks used throughout your code.
    "undef": true, // Prohibits the use of explicitly undeclared variables.
    "unused": "vars", // Warns when you define and never use your variables.
    "strict": true, // Requires all functions to run in ECMAScript 5's strict mode.
    "trailing": true, // Makes it an error to leave a trailing whitespace in your code.
    "maxparams": false, // Lets you set the max number of formal parameters allowed per function.
    "maxdepth": false, // Lets you control how nested do you want your blocks to be.
    "maxstatements": false, // Lets you set the max number of statements allowed per function.
    "maxcomplexity": false, // Lets you control cyclomatic complexity throughout your code.
    "maxlen": false, // lets you set the maximum length of a line.

    /*
        RELAXING Options: When set to true, (or in some cases an integer value) these options will make JSHint produce less warnings about your code
        http://www.jshint.com/docs/options/#relaxing-options
    */
    "asi": false, // Suppresses warnings about missing semicolons.
    "boss": true, // Suppresses warnings about the use of assignments in cases where comparisons are expected. More often than not, code like if (a = 10) {} is a typo.
    "debug": false, // Suppresses warnings about the debugger statements in your code.
    "eqnull": false, // Suppresses warnings about == null comparisons.
    "esnext": false, // Tells JSHint that your code uses ECMAScript 6 specific syntax.
    "evil": false, // Suppresses warnings about the use of eval.
    "expr": true, // Suppresses warnings about the use of expressions where normally you would expect to see assignments or function calls.
    "funcscope": false, // Suppresses warnings about declaring variables inside of control structures while accessing them later from the outside.
    "gcl": false, // Makes JSHint compatible with Google Closure Compiler.
    "globalstrict": true, // Suppresses warnings about the use of global strict mode.
    "iterator": false, // Suppresses warnings about the __iterator__ property.
    "lastsemic": false, // Suppresses warnings about missing semicolons, but only when the semicolon is omitted for the last statement in a one-line block.
    "laxbreak": true, // Suppresses most of the warnings about possibly unsafe line breakings in your code.
    "laxcomma": false, // Suppresses warnings about comma-first coding style.
    "loopfunc": true, // Suppresses warnings about functions inside of loops.
    "maxerr": 10000, // Allows you to set the maximum amount of warnings JSHint will produce before giving up on a given file. Default is 50.
    "moz": false, // Options tells JSHint that your code uses Mozilla JavaScript extensions.
    "multistr": true, // Suppresses warnings about multi-line strings. Multi-line strings can be dangerous if you accidentally put a whitespace in between the escape character (\) and a new line.
    "notypeof": false, // Suppresses warnings about invalid typeof operator values.
    "proto": false, // Suppresses warnings about the __proto__ property.
    "scripturl": false, // Suppresses warnings about the use of script-targeted URL's such as javascript:....
    "smarttabs": false, // Suppresses warnings about mixed tabs and spaces when the latter are used for alignmnent only.
    "shadow": true, // Suppresses warnings about variable shadowing i.e. declaring a variable that had been already declared somewhere in the outer scope.
    "sub": true, // Suppresses warnings about using [] notation when it can be expressed in dot notation: person['name'] vs. person.name.
    "supernew": false, // Suppresses warnings about "weird" constructions like new function () { ... } and new Object;.
    "noyield": false, // Suppresses warnings about generator functions with no yield statement in them.

    /*
        SUPPRESS specific JSHint warnings that have no corresponding option flags.
        http://www.jshint.com/docs/
    */
    "-W053": true, // Ignore (W053)  Do not use String as a constructor.
    "-W018": true, // Ignore (W018)  Confusing use of '!'. This rule doesn't like !! for coercion.


    /*
        ENVIORNMENT Options: These options let JSHint know about some pre-defined global variables.
        http://www.jshint.com/docs/options/#environments
    */
    "browser": false, // Defines globals exposed by modern browsers. Does not include development variables like alert or console.
    "node": false, // Defines globals available when your code is running inside of the Node runtime environment.

    /*
        GLOBAL WinJS enviornment variables: Tells JSHint about global variables used by WinJS that are defined elsewhere. If a value is false, JSHint will consider that variable as read-only.
        https://www.npmjs.org/package/grunt-contrib-jshint
    */
    "globals": {
        "define": true,
        "require": true
    }
}