Skip to content

Commit 97cac92

Browse files
committed
cmd/cue/cmd: do not silently ignore unknown filetypes
Fixes #688 Change-Id: Ieb476c75c85ce213ace16a2411e492c524752ad2 Reviewed-on: https://cue-review.googlesource.com/c/cue/+/9568 Reviewed-by: Paul Jolly <[email protected]>
1 parent 2e1ac0f commit 97cac92

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
! cue eval cue+date: x.cue
2+
stderr 'unknown filetype date'
3+
-- x.cue --
4+
a: 5

internal/filetypes/filetypes.go

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,10 @@ func ParseArgs(args []string) (files []*build.File, err error) {
178178
hasFiles = true
179179
continue
180180
}
181-
inst, v = parseType("", Input)
181+
inst, v, err = parseType("", Input)
182+
if err != nil {
183+
return nil, err
184+
}
182185
}
183186
f, err := toFile(inst, v, s)
184187
if err != nil {
@@ -202,7 +205,10 @@ func ParseArgs(args []string) (files []*build.File, err error) {
202205
case qualifier != "" && !hasFiles:
203206
return nil, errors.Newf(token.NoPos, "scoped qualifier %q without file", qualifier+":")
204207
}
205-
inst, v = parseType(a[0], Input)
208+
inst, v, err = parseType(a[0], Input)
209+
if err != nil {
210+
return nil, err
211+
}
206212
qualifier = a[0]
207213
hasFiles = false
208214
}
@@ -233,7 +239,10 @@ func ParseFile(s string, mode Mode) (*build.File, error) {
233239
return nil, errors.Newf(token.NoPos, "empty file name in %q", s)
234240
}
235241

236-
inst, val := parseType(scope, mode)
242+
inst, val, err := parseType(scope, mode)
243+
if err != nil {
244+
return nil, err
245+
}
237246
return toFile(inst, val, file)
238247
}
239248

@@ -273,7 +282,7 @@ func toFile(i, v cue.Value, filename string) (*build.File, error) {
273282
return f, nil
274283
}
275284

276-
func parseType(s string, mode Mode) (inst, val cue.Value) {
285+
func parseType(s string, mode Mode) (inst, val cue.Value, err error) {
277286
i := cuegenInstance.Value()
278287
i = i.Unify(i.Lookup("modes", mode.String()))
279288
v := i.LookupDef("File")
@@ -283,10 +292,15 @@ func parseType(s string, mode Mode) (inst, val cue.Value) {
283292
if p := strings.IndexByte(t, '='); p >= 0 {
284293
v = v.Fill(t[p+1:], "tags", t[:p])
285294
} else {
286-
v = v.Unify(i.Lookup("tags", t))
295+
info := i.Lookup("tags", t)
296+
if !info.Exists() {
297+
return inst, val, errors.Newf(token.NoPos,
298+
"unknown filetype %s", t)
299+
}
300+
v = v.Unify(info)
287301
}
288302
}
289303
}
290304

291-
return i, v
305+
return i, v, nil
292306
}

0 commit comments

Comments
 (0)