{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://json.schemastore.org/pre-commit-hooks.json",
  "definitions": {
    "language": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "conda",
            "coursier",
            "dart",
            "docker",
            "docker_image",
            "dotnet",
            "fail",
            "golang",
            "lua",
            "node",
            "perl",
            "python",
            "python_venv",
            "r",
            "ruby",
            "rust",
            "swift",
            "pygrep",
            "script",
            "system"
          ]
        },
        {
          "type": "string"
        }
      ]
    },
    "file_type": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "adobe-illustrator",
            "alpm",
            "apinotes",
            "asar",
            "asciidoc",
            "ash",
            "asm",
            "aspectj",
            "audio",
            "avif",
            "awk",
            "babelrc",
            "bash",
            "batch",
            "bats",
            "bazel",
            "bazelrc",
            "bib",
            "binary",
            "bitmap",
            "bowerrc",
            "browserslistrc",
            "bzip2",
            "c",
            "c#",
            "c++",
            "c2hs",
            "cbsd",
            "clojure",
            "clojurescript",
            "cmake",
            "codespellrc",
            "coffee",
            "coveragerc",
            "crystal",
            "csh",
            "cson",
            "csproj",
            "css",
            "csslintrc",
            "csv",
            "cuda",
            "cython",
            "dart",
            "dash",
            "def",
            "diff",
            "directory",
            "dockerfile",
            "dockerignore",
            "dotenv",
            "dtd",
            "editorconfig",
            "edn",
            "ejs",
            "eot",
            "eps",
            "erb",
            "executable",
            "expect",
            "file",
            "fish",
            "flake8",
            "gdscript",
            "geojson",
            "gherkin",
            "gif",
            "gitattributes",
            "gitconfig",
            "gitignore",
            "gitlint",
            "gitmodules",
            "go",
            "go-mod",
            "go-sum",
            "gotmpl",
            "gpx",
            "graphql",
            "groovy",
            "gyb",
            "gyp",
            "gzip",
            "handlebars",
            "haskell",
            "hcl",
            "header",
            "hgrc",
            "html",
            "icalendar",
            "icns",
            "icon",
            "idl",
            "idris",
            "image",
            "inc",
            "ini",
            "inl",
            "ino",
            "inx",
            "jade",
            "jar",
            "java",
            "java-properties",
            "javascript",
            "jenkins",
            "jinja",
            "jpeg",
            "jshintrc",
            "json",
            "json5",
            "jsonnet",
            "jsx",
            "jupyter",
            "kml",
            "kotlin",
            "ksh",
            "lean",
            "lektor",
            "lektorproject",
            "less",
            "liquid",
            "literate-haskell",
            "lua",
            "mailmap",
            "makefile",
            "manifest",
            "map",
            "markdown",
            "mdx",
            "mention-bot",
            "meson",
            "mib",
            "modulemap",
            "musescore",
            "myst",
            "ngdoc",
            "nim",
            "nimble",
            "nix",
            "non-executable",
            "npmignore",
            "nunjucks",
            "objective-c",
            "objective-c++",
            "ocaml",
            "otf",
            "p12",
            "pdbrc",
            "pdf",
            "pem",
            "perl",
            "php",
            "pkgbuild",
            "plain-text",
            "plantuml",
            "plist",
            "png",
            "pofile",
            "powershell",
            "prettierignore",
            "prisma",
            "proto",
            "puppet",
            "purescript",
            "pyi",
            "pylintrc",
            "pypirc",
            "pyproj",
            "python",
            "python2",
            "python3",
            "pyz",
            "qml",
            "r",
            "relax-ng",
            "rst",
            "ruby",
            "rust",
            "salt",
            "sass",
            "sbt",
            "scala",
            "scheme",
            "scss",
            "sh",
            "shell",
            "sln",
            "socket",
            "solidity",
            "spec",
            "sql",
            "stylus",
            "svelte",
            "svg",
            "swf",
            "swift",
            "swiftdeps",
            "symlink",
            "system-verilog",
            "tar",
            "tcsh",
            "terraform",
            "tex",
            "text",
            "thrift",
            "tiff",
            "toml",
            "ts",
            "tsv",
            "tsx",
            "ttf",
            "twig",
            "twisted",
            "txsprofile",
            "urdf",
            "vb",
            "vbproj",
            "vcxproj",
            "vdx",
            "verilog",
            "vhdl",
            "vim",
            "vtl",
            "vue",
            "wav",
            "webp",
            "wheel",
            "wkt",
            "woff",
            "woff2",
            "wsgi",
            "xhtml",
            "xml",
            "xquery",
            "xsd",
            "xsl",
            "yaml",
            "yamllint",
            "yang",
            "yin",
            "zcml",
            "zig",
            "zip",
            "zpt",
            "zsh"
          ]
        },
        {
          "type": "string"
        }
      ]
    },
    "file_types": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/file_type"
      }
    },
    "stage": {
      "type": "string",
      "enum": [
        "commit",
        "merge-commit",
        "push",
        "prepare-commit-msg",
        "commit-msg",
        "post-checkout",
        "post-commit",
        "post-merge",
        "post-rewrite",
        "pre-commit",
        "pre-merge-commit",
        "pre-push",
        "pre-rebase",
        "manual"
      ]
    },
    "stages": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/stage"
      }
    }
  },
  "items": {
    "type": "object",
    "required": ["id", "name", "entry", "language"],
    "additionalProperties": false,
    "properties": {
      "id": {
        "description": "id of the hook - used in pre-commit-config.yaml.",
        "type": "string"
      },
      "name": {
        "description": "name of the hook - shown during hook execution.",
        "type": "string"
      },
      "entry": {
        "description": "entry point - the executable to run. Can also contain arguments that will not be overridden such as `entry: autopep8 -i`.",
        "type": "string"
      },
      "language": {
        "$ref": "#/definitions/language",
        "description": "language of the hook - tells pre-commit how to install the hook."
      },
      "alias": {
        "description": "(optional) allows the hook to be referenced using an additional id.",
        "type": "string"
      },
      "files": {
        "description": "(optional) the pattern of files to run on.",
        "type": "string",
        "default": ""
      },
      "exclude": {
        "description": "(optional) exclude files that were matched by files.",
        "type": "string",
        "default": "^$"
      },
      "types": {
        "$ref": "#/definitions/file_types",
        "description": "(optional) list of file types to run on (AND).",
        "default": ["file"]
      },
      "types_or": {
        "$ref": "#/definitions/file_types",
        "description": "(optional) list of file types to run on (OR).",
        "default": []
      },
      "exclude_types": {
        "$ref": "#/definitions/file_types",
        "description": "(optional) pattern of files to exclude.",
        "default": []
      },
      "additional_dependencies": {
        "description": "(optional) a list of dependencies that will be installed in the environment where this hook gets run. One useful application is to install plugins for hooks such as eslint.",
        "type": "array",
        "items": {
          "type": "string"
        }
      },
      "always_run": {
        "description": "(optional) if true this hook will run even if there are no matching files.",
        "type": "boolean",
        "default": false
      },
      "fail_fast": {
        "description": "(optional) if true this hook will run even if there are no matching files.",
        "type": "boolean",
        "default": false
      },
      "verbose": {
        "description": "(optional) if true, forces the output of the hook to be printed even when the hook passes.",
        "type": "boolean",
        "default": false
      },
      "pass_filenames": {
        "description": "(optional) if false no filenames will be passed to the hook.",
        "type": "boolean",
        "default": true
      },
      "require_serial": {
        "description": "(optional) if true this hook will execute using a single process instead of in parallel.",
        "type": "boolean",
        "default": false
      },
      "description": {
        "description": "(optional) description of the hook. Used for metadata purposes only.",
        "type": "string",
        "default": ""
      },
      "language_version": {
        "description": "(optional) see Overriding language version at https://pre-commit.com/#overriding-language-version",
        "type": "string",
        "default": "default"
      },
      "log_file": {
        "description": "(optional) if present, the hook output will additionally be written to a file.",
        "type": "string"
      },
      "minimum_pre_commit_version": {
        "description": "(optional) allows one to indicate a minimum compatible pre-commit version.",
        "type": "string",
        "default": "0"
      },
      "args": {
        "description": "(optional) list of additional parameters to pass to the hook.",
        "type": "array",
        "items": {
          "type": "string"
        },
        "default": []
      },
      "stages": {
        "$ref": "#/definitions/stages",
        "description": "(optional) confines the hook to the commit, merge-commit, push, prepare-commit-msg, commit-msg, post-checkout, post-commit, post-merge, post-rewrite, or manual stage. See Confining hooks to run at certain stages in https://pre-commit.com/#confining-hooks-to-run-at-certain-stages"
      }
    }
  },
  "minItems": 1,
  "type": "array"
}
