mirror of
				https://github.com/rust-lang/rust-analyzer.git
				synced 2025-11-03 13:13:18 +00:00 
			
		
		
		
	Include generics when lowering extern type
This commit is contained in:
		
							parent
							
								
									fa00326247
								
							
						
					
					
						commit
						e350bc2cf5
					
				@ -1976,14 +1976,14 @@ fn type_for_type_alias(db: &dyn HirDatabase, t: TypeAliasId) -> Binders<Ty> {
 | 
			
		||||
        .with_impl_trait_mode(ImplTraitLoweringMode::Opaque)
 | 
			
		||||
        .with_type_param_mode(ParamLoweringMode::Variable);
 | 
			
		||||
    let type_alias_data = db.type_alias_data(t);
 | 
			
		||||
    if type_alias_data.is_extern {
 | 
			
		||||
        Binders::empty(Interner, TyKind::Foreign(crate::to_foreign_def_id(t)).intern(Interner))
 | 
			
		||||
    let inner = if type_alias_data.is_extern {
 | 
			
		||||
        TyKind::Foreign(crate::to_foreign_def_id(t)).intern(Interner)
 | 
			
		||||
    } else {
 | 
			
		||||
        let type_ref = &type_alias_data.type_ref;
 | 
			
		||||
        let inner = ctx.lower_ty(type_ref.as_deref().unwrap_or(&TypeRef::Error));
 | 
			
		||||
        ctx.lower_ty(type_ref.as_deref().unwrap_or(&TypeRef::Error))
 | 
			
		||||
    };
 | 
			
		||||
    make_binders(db, &generics, inner)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
 | 
			
		||||
pub enum TyDefId {
 | 
			
		||||
 | 
			
		||||
@ -2195,3 +2195,19 @@ impl<'a, T: Deref<Target = impl Trait>> Struct<'a, T> {
 | 
			
		||||
        "#]],
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[test]
 | 
			
		||||
fn issue_17767() {
 | 
			
		||||
    check_infer(
 | 
			
		||||
        r#"
 | 
			
		||||
extern "C" {
 | 
			
		||||
    type Foo<T>;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn f() -> Foo {}
 | 
			
		||||
"#,
 | 
			
		||||
        expect![[r#"
 | 
			
		||||
            47..49 '{}': Foo
 | 
			
		||||
        "#]],
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user