github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/pkg/scanners/azure/expressions/token_walker.go (about)

     1  package expressions
     2  
     3  type tokenWalker struct {
     4  	tokens          []Token
     5  	currentPosition int
     6  }
     7  
     8  func newTokenWalker(tokens []Token) *tokenWalker {
     9  	return &tokenWalker{
    10  		tokens:          tokens,
    11  		currentPosition: 0,
    12  	}
    13  }
    14  
    15  func (t *tokenWalker) peek() Token {
    16  	if t.currentPosition >= len(t.tokens) {
    17  		return Token{}
    18  	}
    19  	return t.tokens[t.currentPosition]
    20  }
    21  
    22  func (t *tokenWalker) hasNext() bool {
    23  	return t.currentPosition+1 < len(t.tokens)
    24  }
    25  
    26  func (t *tokenWalker) unPop() {
    27  	if t.currentPosition > 0 {
    28  		t.currentPosition--
    29  	}
    30  }
    31  
    32  func (t *tokenWalker) pop() *Token {
    33  	if !t.hasNext() {
    34  		return nil
    35  	}
    36  
    37  	token := t.tokens[t.currentPosition]
    38  	t.currentPosition++
    39  	return &token
    40  }