Use complete symbol for import from (#35)

This commit is contained in:
Charlie Marsh 2022-08-28 10:02:07 -04:00 committed by GitHub
parent 6c8794692b
commit 816bb88e3b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 11 deletions

View file

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

View file

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