diff options
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.py | 41 |
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): |