예제 #1
0
 def visit_mypy_file(self, o: MypyFile) -> None:
     with self.scope.module_scope(o.fullname):
         self.is_package_init_file = o.is_package_init_file()
         self.add_type_alias_deps(self.scope.current_target())
         for trigger, targets in o.plugin_deps.items():
             self.map.setdefault(trigger, set()).update(targets)
         super().visit_mypy_file(o)
예제 #2
0
 def visit_mypy_file(self, o: MypyFile) -> None:
     self.scope.enter_file(o.fullname())
     self.is_package_init_file = o.is_package_init_file()
     if o in self.alias_deps:
         for alias in self.alias_deps[o]:
             self.add_dependency(make_trigger(alias))
     super().visit_mypy_file(o)
     self.scope.leave()
예제 #3
0
파일: deps.py 프로젝트: Michael0x2a/mypy
 def visit_mypy_file(self, o: MypyFile) -> None:
     self.scope.enter_file(o.fullname())
     self.is_package_init_file = o.is_package_init_file()
     self.add_type_alias_deps(self.scope.current_target())
     for trigger, targets in o.plugin_deps.items():
         self.map.setdefault(trigger, set()).update(targets)
     super().visit_mypy_file(o)
     self.scope.leave()
예제 #4
0
def create_indirect_imported_name(
        file_node: MypyFile, module: str, relative: int,
        imported_name: str) -> Optional[SymbolTableNode]:
    """Create symbol table entry for a name imported from another module.

    These entries act as indirect references.
    """
    target_module, ok = correct_relative_import(
        file_node.fullname, relative, module, file_node.is_package_init_file())
    if not ok:
        return None
    target_name = '%s.%s' % (target_module, imported_name)
    link = ImportedName(target_name)
    # Use GDEF since this refers to a module-level definition.
    return SymbolTableNode(GDEF, link)
예제 #5
0
def create_indirect_imported_name(file_node: MypyFile,
                                  module: str,
                                  relative: int,
                                  imported_name: str) -> Optional[SymbolTableNode]:
    """Create symbol table entry for a name imported from another module.

    These entries act as indirect references.
    """
    target_module, ok = correct_relative_import(
        file_node.fullname(),
        relative,
        module,
        file_node.is_package_init_file())
    if not ok:
        return None
    target_name = '%s.%s' % (target_module, imported_name)
    link = ImportedName(target_name)
    # Use GDEF since this refers to a module-level definition.
    return SymbolTableNode(GDEF, link)
예제 #6
0
파일: deps.py 프로젝트: sixolet/mypy
 def visit_mypy_file(self, o: MypyFile) -> None:
     self.scope.enter_file(o.fullname())
     self.is_package_init_file = o.is_package_init_file()
     self.add_type_alias_deps(self.scope.current_target())
     super().visit_mypy_file(o)
     self.scope.leave()
예제 #7
0
 def visit_mypy_file(self, o: MypyFile) -> None:
     self.scope.enter_file(o.fullname())
     self.is_package_init_file = o.is_package_init_file()
     self.add_type_alias_deps(self.scope.current_target())
     super().visit_mypy_file(o)
     self.scope.leave()
예제 #8
0
파일: deps.py 프로젝트: lslaoang/mypy
 def visit_mypy_file(self, o: MypyFile) -> None:
     self.scope.enter_file(o.fullname())
     self.is_package_init_file = o.is_package_init_file()
     super().visit_mypy_file(o)
     self.scope.leave()
예제 #9
0
def find_import_name(import_node, line, column, suite, mypy_file: MypyFile):
    assert suite[0] == symbol.file_input
    stmt = suite[1]
    assert stmt[0] == symbol.stmt
    simple_stmt = stmt[1]
    assert simple_stmt[0] == symbol.simple_stmt
    small_stmt = simple_stmt[1]
    assert small_stmt[0] == symbol.small_stmt
    import_stmt = small_stmt[1]
    assert import_stmt[0] == symbol.import_stmt

    if isinstance(import_node, Import):
        import_name = import_stmt[1]
        assert import_name[0] == symbol.import_name
        dotted_as_names = import_name[2]
        for dotted_as_name in dotted_as_names[1:]:
            if dotted_as_name[0] != symbol.dotted_as_name:
                continue
            dotted_name = dotted_as_name[1]
            name = get_dotted_name_at_position(dotted_name, line, column)
            if name:
                return name, None
    elif isinstance(import_node, ImportAll):
        import_from = import_stmt[1]
        assert import_from[0] == symbol.import_from
        for element in import_from[2:]:
            if element[0] == token.NAME and element[1] == 'import':
                break

            elif element[0] == symbol.dotted_name:
                name = get_dotted_name_at_position(element, line, column)
                if name:
                    import_id, ok = correct_relative_import(
                        mypy_file.fullname(), import_node.relative, name,
                        mypy_file.is_package_init_file())
                    if ok:
                        return import_id, None
    elif isinstance(import_node, ImportFrom):
        import_from = import_stmt[1]
        assert import_from[0] == symbol.import_from
        import_as_names = None
        for element in import_from[2:]:
            if element[0] == symbol.dotted_name:
                name = get_dotted_name_at_position(element, line, column)
                if name:
                    import_id, ok = correct_relative_import(
                        mypy_file.fullname(), import_node.relative, name,
                        mypy_file.is_package_init_file())
                    if ok:
                        return import_id, None
            elif element[0] == symbol.import_as_names:
                for import_as_name in element[1:]:
                    if import_as_name[0] == symbol.import_as_name:
                        name = import_as_name[1]
                        assert name[0] == token.NAME
                        if token_contains_offset(name[2], name[3],
                                                 len(name[1]), line, column):
                            import_id, ok = correct_relative_import(
                                mypy_file.fullname(),
                                import_node.relative, import_node.id,
                                mypy_file.is_package_init_file())
                            if ok:
                                return import_id, name[1]

    return None, None