Example #1
0
 def visit_Attribute(self, node: ast.Attribute) -> None:
     if not isinstance(node.value, ast.Call):
         names = []
         for sub_node in ast.walk(node):
             if isinstance(sub_node, ast.Attribute):
                 names.append(sub_node.attr)
             elif isinstance(sub_node, ast.Name):
                 names.append(sub_node.id)
         names.reverse()
         Name.register(lineno=node.lineno, name=".".join(names), node=node)
Example #2
0
    def traverse(self) -> None:
        if self.skip_file():
            return None

        try:
            if C.PY38_PLUS:
                tree = ast.parse(self.source, type_comments=True)
            else:
                tree = ast.parse(self.source)
        except SyntaxError as e:
            print(
                color.paint(str(e), color.RED) + " at " +
                color.paint(self.path.as_posix(), color.GREEN))
            return None
        """
        Set parent
        """
        relate(tree)

        Scope.add_global_scope(tree)
        """
        Name analyzer
        """
        _NameAnalyzer().visit(tree)
        """
        Receive items on the __all__ list
        """
        importable_visitor = _ImportableAnalyzer()
        importable_visitor.visit(tree)
        for node in importable_visitor.importable_nodes:
            if isinstance(node, ast.Constant):
                Name.register(
                    lineno=node.lineno,
                    name=str(node.value),
                    node=node,
                    is_all=True,
                )
            elif isinstance(node, ast.Str):
                Name.register(lineno=node.lineno,
                              name=node.s,
                              node=node,
                              is_all=True)
        importable_visitor.clear()
        """
        Import analyzer
        """
        _ImportAnalyzer(
            source=self.source,
            include_star_import=self.include_star_import,
        ).traverse(tree)

        Scope.remove_current_scope()
Example #3
0
 def visit_Name(self, node: ast.Name) -> None:
     if not isinstance(node.parent, ast.Attribute):  # type: ignore
         Name.register(lineno=node.lineno, name=node.id, node=node)