aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/module/nameres.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/module/nameres.rs')
-rw-r--r--crates/ra_hir/src/module/nameres.rs97
1 files changed, 97 insertions, 0 deletions
diff --git a/crates/ra_hir/src/module/nameres.rs b/crates/ra_hir/src/module/nameres.rs
index 837a8d5ae..de13835b2 100644
--- a/crates/ra_hir/src/module/nameres.rs
+++ b/crates/ra_hir/src/module/nameres.rs
@@ -336,3 +336,100 @@ where
336 f(module_items) 336 f(module_items)
337 } 337 }
338} 338}
339
340//TODO: move to hir
341#[cfg(test)]
342mod tests {
343 use std::sync::Arc;
344
345 use salsa::Database;
346 use ra_db::FilesDatabase;
347 use ra_syntax::SmolStr;
348
349 use crate::{
350 self as hir,
351 db::HirDatabase,
352 mock::MockDatabase,
353};
354
355 fn item_map(fixture: &str) -> (Arc<hir::ItemMap>, hir::ModuleId) {
356 let (db, pos) = MockDatabase::with_position(fixture);
357 let source_root = db.file_source_root(pos.file_id);
358 let module = hir::Module::guess_from_position(&db, pos).unwrap().unwrap();
359 let module_id = module.module_id;
360 (db.item_map(source_root).unwrap(), module_id)
361 }
362
363 #[test]
364 fn test_item_map() {
365 let (item_map, module_id) = item_map(
366 "
367 //- /lib.rs
368 mod foo;
369
370 use crate::foo::bar::Baz;
371 <|>
372
373 //- /foo/mod.rs
374 pub mod bar;
375
376 //- /foo/bar.rs
377 pub struct Baz;
378 ",
379 );
380 let name = SmolStr::from("Baz");
381 let resolution = &item_map.per_module[&module_id].items[&name];
382 assert!(resolution.def_id.is_some());
383 }
384
385 #[test]
386 fn typing_inside_a_function_should_not_invalidate_item_map() {
387 let (mut db, pos) = MockDatabase::with_position(
388 "
389 //- /lib.rs
390 mod foo;<|>
391
392 use crate::foo::bar::Baz;
393
394 fn foo() -> i32 {
395 1 + 1
396 }
397 //- /foo/mod.rs
398 pub mod bar;
399
400 //- /foo/bar.rs
401 pub struct Baz;
402 ",
403 );
404 let source_root = db.file_source_root(pos.file_id);
405 {
406 let events = db.log_executed(|| {
407 db.item_map(source_root).unwrap();
408 });
409 assert!(format!("{:?}", events).contains("item_map"))
410 }
411
412 let new_text = "
413 mod foo;
414
415 use crate::foo::bar::Baz;
416
417 fn foo() -> i32 { 92 }
418 "
419 .to_string();
420
421 db.query_mut(ra_db::FileTextQuery)
422 .set(pos.file_id, Arc::new(new_text));
423
424 {
425 let events = db.log_executed(|| {
426 db.item_map(source_root).unwrap();
427 });
428 assert!(
429 !format!("{:?}", events).contains("_item_map"),
430 "{:#?}",
431 events
432 )
433 }
434 }
435}