Skip to content

Commit 797b050

Browse files
committed
Improved readability
1 parent c79d112 commit 797b050

File tree

3 files changed

+17
-10
lines changed

3 files changed

+17
-10
lines changed

pylint/checkers/refactoring/recommendation_checker.py

+4
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ def _check_consider_using_dict_items(self, node: astroid.For) -> None:
153153

154154
if not isinstance(subscript.value, (astroid.Name, astroid.Attribute)):
155155
continue
156+
156157
value = subscript.slice
157158
if isinstance(value, astroid.Index):
158159
value = value.value
@@ -186,14 +187,17 @@ def visit_comprehension(self, node: astroid.Comprehension) -> None:
186187
iterating_object_name = utils.get_iterating_dictionary_name(node)
187188
if iterating_object_name is None:
188189
return
190+
189191
children = list(node.parent.get_children())
190192
if node.ifs:
191193
children.extend(node.ifs)
192194
for child in children:
193195
for subscript in child.nodes_of_class(astroid.Subscript):
194196
subscript = cast(astroid.Subscript, subscript)
197+
195198
if not isinstance(subscript.value, (astroid.Name, astroid.Attribute)):
196199
continue
200+
197201
value = subscript.slice
198202
if isinstance(value, astroid.Index):
199203
value = value.value

pylint/checkers/utils.py

+12-9
Original file line numberDiff line numberDiff line change
@@ -1504,18 +1504,21 @@ def get_iterating_dictionary_name(
15041504
or a dictionary itself, this returns None.
15051505
"""
15061506
# Is it a proper keys call?
1507-
is_iterating_dict_keys = (
1507+
if (
15081508
isinstance(node.iter, astroid.Call)
15091509
and isinstance(node.iter.func, astroid.Attribute)
15101510
and node.iter.func.attrname == "keys"
1511-
and isinstance(safe_infer(node.iter.func), astroid.BoundMethod)
1512-
)
1513-
# Is it a proper dictionary?
1514-
is_iterating_dict = isinstance(
1515-
node.iter, (astroid.Name, astroid.Attribute)
1516-
) and isinstance(safe_infer(node.iter), astroid.Dict)
1511+
):
1512+
inferred = safe_infer(node.iter.func)
1513+
if not isinstance(inferred, astroid.BoundMethod):
1514+
return None
1515+
return node.iter.as_string().rpartition(".keys")[0]
15171516

1518-
if is_iterating_dict or is_iterating_dict_keys:
1519-
return node.iter.as_string().partition(".keys")[0]
1517+
# Is it a dictionary?
1518+
if isinstance(node.iter, (astroid.Name, astroid.Attribute)):
1519+
inferred = safe_infer(node.iter)
1520+
if not isinstance(inferred, astroid.Dict):
1521+
return None
1522+
return node.iter.as_string()
15201523

15211524
return None

tests/functional/c/consider/consider_using_dict_items.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -83,4 +83,4 @@ class Foo:
8383
val = any(True for k8 in Foo.c_dict if c_dict[k8])
8484

8585
# Should emit warning, using .keys() of Foo.c_dict
86-
val = any(True for k8 in Foo.c_dict.keys() if Foo.c_dict[k8]) # [consider-iterating-dictionary,consider-using-dict-items]
86+
val = any(True for k8 in Foo.c_dict.keys() if Foo.c_dict[k8]) # [consider-iterating-dictionary,consider-using-dict-items]

0 commit comments

Comments
 (0)