Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

rustc: Tweak custom attribute capabilities #50120

Merged
merged 1 commit into from
Apr 21, 2018

Commits on Apr 21, 2018

  1. rustc: Tweak custom attribute capabilities

    This commit starts to lay some groundwork for the stabilization of custom
    attribute invocations and general procedural macros. It applies a number of
    changes discussed on [internals] as well as a [recent issue][issue], namely:
    
    * The path used to specify a custom attribute must be of length one and cannot
      be a global path. This'll help future-proof us against any ambiguities and
      give us more time to settle the precise syntax. In the meantime though a bare
      identifier can be used and imported to invoke a custom attribute macro. A new
      feature gate, `proc_macro_path_invoc`, was added to gate multi-segment paths
      and absolute paths.
    
    * The set of items which can be annotated by a custom procedural attribute has
      been restricted. Statements, expressions, and modules are disallowed behind
      two new feature gates: `proc_macro_expr` and `proc_macro_mod`.
    
    * The input to procedural macro attributes has been restricted and adjusted.
      Today an invocation like `#[foo(bar)]` will receive `(bar)` as the input token
      stream, but after this PR it will only receive `bar` (the delimiters were
      removed). Invocations like `#[foo]` are still allowed and will be invoked in
      the same way as `#[foo()]`. This is a **breaking change** for all nightly
      users as the syntax coming in to procedural macros will be tweaked slightly.
    
    * Procedural macros (`foo!()` style) can only be expanded to item-like items by
      default. A separate feature gate, `proc_macro_non_items`, is required to
      expand to items like expressions, statements, etc.
    
    Closes rust-lang#50038
    
    [internals]: https://internals.rust-lang.org/t/help-stabilize-a-subset-of-macros-2-0/7252
    [issue]: rust-lang#50038
    alexcrichton committed Apr 21, 2018
    Configuration menu
    Copy the full SHA
    79630d4 View commit details
    Browse the repository at this point in the history