Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide/src/doc_links.rs')
-rw-r--r--crates/ide/src/doc_links.rs17
1 files changed, 10 insertions, 7 deletions
diff --git a/crates/ide/src/doc_links.rs b/crates/ide/src/doc_links.rs
index f42613637b..e9e5240897 100644
--- a/crates/ide/src/doc_links.rs
+++ b/crates/ide/src/doc_links.rs
@@ -11,7 +11,8 @@ use stdx::format_to;
use url::Url;
use hir::{
- db::HirDatabase, Adt, AsAssocItem, AssocItem, AssocItemContainer, DescendPreference, HasAttrs,
+ db::HirDatabase, sym, Adt, AsAssocItem, AssocItem, AssocItemContainer, DescendPreference,
+ HasAttrs,
};
use ide_db::{
base_db::{CrateOrigin, LangCrateOrigin, ReleaseChannel, SourceDatabase},
@@ -136,7 +137,7 @@ pub(crate) fn external_docs(
sysroot: Option<&str>,
) -> Option<DocumentationLinks> {
let sema = &Semantics::new(db);
- let file = sema.parse(file_id).syntax().clone();
+ let file = sema.parse_guess_edition(file_id).syntax().clone();
let token = pick_best_token(file.token_at_offset(offset), |kind| match kind {
IDENT | INT_NUMBER | T![self] => 3,
T!['('] | T![')'] => 2,
@@ -593,12 +594,14 @@ fn filename_and_frag_for_def(
},
Definition::Module(m) => match m.name(db) {
// `#[doc(keyword = "...")]` is internal used only by rust compiler
- Some(name) => match m.attrs(db).by_key("doc").find_string_value_in_tt("keyword") {
- Some(kw) => {
- format!("keyword.{}.html", kw.trim_matches('"'))
+ Some(name) => {
+ match m.attrs(db).by_key(&sym::doc).find_string_value_in_tt(&sym::keyword) {
+ Some(kw) => {
+ format!("keyword.{}.html", kw)
+ }
+ None => format!("{}/index.html", name.display(db.upcast())),
}
- None => format!("{}/index.html", name.display(db.upcast())),
- },
+ }
None => String::from("index.html"),
},
Definition::Trait(t) => format!("trait.{}.html", t.name(db).display(db.upcast())),