@@ -24,7 +24,7 @@ use hir_def::{
2424 expr:: { BindingAnnotation , ExprId , ExprOrPatId , PatId } ,
2525 lang_item:: { LangItem , LangItemTarget } ,
2626 layout:: Integer ,
27- path:: { path , Path } ,
27+ path:: Path ,
2828 resolver:: { HasResolver , ResolveValueResult , Resolver , TypeNs , ValueNs } ,
2929 type_ref:: TypeRef ,
3030 AdtId , AssocItemId , DefWithBodyId , EnumVariantId , FieldId , FunctionId , HasModule ,
@@ -923,26 +923,24 @@ impl<'a> InferenceContext<'a> {
923923 }
924924
925925 fn resolve_into_iter_item ( & self ) -> Option < TypeAliasId > {
926- let path = path ! [ core:: iter:: IntoIterator ] ;
927- let trait_ = self . resolver . resolve_known_trait ( self . db . upcast ( ) , & path) ?;
926+ let ItemContainerId :: TraitId ( trait_) = self . resolve_lang_item ( LangItem :: IntoIterIntoIter ) ?
927+ . as_function ( ) ?
928+ . lookup ( self . db . upcast ( ) ) . container
929+ else { return None } ;
928930 self . db . trait_data ( trait_) . associated_type_by_name ( & name ! [ IntoIter ] )
929931 }
930932
931933 fn resolve_iterator_item ( & self ) -> Option < TypeAliasId > {
932- let path = path ! [ core:: iter:: Iterator ] ;
933- let trait_ = self . resolver . resolve_known_trait ( self . db . upcast ( ) , & path) ?;
934+ let ItemContainerId :: TraitId ( trait_) = self . resolve_lang_item ( LangItem :: IteratorNext ) ?
935+ . as_function ( ) ?
936+ . lookup ( self . db . upcast ( ) ) . container
937+ else { return None } ;
934938 self . db . trait_data ( trait_) . associated_type_by_name ( & name ! [ Item ] )
935939 }
936940
937941 fn resolve_ops_try_ok ( & self ) -> Option < TypeAliasId > {
938- // FIXME resolve via lang_item once try v2 is stable
939- let path = path ! [ core:: ops:: Try ] ;
940- let trait_ = self . resolver . resolve_known_trait ( self . db . upcast ( ) , & path) ?;
941- let trait_data = self . db . trait_data ( trait_) ;
942- trait_data
943- // FIXME remove once try v2 is stable
944- . associated_type_by_name ( & name ! [ Ok ] )
945- . or_else ( || trait_data. associated_type_by_name ( & name ! [ Output ] ) )
942+ let trait_ = self . resolve_lang_item ( LangItem :: Try ) ?. as_trait ( ) ?;
943+ self . db . trait_data ( trait_) . associated_type_by_name ( & name ! [ Output ] )
946944 }
947945
948946 fn resolve_ops_neg_output ( & self ) -> Option < TypeAliasId > {
@@ -956,10 +954,12 @@ impl<'a> InferenceContext<'a> {
956954 }
957955
958956 fn resolve_future_future_output ( & self ) -> Option < TypeAliasId > {
959- let trait_ = self
960- . resolver
961- . resolve_known_trait ( self . db . upcast ( ) , & path ! [ core:: future:: IntoFuture ] )
962- . or_else ( || self . resolve_lang_item ( LangItem :: Future ) ?. as_trait ( ) ) ?;
957+ let ItemContainerId :: TraitId ( trait_) = self
958+ . resolve_lang_item ( LangItem :: IntoFutureIntoFuture ) ?
959+ . as_function ( ) ?
960+ . lookup ( self . db . upcast ( ) )
961+ . container
962+ else { return None } ;
963963 self . db . trait_data ( trait_) . associated_type_by_name ( & name ! [ Output ] )
964964 }
965965
@@ -969,38 +969,32 @@ impl<'a> InferenceContext<'a> {
969969 }
970970
971971 fn resolve_range_full ( & self ) -> Option < AdtId > {
972- let path = path ! [ core:: ops:: RangeFull ] ;
973- let struct_ = self . resolver . resolve_known_struct ( self . db . upcast ( ) , & path) ?;
972+ let struct_ = self . resolve_lang_item ( LangItem :: RangeFull ) ?. as_struct ( ) ?;
974973 Some ( struct_. into ( ) )
975974 }
976975
977976 fn resolve_range ( & self ) -> Option < AdtId > {
978- let path = path ! [ core:: ops:: Range ] ;
979- let struct_ = self . resolver . resolve_known_struct ( self . db . upcast ( ) , & path) ?;
977+ let struct_ = self . resolve_lang_item ( LangItem :: Range ) ?. as_struct ( ) ?;
980978 Some ( struct_. into ( ) )
981979 }
982980
983981 fn resolve_range_inclusive ( & self ) -> Option < AdtId > {
984- let path = path ! [ core:: ops:: RangeInclusive ] ;
985- let struct_ = self . resolver . resolve_known_struct ( self . db . upcast ( ) , & path) ?;
982+ let struct_ = self . resolve_lang_item ( LangItem :: RangeInclusiveStruct ) ?. as_struct ( ) ?;
986983 Some ( struct_. into ( ) )
987984 }
988985
989986 fn resolve_range_from ( & self ) -> Option < AdtId > {
990- let path = path ! [ core:: ops:: RangeFrom ] ;
991- let struct_ = self . resolver . resolve_known_struct ( self . db . upcast ( ) , & path) ?;
987+ let struct_ = self . resolve_lang_item ( LangItem :: RangeFrom ) ?. as_struct ( ) ?;
992988 Some ( struct_. into ( ) )
993989 }
994990
995991 fn resolve_range_to ( & self ) -> Option < AdtId > {
996- let path = path ! [ core:: ops:: RangeTo ] ;
997- let struct_ = self . resolver . resolve_known_struct ( self . db . upcast ( ) , & path) ?;
992+ let struct_ = self . resolve_lang_item ( LangItem :: RangeTo ) ?. as_struct ( ) ?;
998993 Some ( struct_. into ( ) )
999994 }
1000995
1001996 fn resolve_range_to_inclusive ( & self ) -> Option < AdtId > {
1002- let path = path ! [ core:: ops:: RangeToInclusive ] ;
1003- let struct_ = self . resolver . resolve_known_struct ( self . db . upcast ( ) , & path) ?;
997+ let struct_ = self . resolve_lang_item ( LangItem :: RangeToInclusive ) ?. as_struct ( ) ?;
1004998 Some ( struct_. into ( ) )
1005999 }
10061000
0 commit comments