Overview
The internal/cuegen/cue.go file uses ast.Field.Optional (a token.Pos), which was removed in cuelang.org/go v0.16.0. The field was replaced with ast.Field.Constraint (a token.Token), where token.OPTION represents an optional field.
This causes a compilation error when a downstream project's dependency graph pulls in CUE v0.16.0:
vendor/github.com/redpanda-data/benthos/v4/internal/cuegen/cue.go:171:3:
unknown field Optional in struct literal of type ast.Field
Affected Code
The affected code is in doScalarField():
return &ast.Field{
Label: label,
Value: val,
Optional: optional, // no longer exists in cuelang.org/go v0.16.0
}, nil
The new CUE API equivalent would be:
return &ast.Field{
Label: label,
Value: val,
Constraint: token.OPTION, // when the field should be optional
}, nil
Reproduction
- In a Go project that depends on
benthos/v4, update cuelang.org/go to v0.16.0
- Run
go build ./... (or golangci-lint)
- Compilation fails with the error above
Versions
- cuelang.org/go v0.16.0 (breaking change)
- benthos v4.68.0 (latest, still pins CUE v0.15.4)
Overview
The
internal/cuegen/cue.gofile usesast.Field.Optional(atoken.Pos), which was removed incuelang.org/gov0.16.0. The field was replaced withast.Field.Constraint(atoken.Token), wheretoken.OPTIONrepresents an optional field.This causes a compilation error when a downstream project's dependency graph pulls in CUE v0.16.0:
vendor/github.com/redpanda-data/benthos/v4/internal/cuegen/cue.go:171:3: unknown field Optional in struct literal of type ast.FieldAffected Code
The affected code is in
doScalarField():The new CUE API equivalent would be:
Reproduction
benthos/v4, updatecuelang.org/goto v0.16.0go build ./...(orgolangci-lint)Versions