fix: Don't emit empty scip occurrence for builtins

This commit is contained in:
David Richey 2025-02-06 12:22:58 -06:00
parent ca47cddc31
commit 4d650702af

View File

@ -139,45 +139,42 @@ impl flags::Scip {
let mut occurrences = Vec::new();
let mut symbols = Vec::new();
tokens.into_iter().for_each(|(text_range, id)| {
for (text_range, id) in tokens.into_iter() {
let token = si.tokens.get(id).unwrap();
let (symbol, enclosing_symbol, is_inherent_impl) =
if let Some(TokenSymbols { symbol, enclosing_symbol, is_inherent_impl }) =
symbol_generator.token_symbols(id, token)
{
(symbol, enclosing_symbol, is_inherent_impl)
} else {
("".to_owned(), None, false)
};
let Some(TokenSymbols { symbol, enclosing_symbol, is_inherent_impl }) =
symbol_generator.token_symbols(id, token)
else {
// token did not have a moniker, so there is no reasonable occurrence to emit
// see ide::moniker::def_to_moniker
continue;
};
if !symbol.is_empty() {
let is_defined_in_this_document = match token.definition {
Some(def) => def.file_id == file_id,
_ => false,
};
if is_defined_in_this_document {
if token_ids_emitted.insert(id) {
// token_ids_emitted does deduplication. This checks that this results
// in unique emitted symbols, as otherwise references are ambiguous.
let should_emit = record_error_if_symbol_already_used(
let is_defined_in_this_document = match token.definition {
Some(def) => def.file_id == file_id,
_ => false,
};
if is_defined_in_this_document {
if token_ids_emitted.insert(id) {
// token_ids_emitted does deduplication. This checks that this results
// in unique emitted symbols, as otherwise references are ambiguous.
let should_emit = record_error_if_symbol_already_used(
symbol.clone(),
is_inherent_impl,
relative_path.as_str(),
&line_index,
text_range,
);
if should_emit {
symbols.push(compute_symbol_info(
symbol.clone(),
is_inherent_impl,
relative_path.as_str(),
&line_index,
text_range,
);
if should_emit {
symbols.push(compute_symbol_info(
symbol.clone(),
enclosing_symbol,
token,
));
}
enclosing_symbol,
token,
));
}
} else {
token_ids_referenced.insert(id);
}
} else {
token_ids_referenced.insert(id);
}
// If the range of the def and the range of the token are the same, this must be the definition.
@ -202,7 +199,7 @@ impl flags::Scip {
special_fields: Default::default(),
enclosing_range: Vec::new(),
});
});
}
if occurrences.is_empty() {
continue;