diff --git a/crates/ty_python_semantic/src/types/diagnostic.rs b/crates/ty_python_semantic/src/types/diagnostic.rs index 5af77348be..9fc7141057 100644 --- a/crates/ty_python_semantic/src/types/diagnostic.rs +++ b/crates/ty_python_semantic/src/types/diagnostic.rs @@ -1008,7 +1008,6 @@ declare_lint! { /// /// ## References /// - [PEP 696: Type defaults for type parameters](https://peps.python.org/pep-0696/) - pub(crate) static INVALID_TYPE_PARAM_ORDER = { summary: "detects invalid type parameter order", status: LintStatus::stable("0.0.1-alpha.1"), diff --git a/crates/ty_python_semantic/src/types/infer/builder.rs b/crates/ty_python_semantic/src/types/infer/builder.rs index 88153dee80..022bd2f82c 100644 --- a/crates/ty_python_semantic/src/types/infer/builder.rs +++ b/crates/ty_python_semantic/src/types/infer/builder.rs @@ -56,13 +56,13 @@ use crate::types::class::{CodeGeneratorKind, FieldKind, MetaclassErrorKind, Meth use crate::types::context::{InNoTypeCheck, InferContext}; use crate::types::cyclic::CycleDetector; use crate::types::diagnostic::{ - self, CALL_NON_CALLABLE, CONFLICTING_DECLARATIONS, CONFLICTING_METACLASS, - CYCLIC_CLASS_DEFINITION, CYCLIC_TYPE_ALIAS_DEFINITION, DIVISION_BY_ZERO, DUPLICATE_KW_ONLY, - INCONSISTENT_MRO, INVALID_ARGUMENT_TYPE, INVALID_ASSIGNMENT, INVALID_ATTRIBUTE_ACCESS, - INVALID_BASE, INVALID_DECLARATION, INVALID_GENERIC_CLASS, INVALID_KEY, - INVALID_LEGACY_TYPE_VARIABLE, INVALID_METACLASS, INVALID_NAMED_TUPLE, INVALID_NEWTYPE, - INVALID_OVERLOAD, INVALID_PARAMETER_DEFAULT, INVALID_PARAMSPEC, INVALID_PROTOCOL, - INVALID_TYPE_ARGUMENTS, INVALID_TYPE_FORM, INVALID_TYPE_GUARD_CALL, + self, CALL_NON_CALLABLE, CONFLICTING_DECLARATIONS, CONFLICTING_METACLASS, CYCLIC_CLASS_DEFINITION, + CYCLIC_TYPE_ALIAS_DEFINITION, DIVISION_BY_ZERO, DUPLICATE_KW_ONLY, INCONSISTENT_MRO, + INVALID_ARGUMENT_TYPE, INVALID_ASSIGNMENT, INVALID_ATTRIBUTE_ACCESS, INVALID_BASE, + INVALID_DECLARATION, INVALID_GENERIC_CLASS, INVALID_KEY, INVALID_LEGACY_TYPE_VARIABLE, + INVALID_METACLASS, INVALID_NAMED_TUPLE, INVALID_NEWTYPE, INVALID_OVERLOAD, + INVALID_PARAMETER_DEFAULT, INVALID_PARAMSPEC, INVALID_PROTOCOL, INVALID_TYPE_ARGUMENTS, + INVALID_TYPE_FORM, INVALID_TYPE_GUARD_CALL, INVALID_TYPE_PARAM_ORDER, INVALID_TYPE_VARIABLE_CONSTRAINTS, IncompatibleBases, NON_SUBSCRIPTABLE, POSSIBLY_MISSING_ATTRIBUTE, POSSIBLY_MISSING_IMPLICIT_CALL, POSSIBLY_MISSING_IMPORT, SUBCLASS_OF_FINAL_CLASS, UNDEFINED_REVEAL, UNRESOLVED_ATTRIBUTE, UNRESOLVED_GLOBAL, @@ -950,22 +950,24 @@ impl<'db, 'ast> TypeInferenceBuilder<'db, 'ast> { } } - let type_vars = class.typevars_referenced_in_definition(self.db()); - let mut seen_default = false; - for type_var in type_vars { - let has_default = type_var - .typevar(self.db()) - .default_type(self.db()) - .is_some(); - if seen_default && !has_default { - report_invalid_type_param_order( - &self.context, - class, - type_var.typevar(self.db()).name(self.db()).as_str(), - ); - } - if has_default { - seen_default = true; + if self.context.is_lint_enabled(&INVALID_TYPE_PARAM_ORDER) { + let type_vars = class.typevars_referenced_in_definition(self.db()); + let mut seen_default = false; + for type_var in type_vars { + let has_default = type_var + .typevar(self.db()) + .default_type(self.db()) + .is_some(); + if seen_default && !has_default { + report_invalid_type_param_order( + &self.context, + class, + type_var.typevar(self.db()).name(self.db()).as_str(), + ); + } + if has_default { + seen_default = true; + } } } let scope = class.body_scope(self.db()).scope(self.db());