@@ -88,27 +88,39 @@ def append(self, imports: Import | Iterable[Import] | None) -> None:
8888 if import_ .alias :
8989 self .alias [import_ .from_ ][import_ .import_ ] = import_ .alias
9090
91- def remove (self , imports : Import | Iterable [Import ]) -> None :
91+ def remove (self , imports : Import | Iterable [Import ]) -> None : # noqa: PLR0912
9292 """Remove one or more imports from the collection."""
9393 if isinstance (imports , Import ): # pragma: no cover
9494 imports = [imports ]
9595 for import_ in imports :
9696 if "." in import_ .import_ : # pragma: no cover
97- self .counter [None , import_ .import_ ] -= 1
98- if self .counter [None , import_ .import_ ] == 0 : # pragma: no cover
99- self [None ].remove (import_ .import_ )
100- if not self [None ]:
101- del self [None ]
97+ key = (None , import_ .import_ )
98+ if self .counter .get (key , 0 ) <= 0 :
99+ continue
100+ self .counter [key ] -= 1
101+ if self .counter [key ] == 0 : # pragma: no cover
102+ del self .counter [key ]
103+ if None in self and import_ .import_ in self [None ]:
104+ self [None ].remove (import_ .import_ )
105+ if not self [None ]:
106+ del self [None ]
102107 else :
103- self .counter [import_ .from_ , import_ .import_ ] -= 1 # pragma: no cover
104- if self .counter [import_ .from_ , import_ .import_ ] == 0 : # pragma: no cover
105- self [import_ .from_ ].remove (import_ .import_ )
106- if not self [import_ .from_ ]:
107- del self [import_ .from_ ]
108- if import_ .alias : # pragma: no cover
108+ key = (import_ .from_ , import_ .import_ )
109+ if self .counter .get (key , 0 ) <= 0 :
110+ continue
111+ self .counter [key ] -= 1 # pragma: no cover
112+ if self .counter [key ] == 0 : # pragma: no cover
113+ del self .counter [key ]
114+ if import_ .from_ in self and import_ .import_ in self [import_ .from_ ]:
115+ self [import_ .from_ ].remove (import_ .import_ )
116+ if not self [import_ .from_ ]:
117+ del self [import_ .from_ ]
118+ if import_ .alias and import_ .from_ in self .alias and import_ .import_ in self .alias [import_ .from_ ]:
109119 del self .alias [import_ .from_ ][import_ .import_ ]
110120 if not self .alias [import_ .from_ ]:
111121 del self .alias [import_ .from_ ]
122+ if import_ .reference_path and import_ .reference_path in self .reference_paths :
123+ del self .reference_paths [import_ .reference_path ]
112124
113125 def remove_referenced_imports (self , reference_path : str ) -> None :
114126 """Remove imports associated with a reference path."""
@@ -126,6 +138,9 @@ def extract_future(self) -> Imports:
126138 future .counter [key ] = self .counter .pop (key )
127139 if future_key in self .alias :
128140 future .alias [future_key ] = self .alias .pop (future_key )
141+ for ref_path , import_ in list (self .reference_paths .items ()):
142+ if import_ .from_ == future_key :
143+ future .reference_paths [ref_path ] = self .reference_paths .pop (ref_path )
129144 return future
130145
131146 def add_export (self , name : str ) -> None :
0 commit comments