feat(transformer): add methods to BoundIdentifier (#4897)

`BoundIdentifier` helper previously only had methods to create a
read-only `IdentifierReference`. Add methods to also create write-only
or read-write `IdentifierReference`s.
This commit is contained in:
overlookmotel 2024-08-14 17:12:20 +01:00 committed by GitHub
parent 97e38cd493
commit 1e6d0fe7dd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -81,6 +81,49 @@ impl<'a> BoundIdentifier<'a> {
span: Span,
ctx: &mut TraverseCtx<'a>,
) -> IdentifierReference<'a> {
ctx.create_bound_reference_id(span, self.name.clone(), self.symbol_id, ReferenceFlag::Read)
self.create_spanned_reference(span, ReferenceFlag::Read, ctx)
}
/// Create `IdentifierReference` referencing this binding, which is written to, with dummy `Span`
pub fn create_write_reference(&self, ctx: &mut TraverseCtx<'a>) -> IdentifierReference<'a> {
self.create_spanned_write_reference(SPAN, ctx)
}
/// Create `IdentifierReference` referencing this binding, which is written to, with specified `Span`
pub fn create_spanned_write_reference(
&self,
span: Span,
ctx: &mut TraverseCtx<'a>,
) -> IdentifierReference<'a> {
self.create_spanned_reference(span, ReferenceFlag::Write, ctx)
}
/// Create `IdentifierReference` referencing this binding, which is read from + written to,
/// with dummy `Span`
pub fn create_read_write_reference(
&self,
ctx: &mut TraverseCtx<'a>,
) -> IdentifierReference<'a> {
self.create_spanned_read_write_reference(SPAN, ctx)
}
/// Create `IdentifierReference` referencing this binding, which is read from + written to,
/// with specified `Span`
pub fn create_spanned_read_write_reference(
&self,
span: Span,
ctx: &mut TraverseCtx<'a>,
) -> IdentifierReference<'a> {
self.create_spanned_reference(span, ReferenceFlag::Read | ReferenceFlag::Write, ctx)
}
/// Create `IdentifierReference` referencing this binding, with specified `Span` and `ReferenceFlag`
pub fn create_spanned_reference(
&self,
span: Span,
flag: ReferenceFlag,
ctx: &mut TraverseCtx<'a>,
) -> IdentifierReference<'a> {
ctx.create_bound_reference_id(span, self.name.clone(), self.symbol_id, flag)
}
}