Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide/src/hover/render.rs')
| -rw-r--r-- | crates/ide/src/hover/render.rs | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/crates/ide/src/hover/render.rs b/crates/ide/src/hover/render.rs index c493e3e2fb..b0edec56ff 100644 --- a/crates/ide/src/hover/render.rs +++ b/crates/ide/src/hover/render.rs @@ -237,9 +237,15 @@ pub(super) fn keyword( if !token.kind().is_keyword() || !config.documentation.is_some() { return None; } - let famous_defs = FamousDefs(sema, sema.scope(&token.parent()?).krate()); - // std exposes {}_keyword modules with docstrings on the root to document keywords - let keyword_mod = format!("{}_keyword", token.text()); + let parent = token.parent()?; + let famous_defs = FamousDefs(sema, sema.scope(&parent).krate()); + let keyword_mod = if token.kind() == T![fn] && ast::FnPtrType::cast(parent).is_some() { + // treat fn keyword inside function pointer type as primitive + format!("prim_{}", token.text()) + } else { + // std exposes {}_keyword modules with docstrings on the root to document keywords + format!("{}_keyword", token.text()) + }; let doc_owner = find_std_module(&famous_defs, &keyword_mod)?; let docs = doc_owner.attrs(sema.db).docs()?; let markup = process_markup( |