1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- package tracker
- import (
- "github.com/pelletier/go-toml/v2/internal/ast"
- )
- // KeyTracker is a tracker that keeps track of the current Key as the AST is
- // walked.
- type KeyTracker struct {
- k []string
- }
- // UpdateTable sets the state of the tracker with the AST table node.
- func (t *KeyTracker) UpdateTable(node *ast.Node) {
- t.reset()
- t.Push(node)
- }
- // UpdateArrayTable sets the state of the tracker with the AST array table node.
- func (t *KeyTracker) UpdateArrayTable(node *ast.Node) {
- t.reset()
- t.Push(node)
- }
- // Push the given key on the stack.
- func (t *KeyTracker) Push(node *ast.Node) {
- it := node.Key()
- for it.Next() {
- t.k = append(t.k, string(it.Node().Data))
- }
- }
- // Pop key from stack.
- func (t *KeyTracker) Pop(node *ast.Node) {
- it := node.Key()
- for it.Next() {
- t.k = t.k[:len(t.k)-1]
- }
- }
- // Key returns the current key
- func (t *KeyTracker) Key() []string {
- k := make([]string, len(t.k))
- copy(k, t.k)
- return k
- }
- func (t *KeyTracker) reset() {
- t.k = t.k[:0]
- }
|