From 713870ee0c51a11dc0d2a5b8eafbc2624d42c359 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Tue, 28 Jan 2020 18:03:24 +0200 Subject: Add the tests --- crates/ra_hir_def/src/find_path.rs | 41 ++++++++++++++++++++++++++++++++++++++ crates/ra_hir_def/src/marks.rs | 1 + 2 files changed, 42 insertions(+) (limited to 'crates/ra_hir_def') diff --git a/crates/ra_hir_def/src/find_path.rs b/crates/ra_hir_def/src/find_path.rs index ebfd6e211..43b9b124a 100644 --- a/crates/ra_hir_def/src/find_path.rs +++ b/crates/ra_hir_def/src/find_path.rs @@ -8,6 +8,7 @@ use crate::{ CrateId, ModuleDefId, ModuleId, }; use hir_expand::name::{known, Name}; +use test_utils::tested_by; const MAX_PATH_LEN: usize = 15; @@ -151,8 +152,10 @@ fn find_path_inner( fn select_best_path(old_path: ModPath, new_path: ModPath) -> ModPath { if old_path.starts_with_std() && new_path.should_start_with_std() { + tested_by!(prefer_std_paths); old_path } else if new_path.starts_with_std() && old_path.should_start_with_std() { + tested_by!(prefer_std_paths); new_path } else if new_path.len() < old_path.len() { new_path @@ -231,6 +234,7 @@ mod tests { use hir_expand::hygiene::Hygiene; use ra_db::fixture::WithFixture; use ra_syntax::ast::AstNode; + use test_utils::covers; /// `code` needs to contain a cursor marker; checks that `find_path` for the /// item the `path` refers to returns that same path when called from the @@ -482,4 +486,41 @@ mod tests { "#; check_found_path(code, "crate::foo::S"); } + + #[test] + fn prefer_std_paths_over_alloc() { + covers!(prefer_std_paths); + let code = r#" + //- /main.rs crate:main deps:alloc,std + <|> + + //- /std.rs crate:std deps:alloc + pub mod sync { + pub use alloc::sync::Arc; + } + + //- /zzz.rs crate:alloc + pub mod sync { + pub struct Arc; + } + "#; + check_found_path(code, "std::sync::Arc"); + } + + #[test] + fn prefer_shorter_paths_if_not_alloc() { + let code = r#" + //- /main.rs crate:main deps:megaalloc,std + <|> + + //- /std.rs crate:std deps:megaalloc + pub mod sync { + pub use megaalloc::sync::Arc; + } + + //- /zzz.rs crate:megaalloc + pub struct Arc; + "#; + check_found_path(code, "megaalloc::Arc"); + } } diff --git a/crates/ra_hir_def/src/marks.rs b/crates/ra_hir_def/src/marks.rs index 457ba4abe..daa49d5f1 100644 --- a/crates/ra_hir_def/src/marks.rs +++ b/crates/ra_hir_def/src/marks.rs @@ -13,4 +13,5 @@ test_utils::marks!( macro_dollar_crate_self macro_dollar_crate_other infer_resolve_while_let + prefer_std_paths ); -- cgit v1.2.3