2172: Use new text DSL instead of crate_graph! macro r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
This commit is contained in:
bors[bot]
2019-11-04 10:30:09 +00:00
committed by GitHub
3 changed files with 25 additions and 138 deletions
-11
View File
@@ -1,21 +1,10 @@
//! See test_utils/src/marks.rs
test_utils::marks!(
bogus_paths
// FIXME: restore this mark once hir is split
name_res_works_for_broken_modules
can_import_enum_variant
type_var_cycles_resolve_completely
type_var_cycles_resolve_as_possible
type_var_resolves_to_int_var
glob_enum
glob_across_crates
std_prelude
match_ergonomics_ref
infer_while_let
macro_rules_from_other_crates_are_visible_with_macro_use
prelude_is_macro_use
coerce_merge_fail_fallback
macro_dollar_crate_self
macro_dollar_crate_other
);
-68
View File
@@ -77,12 +77,6 @@ pub fn with_single_file(text: &str) -> (MockDatabase, SourceRoot, FileId) {
(db, source_root, file_id)
}
pub fn with_position(fixture: &str) -> (MockDatabase, FilePosition) {
let (db, position) = MockDatabase::from_fixture(fixture);
let position = position.expect("expected a marker ( <|> )");
(db, position)
}
pub fn file_id_of(&self, path: &str) -> FileId {
match self.files.get(path) {
Some(it) => *it,
@@ -90,25 +84,6 @@ pub fn file_id_of(&self, path: &str) -> FileId {
}
}
pub fn set_crate_graph_from_fixture(&mut self, graph: CrateGraphFixture) {
let mut ids = FxHashMap::default();
let mut crate_graph = CrateGraph::default();
for (crate_name, (crate_root, edition, cfg_options, _)) in graph.0.iter() {
let crate_root = self.file_id_of(&crate_root);
let crate_id = crate_graph.add_crate_root(crate_root, *edition, cfg_options.clone());
Arc::make_mut(&mut self.crate_names).insert(crate_id, crate_name.clone());
ids.insert(crate_name, crate_id);
}
for (crate_name, (_, _, _, deps)) in graph.0.iter() {
let from = ids[crate_name];
for dep in deps {
let to = ids[dep];
crate_graph.add_dep(from, dep.as_str().into(), to).unwrap();
}
}
self.set_crate_graph(Arc::new(crate_graph))
}
pub fn diagnostics(&self) -> String {
let mut buf = String::new();
let mut files: Vec<FileId> = self.files.values().copied().collect();
@@ -285,46 +260,3 @@ pub fn log_executed(&self, f: impl FnOnce()) -> Vec<String> {
.collect()
}
}
#[derive(Default)]
pub struct CrateGraphFixture(pub Vec<(String, (String, Edition, CfgOptions, Vec<String>))>);
#[macro_export]
macro_rules! crate_graph {
($(
$crate_name:literal: (
$crate_path:literal,
$($edition:literal,)?
[$($dep:literal),*]
$(, cfg = {
$($key:literal $(= $value:literal)?),*
$(,)?
})?
),
)*) => {{
let mut res = $crate::mock::CrateGraphFixture::default();
$(
#[allow(unused_mut, unused_assignments)]
let mut edition = ra_db::Edition::Edition2018;
$(edition = ra_db::Edition::from_string($edition);)?
let cfg_options = {
#[allow(unused_mut)]
let mut cfg = ::ra_cfg::CfgOptions::default();
$(
$(
if 0 == 0 $(+ { drop($value); 1})? {
cfg.insert_atom($key.into());
}
$(cfg.insert_key_value($key.into(), $value.into());)?
)*
)?
cfg
};
res.0.push((
$crate_name.to_string(),
($crate_path.to_string(), edition, cfg_options, vec![$($dep.to_string()),*])
));
)*
res
}}
}
+25 -59
View File
@@ -2,8 +2,7 @@
use std::sync::Arc;
use insta::assert_snapshot;
use ra_db::{salsa::Database, FilePosition, SourceDatabase};
use ra_db::{fixture::WithFixture, salsa::Database, FilePosition, SourceDatabase};
use ra_syntax::{
algo,
ast::{self, AstNode},
@@ -25,9 +24,9 @@
#[test]
fn cfg_impl_block() {
let (mut db, pos) = MockDatabase::with_position(
let (db, pos) = MockDatabase::with_position(
r#"
//- /main.rs
//- /main.rs crate:main deps:foo cfg:test
use foo::S as T;
struct S;
@@ -46,7 +45,7 @@ fn test() {
t<|>;
}
//- /foo.rs
//- /foo.rs crate:foo
struct S;
#[cfg(not(test))]
@@ -60,18 +59,14 @@ fn foo4(&self) -> i32 { 0 }
}
"#,
);
db.set_crate_graph_from_fixture(crate_graph! {
"main": ("/main.rs", ["foo"], cfg = { "test" }),
"foo": ("/foo.rs", []),
});
assert_eq!("(i32, {unknown}, i32, {unknown})", type_at_pos(&db, pos));
}
#[test]
fn infer_await() {
let (mut db, pos) = MockDatabase::with_position(
let (db, pos) = MockDatabase::with_position(
r#"
//- /main.rs
//- /main.rs crate:main deps:std
struct IntFuture;
@@ -85,7 +80,7 @@ fn test() {
v<|>;
}
//- /std.rs
//- /std.rs crate:std
#[prelude_import] use future::*;
mod future {
trait Future {
@@ -95,18 +90,14 @@ trait Future {
"#,
);
db.set_crate_graph_from_fixture(crate_graph! {
"main": ("/main.rs", ["std"]),
"std": ("/std.rs", []),
});
assert_eq!("u64", type_at_pos(&db, pos));
}
#[test]
fn infer_box() {
let (mut db, pos) = MockDatabase::with_position(
let (db, pos) = MockDatabase::with_position(
r#"
//- /main.rs
//- /main.rs crate:main deps:std
fn test() {
let x = box 1;
@@ -114,7 +105,7 @@ fn test() {
t<|>;
}
//- /std.rs
//- /std.rs crate:std
#[prelude_import] use prelude::*;
mod prelude {}
@@ -126,10 +117,6 @@ pub struct Box<T: ?Sized> {
"#,
);
db.set_crate_graph_from_fixture(crate_graph! {
"main": ("/main.rs", ["std"]),
"std": ("/std.rs", []),
});
assert_eq!("(Box<i32>, Box<Box<i32>>, Box<&i32>, Box<[i32;_]>)", type_at_pos(&db, pos));
}
@@ -154,9 +141,9 @@ fn test() {
#[test]
fn infer_try() {
let (mut db, pos) = MockDatabase::with_position(
let (db, pos) = MockDatabase::with_position(
r#"
//- /main.rs
//- /main.rs crate:main deps:std
fn test() {
let r: Result<i32, u64> = Result::Ok(1);
@@ -164,7 +151,7 @@ fn test() {
v<|>;
}
//- /std.rs
//- /std.rs crate:std
#[prelude_import] use ops::*;
mod ops {
@@ -189,18 +176,14 @@ impl<O, E> crate::ops::Try for Result<O, E> {
"#,
);
db.set_crate_graph_from_fixture(crate_graph! {
"main": ("/main.rs", ["std"]),
"std": ("/std.rs", []),
});
assert_eq!("i32", type_at_pos(&db, pos));
}
#[test]
fn infer_for_loop() {
let (mut db, pos) = MockDatabase::with_position(
let (db, pos) = MockDatabase::with_position(
r#"
//- /main.rs
//- /main.rs crate:main deps:std
use std::collections::Vec;
@@ -212,7 +195,7 @@ fn test() {
}
}
//- /std.rs
//- /std.rs crate:std
#[prelude_import] use iter::*;
mod iter {
@@ -234,10 +217,6 @@ impl<T> crate::iter::IntoIterator for Vec<T> {
}
"#,
);
db.set_crate_graph_from_fixture(crate_graph! {
"main": ("/main.rs", ["std"]),
"std": ("/std.rs", []),
});
assert_eq!("&str", type_at_pos(&db, pos));
}
@@ -2505,15 +2484,15 @@ pub fn main_loop() {
#[test]
fn cross_crate_associated_method_call() {
let (mut db, pos) = MockDatabase::with_position(
let (db, pos) = MockDatabase::with_position(
r#"
//- /main.rs
//- /main.rs crate:main deps:other_crate
fn test() {
let x = other_crate::foo::S::thing();
x<|>;
}
//- /lib.rs
//- /lib.rs crate:other_crate
mod foo {
struct S;
impl S {
@@ -2522,10 +2501,6 @@ fn thing() -> i128 {}
}
"#,
);
db.set_crate_graph_from_fixture(crate_graph! {
"main": ("/main.rs", ["other_crate"]),
"other_crate": ("/lib.rs", []),
});
assert_eq!("i128", type_at_pos(&db, pos));
}
@@ -3403,16 +3378,15 @@ trait Trait { fn foo(self) -> u128 {} }
#[test]
fn infer_macro_with_dollar_crate_is_correct_in_expr() {
// covers!(macro_dollar_crate_other);
let (mut db, pos) = MockDatabase::with_position(
let (db, pos) = MockDatabase::with_position(
r#"
//- /main.rs
//- /main.rs crate:main deps:foo
fn test() {
let x = (foo::foo!(1), foo::foo!(2));
x<|>;
}
//- /lib.rs
//- /lib.rs crate:foo
#[macro_export]
macro_rules! foo {
(1) => { $crate::bar!() };
@@ -3427,10 +3401,6 @@ macro_rules! bar {
pub fn baz() -> usize { 31usize }
"#,
);
db.set_crate_graph_from_fixture(crate_graph! {
"main": ("/main.rs", ["foo"]),
"foo": ("/lib.rs", []),
});
assert_eq!("(i32, usize)", type_at_pos(&db, pos));
}
@@ -3512,9 +3482,9 @@ impl Trait for S { fn foo(self) -> u128 { 0 } }
#[test]
fn method_resolution_trait_from_prelude() {
let (mut db, pos) = MockDatabase::with_position(
let (db, pos) = MockDatabase::with_position(
r#"
//- /main.rs
//- /main.rs crate:main deps:other_crate
struct S;
impl Clone for S {}
@@ -3522,7 +3492,7 @@ fn test() {
S.clone()<|>;
}
//- /lib.rs
//- /lib.rs crate:other_crate
#[prelude_import] use foo::*;
mod foo {
@@ -3532,10 +3502,6 @@ trait Clone {
}
"#,
);
db.set_crate_graph_from_fixture(crate_graph! {
"main": ("/main.rs", ["other_crate"]),
"other_crate": ("/lib.rs", []),
});
assert_eq!("S", type_at_pos(&db, pos));
}