Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide/src/doc_links/tests.rs')
-rw-r--r--crates/ide/src/doc_links/tests.rs36
1 files changed, 32 insertions, 4 deletions
diff --git a/crates/ide/src/doc_links/tests.rs b/crates/ide/src/doc_links/tests.rs
index 6af156fa66..72436307d2 100644
--- a/crates/ide/src/doc_links/tests.rs
+++ b/crates/ide/src/doc_links/tests.rs
@@ -4,6 +4,7 @@ use expect_test::{Expect, expect};
use hir::Semantics;
use ide_db::{
FilePosition, FileRange, RootDatabase,
+ base_db::salsa,
defs::Definition,
documentation::{DocsRangeMap, Documentation, HasDocs},
};
@@ -46,7 +47,8 @@ fn check_rewrite(#[rust_analyzer::rust_fixture] ra_fixture: &str, expect: Expect
let (analysis, position) = fixture::position(ra_fixture);
let sema = &Semantics::new(&analysis.db);
let (cursor_def, docs, range) = def_under_cursor(sema, &position);
- let res = rewrite_links(sema.db, docs.as_str(), cursor_def, Some(range));
+ let res =
+ salsa::attach(sema.db, || rewrite_links(sema.db, docs.as_str(), cursor_def, Some(range)));
expect.assert_eq(&res)
}
@@ -63,9 +65,11 @@ fn check_doc_links(#[rust_analyzer::rust_fixture] ra_fixture: &str) {
.flat_map(|(text_range, link, ns)| {
let attr = range.map(text_range);
let is_inner_attr = attr.map(|(_file, attr)| attr.is_inner_attr()).unwrap_or(false);
- let def = resolve_doc_path_for_def(sema.db, cursor_def, &link, ns, is_inner_attr)
- .unwrap_or_else(|| panic!("Failed to resolve {link}"));
- def.try_to_nav(sema.db).unwrap().into_iter().zip(iter::repeat(link))
+ let def = salsa::attach(sema.db, || {
+ resolve_doc_path_for_def(sema.db, cursor_def, &link, ns, is_inner_attr)
+ .unwrap_or_else(|| panic!("Failed to resolve {link}"))
+ });
+ def.try_to_nav(sema).unwrap().into_iter().zip(iter::repeat(link))
})
.map(|(nav_target, link)| {
let range =
@@ -415,6 +419,30 @@ fn foo() {
}
#[test]
+fn external_docs_macro_export() {
+ check_external_docs(
+ r#"
+//- /lib.rs crate:foo
+pub mod inner {
+ #[macro_export]
+ macro_rules! my_macro {
+ () => {};
+ }
+}
+
+//- /main.rs crate:bar deps:foo
+fn main() {
+ foo::my_m$0acro!();
+}
+ "#,
+ Some("/home/user/project"),
+ Some(expect![[r#"https://docs.rs/foo/*/foo/macro.my_macro.html"#]]),
+ Some(expect![[r#"file:///home/user/project/doc/foo/macro.my_macro.html"#]]),
+ Some("/sysroot"),
+ );
+}
+
+#[test]
fn doc_links_items_simple() {
check_doc_links(
r#"