def _check_implicit_items(self, node: ast.For) -> None: iterable = source.node_to_string(node.iter) target = source.node_to_string(node.target) for sub in ast.walk(node): has_violation = (isinstance(sub, ast.Subscript) and not self._is_assigned_target(sub) and slices.is_same_slice(iterable, target, sub)) if has_violation: self.add_violation(ImplicitItemsIteratorViolation(node)) break
def _check_implicit_get(self, node: ast.If) -> None: if not isinstance(node.test, ast.Compare): return if not isinstance(node.test.ops[0], ast.In): return checked_key = source.node_to_string(node.test.left) checked_collection = source.node_to_string(node.test.comparators[0]) for sub in ast.walk(node): if not isinstance(sub, ast.Subscript): continue if slices.is_same_slice(checked_collection, checked_key, sub): self.add_violation(refactoring.ImplicitDictGetViolation(sub))