Skip to content

Commit

Permalink
decoder: Finish implementing reference targets for Tuple
Browse files Browse the repository at this point in the history
  • Loading branch information
radeksimko committed Mar 20, 2023
1 parent ae0ee36 commit 7bb1cd0
Showing 1 changed file with 42 additions and 5 deletions.
47 changes: 42 additions & 5 deletions decoder/expr_tuple_ref_targets.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,7 @@ func (tuple Tuple) ReferenceTargets(ctx context.Context, targetCtx *TargetContex
return reference.Targets{}
}

targets := make(reference.Targets, 0)

// TODO: collect parent target for the whole tuple
// See https://github.com/hashicorp/hcl-lang/issues/228
elemTargets := make(reference.Targets, 0)

for i, elemExpr := range eType.Exprs {
if i+1 > len(tuple.cons.Elems) {
Expand All @@ -40,8 +37,48 @@ func (tuple Tuple) ReferenceTargets(ctx context.Context, targetCtx *TargetContex
Key: cty.NumberIntVal(int64(i)),
})
}
targets = append(targets, e.ReferenceTargets(ctx, elemCtx)...)
elemTargets = append(elemTargets, e.ReferenceTargets(ctx, elemCtx)...)
}
}

targets := make(reference.Targets, 0)

if targetCtx != nil {
// collect target for the whole tuple

// type-aware
elemType, ok := tuple.cons.ConstraintType()
if targetCtx.AsExprType && ok {
if ok {
targets = append(targets, reference.Target{
Addr: targetCtx.ParentAddress,
Name: targetCtx.FriendlyName,
Type: elemType,
ScopeId: targetCtx.ScopeId,
RangePtr: tuple.expr.Range().Ptr(),
NestedTargets: elemTargets,
LocalAddr: targetCtx.ParentLocalAddress,
TargetableFromRangePtr: targetCtx.TargetableFromRangePtr,
})
}
}

// type-unaware
if targetCtx.AsReference {
targets = append(targets, reference.Target{
Addr: targetCtx.ParentAddress,
Name: targetCtx.FriendlyName,
ScopeId: targetCtx.ScopeId,
RangePtr: tuple.expr.Range().Ptr(),
NestedTargets: elemTargets,
LocalAddr: targetCtx.ParentLocalAddress,
TargetableFromRangePtr: targetCtx.TargetableFromRangePtr,
})
}
} else {
// treat element targets as 1st class ones
// if the tuple itself isn't targetable
targets = elemTargets
}

return targets
Expand Down

0 comments on commit 7bb1cd0

Please sign in to comment.