{
    // setup
    "fileExtensions":   [ ".js" ],
    "excludeFiles":     [ "./node_modules/**",
                          "./bin",
                          "./deps",
                          "./docs",
                          "./examples",
                          "./cover_html"
                        ],

    // general rules
    "safeContextKeyword": [ "self" ],
    "validateParameterSeparator": ", ",
    "validateQuoteMarks": {
        "escape": true,
        "mark": "'"
    },

    // alignment rules
    "maximumLineLength": {
        "value": 80,
        "allowComments": false,
        "allowUrlComments": false,
        "allowRegex": false
    },
    "validateIndentation": 4,

    // newline on EOF
    "requireLineFeedAtFileEnd": true,

    // disallow rules
    "disallowImplicitTypeConversion": [
        "numeric",
        "boolean",
        "binary",
        "string"
    ],
    "disallowMixedSpacesAndTabs": true,
    "disallowMultipleVarDecl": "exceptUndefined",
    "disallowNewlineBeforeBlockStatements": true,
    "disallowOperatorBeforeLineBreak": [ "." ],
    "disallowQuotedKeysInObjects": true,
    "disallowSpaceAfterPrefixUnaryOperators": true,
    "disallowSpaceBeforePostfixUnaryOperators": true,
    "disallowSpacesInCallExpression": true,
    "disallowTrailingComma": true,
    "disallowTrailingWhitespace": true,
    "disallowYodaConditions": true,

    // require rules
    "requireBlocksOnNewline": true,
    // TODO: come back to this rule after we normalize code base
    // "requireCamelCaseOrUpperCaseIdentifiers": "ignoreProperties",
    "requireCapitalizedConstructors": true,
    "requireCurlyBraces": [
        "if",
        "else",
        "for",
        "while",
        "do",
        "try",
        "catch"
    ],
    "requireDotNotation": true,
    "requireLineBreakAfterVariableAssignment": true,
    "requirePaddingNewLinesAfterUseStrict": true,
    "requirePaddingNewLinesBeforeExport": true,
    "requirePaddingNewlinesBeforeKeywords": [
        "do",
        "for",
        "if",
        "switch",
        "try",
        "while"
    ],
    "requireSemicolons": true,
    "requireSpaceAfterBinaryOperators": true,
    "requireSpaceAfterKeywords": true,
    "requireSpaceBeforeBinaryOperators": true,
    "requireSpaceBeforeBlockStatements": true,
    "requireSpaceBeforeKeywords": [
        "else",
        "while",
        "catch"
    ],
    "requireSpaceBetweenArguments": true,
    "requireSpacesInAnonymousFunctionExpression": {
        "beforeOpeningRoundBrace": true
    },
    "requireSpacesInConditionalExpression": true,
    "requireSpacesInForStatement": true,
    "requireSpacesInFunction": {
        "beforeOpeningCurlyBrace": true
    }
}
