2018-08-17 08:04:34 -05:00
|
|
|
extern crate libanalysis;
|
2018-08-25 06:26:34 -05:00
|
|
|
extern crate test_utils;
|
2018-08-17 08:04:34 -05:00
|
|
|
|
|
|
|
use std::path::PathBuf;
|
|
|
|
|
|
|
|
use libanalysis::{WorldState, FileId};
|
2018-08-25 06:26:34 -05:00
|
|
|
use test_utils::assert_eq_dbg;
|
2018-08-17 08:04:34 -05:00
|
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_resolve_module() {
|
|
|
|
let mut world = WorldState::new();
|
|
|
|
world.change_file(FileId(1), Some("mod foo;".to_string()));
|
|
|
|
world.change_file(FileId(2), Some("".to_string()));
|
|
|
|
|
|
|
|
let snap = world.snapshot(|id, path| {
|
|
|
|
assert_eq!(id, FileId(1));
|
|
|
|
if path == PathBuf::from("../foo/mod.rs") {
|
|
|
|
return None;
|
|
|
|
}
|
|
|
|
assert_eq!(path, PathBuf::from("../foo.rs"));
|
|
|
|
Some(FileId(2))
|
|
|
|
});
|
|
|
|
let symbols = snap.approximately_resolve_symbol(FileId(1), 4.into())
|
|
|
|
.unwrap();
|
|
|
|
assert_eq_dbg(
|
|
|
|
r#"[(FileId(2), FileSymbol { name: "foo", node_range: [0; 0), kind: MODULE })]"#,
|
|
|
|
&symbols,
|
|
|
|
);
|
|
|
|
|
|
|
|
let snap = world.snapshot(|id, path| {
|
|
|
|
assert_eq!(id, FileId(1));
|
|
|
|
if path == PathBuf::from("../foo.rs") {
|
|
|
|
return None;
|
|
|
|
}
|
|
|
|
assert_eq!(path, PathBuf::from("../foo/mod.rs"));
|
|
|
|
Some(FileId(2))
|
|
|
|
});
|
|
|
|
let symbols = snap.approximately_resolve_symbol(FileId(1), 4.into())
|
|
|
|
.unwrap();
|
|
|
|
assert_eq_dbg(
|
|
|
|
r#"[(FileId(2), FileSymbol { name: "foo", node_range: [0; 0), kind: MODULE })]"#,
|
|
|
|
&symbols,
|
|
|
|
);
|
|
|
|
}
|
2018-08-21 10:30:10 -05:00
|
|
|
|
2018-08-27 12:58:38 -05:00
|
|
|
#[test]
|
|
|
|
fn test_unresolved_module_diagnostic() {
|
|
|
|
let mut world = WorldState::new();
|
|
|
|
world.change_file(FileId(1), Some("mod foo;".to_string()));
|
|
|
|
|
|
|
|
let snap = world.snapshot(|_id, _path| None);
|
|
|
|
let diagnostics = snap.diagnostics(FileId(1)).unwrap();
|
|
|
|
assert_eq_dbg(
|
2018-08-27 13:10:02 -05:00
|
|
|
r#"[(Diagnostic { range: [4; 7), msg: "unresolved module" },
|
|
|
|
Some(CreateFile("../foo.rs")))]"#,
|
2018-08-27 12:58:38 -05:00
|
|
|
&diagnostics,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2018-08-21 10:30:10 -05:00
|
|
|
#[test]
|
|
|
|
fn test_resolve_parent_module() {
|
|
|
|
let mut world = WorldState::new();
|
|
|
|
world.change_file(FileId(1), Some("mod foo;".to_string()));
|
|
|
|
world.change_file(FileId(2), Some("".to_string()));
|
|
|
|
|
|
|
|
let snap = world.snapshot(|id, path| {
|
|
|
|
assert_eq!(id, FileId(1));
|
|
|
|
if path == PathBuf::from("../foo/mod.rs") {
|
|
|
|
return None;
|
|
|
|
}
|
|
|
|
assert_eq!(path, PathBuf::from("../foo.rs"));
|
|
|
|
Some(FileId(2))
|
|
|
|
});
|
|
|
|
let symbols = snap.parent_module(FileId(2));
|
|
|
|
assert_eq_dbg(
|
|
|
|
r#"[(FileId(1), FileSymbol { name: "foo", node_range: [0; 8), kind: MODULE })]"#,
|
|
|
|
&symbols,
|
|
|
|
);
|
|
|
|
}
|