cmd/cue/cmd: avoid roundtrip when printing non-CUE in eval
Fixes #986
Change-Id: I85961ab2fc23828ad44814479e7057723aed03de
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/9862
Reviewed-by: CUE cueckoo <cueckoo@gmail.com>
Reviewed-by: Marcel van Lohuizen <mpvl@golang.org>
diff --git a/cmd/cue/cmd/eval.go b/cmd/cue/cmd/eval.go
index fcebb7f..d5159ef 100644
--- a/cmd/cue/cmd/eval.go
+++ b/cmd/cue/cmd/eval.go
@@ -20,6 +20,7 @@
"github.com/spf13/cobra"
"cuelang.org/go/cue"
+ "cuelang.org/go/cue/build"
"cuelang.org/go/cue/format"
"cuelang.org/go/internal"
"cuelang.org/go/internal/encoding"
@@ -117,6 +118,20 @@
}
v := iter.value()
+ errHeader := func() {
+ if id != "" {
+ fmt.Fprintf(cmd.OutOrStderr(), "// %s\n", id)
+ }
+ }
+ if b.outFile.Encoding != build.CUE {
+ err := e.Encode(v)
+ if err != nil {
+ errHeader()
+ exitOnErr(cmd, err, false)
+ }
+ continue
+ }
+
if flagConcrete.Bool(cmd) {
syn = append(syn, cue.Concrete(true))
}
@@ -124,12 +139,6 @@
syn = append(syn, cue.Hidden(true))
}
- errHeader := func() {
- if id != "" {
- fmt.Fprintf(cmd.OutOrStderr(), "// %s\n", id)
- }
- }
-
if len(b.expressions) > 1 {
b, _ := format.Node(b.expressions[i%len(b.expressions)])
id = string(b)
diff --git a/cmd/cue/cmd/testdata/script/issue986.txt b/cmd/cue/cmd/testdata/script/issue986.txt
new file mode 100644
index 0000000..e3f7e40
--- /dev/null
+++ b/cmd/cue/cmd/testdata/script/issue986.txt
@@ -0,0 +1,36 @@
+
+# Hidden values are dropped when outputting CUE. This is fine in eval for
+# debugging, but not when the final result needs to be compiled again to be
+# converted to another format.
+
+cue eval in.cue --out yaml
+cmp stdout expect-stdout
+
+-- in.cue --
+#Foo: {
+ a: string
+ b: string
+ ab: "\(a)\(b)"
+}
+
+{
+ a: "aaa"
+ b: "bbb"
+} & #Foo
+
+#Bar: {
+ _c: string
+ _d: string
+ cd: "\(_c)\(_d)"
+}
+
+{
+ _c: "ccc"
+ _d: "ddd"
+} & #Bar
+
+-- expect-stdout --
+a: aaa
+b: bbb
+ab: aaabbb
+cd: cccddd