aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_ty/src/test_db.rs
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2020-07-14 15:43:39 +0100
committerAleksey Kladov <[email protected]>2020-07-14 15:44:20 +0100
commitb9070cc64e0767d2a8bde5084a61f46e2e804f5b (patch)
tree11eff9785ddae6ac25b9b74543fb36180bd20d82 /crates/ra_hir_ty/src/test_db.rs
parent5a25cc28204c6d02a5108b13568ec71914f096a5 (diff)
Refactor the test of diagnostic tests
Diffstat (limited to 'crates/ra_hir_ty/src/test_db.rs')
-rw-r--r--crates/ra_hir_ty/src/test_db.rs50
1 files changed, 2 insertions, 48 deletions
diff --git a/crates/ra_hir_ty/src/test_db.rs b/crates/ra_hir_ty/src/test_db.rs
index fb8723fb7..a1714ff0f 100644
--- a/crates/ra_hir_ty/src/test_db.rs
+++ b/crates/ra_hir_ty/src/test_db.rs
@@ -5,19 +5,13 @@ use std::{
5 sync::{Arc, Mutex}, 5 sync::{Arc, Mutex},
6}; 6};
7 7
8use hir_def::{db::DefDatabase, AssocItemId, ModuleDefId, ModuleId}; 8use hir_def::{db::DefDatabase, ModuleId};
9use hir_expand::{ 9use hir_expand::db::AstDatabase;
10 db::AstDatabase,
11 diagnostics::{Diagnostic, DiagnosticSink},
12};
13use ra_db::{salsa, CrateId, FileId, FileLoader, FileLoaderDelegate, SourceDatabase, Upcast}; 10use ra_db::{salsa, CrateId, FileId, FileLoader, FileLoaderDelegate, SourceDatabase, Upcast};
14use ra_syntax::TextRange; 11use ra_syntax::TextRange;
15use rustc_hash::{FxHashMap, FxHashSet}; 12use rustc_hash::{FxHashMap, FxHashSet};
16use stdx::format_to;
17use test_utils::extract_annotations; 13use test_utils::extract_annotations;
18 14
19use crate::diagnostics::validate_body;
20
21#[salsa::database( 15#[salsa::database(
22 ra_db::SourceDatabaseExtStorage, 16 ra_db::SourceDatabaseExtStorage,
23 ra_db::SourceDatabaseStorage, 17 ra_db::SourceDatabaseStorage,
@@ -94,46 +88,6 @@ impl TestDB {
94 panic!("Can't find module for file") 88 panic!("Can't find module for file")
95 } 89 }
96 90
97 pub(crate) fn diag<F: FnMut(&dyn Diagnostic)>(&self, mut cb: F) {
98 let crate_graph = self.crate_graph();
99 for krate in crate_graph.iter() {
100 let crate_def_map = self.crate_def_map(krate);
101
102 let mut fns = Vec::new();
103 for (module_id, _) in crate_def_map.modules.iter() {
104 for decl in crate_def_map[module_id].scope.declarations() {
105 if let ModuleDefId::FunctionId(f) = decl {
106 fns.push(f)
107 }
108 }
109
110 for impl_id in crate_def_map[module_id].scope.impls() {
111 let impl_data = self.impl_data(impl_id);
112 for item in impl_data.items.iter() {
113 if let AssocItemId::FunctionId(f) = item {
114 fns.push(*f)
115 }
116 }
117 }
118 }
119
120 for f in fns {
121 let mut sink = DiagnosticSink::new(&mut cb);
122 validate_body(self, f.into(), &mut sink);
123 }
124 }
125 }
126
127 pub(crate) fn diagnostics(&self) -> (String, u32) {
128 let mut buf = String::new();
129 let mut count = 0;
130 self.diag(|d| {
131 format_to!(buf, "{:?}: {}\n", d.syntax_node(self).text(), d.message());
132 count += 1;
133 });
134 (buf, count)
135 }
136
137 pub(crate) fn extract_annotations(&self) -> FxHashMap<FileId, Vec<(TextRange, String)>> { 91 pub(crate) fn extract_annotations(&self) -> FxHashMap<FileId, Vec<(TextRange, String)>> {
138 let mut files = Vec::new(); 92 let mut files = Vec::new();
139 let crate_graph = self.crate_graph(); 93 let crate_graph = self.crate_graph();