def type_inference_transformer(self) -> TransformVisitor:
     """Instantiate a visitor to perform type inference on an AST.
     """
     type_visitor = TransformVisitor()
     for klass in astroid.ALL_NODE_CLASSES:
         if hasattr(self, f'visit_{klass.__name__.lower()}'):
             type_visitor.register_transform(klass, getattr(self, f'visit_{klass.__name__.lower()}'))
     return type_visitor
예제 #2
0
def environment_transformer() -> TransformVisitor:
    """Return a TransformVisitor that sets an environment for every node."""
    visitor = TransformVisitor()

    visitor.register_transform(astroid.FunctionDef,
                               _set_function_def_environment)
    visitor.register_transform(astroid.Module, _set_module_environment)
    return visitor
예제 #3
0
 def type_inference_transformer(self) -> TransformVisitor:
     """Instantiate a visitor to perform type inference on an AST.
     """
     type_visitor = TransformVisitor()
     for klass in astroid.ALL_NODE_CLASSES:
         if hasattr(self, f'visit_{klass.__name__.lower()}'):
             type_visitor.register_transform(klass, getattr(self, f'visit_{klass.__name__.lower()}'))
     return type_visitor
 def environment_transformer(self) -> TransformVisitor:
     """Return a TransformVisitor that sets an environment for every node."""
     visitor = TransformVisitor()
     visitor.register_transform(astroid.FunctionDef, self._set_function_def_environment)
     visitor.register_transform(astroid.ClassDef, self._set_classdef_environment)
     visitor.register_transform(astroid.Module, self._set_module_environment)
     visitor.register_transform(astroid.ListComp, self._set_listcomp_environment)
     visitor.register_transform(astroid.DictComp, self._set_dictcomp_environment)
     visitor.register_transform(astroid.SetComp, self._set_setcomp_environment)
     return visitor
예제 #5
0
 def environment_transformer(self) -> TransformVisitor:
     """Return a TransformVisitor that sets an environment for every node."""
     visitor = TransformVisitor()
     visitor.register_transform(astroid.FunctionDef, self._set_function_def_environment)
     visitor.register_transform(astroid.ClassDef, self._set_classdef_environment)
     visitor.register_transform(astroid.Module, self._set_module_environment)
     visitor.register_transform(astroid.ListComp, self._set_listcomp_environment)
     visitor.register_transform(astroid.DictComp, self._set_dictcomp_environment)
     visitor.register_transform(astroid.SetComp, self._set_setcomp_environment)
     return visitor
예제 #6
0
def init_register_ending_setters(source_code):
    """Instantiate a visitor to transform the nodes.
    Register the transform functions on an instance of TransformVisitor.

    @type source_code: list of strings
    @rtype: TransformVisitor
    """
    ending_transformer = TransformVisitor()

    # Check consistency of astroid-provided fromlineno and col_offset attributes.
    for node_class in astroid.ALL_NODE_CLASSES:
        ending_transformer.register_transform(
            node_class,
            fix_start_attributes,
            lambda node: node.fromlineno is None or node.col_offset is None)

    # Ad hoc transformations
    ending_transformer.register_transform(astroid.Tuple, _set_start_from_first_child)
    ending_transformer.register_transform(astroid.Arguments, fix_start_attributes)
    ending_transformer.register_transform(astroid.Arguments, set_arguments)
    ending_transformer.register_transform(astroid.Slice, fix_slice(source_code))

    for node_class in NODES_WITHOUT_CHILDREN:
        ending_transformer.register_transform(node_class, set_without_children)
    for node_class in NODES_WITH_CHILDREN:
        ending_transformer.register_transform(node_class, set_from_last_child)

    # Nodes where the source code must also be provided.
    # source_code and the predicate functions get stored in the TransformVisitor
    for node_class, start_pred, end_pred in NODES_REQUIRING_SOURCE:
        if start_pred is not None:
            ending_transformer.register_transform(
                node_class, start_setter_from_source(source_code, start_pred))
        if end_pred is not None:
            # This is for searching for a trailing comma after a tuple's final element
            if node_class is astroid.Tuple:
                ending_transformer.register_transform(
                    node_class, end_setter_from_source(source_code, end_pred, True))
            else:
                ending_transformer.register_transform(
                    node_class, end_setter_from_source(source_code, end_pred))

    # Nodes where extra parentheses are included
    ending_transformer.register_transform(astroid.Const, add_parens_to_const(source_code))
    ending_transformer.register_transform(astroid.Tuple, add_parens_to_const(source_code))

    return ending_transformer
 def environment_transformer(self) -> TransformVisitor:
     """Return a TransformVisitor that sets an environment for every node."""
     visitor = TransformVisitor()
     visitor.register_transform(astroid.FunctionDef,
                                self._set_function_def_environment)
     visitor.register_transform(astroid.AsyncFunctionDef,
                                self._set_function_def_environment)
     visitor.register_transform(astroid.ClassDef,
                                self._set_classdef_environment)
     visitor.register_transform(astroid.Module,
                                self._set_module_environment)
     visitor.register_transform(astroid.ListComp,
                                self._set_comprehension_environment)
     visitor.register_transform(astroid.DictComp,
                                self._set_comprehension_environment)
     visitor.register_transform(astroid.SetComp,
                                self._set_comprehension_environment)
     visitor.register_transform(astroid.GeneratorExp,
                                self._set_comprehension_environment)
     visitor.register_transform(astroid.Lambda,
                                self._set_comprehension_environment)
     return visitor
예제 #8
0
 def environment_transformer(self) -> TransformVisitor:
     """Return a TransformVisitor that sets an environment for every node."""
     visitor = TransformVisitor()
     visitor.register_transform(astroid.FunctionDef, self._set_function_def_environment)
     visitor.register_transform(astroid.AsyncFunctionDef, self._set_function_def_environment)
     visitor.register_transform(astroid.ClassDef, self._set_classdef_environment)
     visitor.register_transform(astroid.Module, self._set_module_environment)
     visitor.register_transform(astroid.ListComp, self._set_comprehension_environment)
     visitor.register_transform(astroid.DictComp, self._set_comprehension_environment)
     visitor.register_transform(astroid.SetComp, self._set_comprehension_environment)
     visitor.register_transform(astroid.GeneratorExp, self._set_comprehension_environment)
     visitor.register_transform(astroid.Lambda, self._set_comprehension_environment)
     return visitor
예제 #9
0
def register_type_constraints_setter():
    """Instantiate a visitor to transform the nodes.
    Register the transform functions on an instance of TransformVisitor.
    """
    type_visitor = TransformVisitor()
    type_visitor.register_transform(astroid.Const, set_const_type_constraints)
    type_visitor.register_transform(astroid.Tuple, set_tuple_type_constraints)
    type_visitor.register_transform(astroid.List, set_list_type_constraints)
    type_visitor.register_transform(astroid.Dict, set_dict_type_constraints)
    type_visitor.register_transform(astroid.Name, set_name_type_constraints)
    type_visitor.register_transform(astroid.BinOp, set_binop_type_constraints)
    type_visitor.register_transform(astroid.UnaryOp,
                                    set_unaryop_type_constraints)
    type_visitor.register_transform(astroid.Index, set_index_type_constraints)
    type_visitor.register_transform(astroid.Subscript,
                                    set_subscript_type_constraints)
    type_visitor.register_transform(astroid.Compare,
                                    set_compare_type_constraints)
    type_visitor.register_transform(astroid.BoolOp,
                                    set_boolop_type_constraints)
    type_visitor.register_transform(astroid.Expr, set_expr_type_constraints)
    type_visitor.register_transform(astroid.Assign,
                                    set_assign_type_constraints)
    type_visitor.register_transform(astroid.Return,
                                    set_return_type_constraints)
    type_visitor.register_transform(astroid.FunctionDef,
                                    set_functiondef_type_constraints)
    type_visitor.register_transform(astroid.Call, set_call_type_constraints)
    type_visitor.register_transform(astroid.Module,
                                    set_module_type_constraints)
    return type_visitor