Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

j2lint

Package Overview
Dependencies
Maintainers
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

j2lint

Command-line utility that validates jinja2 syntax according to Arista's AVD style guide.

  • 1.1.0
  • PyPI
  • Socket score

Maintainers
3

GitHub license PyPI version fury.io PyPI pyversions PyPI status Maintenance

Jinja2-Linter

AVD Ecosystem - Jinja2 Linter

Project Goals

Build a Jinja2 linter that will provide the following capabilities:

  • Validate syntax according to AVD style guide.
  • Capability to run as part of a CI pipeline to enforce j2lint rules.
  • Develop an extension that works with VSCode and potentially other IDEs i.e PyCharm.

Syntax and code style issues

CodeShort DescriptionDescription
S0jinja-syntax-errorJinja2 syntax should be correct
S1single-space-decoratorA single space should be added between Jinja2 curly brackets and a variable's name
S2operator-enclosed-by-spacesWhen variables are used in combination with an operator, the operator shall be enclosed by space
S3jinja-statements-indentationNested jinja code block should follow next rules:
- All J2 statements must be enclosed by 1 space
- All J2 statements must be indented by 4 more spaces within jinja delimiter
- To close a control, end tag must have same indentation level
S4jinja-statements-single-spaceJinja statement should have at least a single space after '{%' and a single space before '%}'
S5jinja-statements-no-tabsIndentation should not use tabulation but 4 spaces
S6jinja-statements-delimiterJinja statements should not have {%- or {%+ or -%} as delimiters
S7single-statement-per-lineJinja statements should be on separate lines
V1jinja-variable-lower-caseAll variables should use lower case
V2jinja-variable-formatIf variable is multi-words, underscore _ should be used as a separator

Getting Started

Requirements

Python version 3.8+

Install with pip

To get started, you can use Python pip to install j2lint:

Install the latest stable version:

pip3 install j2lint

Install the latest development version:

pip3 install git+https://github.com/aristanetworks/j2lint.git

Running the linter

j2lint <path-to-directory-of-templates>

Running the linter on a specific file

j2lint <path-to-directory-of-templates>/template.j2

Listing linting rules

j2lint --list

Running the linter with verbose linter error output

j2lint <path-to-directory-of-templates> --verbose

Running the linter with logs enabled. Logs saved in jinja2-linter.log in the current directory

j2lint <path-to-directory-of-templates> --log

To enable debug logs, use both options:

j2lint <path-to-directory-of-templates> --log --debug

Running the linter with JSON format for linter error output

j2lint <path-to-directory-of-templates> --json

Ignoring rules

  1. The --ignore option can have one or more of these values: syntax-error, single-space-decorator, filter-enclosed-by-spaces, jinja-statement-single-space, jinja-statements-indentation, no-tabs, single-statement-per-line, jinja-delimiter, jinja-variable-lower-case, jinja-variable-format.

  2. If multiple rules are to be ignored, use the --ignore option along with rule descriptions separated by space.

    j2lint <path-to-directory-of-templates> --ignore <rule_description1> <rule_desc>
    

Note This runs the custom linting rules in addition to the default linting rules. When using the -i/--ignore or -w/--warn options, the arguments MUST either:

  • Be entered at the end of the CLI as in the example above
  • Be entered as the last options before the <path-to-directory-of-templates> with -- separator. e.g.
    j2lint --ignore <rule_description1> <rule_desc> -- <path-to-directory-of-templates>
    
  1. If one or more linting rules are to be ignored only for a specific jinja template file, add a Jinja comment at the top of the file. The rule can be disabled using the short description of the rule or the id of the rule.

    {# j2lint: disable=S6}
    
    # OR
    {# j2lint: disable=jinja-delimiter #}
    
  2. Disabling multiple rules

    {# j2lint: disable=jinja-delimiter j2lint: disable=S1 #}
    

Adding custom rules

  1. Create a new rules directory under j2lint folder.

  2. Add custom rule classes which are similar to classes in j2lint/rules directory: The file name of rules should be in snake_case and the class name should be the PascalCase version of the file name. For example:

    • File name: jinja_operator_has_spaces_rule.py
    • Class name: JinjaOperatorHasSpacesRule
  3. Run the jinja2 linter using --rules-dir option

    j2lint <path-to-directory-of-templates> --rules-dir <custom-rules-directory>
    

Note This runs the custom linting rules in addition to the default linting rules.

Running jinja2 linter help command

j2lint --help

Running jinja2 linter on STDIN template. This option can be used with VS Code.

j2lint --stdin

Using j2lint as a pre-commit-hook

  1. Add j2lint pre-commit hook inside your repository in .pre-commit-config.yaml.

    - repo: https://github.com/aristanetworks/j2lint.git
        rev: <release_tag/sha>
        hooks:
        - id: j2lint
    
  2. Run pre-commit -> pre-commit run --all-files

Note When using -i/--ignore or -w/--warn argument in pre-commit, use the following syntax

- repo: https://github.com/aristanetworks/j2lint.git
    rev: <release_tag/sha>
    hooks:
    - id: j2lint
    # Using -- to separate the end of ignore from the positional arguments
    # passed to j2lint
      args: [--ignore, S3, jinja-statements-single-space, --]

Acknowledgments

This project is based on salt-lint and jinjalint

Keywords

FAQs


Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc