Comments (8)
Hey @robertpro! Well that seems more like a bug to me, for the rule to not treat opening and closing template tags as needing indentation.
The indent
rule is one that comes straight from https://github.com/motet-a/jinjalint, from which this project started. To be honest it’s not a rule I’m intending to use personally, so not the one I’d be the most concerned about making as useful as possible, but if you want to take a shot at fixing this I’d be happy to help.
I suspect the problem would be around here:
curlylint/curlylint/rules/indent/indent.py
Lines 198 to 211 in 77f01d5
The first step in fixing this will be to write unit tests for this rule – currently there are no tests at all so I’d be weary of making any changes that break it further.
from curlylint.
Sounds good @thibaudcolas I will take a look this weekend.
from curlylint.
I've arrived at curlylint looking at a Jinja2 linter, and this hit me out of the box. Curlylint doesn't seem to like my indentation no matter what I use. I can't turn off the indentation checker either.
from curlylint.
@jace 👋 how have you configured the linter? Due to the experimental nature of it all linting rules are "opt-in", so you’d need to not "turn on" the indentation check.
from curlylint.
@thibaudcolas I missed your last comment. My pre-commit config (using an outdated curlylint version since the hook was disabled):
repos:
- repo: https://github.com/thibaudcolas/curlylint
rev: v0.12.0
hooks:
- id: curlylint
And in pyproject.toml
:
[tool.curlylint]
include = '\.jinja2$'
exclude = '''
/(
\.eggs
| \.git
| \.hg
| \.mypy_cache
| \.tox
| \.venv
| _build
| __pycache__
| buck-out
| build
| dist
| node_modules
| funnel/assets
)/
'''
[tool.curlylint.rules]
# Indent 2 spaces
indent = 2
# All role attributes must be valid.
# See https://www.curlylint.org/docs/rules/aria_role.
aria_role = true
# The `alt` attribute must be present.
# See https://www.curlylint.org/docs/rules/image_alt.
image_alt = true
from curlylint.
Alright, in this case you should be able to turn off the indentation check by removing:
indent = 2
from curlylint.
Feeling like a necromancer, but my issue is related.
Indentation seems really broken atm.
Given the following template (included line numbers on purpose!)
1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4 {% block html_head %}
5 {% block html_meta %}
6 <meta charset="utf-8" />
7 <meta name="viewport" content="width=device-width, initial-scale=1" />
8 {% block html_meta_desc required %}
9 {#
10 <meta name="description" content="foo" />
11 <meta name="keywords" content="bar" />
12 #}
13 {% endblock html_meta_desc %}
14 {% endblock html_meta %}
15 <title>{% block page_title %}fnord{% endblock page_title %}</title>
16 {% endblock html_head %}
17 </head>
18 <body>
19 {% block html_body %}
20 <div id="main">
21 <strong>base.html</strong>: block "html-body"
22 </div>
23 {% endblock html_body %}
24 </body>
25 </html>
using this configuration
[tool.curlylint.rules]
# FIXME: ``true`` means: all roles must be valid. However, providing a list of
# roles allows limitation to the actual roles in use.
aria_role = true
# FIXME: ``true`` means: the ``lang`` attribute must be present. However,
# providing a list of accepted values allows finer control.
html_has_lang = true
# Require all ``<img>`` tags to have the ``alt`` attribute (even empty).
image_alt = true
# use 2 spaces for indentation.
# NOTE: This must be synchronized with ``.editorconfig``.
indent = 2
# allow users to zoom
meta_viewport = true
# don't use the ``autofocus`` attribute on any element
no_autofocus = true
# TODO: Needs investigation!
# Don't use positive values for ``tabindex`` attributes
tabindex_no_positive = true
and running through pre-commit
returns this:
base.html
2:2 Bad indentation, expected 0, got 2 indent
3:4 Bad indentation, expected 0, got 4 indent
4:6 Bad indentation, expected 2, got 6 indent
5:6 Bad indentation, expected 4, got 6 indent
6:6 Bad indentation, expected 4, got 6 indent
7:8 Bad indentation, expected 4, got 8 indent
8:8 Bad indentation, expected 6, got 8 indent
12:8 Bad indentation, expected 4, got 8 indent
13:6 Bad indentation, expected 2, got 6 indent
14:4 Bad indentation, expected 2, got 4 indent
15:4 Bad indentation, expected 0, got 4 indent
17:2 Bad indentation, expected 0, got 2 indent
18:4 Bad indentation, expected 0, got 4 indent
19:4 Bad indentation, expected 2, got 4 indent
20:6 Bad indentation, expected 4, got 6 indent
21:4 Bad indentation, expected 2, got 4 indent
22:4 Bad indentation, expected 0, got 4 indent
- line numbers not matching the input file (off by one)
- generally deviating from (what I would consider) best practices for HTML, e.g. recommending to not indent
<head>
or<body
within<html>
I understand that this is experimental, and I will just turn that option off. But it may provide additional context for anybody who might give this a shot!
Thank you for curlylint
! Some other options make it stand out in the field of HTML/templating linters. I use it besides djLint and they work well together.
from curlylint.
Ditto. Necromancer.
This fails with 9:0 Should be indented with tabs indent
{% block content %}
<div>
<div>
<div>
<div>
<div>
<form>
{% for error in form.errors %}
<div class="error">{{ error }}</div>
{% endfor %}
</form>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
This works:
{% block content %}
<div>
<div>
<div>
<div>
<form>
{% for error in form.errors %}
<div class="error">{{ error }}</div>
{% endfor %}
</form>
</div>
</div>
</div>
</div>
{% endblock %}
The difference is the second sample has one less level of <div>
tags.
Very strange error.
from curlylint.
Related Issues (20)
- When using the curlylint linter in Django templates it generates a false positive parse error HOT 1
- Ability to do simple checks on template tag content HOT 3
- `pip install curlylint` does not work due to incompatability with click 8.1.0 HOT 1
- Support Alpine.js syntax HOT 1
- Parsing fails for {% comment %} including number within HTML tag
- parse error expectation wrong HOT 1
- TypeError: can only concatenate str (not "Parser") to str HOT 1
- Parser fails on comment containing HTML tag
- Invalid test usage in Jinja2 isn't caught by linter
- Crash when closing HTML tags inside Jinja2 if statements HOT 2
- Action Required: Fix Renovate Configuration
- Tests from sdist fail HOT 3
- Stumbles over… I don't know what ;) HOT 3
- image_alt rule fails to find missing alt tag inside django block HOT 1
- invalid parse error HOT 1
- Make it possible to skip/ignore rules/linting on specific lines HOT 5
- Support for self closing tags (HTML / XML) HOT 4
- Handling <!doctype html> HOT 1
- Exclude folders/files from linting HOT 1
- Dependency Dashboard
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from curlylint.