In our quest of a faster Mercurial, we have arrived at the point where we need
to implement the matchers in Rust.
This RFC mainly for the Matcher trait to see if the changes proposed feel
fine to people with more experience on the matter. While the AlwaysMatcher
implementation is here as a trivial example, it should be the first step
towards matchers use in Rust as it is currently the only supported one.
Notable changes:
- exact is renamed to exact_match
- enums for visit* methods with Recursive instead of 'all', etc.
- a new roots, separate from file_set
- no bad, explicitdir or traversedir functions as they can be passed to the high functions instead of the matchers
Thanks to Martin for suggesting the last two (most important) changes and for
reaching out to help a few weeks ago.
Is Empty needed as an optimization? Or could we just use an empty set?