Rust is a very nice fit for language tooling. It has several features that are particularly useful for syntactic manipulation, like matching, enums, and Result<x> error handling. And a focus on efficiency is especially nice for language tooling, because no matter how fast your tools are, a codebase can get big enough to make them annoyingly slow.