@@ -24,7 +24,7 @@ use hir_def::{
24
24
expr:: { BindingAnnotation , ExprId , ExprOrPatId , PatId } ,
25
25
lang_item:: { LangItem , LangItemTarget } ,
26
26
layout:: Integer ,
27
- path:: { path , Path } ,
27
+ path:: Path ,
28
28
resolver:: { HasResolver , ResolveValueResult , Resolver , TypeNs , ValueNs } ,
29
29
type_ref:: TypeRef ,
30
30
AdtId , AssocItemId , DefWithBodyId , EnumVariantId , FieldId , FunctionId , HasModule ,
@@ -923,26 +923,24 @@ impl<'a> InferenceContext<'a> {
923
923
}
924
924
925
925
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 } ;
928
930
self . db . trait_data ( trait_) . associated_type_by_name ( & name ! [ IntoIter ] )
929
931
}
930
932
931
933
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 } ;
934
938
self . db . trait_data ( trait_) . associated_type_by_name ( & name ! [ Item ] )
935
939
}
936
940
937
941
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 ] )
946
944
}
947
945
948
946
fn resolve_ops_neg_output ( & self ) -> Option < TypeAliasId > {
@@ -956,10 +954,12 @@ impl<'a> InferenceContext<'a> {
956
954
}
957
955
958
956
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 } ;
963
963
self . db . trait_data ( trait_) . associated_type_by_name ( & name ! [ Output ] )
964
964
}
965
965
@@ -969,38 +969,32 @@ impl<'a> InferenceContext<'a> {
969
969
}
970
970
971
971
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 ( ) ?;
974
973
Some ( struct_. into ( ) )
975
974
}
976
975
977
976
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 ( ) ?;
980
978
Some ( struct_. into ( ) )
981
979
}
982
980
983
981
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 ( ) ?;
986
983
Some ( struct_. into ( ) )
987
984
}
988
985
989
986
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 ( ) ?;
992
988
Some ( struct_. into ( ) )
993
989
}
994
990
995
991
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 ( ) ?;
998
993
Some ( struct_. into ( ) )
999
994
}
1000
995
1001
996
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 ( ) ?;
1004
998
Some ( struct_. into ( ) )
1005
999
}
1006
1000
0 commit comments