Skip to content

Commit 7ac96d2

Browse files
committed
Add type annotations to importinfo.py
1 parent 7e5181a commit 7ac96d2

1 file changed

Lines changed: 31 additions & 14 deletions

File tree

rope/refactor/importutils/importinfo.py

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
from typing import List, Tuple
1+
from abc import abstractmethod, ABC
2+
from typing import List, Tuple, Optional, Protocol
23

34

45
class ImportStatement:
@@ -64,9 +65,11 @@ def accept(self, visitor):
6465
return visitor.dispatch(self)
6566

6667

67-
class ImportInfo:
68-
def get_imported_primaries(self, context):
69-
pass
68+
class ImportInfo(ABC):
69+
names_and_aliases: List[Tuple[str, Optional[str]]]
70+
71+
@abstractmethod
72+
def get_imported_primaries(self, context) -> List[str]: ...
7073

7174
def get_imported_names(self, context):
7275
return [
@@ -76,8 +79,8 @@ def get_imported_names(self, context):
7679
def __repr__(self):
7780
return f'<{self.__class__.__name__} "{self.get_import_statement()}">'
7881

79-
def get_import_statement(self):
80-
pass
82+
@abstractmethod
83+
def get_import_statement(self) -> str: ...
8184

8285
def is_empty(self):
8386
pass
@@ -108,10 +111,13 @@ def get_empty_import():
108111

109112

110113
class NormalImport(ImportInfo):
111-
def __init__(self, names_and_aliases):
114+
def __init__(
115+
self,
116+
names_and_aliases: List[Tuple[str, Optional[str]]],
117+
) -> None:
112118
self.names_and_aliases = names_and_aliases
113119

114-
def get_imported_primaries(self, context):
120+
def get_imported_primaries(self, context) -> List[str]:
115121
result = []
116122
for name, alias in self.names_and_aliases:
117123
if alias:
@@ -120,7 +126,7 @@ def get_imported_primaries(self, context):
120126
result.append(name)
121127
return result
122128

123-
def get_import_statement(self):
129+
def get_import_statement(self) -> str:
124130
result = "import "
125131
for name, alias in self.names_and_aliases:
126132
result += name
@@ -134,12 +140,20 @@ def is_empty(self):
134140

135141

136142
class FromImport(ImportInfo):
137-
def __init__(self, module_name, level, names_and_aliases):
143+
module_name: str
144+
level: int
145+
146+
def __init__(
147+
self,
148+
module_name: str,
149+
level: int,
150+
names_and_aliases: List[Tuple[str, Optional[str]]],
151+
):
138152
self.module_name = module_name
139153
self.level = level
140154
self.names_and_aliases = names_and_aliases
141155

142-
def get_imported_primaries(self, context):
156+
def get_imported_primaries(self, context) -> List[str]:
143157
if self.names_and_aliases[0][0] == "*":
144158
module = self.get_imported_module(context)
145159
return [name for name in module if not name.startswith("_")]
@@ -176,7 +190,7 @@ def get_imported_module(self, context):
176190
self.module_name, context.folder, self.level
177191
)
178192

179-
def get_import_statement(self):
193+
def get_import_statement(self) -> str:
180194
result = "from " + "." * self.level + self.module_name + " import "
181195
for name, alias in self.names_and_aliases:
182196
result += name
@@ -193,14 +207,17 @@ def is_star_import(self):
193207

194208

195209
class EmptyImport(ImportInfo):
196-
names_and_aliases: List[Tuple[str, str]] = []
210+
names_and_aliases = []
197211

198212
def is_empty(self):
199213
return True
200214

201-
def get_imported_primaries(self, context):
215+
def get_imported_primaries(self, context) -> List[str]:
202216
return []
203217

218+
def get_import_statement(self) -> str:
219+
raise NotImplementedError()
220+
204221

205222
class ImportContext:
206223
def __init__(self, project, folder):

0 commit comments

Comments
 (0)