{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "object",
    "additionalProperties": false,
    "definitions": {
        "rule": {
            "oneOf": [{
                "$ref": "#/definitions/ruleToggle"
            }, {
                "type": "array",
                "items": [{
                    "$ref": "#/definitions/ruleToggle"
                }, {
                    "type": "object"
                }],
                "minItems": 2,
                "additionalItems": false
            }, {
                "type": "array",
                "items": [{
                    "$ref": "#/definitions/ruleToggle"
                }, {
                    "type": "string"
                }, {
                    "type": "object"
                }],
                "minItems": 3,
                "additionalItems": false
            }, {
                "type": "array",
                "items": [{
                    "$ref": "#/definitions/ruleToggle"
                }, {
                    "type": "string"
                }],
                "minItems": 2,
                "additionalItems": false
            }]
        },
        "rules": {
            "description": "🐊Putout comes with a large number of rules. You can modify which rules your project uses.",
            "type": "object",
            "patternProperties": {
                "^.*$": {
                    "$ref": "#/definitions/rule"
                }
            }
        },
        "ruleToggle": {
            "oneOf": [{
                "description": "🐊Putout rule\n\n\"off\" means rule is off\n\"on\" means it is a on\n",
                "enum": ["on", "off"]
            }, {
                "enum": [true, false]
            }]
        },
        "processorToggle": {
            "type": "array",
            "items": [{
                "type": "string"
            }, {
                "description": "🐊Putout processor\n\n\"off\" means rule is off\n\"on\" means it is a on\n",
                "enum": ["on", "off"]
            }],
            "minItems": 2,
            "maxItems": 2
        }
    },
    "properties": {
        "parser": {
            "description": "Tell 🐊Putout which parser to use",
            "type": "string"
        },
        "printer": {
            "description": "Tell 🐊Putout which printer to use",
            "oneOf": [{
                "type": "string"
            }, {
                "type": "array",
                "minItems": 2,
                "maxItems": 2,
                "items": [{
                    "type": "string"
                }, {
                    "type": "object"
                }]
            }]
        },
        "fixCount": {
            "description": "Choose count of fixes",
            "type": "number"
        },
        "formatter": {
            "description": "Choose the way to show information about errors found",
            "type": [
                "string",
                "array"
            ]
        },
        "processors": {
            "description": "Tell 🐊Putout which processors to use to support file types other then JavaScript",
            "type": "array",
            "uniqueItems": true,
            "items": {
                "oneOf": [{
                    "$ref": "#/definitions/processorToggle"
                }, {
                    "type": "string"
                }]
            }
        },
        "ignore": {
            "description": "Tell 🐊Putout to ignore specific files and directories.",
            "type": "array",
            "uniqueItems": true,
            "items": {
                "type": "string"
            }
        },
        "match": {
            "description": "Allows to match rules for files and folders, specified by glob patterns.",
            "type": "object",
            "patternProperties": {
                "^.*$": {
                    "$ref": "#/definitions/rules"
                }
            }
        },
        "plugins": {
            "description": "Tell 🐊Putout which plugins to load",
            "type": "array",
            "uniqueItems": true
        },
        "rules": {
            "$ref": "#/definitions/rules"
        }
    }
}
