Skip to content

Commit 6f2bfb4

Browse files
committed
mod/modfile: use fixed language version for Fix
CUE currently uses the latest known language version when fixing legacy module files. This is probably incorrect, at least in the future, because the CUE version used by such legacy modules is likely to be an older version and so use older language features that might be deprecated or altered by a newer language version. To fix that, so we can always use a specific version (v0.9.0) when fixing such files. Fixes #3222. Signed-off-by: Roger Peppe <[email protected]> Change-Id: Ie525e069548c9b8714e72b058e2f8322cb94f5dd Reviewed-on: https://review.gerrithub.io/c/cue-lang/cue/+/1197598 Reviewed-by: Paul Jolly <[email protected]> Unity-Result: CUE porcuepine <[email protected]> TryBot-Result: CUEcueckoo <[email protected]>
1 parent fc16ef8 commit 6f2bfb4

File tree

4 files changed

+12
-7
lines changed

4 files changed

+12
-7
lines changed

cmd/cue/cmd/testdata/script/modfix_initial.txtar

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ foo: "bar"
1414
-- want-module --
1515
module: "foo.com"
1616
language: {
17-
version: "v0.10.0"
17+
version: "v0.9.0"
1818
}
1919
custom: {
2020
legacy: {

cmd/cue/cmd/testdata/script/module_compatibility_backwards.txtar

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ module: "premodules.example"
9999
-- premodules-module.cue.fixed --
100100
module: "premodules.example"
101101
language: {
102-
version: "v0.10.0"
102+
version: "v0.9.0"
103103
}
104104
-- premodules/cue.mod/pkg/premodules.example/root.cue --
105105
package root

mod/modfile/modfile.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,12 @@ func FixLegacy(modfile []byte, filename string) (*File, error) {
350350
f = &File{
351351
Module: mpath,
352352
Language: &Language{
353-
Version: cueversion.LanguageVersion(),
353+
// If there's a legacy module file, the CUE code
354+
// is unlikely to be using new language features,
355+
// so keep the language version fixed rather than
356+
// using cueversion.LanguageVersion().
357+
// See https://cuelang.org/issue/3222.
358+
Version: "v0.9.0",
354359
},
355360
Custom: custom,
356361
}

mod/modfile/modfile_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@ module: "foo.com/bar"
361361
`,
362362
want: &File{
363363
Module: "foo.com/bar",
364-
Language: &Language{Version: "v0.10.0"},
364+
Language: &Language{Version: "v0.9.0"},
365365
},
366366
wantDefaults: map[string]string{
367367
"foo.com/bar": "v0",
@@ -373,7 +373,7 @@ module: "foo.com/bar"
373373
`,
374374
want: &File{
375375
Module: "test.example",
376-
Language: &Language{Version: "v0.10.0"},
376+
Language: &Language{Version: "v0.9.0"},
377377
},
378378
wantDefaults: map[string]string{
379379
"test.example": "v0",
@@ -386,7 +386,7 @@ module: ""
386386
`,
387387
want: &File{
388388
Module: "test.example",
389-
Language: &Language{Version: "v0.10.0"},
389+
Language: &Language{Version: "v0.9.0"},
390390
},
391391
wantDefaults: map[string]string{
392392
"test.example": "v0",
@@ -401,7 +401,7 @@ other: field: 123
401401
`,
402402
want: &File{
403403
Module: "foo.com",
404-
Language: &Language{Version: "v0.10.0"},
404+
Language: &Language{Version: "v0.9.0"},
405405
Custom: map[string]map[string]any{
406406
"legacy": {
407407
"some": true,

0 commit comments

Comments
 (0)