(s: &[u8], p: usize)
| 817 | |
| 818 | type Range = (usize, usize); |
| 819 | |
| 820 | fn field_assign_at(s: &[u8], p: usize) -> Option<(Range, Range, usize)> { |
| 821 | let w1 = word_end(s, p); |
| 822 | let a1 = arrow_at(s, skip_jsws(s, w1))?; |
| 823 | let f1s = skip_jsws(s, a1); |
| 824 | if !is_word_at(s, f1s) { |
| 825 | return None; |
| 826 | } |
| 827 | let f1e = word_end(s, f1s); |
| 828 | let eq = skip_jsws(s, f1e); |
| 829 | if s.get(eq) != Some(&b'=') { |
| 830 | return None; |
| 831 | } |
| 832 | let r1s = skip_jsws(s, eq + 1); |
| 833 | if !is_word_at(s, r1s) { |
| 834 | return None; |
| 835 | } |
| 836 | let r1e = word_end(s, r1s); |
| 837 | let a2 = arrow_at(s, skip_jsws(s, r1e))?; |
| 838 | let f2s = skip_jsws(s, a2); |
| 839 | if !is_word_at(s, f2s) { |
| 840 | return None; |
| 841 | } |
| 842 | let f2e = word_end(s, f2s); |
| 843 | Some(((f1s, f1e), (f2s, f2e), f2e)) |
| 844 | } |
| 845 | |
| 846 | /// DISPATCH_RE: /((?:\w+(?:\s*\[[^\][]*\])?\s*(?:->|\.)\s*)+)(\w+)\s*\)?\s*\(/g |
no test coverage detected