diff options
Diffstat (limited to 'crates/hir/src/lib.rs')
-rw-r--r-- | crates/hir/src/lib.rs | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs index bd923cba8..ff6c68dbc 100644 --- a/crates/hir/src/lib.rs +++ b/crates/hir/src/lib.rs | |||
@@ -80,18 +80,18 @@ use tt::{Ident, Leaf, Literal, TokenTree}; | |||
80 | 80 | ||
81 | use crate::{ | 81 | use crate::{ |
82 | db::{DefDatabase, HirDatabase}, | 82 | db::{DefDatabase, HirDatabase}, |
83 | diagnostics::{ | ||
84 | BreakOutsideOfLoop, InactiveCode, InternalBailedOut, MacroError, MismatchedArgCount, | ||
85 | MissingFields, MissingMatchArms, MissingOkOrSomeInTailExpr, MissingPatFields, | ||
86 | MissingUnsafe, NoSuchField, RemoveThisSemicolon, ReplaceFilterMapNextWithFindMap, | ||
87 | UnimplementedBuiltinMacro, UnresolvedExternCrate, UnresolvedImport, UnresolvedMacroCall, | ||
88 | UnresolvedModule, UnresolvedProcMacro, | ||
89 | }, | ||
90 | diagnostics_sink::DiagnosticSink, | 83 | diagnostics_sink::DiagnosticSink, |
91 | }; | 84 | }; |
92 | 85 | ||
93 | pub use crate::{ | 86 | pub use crate::{ |
94 | attrs::{HasAttrs, Namespace}, | 87 | attrs::{HasAttrs, Namespace}, |
88 | diagnostics::{ | ||
89 | AnyDiagnostic, BreakOutsideOfLoop, InactiveCode, InternalBailedOut, MacroError, | ||
90 | MismatchedArgCount, MissingFields, MissingMatchArms, MissingOkOrSomeInTailExpr, | ||
91 | MissingPatFields, MissingUnsafe, NoSuchField, RemoveThisSemicolon, | ||
92 | ReplaceFilterMapNextWithFindMap, UnimplementedBuiltinMacro, UnresolvedExternCrate, | ||
93 | UnresolvedImport, UnresolvedMacroCall, UnresolvedModule, UnresolvedProcMacro, | ||
94 | }, | ||
95 | has_source::HasSource, | 95 | has_source::HasSource, |
96 | semantics::{PathResolution, Semantics, SemanticsScope}, | 96 | semantics::{PathResolution, Semantics, SemanticsScope}, |
97 | }; | 97 | }; |
@@ -460,10 +460,11 @@ impl Module { | |||
460 | db: &dyn HirDatabase, | 460 | db: &dyn HirDatabase, |
461 | sink: &mut DiagnosticSink, | 461 | sink: &mut DiagnosticSink, |
462 | internal_diagnostics: bool, | 462 | internal_diagnostics: bool, |
463 | ) { | 463 | ) -> Vec<AnyDiagnostic> { |
464 | let _p = profile::span("Module::diagnostics").detail(|| { | 464 | let _p = profile::span("Module::diagnostics").detail(|| { |
465 | format!("{:?}", self.name(db).map_or("<unknown>".into(), |name| name.to_string())) | 465 | format!("{:?}", self.name(db).map_or("<unknown>".into(), |name| name.to_string())) |
466 | }); | 466 | }); |
467 | let mut acc: Vec<AnyDiagnostic> = Vec::new(); | ||
467 | let def_map = self.id.def_map(db.upcast()); | 468 | let def_map = self.id.def_map(db.upcast()); |
468 | for diag in def_map.diagnostics() { | 469 | for diag in def_map.diagnostics() { |
469 | if diag.in_module != self.id.local_id { | 470 | if diag.in_module != self.id.local_id { |
@@ -473,11 +474,13 @@ impl Module { | |||
473 | match &diag.kind { | 474 | match &diag.kind { |
474 | DefDiagnosticKind::UnresolvedModule { ast: declaration, candidate } => { | 475 | DefDiagnosticKind::UnresolvedModule { ast: declaration, candidate } => { |
475 | let decl = declaration.to_node(db.upcast()); | 476 | let decl = declaration.to_node(db.upcast()); |
476 | sink.push(UnresolvedModule { | 477 | acc.push( |
477 | file: declaration.file_id, | 478 | UnresolvedModule { |
478 | decl: AstPtr::new(&decl), | 479 | decl: InFile::new(declaration.file_id, AstPtr::new(&decl)), |
479 | candidate: candidate.clone(), | 480 | candidate: candidate.clone(), |
480 | }) | 481 | } |
482 | .into(), | ||
483 | ) | ||
481 | } | 484 | } |
482 | DefDiagnosticKind::UnresolvedExternCrate { ast } => { | 485 | DefDiagnosticKind::UnresolvedExternCrate { ast } => { |
483 | let item = ast.to_node(db.upcast()); | 486 | let item = ast.to_node(db.upcast()); |
@@ -610,7 +613,7 @@ impl Module { | |||
610 | crate::ModuleDef::Module(m) => { | 613 | crate::ModuleDef::Module(m) => { |
611 | // Only add diagnostics from inline modules | 614 | // Only add diagnostics from inline modules |
612 | if def_map[m.id.local_id].origin.is_inline() { | 615 | if def_map[m.id.local_id].origin.is_inline() { |
613 | m.diagnostics(db, sink, internal_diagnostics) | 616 | acc.extend(m.diagnostics(db, sink, internal_diagnostics)) |
614 | } | 617 | } |
615 | } | 618 | } |
616 | _ => { | 619 | _ => { |
@@ -626,6 +629,7 @@ impl Module { | |||
626 | } | 629 | } |
627 | } | 630 | } |
628 | } | 631 | } |
632 | acc | ||
629 | } | 633 | } |
630 | 634 | ||
631 | pub fn declarations(self, db: &dyn HirDatabase) -> Vec<ModuleDef> { | 635 | pub fn declarations(self, db: &dyn HirDatabase) -> Vec<ModuleDef> { |