Skip to content

Latest commit

 

History

History
54 lines (40 loc) · 1.72 KB

0000-macro-lifetimes.md

File metadata and controls

54 lines (40 loc) · 1.72 KB
  • Feature Name: Allow lifetime specifiers to be passed to macros
  • Start Date: 2016-04-22
  • RFC PR: (leave this empty)
  • Rust Issue: (leave this empty)

Summary

Add a lifetime specifier for macro_rules! patterns, that matches any valid lifetime.

Motivation

Certain classes of macros are completely impossible without the ability to pass lifetimes. Specifically, anything that wants to implement a trait from inside of a macro is going to need to deal with lifetimes eventually. They're also commonly needed for any macros that need to deal with types in a more granular way than just ty.

Since a lifetime is a single token, the only way to match against a lifetime is by capturing it as tt. Something like '$lifetime:ident would fail to compile. This is extremely limiting, as it becomes difficult to sanitize input, and tt is extremely difficult to use in a sequence without using awkward separators.

Detailed design

This RFC proposes adding lifetime as an additional specifier to macro_rules! (alternatively: life or lt). As it is a single token, it is able to be followed by any other specifier. Since a lifetime acts very much like an identifier, and can appear in almost as many places, it can be handled almost identically.

A preliminary implementation can be found at rust-lang/rust#33135

Drawbacks

None

Alternatives

A more general specifier, such as a "type parameter list", which would roughly map to ast::Generics would cover most of the cases that matching lifetimes individually would cover.

Unresolved questions

None