diff --git a/crates/ra_ide_api/src/goto_definition.rs b/crates/ra_ide_api/src/goto_definition.rs
index 1833e57d599..da33739be38 100644
--- a/crates/ra_ide_api/src/goto_definition.rs
+++ b/crates/ra_ide_api/src/goto_definition.rs
@@ -110,7 +110,7 @@ pub(crate) fn reference_definition(
     Approximate(navs)
 }
 
-fn name_definition(
+pub(crate) fn name_definition(
     db: &RootDatabase,
     file_id: FileId,
     name: &ast::Name,
diff --git a/crates/ra_ide_api/src/hover.rs b/crates/ra_ide_api/src/hover.rs
index bd3b1e39682..ef3b5df292a 100644
--- a/crates/ra_ide_api/src/hover.rs
+++ b/crates/ra_ide_api/src/hover.rs
@@ -88,6 +88,18 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option<RangeIn
         if !res.is_empty() {
             range = Some(name_ref.syntax().range())
         }
+    } else if let Some(name) = find_node_at_offset::<ast::Name>(file.syntax(), position.offset) {
+        let navs = crate::goto_definition::name_definition(db, position.file_id, name);
+
+        if let Some(navs) = navs {
+            for nav in navs {
+                res.extend(doc_text_for(db, nav))
+            }
+        }
+
+        if !res.is_empty() && range.is_none() {
+            range = Some(name.syntax().range());
+        }
     }
 
     if range.is_none() {
@@ -97,7 +109,7 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option<RangeIn
         let frange = FileRange { file_id: position.file_id, range: node.range() };
         res.extend(type_of(db, frange).map(Into::into));
         range = Some(node.range());
-    };
+    }
 
     let range = range?;
     if res.is_empty() {
@@ -294,6 +306,20 @@ mod tests {
         );
     }
 
+    #[test]
+    fn hover_shows_fn_signature_on_fn_name() {
+        check_hover_result(
+            r#"
+            //- /main.rs
+            pub fn foo<|>(a: u32, b: u32) -> u32 {}
+
+            fn main() {
+            }
+        "#,
+            &["pub fn foo(a: u32, b: u32) -> u32"],
+        );
+    }
+
     #[test]
     fn hover_some() {
         let (analysis, position) = single_file_with_position(