Summary: Implement the legacy :-moz-any selector as an alias of :is().
This means that it'll be more powerful, and also simpler to maintain for us.
This has been enabled in 81 beta/nightly and for the whole 82 cycle with
no regriessions so far, see bug 561154.
This means that it will accept more selectors (like :is() does), which I
don't expect to be problematic.
It also means that specificity may change in some cases, because the
specificity of :-moz-any doesn't account for the inner selectors. This
was a long-standing issue that this change fixes (bug 561154), but that
can technically change behavior (thus the pref, and having it enabled on
Nightly / Early beta for a while).
This last bit is pretty hard to use-count, because the specificity
change in most cases won't end up resulting in an actual behavior
change. I expect this to not be problematic either, because of the
limited usage that this prefixed pseudo-class has, and because behavior
is closer to what authors expect. As a data point, this change required
no changes to the browser UI at all, which extensively used the
:-moz-any() pseudo-class.
Bug:
https://bugzilla.mozilla.org/show_bug.cgi?id=1666086
Standard: N/A, this is a legacy, prefixed pseudo-class, which we'll
build on top of the standard alternative that we've shipped for a while.
Platform coverage: All
Preference: layout.css.moz-any-is-is.enabled
DevTools bug: N/A, devtools will work the same as they work with :is().
Other browsers: N/A, this is a -moz- prefixed pseudo-class.
web-platform-tests: There are tons of tests for :is(), but I don't plan
to test the :-moz- prefixed pseudo-class in WPT.
Cheers,
-- Emilio