]> git.lizzy.rs Git - rust.git/commitdiff
try both surrounding tokens for hover
authorsucccubbus <16743652+succcubbus@users.noreply.github.com>
Fri, 13 Dec 2019 20:10:25 +0000 (21:10 +0100)
committersucccubbus <16743652+succcubbus@users.noreply.github.com>
Fri, 13 Dec 2019 20:10:25 +0000 (21:10 +0100)
crates/ra_ide/src/hover.rs

index b2909bf38af2efa9343c1071d9a50457a8951c95..5b48b1998ef6d6112d4859229b23ebc1b44c91a1 100644 (file)
@@ -1,11 +1,11 @@
 //! FIXME: write short doc here
 
-use hir::{db::AstDatabase, Adt, HasSource, HirDisplay};
+use hir::{db::AstDatabase, Adt, HasSource, HirDisplay, InFile};
 use ra_db::SourceDatabase;
 use ra_syntax::{
     algo::find_covering_element,
     ast::{self, DocCommentsOwner},
-    match_ast, AstNode,
+    match_ast, AstNode, SyntaxToken,
 };
 
 use crate::{
@@ -156,9 +156,17 @@ fn from_def_source<A, D>(db: &RootDatabase, def: D) -> Option<String>
 
 pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option<RangeInfo<HoverResult>> {
     let file = db.parse_or_expand(position.file_id.into())?;
-    let token = file.token_at_offset(position.offset).find(|it| !it.kind().is_trivia())?;
-    let token = descend_into_macros(db, position.file_id, token);
+    file.token_at_offset(position.offset)
+        .filter(|token| !token.kind().is_trivia())
+        .map(|token| descend_into_macros(db, position.file_id, token))
+        .find_map(|token| hover_token(db, position, token))
+}
 
+fn hover_token(
+    db: &RootDatabase,
+    position: FilePosition,
+    token: InFile<SyntaxToken>,
+) -> Option<RangeInfo<HoverResult>> {
     let mut res = HoverResult::new();
 
     let mut range = match_ast! {