this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

internal/cueexperiment: deprecate the evalv3 flag

Turning it off now is a no-op, given that the entire evalv2 is removed.
Don't give the impression to users that it's still possible.

Note that we must update TestInit, as it can no longer use the evalv3
flag to smoke test that we can disable an experiment.
TestEvalVersion is also pointless now, given that the evalv3
experiment flag no longer does anything.

Finally, expand the CUE_EXPERIMENT env var test to cover what happens
when trying to set deprecated flags. Note that the envflag package
already covered this, but we had no end-to-end tests with cmd/cue.

Given we now test deprecated experiments in experiment_error.txtar,
the two "modules mode not enabled" tests seem redundant now,
especially given how non-modules mode was removed years ago.

Signed-off-by: Daniel Martí <mvdan@mvdan.cc>
Change-Id: Ieca498018c3f81a5be82c2b734a5efb5ae5c5685
Reviewed-on: https://review.gerrithub.io/c/cue-lang/cue/+/1220045
Unity-Result: CUE porcuepine <cue.porcuepine@gmail.com>
TryBot-Result: CUEcueckoo <cueckoo@cuelang.org>
Reviewed-by: Paul Jolly <paul@myitcv.io>
Reviewed-by: Marcel van Lohuizen <mpvl@gmail.com>

+42 -64
+28
cmd/cue/cmd/testdata/script/experiment_error.txtar
··· 1 + # An entirely unknown flag. Note that this may be a flag 2 + # which only exists in later CUE versions. 3 + env CUE_EXPERIMENT=unknown 4 + ! exec cue export in.cue 5 + cmp stderr unknown.stderr 6 + 7 + # Setting a deprecated flag to its final value is OK, 8 + # for the sake of not breaking users unnecessarily. 9 + env CUE_EXPERIMENT=evalv3=1 10 + exec cue export in.cue 11 + cmp stdout export.stdout 12 + 13 + # Changing a deprecated flag's final value is not allowed, 14 + # as the experiment is complete and the old code is often gone. 15 + env CUE_EXPERIMENT=evalv3=0 16 + ! exec cue export in.cue 17 + cmp stderr deprecated.stderr 18 + 19 + -- in.cue -- 20 + foo: "bar" 21 + -- export.stdout -- 22 + { 23 + "foo": "bar" 24 + } 25 + -- unknown.stderr -- 26 + cannot parse CUE_EXPERIMENT: unknown flag "unknown" 27 + -- deprecated.stderr -- 28 + cannot parse CUE_EXPERIMENT: cannot change default value of deprecated flag "evalv3"
-5
cmd/cue/cmd/testdata/script/experiment_unknown.txtar
··· 1 - env CUE_EXPERIMENT=xxx 2 - ! exec cue eval something 3 - cmp stderr errout 4 - -- errout -- 5 - cannot parse CUE_EXPERIMENT: unknown flag "xxx"
-5
cmd/cue/cmd/testdata/script/modpublish_registry_not_enabled.txtar
··· 1 - env CUE_EXPERIMENT=modules=false 2 - ! exec cue mod publish v1.0.0 3 - cmp stderr want-stderr 4 - -- want-stderr -- 5 - cannot parse CUE_EXPERIMENT: cannot change default value of deprecated flag "modules"
-6
cmd/cue/cmd/testdata/script/modtidy_registry_not_enabled.txtar
··· 1 - env CUE_EXPERIMENT=modules=0 2 - 3 - ! exec cue mod tidy 4 - cmp stderr want-stderr 5 - -- want-stderr -- 6 - cannot parse CUE_EXPERIMENT: cannot change default value of deprecated flag "modules"
-35
cue/cuecontext/cuecontext_test.go
··· 19 19 "sync" 20 20 "testing" 21 21 22 - "github.com/go-quicktest/qt" 23 - 24 22 "cuelang.org/go/cue" 25 23 "cuelang.org/go/cue/ast" 26 - "cuelang.org/go/internal" 27 - "cuelang.org/go/internal/core/adt" 28 - "cuelang.org/go/internal/core/runtime" 29 - "cuelang.org/go/internal/cueexperiment" 30 24 ) 31 25 32 26 func TestAPI(t *testing.T) { ··· 102 96 } 103 97 wg.Wait() 104 98 } 105 - 106 - func TestEvalVersion(t *testing.T) { 107 - cueexperiment.Init() 108 - saved := cueexperiment.Flags.EvalV3 109 - defer func() { cueexperiment.Flags.EvalV3 = saved }() 110 - 111 - test := func(c *cue.Context, want internal.EvaluatorVersion) { 112 - t.Helper() 113 - opCtx := adt.NewContext((*runtime.Runtime)(c), nil) 114 - qt.Check(t, qt.Equals(opCtx.Version, want)) 115 - } 116 - 117 - // The experiment evaluator version setting does not affect the specific 118 - // versions like Stable or V3, as they are fixed. 119 - testFixedVersions := func() { 120 - test(New(EvaluatorVersion(EvalStable)), internal.EvalV3) 121 - // We currently don't have an experimental version, so it's the current version. 122 - test(New(EvaluatorVersion(EvalExperiment)), internal.EvalV3) 123 - test(New(EvaluatorVersion(EvalV3)), internal.EvalV3) 124 - } 125 - 126 - // The current and default evaluator version is EvalV3. 127 - qt.Assert(t, qt.Equals(cueexperiment.Flags.EvalV3, true)) 128 - test(New(), internal.EvalV3) 129 - test(New(EvaluatorVersion(EvalDefault)), internal.EvalV3) 130 - 131 - testFixedVersions() 132 - 133 - }
+12 -11
internal/cueexperiment/exp.go
··· 14 14 // When adding, deleting, or modifying entries below, 15 15 // update cmd/cue/cmd/help.go as well for `cue help environment`. 16 16 type Config struct { 17 - // EvalV3 enables the new CUE evaluator, addressing performance issues 18 - // and bringing better algorithms for disjunctions, closedness, and cycles. 19 - // 20 - // This experiment was introduced in v0.9.0 (2024-06), 21 - // and enabled by default in v0.13.0 (2025-05). 22 - EvalV3 bool `envflag:"default:true"` 23 - 24 17 // CmdReferencePkg requires referencing an imported tool package to declare tasks. 25 18 // Otherwise, declaring tasks via "$id" or "kind" string fields is allowed. 26 19 // 27 20 // This experiment was introduced in v0.13.0 (2025-05), 28 - // and enabled by default in the upcoming v0.14 release. 21 + // and enabled by default in v0.14.0 (2025-08). 29 22 CmdReferencePkg bool `envflag:"default:true"` 30 23 31 24 // KeepValidators prevents validators from simplifying into concrete values, 32 25 // even if their concrete value could be derived, such as `>=1 & <=1` to `1`. 33 26 // See the proposal at https://cuelang.org/discussion/3775. 34 27 // 35 - // This experiment is introduced in the upcoming v0.14 release, already on by default. 28 + // This experiment is introduced in v0.14.0 (2025-08), already on by default. 36 29 KeepValidators bool `envflag:"default:true"` 37 30 38 31 // The flags below describe completed experiments; they can still be set ··· 69 62 // 70 63 // This experiment was introduced in v0.10.0 (2024-08), 71 64 // enabled by default in v0.12.0 (2025-01), 72 - // and deprecated in the upcoming v0.14 release. 65 + // and deprecated in v0.14.0 (2025-08). 73 66 Embed bool `envflag:"deprecated,default:true"` 74 67 75 68 // TopoSort enables topological sorting of struct fields. ··· 77 70 // 78 71 // This experiment was introduced in v0.11.0 (2024-11) 79 72 // enabled by default in v0.12.0 (2025-01), 80 - // and deprecated in the upcoming v0.14 release. 73 + // and deprecated in v0.14.0 (2025-08). 81 74 TopoSort bool `envflag:"deprecated,default:true"` 75 + 76 + // EvalV3 enables the new CUE evaluator, addressing performance issues 77 + // and bringing better algorithms for disjunctions, closedness, and cycles. 78 + // 79 + // This experiment was introduced in v0.9.0 (2024-06), 80 + // enabled by default in v0.13.0 (2025-05), 81 + // and deprecated in the upcoming v0.15 release. 82 + EvalV3 bool `envflag:"deprecated,default:true"` 82 83 } 83 84 84 85 // Init initializes Flags. Note: this isn't named "init" because we
+2 -2
internal/cueexperiment/exp_test.go
··· 8 8 9 9 func TestInit(t *testing.T) { 10 10 // This is just a smoke test to make sure it's all wired up OK. 11 - t.Setenv("CUE_EXPERIMENT", "evalv3=0,cmdreferencepkg") 11 + t.Setenv("CUE_EXPERIMENT", "cmdreferencepkg,keepvalidators=0") 12 12 err := Init() 13 13 qt.Assert(t, qt.IsNil(err)) 14 - qt.Assert(t, qt.IsFalse(Flags.EvalV3)) 15 14 qt.Assert(t, qt.IsTrue(Flags.CmdReferencePkg)) 15 + qt.Assert(t, qt.IsFalse(Flags.KeepValidators)) 16 16 }