diff --git a/vhdl_lang/src/analysis/declarative.rs b/vhdl_lang/src/analysis/declarative.rs index b89e63ae..1f04c875 100644 --- a/vhdl_lang/src/analysis/declarative.rs +++ b/vhdl_lang/src/analysis/declarative.rs @@ -614,11 +614,11 @@ impl<'a, 't> AnalyzeContext<'a, 't> { scope.add(ent, diagnostics); } } - Declaration::PackageDeclaration(..) => { - // TODO + Declaration::PackageDeclaration(ref mut unit) => { + self.analyze_package(unit, diagnostics)?; } - Declaration::PackageBody(..) => { - // TODO + Declaration::PackageBody(ref mut unit) => { + self.analyze_package_body(unit, diagnostics)?; } Declaration::Configuration(..) => {} Declaration::View(view) => { diff --git a/vhdl_lang/src/analysis/design_unit.rs b/vhdl_lang/src/analysis/design_unit.rs index f06664d8..925f1bb9 100644 --- a/vhdl_lang/src/analysis/design_unit.rs +++ b/vhdl_lang/src/analysis/design_unit.rs @@ -132,7 +132,7 @@ impl<'a, 't> AnalyzeContext<'a, 't> { Ok(()) } - fn analyze_package( + pub fn analyze_package( &self, unit: &mut PackageDeclaration, diagnostics: &mut dyn DiagnosticHandler, @@ -297,7 +297,7 @@ impl<'a, 't> AnalyzeContext<'a, 't> { Ok(()) } - fn analyze_package_body( + pub fn analyze_package_body( &self, unit: &mut PackageBody, diagnostics: &mut dyn DiagnosticHandler, diff --git a/vhdl_lang/src/ast/search.rs b/vhdl_lang/src/ast/search.rs index eae3d784..38bfa549 100644 --- a/vhdl_lang/src/ast/search.rs +++ b/vhdl_lang/src/ast/search.rs @@ -1075,19 +1075,15 @@ impl Search for Declaration { return_if_found!(open_info.search(ctx, searcher)); return_if_found!(file_name.search(ctx, searcher)); } - Declaration::Package(ref package_instance) => { return_if_found!(package_instance.search(ctx, searcher)); } - - Declaration::PackageDeclaration(ref package_instance) => { - return_if_found!(package_instance.search(ctx, searcher)); // @TODO + Declaration::PackageDeclaration(ref decl) => { + return_if_found!(decl.search(ctx, searcher)); } - - Declaration::PackageBody(ref package_instance) => { - return_if_found!(package_instance.search(ctx, searcher)); // @TODO + Declaration::PackageBody(ref body) => { + return_if_found!(body.search(ctx, searcher)); } - Declaration::Configuration(_) => { // @TODO } diff --git a/vhdl_lang/src/named_entity.rs b/vhdl_lang/src/named_entity.rs index 073c5584..100f3764 100644 --- a/vhdl_lang/src/named_entity.rs +++ b/vhdl_lang/src/named_entity.rs @@ -8,8 +8,9 @@ use crate::ast::{ AliasDeclaration, AnyDesignUnit, AnyPrimaryUnit, AnySecondaryUnit, Attribute, AttributeDeclaration, AttributeSpecification, ComponentDeclaration, Declaration, Designator, FileDeclaration, HasIdent, Ident, InterfaceFileDeclaration, InterfacePackageDeclaration, - ModeViewDeclaration, ObjectClass, ObjectDeclaration, PackageInstantiation, SubprogramBody, - SubprogramInstantiation, SubprogramSpecification, TypeDeclaration, WithDecl, + ModeViewDeclaration, ObjectClass, ObjectDeclaration, PackageBody, PackageDeclaration, + PackageInstantiation, SubprogramBody, SubprogramInstantiation, SubprogramSpecification, + TypeDeclaration, WithDecl, }; use crate::ast::{ExternalObjectClass, InterfaceDeclaration, InterfaceObjectDeclaration}; use crate::data::*; @@ -631,8 +632,8 @@ impl HasEntityId for Declaration { Declaration::SubprogramBody(body) => body.ent_id(), Declaration::SubprogramInstantiation(decl) => decl.ent_id(), Declaration::Package(pkg) => pkg.ent_id(), - Declaration::PackageDeclaration(_) => None, // @TODO - Declaration::PackageBody(_) => None, // @TODO + Declaration::PackageDeclaration(pkg) => pkg.ent_id(), + Declaration::PackageBody(pkg) => pkg.ent_id(), Declaration::Use(_) => None, Declaration::Configuration(_) => None, Declaration::View(decl) => decl.ent_id(), @@ -652,6 +653,18 @@ impl HasEntityId for PackageInstantiation { } } +impl HasEntityId for PackageDeclaration { + fn ent_id(&self) -> Option { + self.ident.decl.get() + } +} + +impl HasEntityId for PackageBody { + fn ent_id(&self) -> Option { + self.ident.decl.get() + } +} + impl HasEntityId for SubprogramBody { fn ent_id(&self) -> Option { self.specification.ent_id()