@@ -469,16 +469,22 @@ impl<'db> TypeInferenceBuilder<'db> {
469
469
let class_definitions = self
470
470
. types
471
471
. declarations
472
- . values ( )
473
- . filter_map ( |ty| ty. into_class_literal ( ) )
474
- . map ( |class_ty| class_ty. class ) ;
472
+ . iter ( )
473
+ . filter_map ( |( definition, ty) | {
474
+ // Filter out class literals that result from imports
475
+ if let DefinitionKind :: Class ( class) = definition. kind ( self . db ) {
476
+ ty. into_class_literal ( ) . map ( |ty| ( ty. class , class. node ( ) ) )
477
+ } else {
478
+ None
479
+ }
480
+ } ) ;
475
481
476
482
// Iterate through all class definitions in this scope.
477
- for class in class_definitions {
483
+ for ( class, class_node ) in class_definitions {
478
484
// (1) Check that the class does not have a cyclic definition
479
485
if class. is_cyclically_defined ( self . db ) {
480
486
self . diagnostics . add (
481
- class . node ( self . db ) . into ( ) ,
487
+ class_node . into ( ) ,
482
488
"cyclic-class-def" ,
483
489
format_args ! (
484
490
"Cyclic definition of `{}` or bases of `{}` (class cannot inherit from itself)" ,
@@ -495,7 +501,7 @@ impl<'db> TypeInferenceBuilder<'db> {
495
501
if let Err ( mro_error) = class. try_mro ( self . db ) . as_ref ( ) {
496
502
match mro_error. reason ( ) {
497
503
MroErrorKind :: DuplicateBases ( duplicates) => {
498
- let base_nodes = class . node ( self . db ) . bases ( ) ;
504
+ let base_nodes = class_node . bases ( ) ;
499
505
for ( index, duplicate) in duplicates {
500
506
self . diagnostics . add (
501
507
( & base_nodes[ * index] ) . into ( ) ,
@@ -505,7 +511,7 @@ impl<'db> TypeInferenceBuilder<'db> {
505
511
}
506
512
}
507
513
MroErrorKind :: InvalidBases ( bases) => {
508
- let base_nodes = class . node ( self . db ) . bases ( ) ;
514
+ let base_nodes = class_node . bases ( ) ;
509
515
for ( index, base_ty) in bases {
510
516
self . diagnostics . add (
511
517
( & base_nodes[ * index] ) . into ( ) ,
@@ -518,7 +524,7 @@ impl<'db> TypeInferenceBuilder<'db> {
518
524
}
519
525
}
520
526
MroErrorKind :: UnresolvableMro { bases_list } => self . diagnostics . add (
521
- class . node ( self . db ) . into ( ) ,
527
+ class_node . into ( ) ,
522
528
"inconsistent-mro" ,
523
529
format_args ! (
524
530
"Cannot create a consistent method resolution order (MRO) for class `{}` with bases list `[{}]`" ,
@@ -545,7 +551,7 @@ impl<'db> TypeInferenceBuilder<'db> {
545
551
} ,
546
552
candidate1_is_base_class,
547
553
} => {
548
- let node = class . node ( self . db ) . into ( ) ;
554
+ let node = class_node . into ( ) ;
549
555
if * candidate1_is_base_class {
550
556
self . diagnostics . add (
551
557
node,
0 commit comments