It appears that using StringReader to find tokens will treat the span being searched as a new file, which works if we only need one subspan from a span, but struct matching patterns need multiple subspans for each field (and we don't have these field spans from the AST in match patterns).
```
SomeStruct{a: a, ab: ab}
           ^     ^
```
So I wrote this to do the job of shortening the span each time a new field had been seen.