From b2fd53e3a33a5f8631c4842c365c595b0c86b3b5 Mon Sep 17 00:00:00 2001
From: Pang Yu Shao
Date: Wed, 12 May 2021 16:13:03 +0800
Subject: [PATCH] Improved help text for ``consider-using-str-partition``
---
.../refactoring/recommendation_checker.py | 29 ++++++++++---
.../consider/consider_using_str_partition.txt | 42 +++++++++----------
2 files changed, 45 insertions(+), 26 deletions(-)
diff --git a/pylint/checkers/refactoring/recommendation_checker.py b/pylint/checkers/refactoring/recommendation_checker.py
index 5540986f2dd..af7993dc4ea 100644
--- a/pylint/checkers/refactoring/recommendation_checker.py
+++ b/pylint/checkers/refactoring/recommendation_checker.py
@@ -1,5 +1,6 @@
# Licensed under the GPL: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
# For details: https://github.com/PyCQA/pylint/blob/master/LICENSE
+import re
from typing import cast
import astroid
@@ -36,7 +37,7 @@ class RecommendationChecker(checkers.BaseChecker):
"method of the dictionary instead.",
),
"C0207": (
- "Consider using str.partition()",
+ "Consider using %s[%d] instead",
"consider-using-str-partition",
"Emitted when accessing only the first or last element of a str.split(sep). "
"The first and last element can be accessed by using str.partition(sep)[0] "
@@ -258,9 +259,21 @@ def visit_subscript(self, node: astroid.Subscript) -> None:
if isinstance(value, (astroid.UnaryOp, astroid.Const)):
const = utils.safe_infer(value)
const = cast(astroid.Const, const)
- if const.value in [-1, 0]:
- self.add_message("consider-using-str-partition", node=node)
-
+ p = re.compile(r"r*split")
+ if const.value == -1:
+ help_text = p.sub("rpartition", subscripted_object.as_string())
+ self.add_message(
+ "consider-using-str-partition",
+ node=node,
+ args=(help_text, -1),
+ )
+ elif const.value == 0:
+ help_text = p.sub("partition", subscripted_object.as_string())
+ self.add_message(
+ "consider-using-str-partition",
+ node=node,
+ args=(help_text, 0),
+ )
# Check if subscript is len(split) - 1
if (
isinstance(value, astroid.BinOp)
@@ -281,4 +294,10 @@ def visit_subscript(self, node: astroid.Subscript) -> None:
# Further check for argument within len(), and compare that to object being split
arg_within_len = value.left.args[0].name
if arg_within_len == node.value.name:
- self.add_message("consider-using-str-partition", node=node)
+ p = re.compile(r"r*split")
+ help_text = p.sub("rpartition", subscripted_object.as_string())
+ self.add_message(
+ "consider-using-str-partition",
+ node=node,
+ args=(help_text, -1),
+ )
diff --git a/tests/functional/c/consider/consider_using_str_partition.txt b/tests/functional/c/consider/consider_using_str_partition.txt
index ebc34c9f356..a6e3f4e39a7 100644
--- a/tests/functional/c/consider/consider_using_str_partition.txt
+++ b/tests/functional/c/consider/consider_using_str_partition.txt
@@ -1,21 +1,21 @@
-consider-using-str-partition:7:12::Consider using str.partition()
-consider-using-str-partition:8:11::Consider using str.partition()
-consider-using-str-partition:9:12::Consider using str.partition()
-consider-using-str-partition:10:11::Consider using str.partition()
-consider-using-str-partition:17:12::Consider using str.partition()
-consider-using-str-partition:18:11::Consider using str.partition()
-consider-using-str-partition:19:11::Consider using str.partition()
-consider-using-str-partition:22:12::Consider using str.partition()
-consider-using-str-partition:23:11::Consider using str.partition()
-consider-using-str-partition:24:11::Consider using str.partition()
-consider-using-str-partition:26:6::Consider using str.partition()
-consider-using-str-partition:26:17::Consider using str.partition()
-consider-using-str-partition:43:12::Consider using str.partition()
-consider-using-str-partition:44:11::Consider using str.partition()
-consider-using-str-partition:45:12::Consider using str.partition()
-consider-using-str-partition:46:11::Consider using str.partition()
-consider-using-str-partition:52:12::Consider using str.partition()
-consider-using-str-partition:53:11::Consider using str.partition()
-consider-using-str-partition:54:11::Consider using str.partition()
-consider-using-str-partition:58:12::Consider using str.partition()
-consider-using-str-partition:59:11::Consider using str.partition()
+consider-using-str-partition:7:12::Consider using SEQ.partition(',')[0] instead
+consider-using-str-partition:8:11::Consider using SEQ.rpartition(',')[-1] instead
+consider-using-str-partition:9:12::Consider using SEQ.partition(',')[0] instead
+consider-using-str-partition:10:11::Consider using SEQ.rpartition(',')[-1] instead
+consider-using-str-partition:17:12::Consider using SEQ.partition(',')[0] instead
+consider-using-str-partition:18:11::Consider using SEQ.rpartition(',')[-1] instead
+consider-using-str-partition:19:11::Consider using SEQ.rpartition(',')[-1] instead
+consider-using-str-partition:22:12::Consider using SEQ.partition(',')[0] instead
+consider-using-str-partition:23:11::Consider using SEQ.rpartition(',')[-1] instead
+consider-using-str-partition:24:11::Consider using SEQ.rpartition(',')[-1] instead
+consider-using-str-partition:26:6::Consider using SEQ.partition(',')[0] instead
+consider-using-str-partition:26:17::Consider using SEQ.rpartition(',')[-1] instead
+consider-using-str-partition:43:12::Consider using Foo.class_str.partition(',')[0] instead
+consider-using-str-partition:44:11::Consider using Foo.class_str.rpartition(',')[-1] instead
+consider-using-str-partition:45:12::Consider using Foo.class_str.partition(',')[0] instead
+consider-using-str-partition:46:11::Consider using Foo.class_str.rpartition(',')[-1] instead
+consider-using-str-partition:52:12::Consider using Foo.class_str.partition(',')[0] instead
+consider-using-str-partition:53:11::Consider using Foo.class_str.rpartition(',')[-1] instead
+consider-using-str-partition:54:11::Consider using Foo.class_str.rpartition(',')[-1] instead
+consider-using-str-partition:58:12::Consider using bar.get_string().partition(',')[0] instead
+consider-using-str-partition:59:11::Consider using bar.get_string().rpartition(',')[-1] instead