summaryrefslogtreecommitdiffstats
path: root/src/ansiblelint/rules/no_tabs.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/ansiblelint/rules/no_tabs.py')
-rw-r--r--src/ansiblelint/rules/no_tabs.py35
1 files changed, 28 insertions, 7 deletions
diff --git a/src/ansiblelint/rules/no_tabs.py b/src/ansiblelint/rules/no_tabs.py
index c53f1bb..2614a1a 100644
--- a/src/ansiblelint/rules/no_tabs.py
+++ b/src/ansiblelint/rules/no_tabs.py
@@ -1,4 +1,5 @@
"""Implementation of no-tabs rule."""
+
# Copyright (c) 2016, Will Thames and contributors
# Copyright (c) 2018, Ansible Project
from __future__ import annotations
@@ -7,6 +8,7 @@ import sys
from typing import TYPE_CHECKING
from ansiblelint.rules import AnsibleLintRule
+from ansiblelint.text import has_jinja
from ansiblelint.yaml_utils import nested_items_path
if TYPE_CHECKING:
@@ -27,6 +29,10 @@ class NoTabsRule(AnsibleLintRule):
("lineinfile", "insertbefore"),
("lineinfile", "regexp"),
("lineinfile", "line"),
+ ("win_lineinfile", "insertafter"),
+ ("win_lineinfile", "insertbefore"),
+ ("win_lineinfile", "regexp"),
+ ("win_lineinfile", "line"),
("ansible.builtin.lineinfile", "insertafter"),
("ansible.builtin.lineinfile", "insertbefore"),
("ansible.builtin.lineinfile", "regexp"),
@@ -35,6 +41,10 @@ class NoTabsRule(AnsibleLintRule):
("ansible.legacy.lineinfile", "insertbefore"),
("ansible.legacy.lineinfile", "regexp"),
("ansible.legacy.lineinfile", "line"),
+ ("community.windows.win_lineinfile", "insertafter"),
+ ("community.windows.win_lineinfile", "insertbefore"),
+ ("community.windows.win_lineinfile", "regexp"),
+ ("community.windows.win_lineinfile", "line"),
]
def matchtask(
@@ -44,17 +54,22 @@ class NoTabsRule(AnsibleLintRule):
) -> bool | str:
action = task["action"]["__ansible_module__"]
for k, v, _ in nested_items_path(task):
- if isinstance(k, str) and "\t" in k:
+ if isinstance(k, str) and "\t" in k and not has_jinja(k):
return True
- if isinstance(v, str) and "\t" in v and (action, k) not in self.allow_list:
+ if (
+ isinstance(v, str)
+ and "\t" in v
+ and (action, k) not in self.allow_list
+ and not has_jinja(v)
+ ):
return True
return False
# testing code to be loaded only with pytest or when executed the rule file
if "pytest" in sys.modules:
- from ansiblelint.rules import RulesCollection # pylint: disable=ungrouped-imports
- from ansiblelint.runner import Runner # pylint: disable=ungrouped-imports
+ from ansiblelint.rules import RulesCollection
+ from ansiblelint.runner import Runner
def test_no_tabs_rule(default_rules_collection: RulesCollection) -> None:
"""Test rule matches."""
@@ -62,6 +77,12 @@ if "pytest" in sys.modules:
"examples/playbooks/rule-no-tabs.yml",
rules=default_rules_collection,
).run()
- assert results[0].lineno == 10
- assert results[0].message == NoTabsRule().shortdesc
- assert len(results) == 2
+ expected_results = [
+ (10, NoTabsRule().shortdesc),
+ (13, NoTabsRule().shortdesc),
+ ]
+ for i, expected in enumerate(expected_results):
+ assert len(results) >= i + 1
+ assert results[i].lineno == expected[0]
+ assert results[i].message == expected[1]
+ assert len(results) == len(expected), results