Exemplo n.º 1
0
 def _check_lambda_inside_loop(
     self,
     node: Union[AnyLoop, AnyComprehension],
 ) -> None:
     for lambda_node in walk.get_subnodes_by_type(node, ast.Lambda):
         arg_nodes = walk.get_subnodes_by_type(lambda_node, ast.arg)
         body_nodes = walk.get_subnodes_by_type(lambda_node.body, ast.Name)
         arguments = (arg.arg for arg in arg_nodes)
         body = (subnode.id for subnode in body_nodes)
         if not all(symbol in arguments for symbol in body):
             self.add_violation(LambdaInsideLoopViolation(node))
Exemplo n.º 2
0
    def _check_last_return_in_function(self, node: ast.Return) -> None:
        parent = get_parent(node)
        if not isinstance(parent, FunctionNodes):
            return

        returns = len(tuple(filter(
            lambda return_node: return_node.value is not None,
            walk.get_subnodes_by_type(parent, ast.Return),
        )))

        last_value_return = (
            len(parent.body) > 1 and
            returns < 2 and
            isinstance(node.value, ast.NameConstant) and
            node.value.value is None
        )

        one_return_with_none = (
            returns == 1 and
            isinstance(node.value, ast.NameConstant) and
            node.value.value is None
        )

        if node.value is None or last_value_return or one_return_with_none:
            self.add_violation(InconsistentReturnViolation(node))
Exemplo n.º 3
0
    def _check_generator(self, node: AnyFunctionDef) -> None:
        if not functions.is_generator(node):
            return

        for sub_node in walk.get_subnodes_by_type(node, ast.Raise):
            if exceptions.get_exception_name(sub_node) == 'StopIteration':
                self.add_violation(
                    StopIterationInsideGeneratorViolation(sub_node), )
Exemplo n.º 4
0
 def _check_public_attributes(self, node: ast.ClassDef) -> None:
     attributes = walk.get_subnodes_by_type(node, ast.Attribute)
     self_public_attrs = filter(_is_public_instance_attr_def, attributes)
     attrs_count = len(list(self_public_attrs))
     if attrs_count > self.options.max_attributes:
         self.add_violation(
             TooManyPublicAttributesViolation(node,
                                              text=str(attrs_count)), )
Exemplo n.º 5
0
    def _check_nested_ifexpr(self, node: AnyIf) -> None:
        is_nested_in_if = bool(
            isinstance(node, ast.If)
            and list(walk.get_subnodes_by_type(node.test, ast.IfExp)), )
        is_nested_poorly = walk.get_closest_parent(
            node,
            self._forbidden_expression_parents,
        )

        if is_nested_in_if or is_nested_poorly:
            self.add_violation(NestedTernaryViolation(node))
 def _check_public_attributes(self, node: ast.ClassDef) -> None:
     attributes = filter(
         self._is_public_instance_attr_def,
         walk.get_subnodes_by_type(node, ast.Attribute),
     )
     attrs_count = len({attr.attr for attr in attributes})
     if attrs_count > self.options.max_attributes:
         self.add_violation(
             TooManyPublicAttributesViolation(
                 node,
                 text=str(attrs_count),
                 baseline=self.options.max_attributes,
             ), )
Exemplo n.º 7
0
 def _check_unpacking_target_types(self, node: Optional[ast.AST]) -> None:
     if not node:
         return
     for subnode in walk.get_subnodes_by_type(node, ast.List):
         self.add_violation(
             consistency.UnpackingIterableToListViolation(subnode), )