Ejemplo n.º 1
0
 def traverse(self) -> None:
     if not self.skip_file():
         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
         else:
             relate(tree)
             name_scanner = _NameScanner()
             name_scanner.traverse(tree)
             self.names.extend(name_scanner.names)
             import_scanner = _ImportScanner(
                 source=self.source,
                 names=self.names,
                 include_star_import=self.include_star_import,
             )
             import_scanner.traverse(tree)
             self.imports.extend(import_scanner.imports)
             self.import_names.extend([imp.name for imp in self.imports])
Ejemplo n.º 2
0
 def traverse(
     self,
     source: Union[str, bytes],
     mode: str = "exec",
     parent: Optional[ast.AST] = None,
 ) -> None:
     try:
         if PY38_PLUS:
             tree = ast.parse(source, mode=mode, type_comments=True)
         else:
             tree = ast.parse(source, mode=mode)
     except SyntaxError as err:
         if self.show_error:
             print(color.paint(str(err), color.RED))  # pragma: no cover
         raise err
     relate(tree, parent=parent)
     self.visit(tree)
     """
     Receive items on the __all__ list
     """
     importable_visitor = ImportableVisitor()
     importable_visitor.traverse(self.source)
     for node in importable_visitor.importable_nodes:
         if isinstance(node, ast.Constant):
             self.names.append(
                 Name(lineno=node.lineno, name=str(node.value)))
         elif isinstance(node, ast.Str):
             self.names.append(Name(lineno=node.lineno, name=node.s))
Ejemplo n.º 3
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()
Ejemplo n.º 4
0
 def run_visit(self, source: str) -> None:
     self.source = source
     if self.skip_file():
         return
     if PY38_PLUS:
         self.iter_type_comments()
     with contextlib.suppress(SyntaxError):
         tree = ast.parse(self.source)
         relate(tree)
         self.visit(tree)
     self.import_names = [imp["name"] for imp in self.imports]
     self.names = list(self.get_names())
     self.unused_imports = list(self.get_unused_imports())
Ejemplo n.º 5
0
 def join_visit(self,
                value: str,
                node: ast.AST,
                *,
                mode: str = "eval") -> None:
     """A function that parses the value, copies locations from the node and
     includes them in self.visit."""
     if PY38_PLUS:
         tree = ast.parse(value, mode=mode, type_comments=True)
     else:
         tree = ast.parse(value, mode=mode)
     relate(tree, parent=node.parent)  # type: ignore
     for new_node in ast.walk(tree):
         ast.copy_location(new_node, node)
     self.visit(tree)
Ejemplo n.º 6
0
    def get_names(cls, package: str) -> FrozenSet[str]:
        if utils.is_std(package):
            return utils.get_dir(package)

        source = utils.get_source(package)
        if source:
            try:
                tree = ast.parse(source)
            except SyntaxError:
                return frozenset()
            else:
                visitor = cls()
                relate(tree)
                visitor.visit(tree)
                return visitor.get_all() or visitor.get_suggestion()
        return frozenset()
Ejemplo n.º 7
0
 def traverse(self, tree) -> None:
     relate(tree)
     self.visit(tree)
Ejemplo n.º 8
0
 def traverse(self, source: str) -> None:
     tree = ast.parse(source)
     relate(tree)
     self.visit(tree)