mirror of
https://github.com/rust-lang/rust-analyzer
synced 2025-01-09 03:38:47 +00:00
76 lines
2 KiB
Rust
76 lines
2 KiB
Rust
|
use base_db::{fixture::WithFixture, SourceDatabase};
|
||
|
use test_utils::mark;
|
||
|
|
||
|
use crate::{test_db::TestDB, ModuleDefId};
|
||
|
|
||
|
use super::*;
|
||
|
|
||
|
fn lower(ra_fixture: &str) -> Arc<Body> {
|
||
|
let (db, file_id) = crate::test_db::TestDB::with_single_file(ra_fixture);
|
||
|
|
||
|
let krate = db.crate_graph().iter().next().unwrap();
|
||
|
let def_map = db.crate_def_map(krate);
|
||
|
let module = def_map.modules_for_file(file_id).next().unwrap();
|
||
|
let module = &def_map[module];
|
||
|
let fn_def = match module.scope.declarations().next().unwrap() {
|
||
|
ModuleDefId::FunctionId(it) => it,
|
||
|
_ => panic!(),
|
||
|
};
|
||
|
|
||
|
db.body(fn_def.into())
|
||
|
}
|
||
|
|
||
|
fn check_diagnostics(ra_fixture: &str) {
|
||
|
let db: TestDB = TestDB::with_files(ra_fixture);
|
||
|
db.check_diagnostics();
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
fn your_stack_belongs_to_me() {
|
||
|
mark::check!(your_stack_belongs_to_me);
|
||
|
lower(
|
||
|
"
|
||
|
macro_rules! n_nuple {
|
||
|
($e:tt) => ();
|
||
|
($($rest:tt)*) => {{
|
||
|
(n_nuple!($($rest)*)None,)
|
||
|
}};
|
||
|
}
|
||
|
fn main() { n_nuple!(1,2,3); }
|
||
|
",
|
||
|
);
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
fn cfg_diagnostics() {
|
||
|
check_diagnostics(
|
||
|
r"
|
||
|
fn f() {
|
||
|
// The three g̶e̶n̶d̶e̶r̶s̶ statements:
|
||
|
|
||
|
#[cfg(a)] fn f() {} // Item statement
|
||
|
//^^^^^^^^^^^^^^^^^^^ code is inactive due to #[cfg] directives: a is disabled
|
||
|
#[cfg(a)] {} // Expression statement
|
||
|
//^^^^^^^^^^^^ code is inactive due to #[cfg] directives: a is disabled
|
||
|
#[cfg(a)] let x = 0; // let statement
|
||
|
//^^^^^^^^^^^^^^^^^^^^ code is inactive due to #[cfg] directives: a is disabled
|
||
|
|
||
|
abc(#[cfg(a)] 0);
|
||
|
//^^^^^^^^^^^ code is inactive due to #[cfg] directives: a is disabled
|
||
|
let x = Struct {
|
||
|
#[cfg(a)] f: 0,
|
||
|
//^^^^^^^^^^^^^^ code is inactive due to #[cfg] directives: a is disabled
|
||
|
};
|
||
|
match () {
|
||
|
() => (),
|
||
|
#[cfg(a)] () => (),
|
||
|
//^^^^^^^^^^^^^^^^^^ code is inactive due to #[cfg] directives: a is disabled
|
||
|
}
|
||
|
|
||
|
#[cfg(a)] 0 // Trailing expression of block
|
||
|
//^^^^^^^^^^^ code is inactive due to #[cfg] directives: a is disabled
|
||
|
}
|
||
|
",
|
||
|
);
|
||
|
}
|