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
commit cc2d75d0f8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 138 deletions

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
);

View file

@ -77,12 +77,6 @@ impl MockDatabase {
(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 @@ impl MockDatabase {
}
}
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 @@ impl MockDatabase {
.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
}}
}

View file

@ -2,8 +2,7 @@ use std::fmt::Write;
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 @@ mod coercion;
#[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 @@ impl S {
}
"#,
);
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 @@ mod 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 @@ mod boxed {
"#,
);
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 @@ mod result {
"#,
);
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 @@ mod collections {
}
"#,
);
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 @@ mod foo {
}
"#,
);
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 @@ fn test() { S.foo()<|>; }
#[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 @@ fn test() { (&S).foo()<|>; }
#[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 @@ mod foo {
}
"#,
);
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));
}