(l *Lexer)
| 9 | type stateFn func(*Lexer) stateFn |
| 10 | |
| 11 | func root(l *Lexer) stateFn { |
| 12 | switch r := l.next(); { |
| 13 | case r == eof: |
| 14 | l.emitEOF() |
| 15 | return nil |
| 16 | case utils.IsSpace(r): |
| 17 | l.skip() |
| 18 | return root |
| 19 | case r == '\'' || r == '"': |
| 20 | l.scanString(r) |
| 21 | str, err := unescape(l.word()) |
| 22 | if err != nil { |
| 23 | l.error("%v", err) |
| 24 | } |
| 25 | l.emitValue(String, str) |
| 26 | case r == '`': |
| 27 | l.scanRawString(r) |
| 28 | case (r == 'b' || r == 'B') && (l.peek() == '\'' || l.peek() == '"'): |
| 29 | quote := l.next() |
| 30 | l.scanString(quote) |
| 31 | str, err := unescapeBytes(l.word()[1:]) // skip 'b' |
| 32 | if err != nil { |
| 33 | l.error("%v", err) |
| 34 | } |
| 35 | l.emitValue(Bytes, str) |
| 36 | case '0' <= r && r <= '9': |
| 37 | l.backup() |
| 38 | return number |
| 39 | case r == '?': |
| 40 | return questionMark |
| 41 | case r == '/': |
| 42 | return slash |
| 43 | case r == '#': |
| 44 | return pointer |
| 45 | case r == '|': |
| 46 | l.accept("|") |
| 47 | l.emit(Operator) |
| 48 | case r == ':': |
| 49 | l.accept(":") |
| 50 | l.emit(Operator) |
| 51 | case strings.ContainsRune("([{", r): |
| 52 | l.emit(Bracket) |
| 53 | case strings.ContainsRune(")]}", r): |
| 54 | l.emit(Bracket) |
| 55 | case strings.ContainsRune(",;%+-^", r): // single rune operator |
| 56 | l.emit(Operator) |
| 57 | case strings.ContainsRune("&!=*<>", r): // possible double rune operator |
| 58 | l.accept("&=*") |
| 59 | l.emit(Operator) |
| 60 | case r == '.': |
| 61 | l.backup() |
| 62 | return dot |
| 63 | case utils.IsAlphaNumeric(r): |
| 64 | l.backup() |
| 65 | return identifier |
| 66 | default: |
| 67 | return l.error("unrecognized character: %#U", r) |
| 68 | } |
nothing calls this directly
no test coverage detected
searching dependent graphs…