A linter for Jinja-like templates. Forked from jinjalint
Project description
curlylint
A prototype linter which checks the indentation and the correctness of Jinja-like/HTML templates. Can fix issues.
It works with Django’s templates too, it should work with Twig and similar template languages. It should work fine with any kind of HTML 4 and 5, however XHTML is not supported.
This linter parses both HTML and Jinja tags and will report mismatched tags and indentation errors:
<div>
{% if something %}
</div>
{% endif %}
<div>
<span>
</div>
</span>
{% if something %}
<div>not indented properly</div>
{% endif %}
{% if something %}<a href="somewhere"
>{% endif %}
<p>something</p>
{% if not something %}</a
>{% endif %}
Usage
You need Python 3. Curlylint doesn’t work with Python 2. Install it with
pip install curlylint
(or pip3 install curlylint
depending on how pip
is
called on your system), then run it with:
curlylint template-directory/
…or:
curlylint some-file.html some-other-file.html
This is a work in progress. Feel free to contribute :upside_down_face:
CLI flags
--verbose
Turns on verbose mode. This makes it easier to troubleshoot what configuration is used, and what files are being linted.
curlylint --verbose template-directory/
--parse-only
Don’t lint, check for syntax errors and exit.
curlylint --parse-only template-directory/
Configuration
Curlylint supports defining a config file with the flag --config
. Here is an example config file with the available options:
# Specify additional Jinja elements which can wrap HTML here. You
# don't need to specify simple elements which can't wrap anything like
# {% extends %} or {% include %}.
# Default: [].
jinja_custom_elements_names = [
('cache', 'endcache'),
('captureas', 'endcaptureas'),
# ('for', 'else', 'empty', 'endfor'),
]
# How many spaces to use when checking indentation.
# Default: 4
indent_size = 4
This config file can then be used with:
curlylint --config example_config.py template-directory/
Usage with pre-commit git hooks framework
Add to your .pre-commit-config.yaml
:
- repo: https://github.com/thibaudcolas/curlylint
rev: "" # select a tag / sha to point at
hooks:
- id: curlylint
Make sure to fill in the rev
with a valid revision.
Note: by default this configuration will only match .jinja
and .jinja2
files. To match by regex pattern instead, override types
and files
as
follows:
- id: curlylint
types: [file] # restore the default `types` matching
files: \.(html|sls)$
Hacking
Curlylint is powered by Parsy. Parsy is an extremely powerful
library and curlylint’s parser relies heavily on it. You have to read
Parsy’s documentation in order to understand what’s going on in
parse.py
.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.