mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-18 18:04:13 +00:00
feat: treat fn keyword inside function pointer type as primitive
This commit is contained in:
parent
9f1a3ae5ab
commit
67cc6c1e16
@ -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(
|
||||
|
@ -3382,6 +3382,30 @@ mod return_keyword {}
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn hover_keyword_as_primitive() {
|
||||
check(
|
||||
r#"
|
||||
//- /main.rs crate:main deps:std
|
||||
type F = f$0n(i32) -> i32;
|
||||
//- /libstd.rs crate:std
|
||||
/// Docs for prim_fn
|
||||
mod prim_fn {}
|
||||
"#,
|
||||
expect![[r#"
|
||||
*fn*
|
||||
|
||||
```rust
|
||||
fn
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Docs for prim_fn
|
||||
"#]],
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn hover_builtin() {
|
||||
check(
|
||||
|
Loading…
Reference in New Issue
Block a user