improve: create missing RendererFunc error message

Improve the development debugging process by better handling a
missing Node Kind RendererFunc. This:
panic: runtime error: index out of range [22] with length 20
Becomes:
panic: RendererFunc not found for kind: KindName
This commit is contained in:
Brad Erickson 2020-12-11 18:27:47 -08:00
parent 6c741ae251
commit 579c70f79b
2 changed files with 35 additions and 0 deletions

View file

@ -3,6 +3,7 @@ package renderer
import (
"bufio"
"fmt"
"io"
"sync"
@ -161,6 +162,9 @@ func (r *renderer) Render(w io.Writer, source []byte, n ast.Node) error {
err := ast.Walk(n, func(n ast.Node, entering bool) (ast.WalkStatus, error) {
s := ast.WalkStatus(ast.WalkContinue)
var err error
if len(r.nodeRendererFuncs) < int(n.Kind()) {
return s, fmt.Errorf("RendererFunc not found for kind: %s", n.Kind())
}
f := r.nodeRendererFuncs[n.Kind()]
if f != nil {
s, err = f(writer, source, n, entering)

31
renderer/renderer_test.go Normal file
View file

@ -0,0 +1,31 @@
package renderer_test
import (
"bytes"
"testing"
"github.com/yuin/goldmark/ast"
"github.com/yuin/goldmark/renderer"
)
type customLink struct {
ast.Link
}
var kindCustomLink = ast.NewNodeKind("customLink")
// Kind implements Node.Kind.
func (n *customLink) Kind() ast.NodeKind {
return kindCustomLink
}
func TestMissingRendererFunc(t *testing.T) {
r := renderer.NewRenderer()
buf := bytes.NewBuffer([]byte{})
err := r.Render(buf, []byte{}, &customLink{})
if err.Error() != "RendererFunc not found for kind: customLink" {
t.Log(err)
t.FailNow()
}
}