parser: Add some context to front matter parse error
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Tue, 17 Apr 2018 08:20:16 +0000 (10:20 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Tue, 17 Apr 2018 08:20:38 +0000 (10:20 +0200)
Fixes #4638

parser/page.go

index 17378840dc8615204500252877c27c741305c2a2..84a59f186d6534c7d5157faa32fbec71d3e1bc34 100644 (file)
@@ -308,7 +308,7 @@ func extractFrontMatterDelims(r *bufio.Reader, left, right []byte) (fm []byte, e
        // pre-reads beginning delimiter length - 1 bytes from Reader
        for i := 0; i < len(left)-1; i++ {
                if c, err = r.ReadByte(); err != nil {
-                       return nil, fmt.Errorf("unable to read frontmatter at filepos %d: %s", buf.Len(), err)
+                       return nil, fmt.Errorf("unable to read frontmatter at filepos %d: %s\n%.100s...", buf.Len(), err, buf.String())
                }
                if err = buf.WriteByte(c); err != nil {
                        return nil, err
@@ -323,7 +323,7 @@ func extractFrontMatterDelims(r *bufio.Reader, left, right []byte) (fm []byte, e
        // is expected that the delimiter only contains one character.
        for {
                if c, err = r.ReadByte(); err != nil {
-                       return nil, fmt.Errorf("unable to read frontmatter at filepos %d: %s", buf.Len(), err)
+                       return nil, fmt.Errorf("unable to read frontmatter at filepos %d: %s\n%.100s...", buf.Len(), err, buf.String())
                }
                if err = buf.WriteByte(c); err != nil {
                        return nil, err
@@ -344,7 +344,7 @@ func extractFrontMatterDelims(r *bufio.Reader, left, right []byte) (fm []byte, e
                                        if err != nil {
                                                // It is ok that the end delimiter ends with EOF
                                                if err != io.EOF || level != 1 {
-                                                       return nil, fmt.Errorf("unable to read frontmatter at filepos %d: %s", buf.Len(), err)
+                                                       return nil, fmt.Errorf("unable to read frontmatter at filepos %d: %s\n%.100s...", buf.Len(), err, buf.String())
                                                }
                                        } else {
                                                switch c {
@@ -358,7 +358,7 @@ func extractFrontMatterDelims(r *bufio.Reader, left, right []byte) (fm []byte, e
                                                                return nil, err
                                                        }
                                                        if c, err = r.ReadByte(); err != nil {
-                                                               return nil, fmt.Errorf("unable to read frontmatter at filepos %d: %s", buf.Len(), err)
+                                                               return nil, fmt.Errorf("unable to read frontmatter at filepos %d: %s\n%.100s...", buf.Len(), err, buf.String())
                                                        }
                                                        if c != '\n' {
                                                                return nil, fmt.Errorf("frontmatter delimiter must be followed by CR+LF or LF but those can't be found at filepos %d", buf.Len())