-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Closed
Labels
nightly breakageBreakage on the nightly channel onlyBreakage on the nightly channel only
Milestone
Description
Motivation
rocket_codegen
currently uses Rust's plugin
system, which is slated for future removal and is a leading cause of breakage on nightly Rust. Rocket should move to implementing its code generation through proc_macro
and related features for better stability guarantees.
Related issues
- Stop using the
quote_
macros #678: Stop using the quote_ macros. This conversion process supersedes that issue. - Tracking issue for RFC 1566: Procedural macros rust-lang/rust#38356:
proc_macro
tracking issue - Merge
proc_macro_
expansion feature gates asproc_macro_hygiene
rust-lang/rust#52121: merge severalproc_macro
features asproc_macro_hygiene
Questions/Concerns
- Forward compatibility, including everything to do with possible changes to feature gates, hygiene, and editions.
- Hygiene
Progress
Attribute macros:
-
route
and its variants (get
,put
,post
,delete
,head
,patch
,options
) -
catch
Custom derives:
-
derive(FromForm)
-
derive(FromFormValue)
-
derive(Responder)
-
derive(UriDisplay)
Bang macros:
-
routes!
: Reimplement routes! and catchers! as proc_macros #680 -
catchers!
: PR: Reimplement routes! and catchers! as proc_macros #680 -
uri!
-
rocket_internal_uri!
(some remaining work on the diagnostics)
Upstream:
Required rustc Features
These unstable features will need to be used by Rocket's proc_macro crate.
proc_macro_diagnostic
,proc_macro_span
. Allows Rocket to provide useful error messages from macros.
These unstable features will need to be used by application crates that use Rocket's macros.
proc_macro_hygiene
. For macros that expand to non-items or macro definitions, includingroutes!
,catchers!
, anduri!
, and#[route]
.decl_macro
, for#[route]
.
Testing
- All existing tests for attribute syntax, etc.
- Verify that macros work via all applicable import mechanisms: macro_use (
#[macro_use] extern crate rocket;
), use_extern_macros (use rocket::macro
), and proc_macro_path_invoc (#[derive(rocket::macro)],
#[rocket::macro]
, orrocket::macro!()
), and any others missing from this list. Ensure these cases are enough to cover compatibility with consumer crates that target the 2018 edition as well.
mmrath, xilec, xentec, andywwright, deikatsuo and 2 more
Metadata
Metadata
Assignees
Labels
nightly breakageBreakage on the nightly channel onlyBreakage on the nightly channel only