diff --git a/renderer/renderer.go b/renderer/renderer.go index 10f6d40..3f74112 100644 --- a/renderer/renderer.go +++ b/renderer/renderer.go @@ -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) diff --git a/renderer/renderer_test.go b/renderer/renderer_test.go new file mode 100644 index 0000000..089a4a8 --- /dev/null +++ b/renderer/renderer_test.go @@ -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() + } +}