Fix corpus response parsing on "document"

Change-Id: Ib305c6430e997f5afdf07310844fab6c7f6443ac
diff --git a/parser/corpus_parser.go b/parser/corpus_parser.go
index 9debf3a..187a618 100644
--- a/parser/corpus_parser.go
+++ b/parser/corpus_parser.go
@@ -95,13 +95,13 @@
 
 // ParseMapping parses a corpus mapping rule of the form "pattern <> replacement".
 func (p *CorpusParser) ParseMapping(input string) (*CorpusMappingResult, error) {
-	sepIdx := strings.Index(input, "<>")
-	if sepIdx == -1 {
+	before, after, ok := strings.Cut(input, "<>")
+	if !ok {
 		return nil, fmt.Errorf("invalid corpus mapping rule: missing <> separator in %q", input)
 	}
 
-	leftStr := strings.TrimSpace(input[:sepIdx])
-	rightStr := strings.TrimSpace(input[sepIdx+2:])
+	leftStr := strings.TrimSpace(before)
+	rightStr := strings.TrimSpace(after)
 
 	if leftStr == "" {
 		return nil, fmt.Errorf("invalid corpus mapping rule: empty left side")
@@ -183,16 +183,16 @@
 func (p *CorpusParser) parseField(input string) (*CorpusField, error) {
 	input = strings.TrimSpace(input)
 
-	eqIdx := strings.Index(input, "=")
-	if eqIdx == -1 {
+	before, after, ok := strings.Cut(input, "=")
+	if !ok {
 		if !p.AllowBareValues {
 			return nil, fmt.Errorf("invalid field expression: missing '=' in %q", input)
 		}
 		return p.parseBareValue(input)
 	}
 
-	key := strings.TrimSpace(input[:eqIdx])
-	rest := strings.TrimSpace(input[eqIdx+1:])
+	key := strings.TrimSpace(before)
+	rest := strings.TrimSpace(after)
 
 	if key == "" {
 		return nil, fmt.Errorf("invalid field expression: empty key")
diff --git a/parser/grammar_parser.go b/parser/grammar_parser.go
index 7c949f8..a224181 100644
--- a/parser/grammar_parser.go
+++ b/parser/grammar_parser.go
@@ -156,7 +156,7 @@
 			// Check if this parenthesis is inside brackets (part of an identifier)
 			insideBrackets := false
 			bracketDepth := 0
-			for j := 0; j < i; j++ {
+			for j := range i {
 				if runes[j] == '[' {
 					bracketDepth++
 				} else if runes[j] == ']' {