{
    "predef" : [
        "AJS",
        "GH",
        "_",
        "JIRA",
        "require",
        "define",

        // QUnit
        "ok",
        "notOkay",
        "sinon",
        "equal",
        "notEqual",
        "deepEqual",
        "notDeepEqual",
        "raises",
        "test",
        "asyncTest",
        "start",
        "module"
    ],

    // Prohibit rare use of bitwise operators like ^ (XOR) and | (OR) to avoid mistyped logical operators && or ||
    "bitwise": true,

    // Force all variable names to use either camelCase style or UPPER_CASE with underscores (for constants)
    "camelcase": true,

    // Require curly braces around blocks, even one-liners
    "curly": true,

    // Strict equality tests only please...
    "eqeqeq": true,

    // ...except for == null which is useful for checking if a variable is null or undefined
    "eqnull": true,

    // Prohibit interference with prototypes of native objects
    "freeze": true,

    // Require IIFEs to be wrapped in parentheses
    "immed": true,

    // Constructor function names must be capitalised
    "newcap": true,

    // Warn about deprecated use of arguments.caller and .callee
    "noarg": true,

    // Empty blocks are a bad logic smell
    "noempty": true,

    // Prohibit use of new unless the result is assigned to a variable
    "nonew": true,
    
    // Don't allow undeclared variables. Great way to spot typos
    "undef": true,

    // Warn about trailing whitespace
    "trailing": true,

    // Warn about use of a variable before it is defined to avoid weird hoisting bugs
    "latedef": true,

    // Warn about unused variables and function parameters
    "unused": true,

    // Enforce 4-space tabs as per JAG styleguide
    "indent": 4,

    // Keep string quotes consistent (either only single or only double)
    "quotmark": false,

    // Allow variable assignment in loop constructors
    "boss": true,
    
    // Add globals exposed modern browsers
    "browser": true
}