summaryrefslogtreecommitdiff
path: root/test/lib/ansible_test/_util/controller/sanity/pylint/plugins/string_format.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/lib/ansible_test/_util/controller/sanity/pylint/plugins/string_format.py')
-rw-r--r--test/lib/ansible_test/_util/controller/sanity/pylint/plugins/string_format.py41
1 files changed, 26 insertions, 15 deletions
diff --git a/test/lib/ansible_test/_util/controller/sanity/pylint/plugins/string_format.py b/test/lib/ansible_test/_util/controller/sanity/pylint/plugins/string_format.py
index 83c27734..934a9ae7 100644
--- a/test/lib/ansible_test/_util/controller/sanity/pylint/plugins/string_format.py
+++ b/test/lib/ansible_test/_util/controller/sanity/pylint/plugins/string_format.py
@@ -5,26 +5,23 @@
from __future__ import annotations
import astroid
-
-# support pylint 2.x and 3.x -- remove when supporting only 3.x
-try:
- from pylint.interfaces import IAstroidChecker
-except ImportError:
- class IAstroidChecker:
- """Backwards compatibility for 2.x / 3.x support."""
-
-try:
- from pylint.checkers.utils import check_messages
-except ImportError:
- from pylint.checkers.utils import only_required_for_messages as check_messages
-
+from pylint.interfaces import IAstroidChecker
from pylint.checkers import BaseChecker
from pylint.checkers import utils
+from pylint.checkers.utils import check_messages
+try:
+ from pylint.checkers.utils import parse_format_method_string
+except ImportError:
+ # noinspection PyUnresolvedReferences
+ from pylint.checkers.strings import parse_format_method_string
MSGS = {
- 'E9305': ("disabled", # kept for backwards compatibility with inline ignores, remove after 2.14 is EOL
+ 'E9305': ("Format string contains automatic field numbering "
+ "specification",
"ansible-format-automatic-specification",
- "disabled"),
+ "Used when a PEP 3101 format string contains automatic "
+ "field numbering (e.g. '{}').",
+ {'minversion': (2, 6)}),
'E9390': ("bytes object has no .format attribute",
"ansible-no-format-on-bytestring",
"Used when a bytestring was used as a PEP 3101 format string "
@@ -67,6 +64,20 @@ class AnsibleStringFormatChecker(BaseChecker):
if isinstance(strnode.value, bytes):
self.add_message('ansible-no-format-on-bytestring', node=node)
return
+ if not isinstance(strnode.value, str):
+ return
+
+ if node.starargs or node.kwargs:
+ return
+ try:
+ num_args = parse_format_method_string(strnode.value)[1]
+ except utils.IncompleteFormatString:
+ return
+
+ if num_args:
+ self.add_message('ansible-format-automatic-specification',
+ node=node)
+ return
def register(linter):