-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Description
I've brought this up elsewhere in the past, but it should've probably been a GH issue from the start. (I also regret not getting in touch with any RA devs when I heard they were working around the internal APIs of proc_macro, instead of with them - ideally we would streamline the aspects RA needs)
Right now, RA contains (slightly modified IIUC) copies of rust-lang/rust's library/proc-macro for various versions, and when the proc-macro ABI breaks on nightly, RA's proc macro support starts crashing.
However, this is far from the intended usage of the unstable proc_macro::bridge implementation details.
Instead, RA's proc macro support should be built against specific toolchains, and there's two scenarios:
- RA build that supports multiple Rust versions
- would have to embed sources (e.g.
include_str!("proc-macro-srv/.../foo.rs")) to build on user's machine - to support stable,
RUSTC_BOOTSTRAP=1would need to be used (this is not IMO philosophically different from the second scenario, it's just that the build doesn't happen onrust-langCI) - presumably this would be a binary that could be cached user-wide (when
rustupis used, it could be cached in the toolchain itself, with the appropriate invalidation based on toolchain version etc.)
- would have to embed sources (e.g.
- RA build shipped with
rustup- this can be more strongly tied to the same Rust version it ships with (i.e. refuse working with mismatched Cargo/
rustc) - can include the proc macro support in the build process, just like
rustcdoes
- this can be more strongly tied to the same Rust version it ships with (i.e. refuse working with mismatched Cargo/
For stable versions, pre-building the proc macro support in RA CI is also possible, but I don't see that scaling up to individual nightlies.