Skip to content

Commit 9b0de10

Browse files
committed
cmd/export: add --preserve-comments flag
Closes #1180 Signed-off-by: Felix Geisendörfer <[email protected]>
1 parent 71e9d03 commit 9b0de10

File tree

7 files changed

+53
-29
lines changed

7 files changed

+53
-29
lines changed

Diff for: cmd/cue/cmd/common.go

+9-8
Original file line numberDiff line numberDiff line change
@@ -719,14 +719,15 @@ func (b *buildPlan) parseFlags() (err error) {
719719
b.cfg.fileFilter = s
720720
}
721721
b.encConfig = &encoding.Config{
722-
Force: flagForce.Bool(b.cmd),
723-
Mode: b.cfg.outMode,
724-
Stdin: b.cmd.InOrStdin(),
725-
Stdout: b.cmd.OutOrStdout(),
726-
ProtoPath: flagProtoPath.StringArray(b.cmd),
727-
AllErrors: flagAllErrors.Bool(b.cmd),
728-
PkgName: flagPackage.String(b.cmd),
729-
Strict: flagStrict.Bool(b.cmd),
722+
Force: flagForce.Bool(b.cmd),
723+
Mode: b.cfg.outMode,
724+
Stdin: b.cmd.InOrStdin(),
725+
Stdout: b.cmd.OutOrStdout(),
726+
ProtoPath: flagProtoPath.StringArray(b.cmd),
727+
AllErrors: flagAllErrors.Bool(b.cmd),
728+
PkgName: flagPackage.String(b.cmd),
729+
Strict: flagStrict.Bool(b.cmd),
730+
PreserveComments: flagPreserveComments.Bool(b.cmd),
730731
}
731732
return nil
732733
}

Diff for: cmd/cue/cmd/export.go

+1
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ yaml output as YAML
9696
addOrphanFlags(cmd.Flags())
9797
addInjectionFlags(cmd.Flags(), false)
9898

99+
cmd.Flags().Bool(string(flagPreserveComments), false, "include comments in output")
99100
cmd.Flags().Bool(string(flagEscape), false, "use HTML escaping")
100101
cmd.Flags().StringArrayP(string(flagExpression), "e", nil, "export this expression only")
101102

Diff for: cmd/cue/cmd/flags.go

+13-12
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,19 @@ import (
2121

2222
// Common flags
2323
const (
24-
flagAll flagName = "all"
25-
flagDryrun flagName = "dryrun"
26-
flagVerbose flagName = "verbose"
27-
flagAllErrors flagName = "all-errors"
28-
flagTrace flagName = "trace"
29-
flagForce flagName = "force"
30-
flagIgnore flagName = "ignore"
31-
flagStrict flagName = "strict"
32-
flagSimplify flagName = "simplify"
33-
flagPackage flagName = "package"
34-
flagInject flagName = "inject"
35-
flagInjectVars flagName = "inject-vars"
24+
flagAll flagName = "all"
25+
flagDryrun flagName = "dryrun"
26+
flagVerbose flagName = "verbose"
27+
flagAllErrors flagName = "all-errors"
28+
flagTrace flagName = "trace"
29+
flagForce flagName = "force"
30+
flagIgnore flagName = "ignore"
31+
flagStrict flagName = "strict"
32+
flagSimplify flagName = "simplify"
33+
flagPackage flagName = "package"
34+
flagInject flagName = "inject"
35+
flagInjectVars flagName = "inject-vars"
36+
flagPreserveComments flagName = "preserve-comments"
3637

3738
flagExpression flagName = "expression"
3839
flagSchema flagName = "schema"

Diff for: cmd/cue/cmd/testdata/script/export_yaml_comments.txt

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
cue export --preserve-comments --out yaml ./hello
2+
cmp stdout expect-stdout
3+
-- expect-stdout --
4+
# cloud-config
5+
foo: bar
6+
hello:
7+
# occupy
8+
world: from mars?
9+
-- hello/hello.cue --
10+
package hello
11+
12+
//cloud-config
13+
foo: "bar"
14+
15+
hello: {
16+
// occupy
17+
world: "from mars?"
18+
}

Diff for: internal/encoding/encoder.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ func NewEncoder(f *build.File, cfg *Config) (*Encoder, error) {
182182
}
183183
streamed = true
184184

185-
str, err := yaml.Marshal(v)
185+
str, err := yaml.Marshal(v, cue.Docs(e.cfg.PreserveComments))
186186
if err != nil {
187187
return err
188188
}

Diff for: internal/encoding/encoding.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -151,10 +151,11 @@ type Config struct {
151151

152152
PkgName string // package name for files to generate
153153

154-
Force bool // overwrite existing files.
155-
Strict bool
156-
Stream bool // will potentially write more than one document per file
157-
AllErrors bool
154+
Force bool // overwrite existing files.
155+
Strict bool
156+
Stream bool // will potentially write more than one document per file
157+
AllErrors bool
158+
PreserveComments bool
158159

159160
Schema cue.Value // used for schema-based decoding
160161

Diff for: pkg/encoding/yaml/manual.go

+6-4
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import (
2626
)
2727

2828
// Marshal returns the YAML encoding of v.
29-
func Marshal(v cue.Value) (string, error) {
29+
func Marshal(v cue.Value, opts ...cue.Option) (string, error) {
3030
if err := v.Validate(cue.Concrete(true)); err != nil {
3131
if err := v.Validate(); err != nil {
3232
return "", err
@@ -35,13 +35,14 @@ func Marshal(v cue.Value) (string, error) {
3535
// messages can be passed.
3636
return "", internal.ErrIncomplete
3737
}
38-
n := v.Syntax(cue.Final(), cue.Concrete(true))
38+
opts = append([]cue.Option{cue.Final(), cue.Concrete(true)}, opts...)
39+
n := v.Syntax(opts...)
3940
b, err := cueyaml.Encode(n)
4041
return string(b), err
4142
}
4243

4344
// MarshalStream returns the YAML encoding of v.
44-
func MarshalStream(v cue.Value) (string, error) {
45+
func MarshalStream(v cue.Value, opts ...cue.Option) (string, error) {
4546
// TODO: return an io.Reader and allow asynchronous processing.
4647
iter, err := v.List()
4748
if err != nil {
@@ -61,7 +62,8 @@ func MarshalStream(v cue.Value) (string, error) {
6162
// messages can be passed.
6263
return "", internal.ErrIncomplete
6364
}
64-
n := v.Syntax(cue.Final(), cue.Concrete(true))
65+
opts = append([]cue.Option{cue.Final(), cue.Concrete(true)}, opts...)
66+
n := v.Syntax(opts...)
6567
b, err := cueyaml.Encode(n)
6668
if err != nil {
6769
return "", err

0 commit comments

Comments
 (0)