When the "unstable" Cargo feature is given, html5ever’s build script will use html5ever_macros as a library to generate or update src/tree_builder/rules.expanded.rs, which is part of the source tree. (This feature also enables the corresponding features of tendril and string-cache.) html5ever_macros is not a plugin anymore, but it still uses libsyntax and still behaves a lot like a syntax extension. When "unstable" is *not* given, the build script checks that rules.expanded.rs is up to date (based on a hash of rules.rs) and fails if it’s not.