Refactor `flake8_tidy_imports` rules to consistently take `Checker` (#4023)

This commit is contained in:
Charlie Marsh 2023-04-19 12:42:15 -04:00 committed by GitHub
parent a3146ab1ca
commit 13fda30051
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 49 deletions

View File

@ -970,15 +970,11 @@ where
// flake8_tidy_imports
if self.settings.rules.enabled(Rule::BannedApi) {
if let Some(diagnostic) =
flake8_tidy_imports::banned_api::name_or_parent_is_banned(
alias,
self,
&alias.node.name,
&self.settings.flake8_tidy_imports.banned_api,
)
{
self.diagnostics.push(diagnostic);
}
alias,
);
}
// pylint
@ -1161,25 +1157,11 @@ where
if self.settings.rules.enabled(Rule::BannedApi) {
if let Some(module) = module {
for name in names {
if let Some(diagnostic) =
flake8_tidy_imports::banned_api::name_is_banned(
module,
name,
&self.settings.flake8_tidy_imports.banned_api,
)
{
self.diagnostics.push(diagnostic);
flake8_tidy_imports::banned_api::name_is_banned(self, module, name);
}
}
if let Some(diagnostic) =
flake8_tidy_imports::banned_api::name_or_parent_is_banned(
stmt,
module,
&self.settings.flake8_tidy_imports.banned_api,
)
{
self.diagnostics.push(diagnostic);
}
self, module, stmt,
);
}
}

View File

@ -51,14 +51,11 @@ impl Violation for BannedApi {
}
/// TID251
pub fn name_is_banned(
module: &str,
name: &Alias,
api_bans: &FxHashMap<String, ApiBan>,
) -> Option<Diagnostic> {
pub fn name_is_banned(checker: &mut Checker, module: &str, name: &Alias) {
let banned_api = &checker.settings.flake8_tidy_imports.banned_api;
let full_name = format!("{module}.{}", &name.node.name);
if let Some(ban) = api_bans.get(&full_name) {
return Some(Diagnostic::new(
if let Some(ban) = banned_api.get(&full_name) {
checker.diagnostics.push(Diagnostic::new(
BannedApi {
name: full_name,
message: ban.msg.to_string(),
@ -66,42 +63,37 @@ pub fn name_is_banned(
Range::from(name),
));
}
None
}
/// TID251
pub fn name_or_parent_is_banned<T>(
located: &Located<T>,
name: &str,
api_bans: &FxHashMap<String, ApiBan>,
) -> Option<Diagnostic> {
pub fn name_or_parent_is_banned<T>(checker: &mut Checker, name: &str, located: &Located<T>) {
let banned_api = &checker.settings.flake8_tidy_imports.banned_api;
let mut name = name;
loop {
if let Some(ban) = api_bans.get(name) {
return Some(Diagnostic::new(
if let Some(ban) = banned_api.get(name) {
checker.diagnostics.push(Diagnostic::new(
BannedApi {
name: name.to_string(),
message: ban.msg.to_string(),
},
Range::from(located),
));
return;
}
match name.rfind('.') {
Some(idx) => {
name = &name[..idx];
}
None => return None,
None => return,
}
}
}
/// TID251
pub fn banned_attribute_access(checker: &mut Checker, expr: &Expr) {
let banned_api = &checker.settings.flake8_tidy_imports.banned_api;
if let Some((banned_path, ban)) = checker.ctx.resolve_call_path(expr).and_then(|call_path| {
checker
.settings
.flake8_tidy_imports
.banned_api
banned_api
.iter()
.find(|(banned_path, ..)| call_path == from_qualified_name(banned_path))
}) {
@ -119,11 +111,10 @@ pub fn banned_attribute_access(checker: &mut Checker, expr: &Expr) {
mod tests {
use std::path::Path;
use crate::assert_messages;
use anyhow::Result;
use rustc_hash::FxHashMap;
use crate::assert_messages;
use crate::registry::Rule;
use crate::settings::Settings;
use crate::test::test_path;