aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide_api
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2019-03-23 13:28:47 +0000
committerAleksey Kladov <[email protected]>2019-03-25 07:52:12 +0000
commitfcca35969dd7c63a83ee34c4ce7d54cefdb72bbe (patch)
treedd7de0fe2c391803e735cb8d65db54c42d29e823 /crates/ra_ide_api
parent7e8f17188efcecfdfd1afbbc894a53c65985f836 (diff)
allow dyn diagnostics
Diffstat (limited to 'crates/ra_ide_api')
-rw-r--r--crates/ra_ide_api/src/diagnostics.rs26
1 files changed, 8 insertions, 18 deletions
diff --git a/crates/ra_ide_api/src/diagnostics.rs b/crates/ra_ide_api/src/diagnostics.rs
index f662f7e2f..943fd2f53 100644
--- a/crates/ra_ide_api/src/diagnostics.rs
+++ b/crates/ra_ide_api/src/diagnostics.rs
@@ -3,7 +3,7 @@ use hir::{Problem, source_binder};
3use ra_db::SourceDatabase; 3use ra_db::SourceDatabase;
4use ra_syntax::{ 4use ra_syntax::{
5 Location, SourceFile, SyntaxKind, TextRange, SyntaxNode, 5 Location, SourceFile, SyntaxKind, TextRange, SyntaxNode,
6 ast::{self, AstNode, NameOwner}, 6 ast::{self, AstNode},
7 7
8}; 8};
9use ra_text_edit::{TextEdit, TextEditBuilder}; 9use ra_text_edit::{TextEdit, TextEditBuilder};
@@ -161,23 +161,13 @@ fn check_module(
161} 161}
162 162
163fn check_function(acc: &mut Vec<Diagnostic>, db: &RootDatabase, function: hir::Function) { 163fn check_function(acc: &mut Vec<Diagnostic>, db: &RootDatabase, function: hir::Function) {
164 let (_file_id, fn_def) = function.source(db); 164 for d in function.diagnostics(db).iter() {
165 let source_file = fn_def.syntax().ancestors().find_map(ast::SourceFile::cast).unwrap(); 165 acc.push(Diagnostic {
166 let source_map = function.body_source_map(db); 166 message: d.message(),
167 for d in function.diagnostics(db) { 167 range: d.syntax_node().range(),
168 match d { 168 severity: Severity::Error,
169 hir::diagnostics::FunctionDiagnostic::NoSuchField { expr, field } => { 169 fix: None,
170 if let Some(field) = source_map.field_syntax(expr, field) { 170 })
171 let field = field.to_node(&source_file);
172 acc.push(Diagnostic {
173 message: "no such field".into(),
174 range: field.syntax().range(),
175 severity: Severity::Error,
176 fix: None,
177 })
178 }
179 }
180 }
181 } 171 }
182} 172}
183 173