diff options
author | Aleksey Kladov <[email protected]> | 2020-07-14 15:43:39 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2020-07-14 15:44:20 +0100 |
commit | b9070cc64e0767d2a8bde5084a61f46e2e804f5b (patch) | |
tree | 11eff9785ddae6ac25b9b74543fb36180bd20d82 /crates/ra_hir_ty/src/test_db.rs | |
parent | 5a25cc28204c6d02a5108b13568ec71914f096a5 (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.rs | 50 |
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 | ||
8 | use hir_def::{db::DefDatabase, AssocItemId, ModuleDefId, ModuleId}; | 8 | use hir_def::{db::DefDatabase, ModuleId}; |
9 | use hir_expand::{ | 9 | use hir_expand::db::AstDatabase; |
10 | db::AstDatabase, | ||
11 | diagnostics::{Diagnostic, DiagnosticSink}, | ||
12 | }; | ||
13 | use ra_db::{salsa, CrateId, FileId, FileLoader, FileLoaderDelegate, SourceDatabase, Upcast}; | 10 | use ra_db::{salsa, CrateId, FileId, FileLoader, FileLoaderDelegate, SourceDatabase, Upcast}; |
14 | use ra_syntax::TextRange; | 11 | use ra_syntax::TextRange; |
15 | use rustc_hash::{FxHashMap, FxHashSet}; | 12 | use rustc_hash::{FxHashMap, FxHashSet}; |
16 | use stdx::format_to; | ||
17 | use test_utils::extract_annotations; | 13 | use test_utils::extract_annotations; |
18 | 14 | ||
19 | use 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(); |