Skip to content

Commit 9c44cb8

Browse files
authored
Merge pull request #21171 from Veykril/push-puuqoostoysw
minor: Option-box `crate_lang_items` query result
2 parents b35a995 + e8bb59b commit 9c44cb8

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

src/tools/rust-analyzer/crates/hir-def/src/lang_item.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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 {
102102
pub 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

Comments
 (0)