Skip to content

Commit f3d974f

Browse files
committed
Added String requirement to Nodes
1 parent dd21fe9 commit f3d974f

File tree

3 files changed

+17
-0
lines changed

3 files changed

+17
-0
lines changed

parse/node.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@ type UnmanagedTokenView = view.UnmanagedView[lex.Token, uint32]
1212
type TokenViewContext = view.ViewContext[lex.Token]
1313

1414
type Node interface {
15+
// Return a reference to the node substring in the source code
1516
View() source.UnmanagedSourceView
17+
18+
// Regenerate ("format") the code to a unique, single representation.
19+
String(ctx source.SourceContext) string
1620
}
1721

1822
type NodeParser[T any] interface {

parse/type.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ func (n TypeNode) View() source.UnmanagedSourceView {
1313
return n.view
1414
}
1515

16+
func (n TypeNode) String(ctx source.SourceContext) string {
17+
return string(n.view.Raw(ctx))
18+
}
19+
1620
type TypeParser struct{}
1721

1822
func (TypeParser) Parse(v *TokenView) (node TypeNode, err ParsingError) {

parse/type_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,15 @@ import (
1010
"github.com/stretchr/testify/assert"
1111
)
1212

13+
func TestTypeNodeStringer(t *testing.T) {
14+
typView, ctx := source.NewSourceView("$i32").Detach()
15+
typTok := lex.Token{Type: lex.TypToken, View: typView}
16+
tkns := view.NewView[lex.Token, uint32]([]lex.Token{typTok})
17+
node, err := parse.TypeParser{}.Parse(&tkns)
18+
assert.Nil(t, err)
19+
assert.Equal(t, "$i32", node.String(ctx))
20+
}
21+
1322
func TestTypeParserSimpleCase(t *testing.T) {
1423
typView, ctx := source.NewSourceView("$i32").Detach()
1524
typTkn := lex.Token{Type: lex.TypToken, View: typView}

0 commit comments

Comments
 (0)