Use complete symbol for `import from`

This commit is contained in:
Charlie Marsh 2022-08-27 22:56:32 -04:00
parent 6c8794692b
commit b73d1cb823
2 changed files with 22 additions and 11 deletions

View File

@ -28,7 +28,7 @@ enum BindingKind {
ClassDefinition, ClassDefinition,
Definition, Definition,
FutureImportation, FutureImportation,
Importation, Importation(String),
StarImportation, StarImportation,
SubmoduleImportation, SubmoduleImportation,
} }
@ -121,7 +121,13 @@ impl Visitor for Checker<'_> {
}) })
} else { } else {
self.add_binding(Binding { self.add_binding(Binding {
kind: BindingKind::Importation, kind: BindingKind::Importation(
alias
.node
.asname
.clone()
.unwrap_or_else(|| alias.node.name.clone()),
),
name: alias name: alias
.node .node
.asname .asname
@ -171,11 +177,14 @@ impl Visitor for Checker<'_> {
} }
} else { } else {
self.add_binding(Binding { self.add_binding(Binding {
kind: BindingKind::Importation, kind: BindingKind::Importation(match module {
None => name.clone(),
Some(parent) => format!("{}.{}", parent, name),
}),
name, name,
used: false, used: false,
location: stmt.location, location: stmt.location,
}); })
} }
} }
} }
@ -406,12 +415,14 @@ impl Checker<'_> {
fn check_dead_scopes(&mut self) { fn check_dead_scopes(&mut self) {
// TODO(charlie): Handle `__all__`. // TODO(charlie): Handle `__all__`.
for scope in &self.dead_scopes { for scope in &self.dead_scopes {
for (name, binding) in scope.values.iter().rev() { for (_, binding) in scope.values.iter().rev() {
if !binding.used && matches!(binding.kind, BindingKind::Importation) { if !binding.used {
self.checks.push(Check { if let BindingKind::Importation(name) = &binding.kind {
kind: CheckKind::UnusedImport(name.clone()), self.checks.push(Check {
location: binding.location, kind: CheckKind::UnusedImport(name.clone()),
}); location: binding.location,
});
}
} }
} }
} }

View File

@ -113,7 +113,7 @@ mod tests {
filename: "./resources/test/src/F401.py".to_string(), filename: "./resources/test/src/F401.py".to_string(),
}, },
Message { Message {
kind: CheckKind::UnusedImport("OrderedDict".to_string()), kind: CheckKind::UnusedImport("collections.OrderedDict".to_string()),
location: Location::new(3, 1), location: Location::new(3, 1),
filename: "./resources/test/src/F401.py".to_string(), filename: "./resources/test/src/F401.py".to_string(),
}, },