{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "id": "https://json.schemastore.org/stylintrc.json",
  "properties": {
    "blocks": {
      "type": ["string", "boolean"],
      "title": "@block keyword preference",
      "description": "Expect the @block keyword when defining block variables.",
      "default": false,
      "enum": [false, "never", "always"]
    },
    "brackets": {
      "type": ["string", "boolean"],
      "title": "Brackets preference",
      "description": "Expect {} when declaring a selector.",
      "default": "never",
      "enum": [false, "never", "always"]
    },
    "colons": {
      "type": ["string", "boolean"],
      "title": "Colon preference",
      "description": "Expect : when declaring a property.",
      "default": "always",
      "enum": [false, "never", "always"]
    },
    "colors": {
      "type": ["string", "boolean"],
      "title": "Colors preference",
      "description": "Enforce variables when defining hex values",
      "default": "always",
      "enum": [false, "always"]
    },
    "commaSpace": {
      "type": ["string", "boolean"],
      "title": "CommaSpace preference",
      "description": "Enforce or disallow spaces after commas.",
      "default": "always",
      "enum": [false, "never", "always"]
    },
    "commentSpace": {
      "type": ["string", "boolean"],
      "title": "CommentSpace preference",
      "description": "Enforce or disallow spaces after line comments ('// comment' vs '//comment').",
      "default": "always",
      "enum": [false, "never", "always"]
    },
    "cssLiteral": {
      "type": ["string", "boolean"],
      "title": "CssLiteral preference",
      "description": "By default Stylint ignores @css blocks. If set to true however, it will throw a warning if @css is used.",
      "default": "never",
      "enum": [false, "never"]
    },
    "customProperties": {
      "type": "array",
      "title": "Custom Properties array.",
      "description": "In Stylus you have the option of using mixins transparently, like css properties. Because of how Stylus' syntax works, this rule also allows you to add adhoc support for custom properties as needed by just added the name of the property to this array.",
      "items": {}
    },
    "depthLimit": {
      "type": ["boolean", "integer"],
      "title": "Max selector depth preference",
      "description": "Sets the max selector depth. If set to 4, max selector depth will be 4 indents. Pseudo selectors like &:first-child or &:hover won't count towards the limit. Set to false if you don't want to check for this",
      "default": false
    },
    "duplicates": {
      "type": "boolean",
      "title": "Duplicates preference",
      "description": "Checks if selector or property duplicated unnecessarily.",
      "default": true
    },
    "efficient": {
      "type": ["string", "boolean"],
      "title": "Property efficiency preference",
      "description": "Check for places where properties can be written more efficiently. (Example: prefer margin 0 over margin 0 0)",
      "default": "always",
      "enum": [false, "never", "always"]
    },
    "exclude": {
      "type": "array",
      "title": "Exclude files preference",
      "description": "Exclude certain file patterns from linting. (Example: ['vendor/**/*', 'node_modules/**/*'])",
      "items": {}
    },
    "extendPref": {
      "type": ["string", "boolean"],
      "title": "Extend(s) preference",
      "description": "Pass in either @extend or @extends to enforce one, or false to enforce neither.",
      "default": false,
      "enum": [false, "@extend", "@extends"]
    },
    "globalDupe": {
      "type": "boolean",
      "title": "Global Duplicate rules preference",
      "description": "Works in conjunction with duplicates. Does nothing on its own. If false, duplicates will check for dupes within individual files only. If true, duplicates will check for dupes across all files.",
      "default": false
    },
    "groupOutputByFile": {
      "type": "boolean",
      "title": "GroupOutputByFile schema.",
      "description": "Stylint's default setting groups errors and warnings by file when outputting. You can disable this if you want.",
      "default": true
    },
    "indentPref": {
      "type": ["boolean", "integer"],
      "title": "IndentPref preference.",
      "description": "Number of spaces to indent.",
      "default": false
    },
    "leadingZero": {
      "type": ["string", "boolean"],
      "title": "LeadingZero preference",
      "description": "Enforce or disallow unnecessary leading zeroes on decimal points.",
      "default": "never",
      "enum": [false, "never", "always"]
    },
    "maxErrors": {
      "type": ["boolean", "integer"],
      "title": "Max number of errors preference",
      "description": "Set 'max' number of Errors.",
      "default": false
    },
    "maxWarnings": {
      "type": ["boolean", "integer"],
      "title": "Max number of warnings preference",
      "description": "Set 'max' number of Warnings.",
      "default": false
    },
    "mixed": {
      "type": "boolean",
      "title": "Allow mixed hard & soft tabs",
      "description": "Returns true if mixed spaces and tabs are found. If a number is passed to indentPref, it assumes soft tabs (ie, spaces), and if false is passed to indentPref it assumes hard tabs. If soft tabs, outputs warning/error if hard tabs used. If hard tabs, outputs warning/error if unnecessary extra spaces found.",
      "default": false
    },
    "mixins": {
      "type": "array",
      "title": "Mixins",
      "description": "In Stylus you have the option of using mixins transparently, like css properties. Because of how Stylus' syntax works, this rule also allows you to add adhoc support for custom mixins as needed by just added the name of the mixin to this array.",
      "items": {}
    },
    "namingConvention": {
      "type": ["boolean", "string"],
      "title": "Naming Convention",
      "description": "Enforce a particular naming convention when declaring classes, ids, and variables. Throws a warning if you don't follow the convention.",
      "default": false,
      "enum": [
        false,
        "lowercase-dash",
        "lowercase_underscore",
        "camelCase",
        "BEM"
      ]
    },
    "namingConventionStrict": {
      "type": "boolean",
      "title": "NamingConventionStrict schema.",
      "description": "By default, namingConvention only looks at variable names. If namingConventionStrict is set to true, namingConvention will also look at class and id names. If you have a lot of 3rd party css you can't change you might want to leave this off.",
      "default": false
    },
    "none": {
      "type": ["boolean", "string"],
      "title": "None preference.",
      "description": "If 'always' check for places where none used instead of 0. If 'never' check for places where 0 could be used instead of none.",
      "default": "never",
      "enum": [false, "always", "never"]
    },
    "noImportant": {
      "type": "boolean",
      "title": "NoImportant preference.",
      "description": "If true, show warning when !important is found.",
      "default": true
    },
    "parenSpace": {
      "type": ["boolean", "string"],
      "title": "ParenSpace preference.",
      "description": "Enforce or disallow use of extra spaces inside parens.",
      "default": false,
      "enum": [false, "always", "never"]
    },
    "placeholders": {
      "type": ["boolean", "string"],
      "title": "Placeholders preference",
      "description": "Enforce extending placeholder vars when using @extend(s) (prefer @extends $placeholder over $extends .some-class)",
      "default": "always",
      "enum": [false, "always", "never"]
    },
    "prefixVarsWithDollar": {
      "type": ["boolean", "string"],
      "title": "PrefixVarsWithDollar preference",
      "description": "Enforce use of $ when defining a variable. In Stylus using a $ when defining a variable is optional, but is a good idea if you want to prevent ambiguity. Not including the $ sets up situations where you wonder: 'Is this a variable or a value?' For instance: padding $default is easier to understand than padding default.",
      "default": "always",
      "enum": [false, "always", "never"]
    },
    "quotePref": {
      "type": ["boolean", "string"],
      "title": "Quote style preference",
      "description": "Enforce consistent quotation style.",
      "default": false,
      "enum": [false, "single", "double"]
    },
    "reporterOptions": {
      "type": "object",
      "title": "ReporterOptions schema.",
      "description": "Customize reporter output.",
      "properties": {
        "columns": {
          "type": "array",
          "title": "Columns schema.",
          "items": {
            "type": "string",
            "title": "3 schema.",
            "default": "rule"
          }
        },
        "columnSplitter": {
          "type": ["boolean", "string"],
          "title": "ColumnSplitter schema.",
          "default": "  "
        },
        "showHeaders": {
          "title": "ShowHeaders schema.",
          "default": false
        },
        "truncate": {
          "type": "boolean",
          "title": "Truncate schema.",
          "default": true
        }
      }
    },
    "semicolons": {
      "type": ["boolean", "string"],
      "title": "Semicolon preference",
      "description": "Enforce or disallow semicolons",
      "default": "never",
      "enum": [false, "always", "never"]
    },
    "sortOrder": {
      "type": ["boolean", "string", "array"],
      "title": "Property sorting order preference",
      "description": "Enforce a particular sort order when declaring properties. Throws a warning if you don't follow the order.",
      "default": "alphabetical"
    },
    "stackedProperties": {
      "type": ["boolean", "string"],
      "title": "One-liners preference",
      "description": "Enforce putting properties on new lines.",
      "enum": [false, "always", "never"]
    },
    "trailingWhitespace": {
      "type": ["string", "boolean"],
      "title": "TrailingWhitespace preference",
      "description": "An explanation about the purpose of this instance.",
      "default": "never",
      "enum": [false, "never"]
    },
    "universal": {
      "type": ["boolean", "string"],
      "title": "Universal preference",
      "description": "Looks for instances of the inefficient * selector. Lots of resets use this, for good reason (resetting box model), but past that you really don't need this selector, and you should avoid it if possible.",
      "default": false,
      "enum": [false, "never"]
    },
    "valid": {
      "type": "boolean",
      "title": "Valid preference",
      "description": "Check that a property is valid CSS or HTML.",
      "default": true
    },
    "zeroUnits": {
      "type": ["boolean", "string"],
      "title": "ZeroUnits preference",
      "description": "Looks for instances of 0px. You don't need the px. Checks all units, not just px.",
      "default": "never",
      "enum": [false, "never"]
    },
    "zIndexNormalize": {
      "type": ["boolean", "integer"],
      "title": "ZIndexNormalize preference",
      "description": "Enforce some (very) basic z-index sanity. Any number passed in will be used as the base for your z-index values. Throws an error if your value is not normalized.",
      "default": false
    }
  },
  "title": "JSON schema for Stylint configuration files",
  "type": "object"
}
