{
    "extends": "tslint:latest",
    "defaultSeverity": "error",
    "jsRules": {},
    "rules": {
        "array-type": [true, "array"],
        "arrow-parens": [true, "ban-single-arg-parens"],
        "curly": [true, "ignore-same-line"],
        "indent": [true, "tabs", 2],
        "quotemark": false,
        "member-access": [true, "no-public"],
        "no-empty": [true, "allow-empty-catch", "allow-empty-functions"],
        "no-string-literal": false,
        "interface-over-type-literal": false,
        // TODO: turn on
        "prefer-const": false,
        // I do want to bring this down to 120 at some point but maybe later
        "max-line-length": {
            "severity": "warning",
            "options": {
                "limit": 140,
                "ignore-pattern": "\\.replace\\(('\\[|/)|^\\s*(// \\s*)?(return |(let |const )?[a-zA-Z0-9$.]+ \\+?= (\\$\\()?|[a-zA-Z0-9$.]+\\()?['\"`]"
            }
        },
        "interface-name": false,
        "forin": false,
        // maybe one day
        "member-ordering": false,
        "max-classes-per-file": false,
        // they look weird in `new class {...}`
        "new-parens": false,
        "no-bitwise": false,
        "prefer-conditional-expression": false,
        "no-shadowed-variable": [true, {"temporalDeadZone": false}],
        "no-switch-case-fall-through": true,
        "object-literal-sort-keys": false,
        "object-literal-key-quotes": false,
        "trailing-comma": [
            true,
            {
                "multiline": {
                    "objects": "always",
                    "arrays": "always",
                    "functions": "never",
                    "typeLiterals": "always"
                },
                "singleline": "never",
                "esSpecCompliant": true
            }
        ],
        "semicolon": [true, "always", "strict-bound-class-methods"],
        "space-before-function-paren": [true, {"anonymous": "always", "named": "never", "asyncArrow": "always"}]
    },
    "rulesDirectory": []
}