Skip to content

Tracking issue for proc_macro conversion #693

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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