mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-27 20:42:04 +00:00
Factor out token ranking
This commit is contained in:
parent
52a03ec237
commit
ca3699bd50
4 changed files with 37 additions and 36 deletions
|
@ -11,7 +11,7 @@ use ide_db::{
|
|||
defs::{Definition, IdentClass, NameRefClass, OperatorClass},
|
||||
famous_defs::FamousDefs,
|
||||
helpers::pick_best_token,
|
||||
FileRange, FxIndexSet, RootDatabase,
|
||||
FileRange, FxIndexSet, Ranker, RootDatabase,
|
||||
};
|
||||
use itertools::{multizip, Itertools};
|
||||
use span::Edition;
|
||||
|
@ -182,27 +182,13 @@ fn hover_offset(
|
|||
// equivalency is more important
|
||||
let mut descended = sema.descend_into_macros(original_token.clone());
|
||||
|
||||
let kind = original_token.kind();
|
||||
let text = original_token.text();
|
||||
let ident_kind = kind.is_any_identifier();
|
||||
let ranker = Ranker::from_token(&original_token);
|
||||
|
||||
descended.sort_by_cached_key(|tok| {
|
||||
let tok_kind = tok.kind();
|
||||
|
||||
let exact_same_kind = tok_kind == kind;
|
||||
let both_idents = exact_same_kind || (tok_kind.is_any_identifier() && ident_kind);
|
||||
let same_text = tok.text() == text;
|
||||
// anything that mapped into a token tree has likely no semantic information
|
||||
let no_tt_parent = tok.parent().map_or(false, |it| it.kind() != TOKEN_TREE);
|
||||
!((both_idents as usize)
|
||||
| ((exact_same_kind as usize) << 1)
|
||||
| ((same_text as usize) << 2)
|
||||
| ((no_tt_parent as usize) << 3))
|
||||
});
|
||||
descended.sort_by_cached_key(|tok| ranker.rank_token(tok));
|
||||
|
||||
let mut res = vec![];
|
||||
for token in descended {
|
||||
let is_same_kind = token.kind() == kind;
|
||||
let is_same_kind = token.kind() == ranker.kind;
|
||||
let lint_hover = (|| {
|
||||
// FIXME: Definition should include known lints and the like instead of having this special case here
|
||||
let attr = token.parent_ancestors().find_map(ast::Attr::cast)?;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue