diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2018-10-23 08:54:10 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2018-10-23 14:35:43 +0200 |
commit | f669ef6bec25155d015b6ab231c53caef4fa5cdc (patch) | |
tree | a76f3843a7249ccbc61ec6c8a20ac2c38e8518cc /hugolib/page_content.go | |
parent | ed7b3e261909fe425ef64216f12806840c45b205 (diff) |
herrors: Improve handling of JSON errors
`*json.UnmarshalTypeError` and `*json.SyntaxError` has a byte `Offset`, so use that.
This commit also reworks/simplifies the errror line matching logic. This also makes the file reading unbuffered, but that should be fine in this error case.
See #5324
Diffstat (limited to 'hugolib/page_content.go')
-rw-r--r-- | hugolib/page_content.go | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/hugolib/page_content.go b/hugolib/page_content.go index 8c20db761..be015253b 100644 --- a/hugolib/page_content.go +++ b/hugolib/page_content.go @@ -89,7 +89,11 @@ Loop: f := metadecoders.FormatFromFrontMatterType(it.Type) m, err := metadecoders.UnmarshalToMap(it.Val, f) if err != nil { - return herrors.ToFileErrorWithOffset(string(f), err, iter.LineNumber()-1) + if fe, ok := err.(herrors.FileError); ok { + return herrors.ToFileErrorWithOffset(fe, iter.LineNumber()-1) + } else { + return err + } } if err := p.updateMetaData(m); err != nil { return err @@ -192,6 +196,6 @@ func parseError(err error, input []byte, pos int) error { input = input[:pos] lineNumber := bytes.Count(input, lf) + 1 endOfLastLine := bytes.LastIndex(input, lf) - return herrors.NewFileError("md", lineNumber, pos-endOfLastLine, err) + return herrors.NewFileError("md", -1, lineNumber, pos-endOfLastLine, err) } |