internal/core/export: add real Final option
Force incomplete errors only when really finalizing.
Fixes a few bugs that are related to formatting
API-generated values. This is a bit hard to test here,
but will fixing things in a followup CL.
Change-Id: Ia75272409c50f048143d0d254d04e625822dd26a
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/9483
Reviewed-by: CUE cueckoo <cueckoo@gmail.com>
Reviewed-by: Paul Jolly <paul@myitcv.org.uk>
diff --git a/internal/core/export/export.go b/internal/core/export/export.go
index ae2c0eb..d96ed3c 100644
--- a/internal/core/export/export.go
+++ b/internal/core/export/export.go
@@ -32,11 +32,12 @@
type Profile struct {
Simplify bool
+ // Final reports incomplete errors as errors.
+ Final bool
+
// TakeDefaults is used in Value mode to drop non-default values.
TakeDefaults bool
- // TODO:
- // IncludeDocs
ShowOptional bool
ShowDefinitions bool
@@ -65,6 +66,7 @@
var Final = &Profile{
Simplify: true,
TakeDefaults: true,
+ Final: true,
}
var Raw = &Profile{
diff --git a/internal/core/export/testdata/let.txtar b/internal/core/export/testdata/let.txtar
index 8044df2..56658f6 100644
--- a/internal/core/export/testdata/let.txtar
+++ b/internal/core/export/testdata/let.txtar
@@ -129,17 +129,8 @@
name: "two"
}
}]
- let filepath = "kind-\(cfg.name)"
- files: {
- "\(filepath)": {
- patches: cfg
- }
- } & {
- "\(filepath)": {
- patches: cfg
- }
- }
- y: "foo"
+ files: _|_ // invalid interpolation: invalid interpolation: files: undefined field name (and 3 more errors)
+ y: "foo"
}
== All
{
diff --git a/internal/core/export/value.go b/internal/core/export/value.go
index 91aeacd..9018af8 100644
--- a/internal/core/export/value.go
+++ b/internal/core/export/value.go
@@ -69,7 +69,7 @@
result = e.structComposite(n, attrs)
}
- case !x.IsIncomplete() || len(n.Conjuncts) == 0:
+ case !x.IsIncomplete() || len(n.Conjuncts) == 0 || e.cfg.Final:
result = e.bottom(x)
}