djLint/src/djlint/rules.yaml
2021-10-04 10:24:58 +02:00

136 lines
4 KiB
YAML

- rule:
name: T001
message: Variables should be wrapped in a single whitespace.
flags: re.DOTALL
exclude:
- handlebars
patterns:
# open
- '{{[^\s#/@^]+'
- '{%-[^\s]+'
- '{%[^\s|\-]+'
# handlebars
- '[^{]{#[^\s]+|^{#[^\s]+'
- '[^{]{\/[^\s]+|^{\/[^\s]+'
- '[^{]{\@[^\s]+|^{\@[^\s]+'
# close
- '[^(\s|^|\-)]+[}|%|#]}'
- '[^(\s|^)]+\-[}|%|#]}'
- \s{2,}[}|%|#]}
- '{[{|%|#]\s{2,}'
- rule:
name: T002
message: Double quotes should be used in tags.
flags: re.DOTALL
patterns:
- '{%.?extends\s+?[^\"]\w+'
- rule:
name: T003
message: 'Endblock should have name. Ex: {% endblock body %}.'
flags: re.DOTALL
patterns:
- '{%\s*?endblock\s*?%}'
- rule:
name: D004
message: (Django) Static urls should follow {% static path/to/file %} pattern.
flags: re.DOTALL
# this should be using the static path from django settings
patterns:
- <(?:link|img|script)\s[^\>]*?(?:href|src)=[\"\']/?static/?
- rule:
name: J004
message: (Jinja) Static urls should follow {{ url_for('static'..) }} pattern.
flags: re.DOTALL
# this should be using the static path from django settings
patterns:
- <(?:link|img|script)\s[^\>]*?(?:href|src)=[\"\']/?static/?
- rule:
name: H005
message: Html tag should have lang attribute.
flags: re.DOTALL|re.I
patterns:
- <html\s*(?:(?!lang).)*>
- rule:
name: H006
message: Img tag should have alt, height and width attributes.
flags: re.DOTALL|re.I
patterns:
- <img\s(?:(?!(?:height)=).)*/?>
- <img\s(?:(?!(?:width)=).)*/?>
- <img\s(?:(?!(?:alt)=).)*/?>
- rule:
name: H007
message: <!DOCTYPE ... > should be present before the html tag.
flags: re.DOTALL|re.I
patterns:
- ^<html
- rule:
name: H008
message: Attributes should be double quoted.
flags: re.DOTALL|re.I
patterns:
- (?:class|id|src|width|height|alt|style|lang|title)=\'[^\']*'
- rule:
name: H009
message: Tag names should be lowercase.
flags: re.DOTALL
patterns:
- (?<=<)(?:HTML|BODY|DIV|P|SPAN|TABLE|TR|TD|TH|THEAD|TBODY|CODE|UL|OL|LI|H1|H2|H3|H4|H5|H6)
- rule:
name: H010
message: Attribute names should be lowercase.
flags: re.DOTALL
patterns:
- <\w+[^\>]+?(?:CLASS|ID|SRC|WIDTH|HEIGHT|ALT|STYLE|LANG|TITLE)=
- rule:
name: H011
message: Attribute values should be quoted.
flags: re.DOTALL|re.I
patterns:
- "[^(?:\"|')]\\s+?(?:class|id|src|width|height|alt|style|lang|title|href|action|method)=[a-zA-Z]+"
- rule:
name: H012
message: There should be no spaces around attribute =.
flags: re.DOTALL
patterns:
- <(?:(?!\{[%|{|#])[^\n])*\s+=
- <(?:(?!\{[%|{|#])[^\n])*=\s
- rule:
name: H014
message: More than 2 blank lines.
flags: re.DOTALL
patterns:
- "[^\n]{,10}\n{3,}"
- rule:
name: H015
message: Follow h tags with a line break.
flags: re.DOTALL
patterns:
- </h\d?>(?:(?!(.+\r?\n){1,}).)*<[a-zA-Z]+\d?
- rule:
name: H016
message: Missing title tag in html.
flags: re.DOTALL|re.I
patterns:
- <html[^>]*?>(?:(?!<title>).)*</html>
- rule:
name: H017
message: Tag should be self closing.
flags: re.DOTALL|re.I
patterns:
- <(img|input|area|base|br|col[^(?:group)]|embed|hr|link|meta|param|source|track|wbr|command|keygen|menuitem|path)[^>]*?[^/]>
- <(img|input|area|base|br|col|embed|hr|link|meta|param|source|track|wbr|command|keygen|menuitem|path)>
- rule:
name: D018
message: (Django) Internal links should use the {% url ... %} pattern.
flags: re.DOTALL|re.I
patterns:
- <(?:a|div|span|input)\s+?[^>]*?(?:href|data-url)=[\"|'](?!https?://)[\w|/]+
- <form\s+?[^>]*?(?:action)=[\"|'](?!https?://)[\w|/]+
- rule:
name: J018
message: (Jinja) Internal links should use the {{ url_for() ... }} pattern.
flags: re.DOTALL|re.I
patterns:
- <(?:a|div|span|input)\s+?[^>]*?(?:href|data-url)=[\"|'](?!https?://)[\w|/]+
- <form\s+?[^>]*?(?:action)=[\"|'](?!https?://)[\w|/]+