-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathwrite.go
More file actions
35 lines (28 loc) · 731 Bytes
/
write.go
File metadata and controls
35 lines (28 loc) · 731 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package expression
import (
"strings"
"git.urbach.dev/cli/q/src/token"
)
// write generates a textual representation of the expression.
func (expr *Expression) write(builder *strings.Builder, source []byte) {
if expr.IsLeaf() {
builder.WriteString(expr.Token.StringFrom(source))
return
}
builder.WriteByte('(')
switch expr.Token.Kind {
case token.Call:
builder.WriteString(token.Call.String())
case token.Array:
builder.WriteString(token.Array.String())
case token.Struct:
builder.WriteString(token.Struct.String())
default:
builder.WriteString(expr.Token.StringFrom(source))
}
for _, child := range expr.Children {
builder.WriteByte(' ')
child.write(builder, source)
}
builder.WriteByte(')')
}