promql/lex.go
func lexInsideBraces(l *lexer) stateFn {
	if strings.HasPrefix(l.input[l.pos:], lineComment) {
		return lexLineComment
	}

	switch r := l.next(); {
	case r == eof:
		return l.errorf("unexpected end of input inside braces")
	case isSpace(r):
		return lexSpace
	case isAlpha(r):
		l.backup()
		return lexIdentifier
	case r == ',':
		l.emit(ItemComma)
	case r == '"' || r == '\'':
		l.stringOpen = r
		return lexString
	case r == '`':
		l.stringOpen = r
		return lexRawString
	case r == '=':
		if l.next() == '~' {
			l.emit(ItemEQLRegex)
			break
		}
		l.backup()
		l.emit(ItemEQL)
	case r == '!':
		switch nr := l.next(); {
		case nr == '~':
			l.emit(ItemNEQRegex)
		case nr == '=':
			l.emit(ItemNEQ)
		default:
			return l.errorf("unexpected character after '!' inside braces: %q", nr)
		}
	case r == '{':
		return l.errorf("unexpected left brace %q", r)
	case r == '}':
		l.emit(ItemRightBrace)
		l.braceOpen = false

		if l.seriesDesc {
			return lexValueSequence
		}
		return lexStatements
	default:
		return l.errorf("unexpected character inside braces: %q", r)
	}
	return lexInsideBraces
}
func lexInsideBraces(l *lexer) stateFn {
	if strings.HasPrefix(l.input[l.pos:], lineComment) {
		return lexLineComment
	}

	switch r := l.next(); {
	case r == eof:
		return l.errorf("unexpected end of input inside braces")
	case isSpace(r):
		return lexSpace
	case isAlpha(r):
		l.backup()
		return lexIdentifier
	case r == ',':
		l.emit(ItemComma)
	case r == '"' || r == '\'':
		l.stringOpen = r
		return lexString
	case r == '`':
		l.stringOpen = r
		return lexRawString
	case r == '=':
		if l.next() == '~' {
			l.emit(ItemEQLRegex)
			break
		}
		l.backup()
		l.emit(ItemEQL)
	case r == '!':
		switch nr := l.next(); {
		case nr == '~':
			l.emit(ItemNEQRegex)
		case nr == '=':
			l.emit(ItemNEQ)
		default:
			return l.errorf("unexpected character after '!' inside braces: %q", nr)
		}
	case r == '{':
		return l.errorf("unexpected left brace %q", r)
	case r == '}':
		l.emit(ItemRightBrace)
		l.braceOpen = false

		if l.seriesDesc {
			return lexValueSequence
		}
		return lexStatements
	default:
		return l.errorf("unexpected character inside braces: %q", r)
	}
	return lexInsideBraces
}
func lexInsideBraces ( l * lexer ) stateFn { if strings . HasPrefix ( l . input [ l . pos : ] , lineComment ) { return lexLineComment } switch r := l . next ( ) ; { case r == eof : return l . errorf ( " " ) case isSpace ( r ) : return lexSpace case isAlpha ( r ) : l . backup ( ) return lexIdentifier case r == ',' : l . emit ( ItemComma ) case r == '"' || r == '\'' : l . stringOpen = r return lexString case r == '`' : l . stringOpen = r return lexRawString case r == '=' : if l . next ( ) == '~' { l . emit ( ItemEQLRegex ) break } l . backup ( ) l . emit ( ItemEQL ) case r == '!' : switch nr := l . next ( ) ; { case nr == '~' : l . emit ( ItemNEQRegex ) case nr == '=' : l . emit ( ItemNEQ ) default : return l . errorf ( " " , nr ) } case r == '{' : return l . errorf ( " " , r ) case r == '}' : l . emit ( ItemRightBrace ) l . braceOpen = false if l . seriesDesc { return lexValueSequence } return lexStatements default : return l . errorf ( " " , r ) } return lexInsideBraces }
// lexInsideBraces scans the inside of a vector selector. Keywords are ignored and
// scanned as identifiers.
lexInsideBraces scans the inside of a vector selector . Keywords are ignored and scanned as identifiers .