aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/ty/tests.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/ty/tests.rs')
-rw-r--r--crates/ra_hir/src/ty/tests.rs45
1 files changed, 45 insertions, 0 deletions
diff --git a/crates/ra_hir/src/ty/tests.rs b/crates/ra_hir/src/ty/tests.rs
new file mode 100644
index 000000000..f2466dd51
--- /dev/null
+++ b/crates/ra_hir/src/ty/tests.rs
@@ -0,0 +1,45 @@
1use std::sync::Arc;
2
3use salsa::Database;
4use ra_db::{FilesDatabase, CrateGraph, SyntaxDatabase};
5use ra_syntax::{SmolStr, algo::visit::{visitor, Visitor}, ast::{self, AstNode}};
6use relative_path::RelativePath;
7
8use crate::{source_binder, mock::WORKSPACE, module::ModuleSourceNode};
9
10use crate::{
11 self as hir,
12 db::HirDatabase,
13 mock::MockDatabase,
14};
15
16fn infer_all_fns(fixture: &str) -> () {
17 let (db, source_root) = MockDatabase::with_files(fixture);
18 for &file_id in source_root.files.values() {
19 let source_file = db.source_file(file_id);
20 for fn_def in source_file.syntax().descendants().filter_map(ast::FnDef::cast) {
21 let func = source_binder::function_from_source(&db, file_id, fn_def).unwrap().unwrap();
22 let inference_result = func.infer(&db);
23 for (syntax_ptr, ty) in &inference_result.type_for {
24 let node = syntax_ptr.resolve(&source_file);
25 eprintln!("{} '{}': {:?}", syntax_ptr.range(), node.text(), ty);
26 }
27 }
28 }
29}
30
31#[test]
32fn infer_smoke_test() {
33 let text = "
34 //- /lib.rs
35 fn foo(x: u32, y: !) -> i128 {
36 x;
37 y;
38 return 1;
39 \"hello\";
40 0
41 }
42 ";
43
44 infer_all_fns(text);
45}