(s: &[u8], p: usize)
| 799 | |
| 800 | type Range = (usize, usize); |
| 801 | |
| 802 | fn field_assign_at(s: &[u8], p: usize) -> Option<(Range, Range, usize)> { |
| 803 | let w1 = word_end(s, p); |
| 804 | let a1 = arrow_at(s, skip_jsws(s, w1))?; |
| 805 | let f1s = skip_jsws(s, a1); |
| 806 | if !is_word_at(s, f1s) { |
| 807 | return None; |
| 808 | } |
| 809 | let f1e = word_end(s, f1s); |
| 810 | let eq = skip_jsws(s, f1e); |
| 811 | if s.get(eq) != Some(&b'=') { |
| 812 | return None; |
| 813 | } |
| 814 | let r1s = skip_jsws(s, eq + 1); |
| 815 | if !is_word_at(s, r1s) { |
| 816 | return None; |
| 817 | } |
| 818 | let r1e = word_end(s, r1s); |
| 819 | let a2 = arrow_at(s, skip_jsws(s, r1e))?; |
| 820 | let f2s = skip_jsws(s, a2); |
| 821 | if !is_word_at(s, f2s) { |
| 822 | return None; |
| 823 | } |
| 824 | let f2e = word_end(s, f2s); |
| 825 | Some(((f1s, f1e), (f2s, f2e), f2e)) |
| 826 | } |
| 827 | |
| 828 | /// DISPATCH_RE: /((?:\w+(?:\s*\[[^\][]*\])?\s*(?:->|\.)\s*)+)(\w+)\s*\)?\s*\(/g |
no test coverage detected