diff --git a/ast/ast.go b/ast/ast.go index 66059e9..0f3d3e6 100644 --- a/ast/ast.go +++ b/ast/ast.go @@ -26,7 +26,10 @@ const ( type NodeKind int func (k NodeKind) String() string { - return kindNames[k] + if int(k) < len(kindNames) { + return kindNames[k] + } + return fmt.Sprintf("NodeKind(%v)", int(k)) } var kindMax NodeKind diff --git a/ast/ast_test.go b/ast/ast_test.go index 684fbc3..0a54c5d 100644 --- a/ast/ast_test.go +++ b/ast/ast_test.go @@ -73,3 +73,31 @@ func node(n Node, children ...Node) Node { } return n } + +func TestNodeKindString(t *testing.T) { + tests := []struct { + name string + give NodeKind + want string + }{ + { + name: "known", + give: KindLink, + want: "Link", + }, + { + name: "unknown", + give: NodeKind(500), + want: "NodeKind(500)", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got := tt.give.String() + if tt.want != got { + t.Errorf("String() expected %q, got %q", tt.want, got) + } + }) + } +}