Skip to content

Tracking issue for proc_macro conversion #693

@jebrosen

Description

@jebrosen

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

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:

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, including routes!, catchers!, and uri!, 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], or rocket::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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    nightly breakageBreakage on the nightly channel only

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions