Skip to content

jacksmith15/jsonschema-lint

Repository files navigation

jsonschema-lint

Linter for JSON Schema instances.

Installation

Install with pip:

pip install jsonschema-lint[yaml]

ℹ️ Leave out the [yaml] suffix if you don't need YAML support.

Usage

The linter is invoked on the command line:

$ jsonschema-lint

Selecting instances

By default, the linter will attempt to lint every file matching extension under the currect directory. This means every .json file, plus every .yaml/.yml file if PyYAML is installed. A file will only be linted if a matching schema can be detected (see below).

You can override this behaviour by passing arguments to the linter, e.g.

$ jsonschema-lint **/*.avsc

Schema resolution

There are three ways schemas can be selected for a given instance. In order of priority:

  1. If provided, the --schema option will be used to validate all target instances.
  2. A matching rule in a .jsonschema-lint file, in the instance directory or its parents (see below).
  3. If the --schema-store flag is provided, then matching rules from Schema Store will be used.

.jsonschema-lint files

.jsonschema-lint files follow similar logic to .gitignore and Github CODEOWNERS files, in that they apply to all files under their directory tree.

Each line in a .jsonschema-lint file is a rule, matching a filepath pattern to a particular schema. For example:

**/.circleci/config.yml  https://json.schemastore.org/circleciconfig.json  yaml

There are three parts to each rule, separated by whitespace. These are:

  • the pattern/glob, in this case matching any files named config.yml in a directory named .circleci
  • the location of the schema. This can be a remote URL, or a path on the local filesystem. If this is a relative path, it is resolved relative to the .jsonschema-lint file.
  • (optional) the expected file format of any instances. If this is omitted, the linter will attempt to detect the correct type from the file extension. If it cannot be detected, both will be attempted.

Development

Install dependencies:

pyenv shell 3.9.4  # Or other 3.9.x
pre-commit install  # Configure commit hooks
poetry install  # Install Python dependencies

Run tests:

poetry run inv verify

License

This project is distributed under the MIT license.

About

Linter for JSON Schema instances

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages