@@ -31,8 +31,8 @@ impl_from!(
3131) ;
3232
3333/// Salsa query. This will look for lang items in a specific crate.
34- #[ salsa_macros:: tracked( returns( ref ) ) ]
35- pub fn crate_lang_items ( db : & dyn DefDatabase , krate : Crate ) -> LangItems {
34+ #[ salsa_macros:: tracked( returns( as_deref ) ) ]
35+ pub fn crate_lang_items ( db : & dyn DefDatabase , krate : Crate ) -> Option < Box < LangItems > > {
3636 let _p = tracing:: info_span!( "crate_lang_items_query" ) . entered ( ) ;
3737
3838 let mut lang_items = LangItems :: default ( ) ;
@@ -93,7 +93,7 @@ pub fn crate_lang_items(db: &dyn DefDatabase, krate: Crate) -> LangItems {
9393 }
9494 }
9595
96- lang_items
96+ if lang_items. is_empty ( ) { None } else { Some ( Box :: new ( lang_items ) ) }
9797}
9898
9999/// Salsa query. Look for a lang items, starting from the specified crate and recursively
@@ -102,7 +102,7 @@ pub fn crate_lang_items(db: &dyn DefDatabase, krate: Crate) -> LangItems {
102102pub fn lang_items ( db : & dyn DefDatabase , start_crate : Crate ) -> LangItems {
103103 let _p = tracing:: info_span!( "lang_items_query" ) . entered ( ) ;
104104
105- let mut result = crate_lang_items ( db, start_crate) . clone ( ) ;
105+ let mut result = crate_lang_items ( db, start_crate) . cloned ( ) . unwrap_or_default ( ) ;
106106
107107 // Our `CrateGraph` eagerly inserts sysroot dependencies like `core` or `std` into dependencies
108108 // even if the target crate has `#![no_std]`, `#![no_core]` or shadowed sysroot dependencies
@@ -174,6 +174,10 @@ macro_rules! language_item_table {
174174 }
175175
176176 impl LangItems {
177+ fn is_empty( & self ) -> bool {
178+ $( self . $lang_item. is_none( ) ) &&*
179+ }
180+
177181 /// Merges `self` with `other`, with preference to `self` items.
178182 fn merge_prefer_self( & mut self , other: & Self ) {
179183 $( self . $lang_item = self . $lang_item. or( other. $lang_item) ; ) *
0 commit comments