Avoids unnecessary overhead for TC004, when TC001-003 are disabled (#14657)
Some checks are pending
CI / Determine changes (push) Waiting to run
CI / cargo fmt (push) Waiting to run
CI / cargo clippy (push) Blocked by required conditions
CI / cargo test (linux) (push) Blocked by required conditions
CI / cargo test (linux, release) (push) Blocked by required conditions
CI / cargo test (windows) (push) Blocked by required conditions
CI / cargo test (wasm) (push) Blocked by required conditions
CI / cargo build (release) (push) Waiting to run
CI / cargo build (msrv) (push) Blocked by required conditions
CI / cargo fuzz build (push) Blocked by required conditions
CI / fuzz parser (push) Blocked by required conditions
CI / test scripts (push) Blocked by required conditions
CI / ecosystem (push) Blocked by required conditions
CI / cargo shear (push) Blocked by required conditions
CI / python package (push) Waiting to run
CI / pre-commit (push) Waiting to run
CI / mkdocs (push) Waiting to run
CI / formatter instabilities and black similarity (push) Blocked by required conditions
CI / test ruff-lsp (push) Blocked by required conditions
CI / benchmarks (push) Blocked by required conditions

This commit is contained in:
David Salvisberg 2024-11-28 16:28:24 +01:00 committed by GitHub
parent 3f6c65e78c
commit d9cbf2fe44
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -52,16 +52,13 @@ pub(crate) fn deferred_scopes(checker: &mut Checker) {
// Identify any valid runtime imports. If a module is imported at runtime, and // Identify any valid runtime imports. If a module is imported at runtime, and
// used at runtime, then by default, we avoid flagging any other // used at runtime, then by default, we avoid flagging any other
// imports from that model as typing-only. // imports from that model as typing-only.
// FIXME: This does not seem quite right, if only TC004 is enabled let enforce_typing_only_imports = !checker.source_type.is_stub()
// then we don't need to collect the runtime imports
let enforce_typing_imports = !checker.source_type.is_stub()
&& checker.any_enabled(&[ && checker.any_enabled(&[
Rule::RuntimeImportInTypeCheckingBlock,
Rule::TypingOnlyFirstPartyImport, Rule::TypingOnlyFirstPartyImport,
Rule::TypingOnlyStandardLibraryImport, Rule::TypingOnlyStandardLibraryImport,
Rule::TypingOnlyThirdPartyImport, Rule::TypingOnlyThirdPartyImport,
]); ]);
let runtime_imports: Vec<Vec<&Binding>> = if enforce_typing_imports { let runtime_imports: Vec<Vec<&Binding>> = if enforce_typing_only_imports {
checker checker
.semantic .semantic
.scopes .scopes
@ -377,9 +374,16 @@ pub(crate) fn deferred_scopes(checker: &mut Checker) {
} }
if matches!(scope.kind, ScopeKind::Function(_) | ScopeKind::Module) { if matches!(scope.kind, ScopeKind::Function(_) | ScopeKind::Module) {
// FIXME: This does not seem quite right, if only TC004 is enabled if !checker.source_type.is_stub()
// then we don't need to collect the runtime imports && checker.enabled(Rule::RuntimeImportInTypeCheckingBlock)
if enforce_typing_imports { {
flake8_type_checking::rules::runtime_import_in_type_checking_block(
checker,
scope,
&mut diagnostics,
);
}
if enforce_typing_only_imports {
let runtime_imports: Vec<&Binding> = checker let runtime_imports: Vec<&Binding> = checker
.semantic .semantic
.scopes .scopes
@ -388,19 +392,6 @@ pub(crate) fn deferred_scopes(checker: &mut Checker) {
.copied() .copied()
.collect(); .collect();
if checker.enabled(Rule::RuntimeImportInTypeCheckingBlock) {
flake8_type_checking::rules::runtime_import_in_type_checking_block(
checker,
scope,
&mut diagnostics,
);
}
if checker.any_enabled(&[
Rule::TypingOnlyFirstPartyImport,
Rule::TypingOnlyStandardLibraryImport,
Rule::TypingOnlyThirdPartyImport,
]) {
flake8_type_checking::rules::typing_only_runtime_import( flake8_type_checking::rules::typing_only_runtime_import(
checker, checker,
scope, scope,
@ -408,7 +399,6 @@ pub(crate) fn deferred_scopes(checker: &mut Checker) {
&mut diagnostics, &mut diagnostics,
); );
} }
}
if checker.enabled(Rule::UnusedImport) { if checker.enabled(Rule::UnusedImport) {
pyflakes::rules::unused_import(checker, scope, &mut diagnostics); pyflakes::rules::unused_import(checker, scope, &mut diagnostics);