use oxc_ast::ast::{BindingPattern, FormalParameter};
use vize_l0::Span;
use super::{ForAlias, ForResolution};
#[derive(Debug)]
pub(in crate::resolution) struct OriginalForAlias<'a> {
pub(in crate::resolution) parameter: &'a FormalParameter<'a>,
pub(in crate::resolution) fact: ForAlias<'a>,
}
#[derive(Debug)]
pub struct ForAliasDeclaration<'h, 'a> {
owner: &'h ForResolution<'a>,
parameter: &'a FormalParameter<'a>,
fact: ForAlias<'a>,
}
impl<'h, 'a> ForAliasDeclaration<'h, 'a> {
#[must_use]
pub const fn resolution(&self) -> &'h ForResolution<'a> {
self.owner
}
#[must_use]
pub const fn parameter(&self) -> &'a FormalParameter<'a> {
self.parameter
}
#[must_use]
pub const fn pattern(&self) -> &'a BindingPattern<'a> {
&self.parameter.pattern
}
#[must_use]
pub const fn fact(&self) -> ForAlias<'a> {
self.fact
}
#[must_use]
pub const fn decoded_span(&self) -> Span {
self.fact.decoded_span()
}
#[must_use]
pub const fn authored_span(&self) -> Span {
self.fact.authored_span()
}
}
impl<'a> ForResolution<'a> {
#[must_use]
pub const fn value_declaration(&self) -> ForAliasDeclaration<'_, 'a> {
ForAliasDeclaration {
owner: self,
parameter: self.value_parameter,
fact: self.value,
}
}
#[must_use]
pub fn key_declaration(&self) -> Option<ForAliasDeclaration<'_, 'a>> {
self.key
.zip(self.key_parameter)
.map(|(fact, parameter)| ForAliasDeclaration {
owner: self,
parameter,
fact,
})
}
}