From ad8bd4267b82a874520badee12c87ddaee93f5d6 Mon Sep 17 00:00:00 2001 From: Carl Buchmann Date: Fri, 10 Jun 2022 15:48:52 -0400 Subject: [PATCH 1/2] DOC(j2lint): Fix spelling delimeter -> delimiter --- README.md | 10 +++++----- j2lint/cli.py | 2 +- j2lint/linter/indenter/node.py | 14 +++++++------- j2lint/linter/indenter/statement.py | 4 ++-- j2lint/rules/JinjaStatementDelimeterRule.py | 12 ++++++------ j2lint/rules/JinjaStatementHasSpacesRule.py | 4 ++-- j2lint/rules/JinjaTemplateIndentationRule.py | 2 +- j2lint/utils.py | 6 +++--- 8 files changed, 27 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 2f8f03b..db208ca 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Syntax and code style issues detected by Jinja2 Linter are: - To close a control, end tag must have same indentation level - Indentation are 4 spaces and NOT tabulation 5. S7 Jinja statements should be on separate lines -6. S8 Jinja statements should not have {%- or {%+ or -%} as delimeters +6. S8 Jinja statements should not have {%- or {%+ or -%} as delimiters 7. VAR-1 All variables shall use lower case 8. VAR-2 If variable is multi-words, underscore _ shall be used as a separator @@ -109,7 +109,7 @@ j2lint --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-delimeter, jinja-variable-lower-case, jinja-variable-format. +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. ```bash @@ -122,13 +122,13 @@ j2lint --ignore {# j2lint: disable=S8} # OR -{# j2lint: disable=jinja-delimeter #} +{# j2lint: disable=jinja-delimiter #} ``` 4. Disabling multiple rules ```jinja2 -{# j2lint: disable=jinja-delimeter j2lint: disable=S1 #} +{# j2lint: disable=jinja-delimiter j2lint: disable=S1 #} ``` ### Adding custom rules @@ -162,7 +162,7 @@ j2lint --stdin - repo: https://github.com/aristanetworks/j2lint.git rev: hooks: - - id: j2lint + - id: j2lint ``` 2. Run pre-commit -> ```pre-commit run --all-files ``` diff --git a/j2lint/cli.py b/j2lint/cli.py index 2c70453..333c1b2 100644 --- a/j2lint/cli.py +++ b/j2lint/cli.py @@ -22,7 +22,7 @@ 'jinja-statements-indentation', 'jinja-statements-no-tabs', 'single-statement-per-line', - 'jinja-statements-delimeter', + 'jinja-statements-delimiter', 'jinja-variable-lower-case', 'jinja-variable-format', 'S0', 'S1', 'S2', 'S3', 'S4', diff --git a/j2lint/linter/indenter/node.py b/j2lint/linter/indenter/node.py index 59d02f4..9993312 100644 --- a/j2lint/linter/indenter/node.py +++ b/j2lint/linter/indenter/node.py @@ -13,10 +13,10 @@ INDENT_SHIFT = 4 DEFAULT_WHITESPACES = 1 BLOCK_START_INDENT = 0 -JINJA_START_DELIMETERS = ['{%-', '{%+'] +JINJA_START_DELIMITERS = ['{%-', '{%+'] jinja_node_stack = [] -jinja_delimeter_stack = [] +jinja_delimiter_stack = [] class Node: @@ -62,8 +62,8 @@ def create_indentation_error(self, node, message): """ return (node.statement.start_line_no, delimit_jinja_statement(node.statement.line, - node.statement.start_delimeter, - node.statement.end_delimeter), + node.statement.start_delimiter, + node.statement.end_delimiter), message) def check_indent_level(self, result, node): @@ -74,14 +74,14 @@ def check_indent_level(self, result, node): node (Node): Node object for which to check the level is correct """ actual = node.statement.begin - if len(jinja_node_stack) and jinja_node_stack[0].statement.start_delimeter in JINJA_START_DELIMETERS: + if len(jinja_node_stack) and jinja_node_stack[0].statement.start_delimiter in JINJA_START_DELIMITERS: BLOCK_START_INDENT = 1 - elif node.expected_indent == 0 and node.statement.start_delimeter in JINJA_START_DELIMETERS: + elif node.expected_indent == 0 and node.statement.start_delimiter in JINJA_START_DELIMITERS: BLOCK_START_INDENT = 1 else: BLOCK_START_INDENT = 0 - if node.statement.start_delimeter in JINJA_START_DELIMETERS: + if node.statement.start_delimiter in JINJA_START_DELIMITERS: expected = node.expected_indent + BLOCK_START_INDENT else: expected = node.expected_indent + DEFAULT_WHITESPACES + BLOCK_START_INDENT diff --git a/j2lint/linter/indenter/statement.py b/j2lint/linter/indenter/statement.py index ac6702c..ebfacf4 100644 --- a/j2lint/linter/indenter/statement.py +++ b/j2lint/linter/indenter/statement.py @@ -21,5 +21,5 @@ def __init__(self, line): self.words = line[0].split() self.start_line_no = line[1] self.end_line_no = line[2] - self.start_delimeter = line[3] - self.end_delimeter = line[4] + self.start_delimiter = line[3] + self.end_delimiter = line[4] diff --git a/j2lint/rules/JinjaStatementDelimeterRule.py b/j2lint/rules/JinjaStatementDelimeterRule.py index 51cbbf1..52a0ebc 100644 --- a/j2lint/rules/JinjaStatementDelimeterRule.py +++ b/j2lint/rules/JinjaStatementDelimeterRule.py @@ -1,4 +1,4 @@ -"""JinjaStatementDelimeterRule.py - Rule class to check if jinja delimeters +"""JinjaStatementDelimiterRule.py - Rule class to check if jinja delimiters are wrong. """ import re @@ -7,16 +7,16 @@ from j2lint.utils import get_jinja_statements -class JinjaStatementDelimeterRule(Rule): - """Rule class to check if jinja delimeters are wrong. +class JinjaStatementDelimiterRule(Rule): + """Rule class to check if jinja delimiters are wrong. """ id = 'S6' - short_description = 'jinja-statements-delimeter' - description = "Jinja statements should not have {%- or {%+ or -%} as delimeters" + short_description = 'jinja-statements-delimiter' + description = "Jinja statements should not have {%- or {%+ or -%} as delimiters" severity = 'LOW' def check(self, file, line): - """Checks if the given line matches the wrong delimeters + """Checks if the given line matches the wrong delimiters Args: file (string): file path diff --git a/j2lint/rules/JinjaStatementHasSpacesRule.py b/j2lint/rules/JinjaStatementHasSpacesRule.py index cd88ef7..41ec821 100644 --- a/j2lint/rules/JinjaStatementHasSpacesRule.py +++ b/j2lint/rules/JinjaStatementHasSpacesRule.py @@ -1,6 +1,6 @@ """JinjaStatementHasSpacesRule.py - Rule class to check if jinja statement has atleast a single space surrounding the - delimeter. + delimiter. """ import re from j2lint.linter.rule import Rule @@ -8,7 +8,7 @@ class JinjaStatementHasSpacesRule(Rule): """Rule class to check if jinja statement has atleast a single space - surrounding the delimeter. + surrounding the delimiter. """ id = 'S4' short_description = 'jinja-statements-single-space' diff --git a/j2lint/rules/JinjaTemplateIndentationRule.py b/j2lint/rules/JinjaTemplateIndentationRule.py index 1a7e1e5..844eeea 100644 --- a/j2lint/rules/JinjaTemplateIndentationRule.py +++ b/j2lint/rules/JinjaTemplateIndentationRule.py @@ -33,7 +33,7 @@ def checktext(self, file, text): with open(file['path']) as template: text = template.read() - # Collect only Jinja Statements within delimeters {% and %} and ignore the other statements + # Collect only Jinja Statements within delimiters {% and %} and ignore the other statements lines = get_jinja_statements(text, indentation=True) # Build a tree out of Jinja Statements to get the expected indentation level for each statement diff --git a/j2lint/utils.py b/j2lint/utils.py index c3806bf..b105bfc 100644 --- a/j2lint/utils.py +++ b/j2lint/utils.py @@ -131,7 +131,7 @@ def get_tuple(l, item): def get_jinja_statements(text, indentation=False): - """Gets jinja statements with {%[-/+] [-]%} delimeters + """Gets jinja statements with {%[-/+] [-]%} delimiters Args: text (string): multiline text to search the jinja statements in @@ -158,13 +158,13 @@ def get_jinja_statements(text, indentation=False): def delimit_jinja_statement(line, start="{%", end="%}"): - """Adds end delimeters for a jinja statement + """Adds end delimiters for a jinja statement Args: line (string): text line Returns: - [string]: jinja statement with jinja start and end delimeters + [string]: jinja statement with jinja start and end delimiters """ return start + line + end From e4d4e5fe0dae0ee594076226f77957c0c80ae167 Mon Sep 17 00:00:00 2001 From: gmuloc Date: Mon, 13 Jun 2022 10:02:57 +0200 Subject: [PATCH 2/2] Refactor: keep 'delimerter' support for backward compatibility * rename the rule file as j2lint depends on it to load the plugin --- .gitignore | 1 + j2lint/linter/collection.py | 20 +++++++++++++++++-- ...Rule.py => JinjaStatementDelimiterRule.py} | 5 +++++ j2lint/utils.py | 4 ++++ 4 files changed, 28 insertions(+), 2 deletions(-) rename j2lint/rules/{JinjaStatementDelimeterRule.py => JinjaStatementDelimiterRule.py} (78%) diff --git a/.gitignore b/.gitignore index 4edf677..982886b 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ __pycache__ build dist *.egg-info +**/.python-version diff --git a/j2lint/linter/collection.py b/j2lint/linter/collection.py index 8bd0030..51f1cef 100644 --- a/j2lint/linter/collection.py +++ b/j2lint/linter/collection.py @@ -89,10 +89,26 @@ def create_from_directory(clazz, rules_dir, ignore_rules, warn_rules): """ result = clazz() result.rules = load_plugins(os.path.expanduser(rules_dir)) + # FIXME: once the first version of j2lint is tagged and publish, + # remove the deprecated_short_description for rule in result.rules: - if (rule.short_description in ignore_rules) or (rule.id in ignore_rules): + if ( + rule.short_description in ignore_rules + or rule.id in ignore_rules + or ( + hasattr(rule, "deprecated_short_description") + and rule.deprecated_short_description in ignore_rules + ) + ): rule.ignore = True - if (rule.short_description in warn_rules) or (rule.id in warn_rules): + if ( + rule.short_description in warn_rules + or rule.id in warn_rules + or ( + hasattr(rule, "deprecated_short_description") + and rule.deprecated_short_description in warn_rules + ) + ): rule.warn.append(rule) logger.info( "Created collection from rules directory {}".format(rules_dir)) diff --git a/j2lint/rules/JinjaStatementDelimeterRule.py b/j2lint/rules/JinjaStatementDelimiterRule.py similarity index 78% rename from j2lint/rules/JinjaStatementDelimeterRule.py rename to j2lint/rules/JinjaStatementDelimiterRule.py index 52a0ebc..a550285 100644 --- a/j2lint/rules/JinjaStatementDelimeterRule.py +++ b/j2lint/rules/JinjaStatementDelimiterRule.py @@ -11,7 +11,12 @@ class JinjaStatementDelimiterRule(Rule): """Rule class to check if jinja delimiters are wrong. """ id = 'S6' + # FIXME - for now supporting both syntax for the short_description to be backward + # compatible. + # The doc and READMEs are fixed to show only the new syntax. + # This will be removed short_description = 'jinja-statements-delimiter' + deprecated_short_description = 'jinja-statements-delimeter' description = "Jinja statements should not have {%- or {%+ or -%} as delimiters" severity = 'LOW' diff --git a/j2lint/utils.py b/j2lint/utils.py index b105bfc..9ca89d8 100644 --- a/j2lint/utils.py +++ b/j2lint/utils.py @@ -219,6 +219,10 @@ def is_rule_disabled(text, rule): for line in regex.finditer(comment): if rule.short_description == line.group(1): return True + # FIXME - remove next release + if (hasattr(rule, "deprecated_short_description") and + rule.deprecated_short_description == line.group(1)): + return True if rule.id == line.group(1): return True return False