コード例 #1
0
    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
コード例 #2
0
    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))