func initialState(l *lexer.Lexer) lexer.StateFunc { r := l.IgnoreUpTo(func(r rune) bool { return variable(r) || assignment(r) || comma(r) || nonWhitespace(r) }) switch { case variable(r): return variableState case assignment(r): return assignmentState case comma(r): return commaState case nonWhitespace(r) && r != lexer.EOF: return textState } l.Emit(TokenEOF) return nil }