aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/ra_ide/src/hover.rs25
1 files changed, 25 insertions, 0 deletions
diff --git a/crates/ra_ide/src/hover.rs b/crates/ra_ide/src/hover.rs
index 177038e20..dfa0f1d97 100644
--- a/crates/ra_ide/src/hover.rs
+++ b/crates/ra_ide/src/hover.rs
@@ -174,6 +174,12 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option<RangeIn
174 .ancestors() 174 .ancestors()
175 .find(|n| ast::Expr::cast(n.clone()).is_some() || ast::Pat::cast(n.clone()).is_some())?; 175 .find(|n| ast::Expr::cast(n.clone()).is_some() || ast::Pat::cast(n.clone()).is_some())?;
176 176
177 // if this node is a MACRO_CALL, it means that `descend_into_macros` is failed to resolve.
178 // (e.g expanding a builtin macro). So we give up here.
179 if node.kind() == MACRO_CALL {
180 return None;
181 }
182
177 // FIXME: Currently `hover::typeof` do not work inside 183 // FIXME: Currently `hover::typeof` do not work inside
178 // macro expansion such that if the hover range is pointing to 184 // macro expansion such that if the hover range is pointing to
179 // a string literal, the following type_of will return None. 185 // a string literal, the following type_of will return None.
@@ -802,6 +808,25 @@ fn func(foo: i32) { if true { <|>foo; }; }
802 } 808 }
803 809
804 #[test] 810 #[test]
811 fn test_hover_through_literal_string_in_builtin_macro() {
812 check_hover_no_result(
813 r#"
814 //- /lib.rs
815 #[rustc_builtin_macro]
816 macro_rules! assert {
817 ($cond:expr) => {{ /* compiler built-in */ }};
818 ($cond:expr,) => {{ /* compiler built-in */ }};
819 ($cond:expr, $($arg:tt)+) => {{ /* compiler built-in */ }};
820 }
821
822 fn foo() {
823 assert!("hel<|>lo");
824 }
825 "#,
826 );
827 }
828
829 #[test]
805 fn test_hover_non_ascii_space_doc() { 830 fn test_hover_non_ascii_space_doc() {
806 check_hover_result( 831 check_hover_result(
807 " 832 "