1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
use crate::semantics::*; use crate::syntax::*; use crate::*; pub struct InvalidImport; impl Checker for InvalidImport { fn check(&self, analysis: &mut Analysis, diagnostics: &mut Vec<Diagnostic>) { for import in analysis.navigator.all_imports() { if let ImportDirective { qualified_symbol, .. } = import.kind { if let Some(qualified_symbol) = analysis.navigator.find_child(&import, qualified_symbol) { let name = analysis .navigator .qualified_symbol_to_string(&qualified_symbol); match analysis.navigator.find_declaration_from_import(&import) { None => diagnostics .push(Diagnostic::UndefinedImport(qualified_symbol.span, name)), Some(declaration) => { if !analysis.navigator.declaration_is_exported(&declaration) { diagnostics.push(Diagnostic::UnexportedImport( qualified_symbol.span, name, )); } } } } } } } }