diff options
| author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2022-02-15 09:29:28 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-02-15 09:29:28 +0000 |
| commit | e5b6020e558c0ed6f4cfa35ee8f9a425097d8e2a (patch) | |
| tree | d40bc5cfb72a43afcbfd17ab23eeda44ee42208c | |
| parent | 9bc2ee34b0f67bb84254d5a2178bcfddde6a7924 (diff) | |
| parent | 95db3c147684ced6b5ddfd4612b21b90d6903b30 (diff) | |
| download | rust-e5b6020e558c0ed6f4cfa35ee8f9a425097d8e2a.tar.gz rust-e5b6020e558c0ed6f4cfa35ee8f9a425097d8e2a.zip | |
Merge #11480
11480: fix: keyword hover works on non-keyword tokens if expanded to keyword r=Veykril a=Veykril bors r+ Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
| -rw-r--r-- | crates/ide/src/hover.rs | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/crates/ide/src/hover.rs b/crates/ide/src/hover.rs index 21ff480df41..0eba0b09ba6 100644 --- a/crates/ide/src/hover.rs +++ b/crates/ide/src/hover.rs @@ -94,11 +94,10 @@ pub(crate) fn hover( let sema = &hir::Semantics::new(db); let file = sema.parse(file_id).syntax().clone(); - let offset = if !range.is_empty() { + if !range.is_empty() { return hover_ranged(&file, range, sema, config); - } else { - range.start() - }; + } + let offset = range.start(); let original_token = pick_best_token(file.token_at_offset(offset), |kind| match kind { IDENT | INT_NUMBER | LIFETIME_IDENT | T![self] | T![super] | T![crate] => 3, @@ -118,10 +117,11 @@ pub(crate) fn hover( let descended = sema.descend_into_macros(original_token.clone()); // FIXME: Definition should include known lints and the like instead of having this special case here - if let Some(res) = descended.iter().find_map(|token| { + let hovered_lint = descended.iter().find_map(|token| { let attr = token.ancestors().find_map(ast::Attr::cast)?; render::try_for_lint(&attr, token) - }) { + }); + if let Some(res) = hovered_lint { return Some(RangeInfo::new(original_token.text_range(), res)); } @@ -143,7 +143,9 @@ pub(crate) fn hover( if result.is_none() { // fallbacks, show keywords or types - if let Some(res) = render::keyword(sema, config, &original_token) { + + let res = descended.iter().find_map(|token| render::keyword(sema, config, &token)); + if let Some(res) = res { return Some(RangeInfo::new(original_token.text_range(), res)); } let res = descended @@ -199,6 +201,7 @@ fn hover_ranged( sema: &Semantics<RootDatabase>, config: &HoverConfig, ) -> Option<RangeInfo<HoverResult>> { + // FIXME: make this work in attributes let expr_or_pat = file.covering_element(range).ancestors().find_map(|it| { match_ast! { match it { |
