From 17fbcfe68b9cca0427240241c0692faa7654fb39 Mon Sep 17 00:00:00 2001 From: Val Lorentz Date: Sat, 8 Jul 2023 14:25:48 +0200 Subject: [PATCH] Avoid `consider-using-f-string` on modulos with brackets in template (#8720) Brackets can be inconvenient in f-string expressions. --- doc/whatsnew/fragments/8720.bugfix | 3 + .../refactoring/recommendation_checker.py | 4 ++ .../c/consider/consider_using_f_string.py | 1 + .../c/consider/consider_using_f_string.txt | 60 +++++++++---------- .../r/regression_02/regression_8109.py | 2 +- .../r/regression_02/regression_8109.txt | 1 - 6 files changed, 39 insertions(+), 32 deletions(-) create mode 100644 doc/whatsnew/fragments/8720.bugfix delete mode 100644 tests/functional/r/regression_02/regression_8109.txt diff --git a/doc/whatsnew/fragments/8720.bugfix b/doc/whatsnew/fragments/8720.bugfix new file mode 100644 index 0000000000..2e024eed15 --- /dev/null +++ b/doc/whatsnew/fragments/8720.bugfix @@ -0,0 +1,3 @@ +Avoid ``consider-using-f-string`` on modulos with brackets in template. + +Closes #8720. diff --git a/pylint/checkers/refactoring/recommendation_checker.py b/pylint/checkers/refactoring/recommendation_checker.py index 38d7592143..399584baa8 100644 --- a/pylint/checkers/refactoring/recommendation_checker.py +++ b/pylint/checkers/refactoring/recommendation_checker.py @@ -418,6 +418,10 @@ def _detect_replacable_format_call(self, node: nodes.Const) -> None: ): return + # Brackets can be inconvenient in f-string expressions + if "{" in node.parent.left.value or "}" in node.parent.left.value: + return + inferred_right = utils.safe_infer(node.parent.right) # If dicts or lists of length > 1 are used diff --git a/tests/functional/c/consider/consider_using_f_string.py b/tests/functional/c/consider/consider_using_f_string.py index e961c44f70..adeed270d1 100644 --- a/tests/functional/c/consider/consider_using_f_string.py +++ b/tests/functional/c/consider/consider_using_f_string.py @@ -39,6 +39,7 @@ def print_good(): print("{}".format("\n".join(i for i in "string"))) print("%s" % "\n") print("%s" % "\n".join(i for i in "string")) + print("{%s}%s" % (PARAM_1, PARAM_2)) def print_bad(): diff --git a/tests/functional/c/consider/consider_using_f_string.txt b/tests/functional/c/consider/consider_using_f_string.txt index 1d68e947be..f03fcadf6a 100644 --- a/tests/functional/c/consider/consider_using_f_string.txt +++ b/tests/functional/c/consider/consider_using_f_string.txt @@ -1,30 +1,30 @@ -consider-using-f-string:45:10:45:21:print_bad:Formatting a regular string which could be a f-string:UNDEFINED -consider-using-f-string:46:10:46:21:print_bad:Formatting a regular string which could be a f-string:UNDEFINED -consider-using-f-string:47:10:47:28:print_bad:Formatting a regular string which could be a f-string:UNDEFINED -consider-using-f-string:48:10:48:17:print_bad:Formatting a regular string which could be a f-string:UNDEFINED -consider-using-f-string:49:10:49:26:print_bad:Formatting a regular string which could be a f-string:UNDEFINED -consider-using-f-string:50:10:50:21:print_bad:Formatting a regular string which could be a f-string:UNDEFINED -consider-using-f-string:51:10:51:21:print_bad:Formatting a regular string which could be a f-string:UNDEFINED -consider-using-f-string:52:10:52:21:print_bad:Formatting a regular string which could be a f-string:UNDEFINED -consider-using-f-string:53:10:53:24:print_bad:Formatting a regular string which could be a f-string:UNDEFINED -consider-using-f-string:54:10:54:21:print_bad:Formatting a regular string which could be a f-string:UNDEFINED -consider-using-f-string:80:4:80:15:statement_bad:Formatting a regular string which could be a f-string:UNDEFINED -consider-using-f-string:81:4:81:15:statement_bad:Formatting a regular string which could be a f-string:UNDEFINED -consider-using-f-string:82:4:82:22:statement_bad:Formatting a regular string which could be a f-string:UNDEFINED -consider-using-f-string:83:4:83:11:statement_bad:Formatting a regular string which could be a f-string:UNDEFINED -consider-using-f-string:84:4:84:20:statement_bad:Formatting a regular string which could be a f-string:UNDEFINED -consider-using-f-string:85:4:85:15:statement_bad:Formatting a regular string which could be a f-string:UNDEFINED -consider-using-f-string:86:4:86:15:statement_bad:Formatting a regular string which could be a f-string:UNDEFINED -consider-using-f-string:87:4:87:15:statement_bad:Formatting a regular string which could be a f-string:UNDEFINED -consider-using-f-string:88:4:88:18:statement_bad:Formatting a regular string which could be a f-string:UNDEFINED -consider-using-f-string:89:4:89:15:statement_bad:Formatting a regular string which could be a f-string:UNDEFINED -consider-using-f-string:112:8:112:19:assignment_bad:Formatting a regular string which could be a f-string:UNDEFINED -consider-using-f-string:113:8:113:19:assignment_bad:Formatting a regular string which could be a f-string:UNDEFINED -consider-using-f-string:114:8:114:26:assignment_bad:Formatting a regular string which could be a f-string:UNDEFINED -consider-using-f-string:115:8:115:15:assignment_bad:Formatting a regular string which could be a f-string:UNDEFINED -consider-using-f-string:116:8:116:24:assignment_bad:Formatting a regular string which could be a f-string:UNDEFINED -consider-using-f-string:117:8:117:19:assignment_bad:Formatting a regular string which could be a f-string:UNDEFINED -consider-using-f-string:118:8:118:19:assignment_bad:Formatting a regular string which could be a f-string:UNDEFINED -consider-using-f-string:119:8:119:19:assignment_bad:Formatting a regular string which could be a f-string:UNDEFINED -consider-using-f-string:120:8:120:22:assignment_bad:Formatting a regular string which could be a f-string:UNDEFINED -consider-using-f-string:121:8:121:19:assignment_bad:Formatting a regular string which could be a f-string:UNDEFINED +consider-using-f-string:46:10:46:21:print_bad:Formatting a regular string which could be an f-string:UNDEFINED +consider-using-f-string:47:10:47:21:print_bad:Formatting a regular string which could be an f-string:UNDEFINED +consider-using-f-string:48:10:48:28:print_bad:Formatting a regular string which could be an f-string:UNDEFINED +consider-using-f-string:49:10:49:17:print_bad:Formatting a regular string which could be an f-string:UNDEFINED +consider-using-f-string:50:10:50:26:print_bad:Formatting a regular string which could be an f-string:UNDEFINED +consider-using-f-string:51:10:51:21:print_bad:Formatting a regular string which could be an f-string:UNDEFINED +consider-using-f-string:52:10:52:21:print_bad:Formatting a regular string which could be an f-string:UNDEFINED +consider-using-f-string:53:10:53:21:print_bad:Formatting a regular string which could be an f-string:UNDEFINED +consider-using-f-string:54:10:54:24:print_bad:Formatting a regular string which could be an f-string:UNDEFINED +consider-using-f-string:55:10:55:21:print_bad:Formatting a regular string which could be an f-string:UNDEFINED +consider-using-f-string:81:4:81:15:statement_bad:Formatting a regular string which could be an f-string:UNDEFINED +consider-using-f-string:82:4:82:15:statement_bad:Formatting a regular string which could be an f-string:UNDEFINED +consider-using-f-string:83:4:83:22:statement_bad:Formatting a regular string which could be an f-string:UNDEFINED +consider-using-f-string:84:4:84:11:statement_bad:Formatting a regular string which could be an f-string:UNDEFINED +consider-using-f-string:85:4:85:20:statement_bad:Formatting a regular string which could be an f-string:UNDEFINED +consider-using-f-string:86:4:86:15:statement_bad:Formatting a regular string which could be an f-string:UNDEFINED +consider-using-f-string:87:4:87:15:statement_bad:Formatting a regular string which could be an f-string:UNDEFINED +consider-using-f-string:88:4:88:15:statement_bad:Formatting a regular string which could be an f-string:UNDEFINED +consider-using-f-string:89:4:89:18:statement_bad:Formatting a regular string which could be an f-string:UNDEFINED +consider-using-f-string:90:4:90:15:statement_bad:Formatting a regular string which could be an f-string:UNDEFINED +consider-using-f-string:113:8:113:19:assignment_bad:Formatting a regular string which could be an f-string:UNDEFINED +consider-using-f-string:114:8:114:19:assignment_bad:Formatting a regular string which could be an f-string:UNDEFINED +consider-using-f-string:115:8:115:26:assignment_bad:Formatting a regular string which could be an f-string:UNDEFINED +consider-using-f-string:116:8:116:15:assignment_bad:Formatting a regular string which could be an f-string:UNDEFINED +consider-using-f-string:117:8:117:24:assignment_bad:Formatting a regular string which could be an f-string:UNDEFINED +consider-using-f-string:118:8:118:19:assignment_bad:Formatting a regular string which could be an f-string:UNDEFINED +consider-using-f-string:119:8:119:19:assignment_bad:Formatting a regular string which could be an f-string:UNDEFINED +consider-using-f-string:120:8:120:19:assignment_bad:Formatting a regular string which could be an f-string:UNDEFINED +consider-using-f-string:121:8:121:22:assignment_bad:Formatting a regular string which could be an f-string:UNDEFINED +consider-using-f-string:122:8:122:19:assignment_bad:Formatting a regular string which could be an f-string:UNDEFINED diff --git a/tests/functional/r/regression_02/regression_8109.py b/tests/functional/r/regression_02/regression_8109.py index 69af0356a0..d0c601d4d9 100644 --- a/tests/functional/r/regression_02/regression_8109.py +++ b/tests/functional/r/regression_02/regression_8109.py @@ -11,5 +11,5 @@ class Number: round: int = 2 def __str__(self): - number_format = "{:,.%sf}" % self.round # [consider-using-f-string] + number_format = "{:,.%sf}" % self.round return number_format.format(self.amount).rstrip("0").rstrip(".") diff --git a/tests/functional/r/regression_02/regression_8109.txt b/tests/functional/r/regression_02/regression_8109.txt deleted file mode 100644 index 161925b7dc..0000000000 --- a/tests/functional/r/regression_02/regression_8109.txt +++ /dev/null @@ -1 +0,0 @@ -consider-using-f-string:14:24:14:34:Number.__str__:Formatting a regular string which could be a f-string:UNDEFINED