mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 11:31:15 +00:00
fix: Don't emit empty scip occurrence for builtins
This commit is contained in:
parent
ca47cddc31
commit
4d650702af
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user