Tracking issue for rust-lang/rfcs#873
The feature gate for this points at #27336, should it point here instead?
How is this going? Is anything on fire yet?
Is there any review/stability status on this feature by any chance?
Any update on this?
cc @rust-lang/lang. This seems like a constrained extension to macros, that we could consider stabilising.
There's an issue re interaction with deriving, see #32950, but I think it's minor.
Going to FCP for this feature seems good to me. If people are using it successfully (or have found bugs!) please say so :-)
+1 to stabilising. There are still a few issues with type macros, but just bugs, and nothing major that I'm aware of.
Did the lang team decide to FCP or wait?
We went to FCP. Apologies @durka for the dropped administrative work recently -- all of the Mozilla folks just traveled to London for a week and the preparations for that resulted in some balls being dropped.
This feature is in its _final comment period_ for stabilization (in 1.11).
rustc 1.11 still reports type macros as unstable. Is there any chance of having this feature stabilized in 1.12?
Yes, it's ready for immediate stabilization. Anyone should feel free to open a stabilization PR and ping me on it.
Indeed I am slow in writing it up, but the @rust-lang/lang team decided formally to stabilize this feature (as @aturon commented). Horray!
I am tagging the issue with E-mentor because I would be happy to mentor someone through the process of implementing a stabilization PR.
@nikomatsakis I don't have experience with rustc internals, but I'd be happy to try to implement the stabilization PR. :-)
@slash3g ok, basically all you have to do is to modify expand_type in libsyntax/ext/expand.rs and basically remove the if from this code:
pub fn expand_type(t: P<ast::Ty>, fld: &mut MacroExpander) -> P<ast::Ty> {
let t = match t.node.clone() {
ast::TyKind::Mac(mac) => {
if fld.cx.ecfg.features.unwrap().type_macros {
expand_mac_invoc(mac, None, Vec::new(), t.span, fld)
} else {
feature_gate::emit_feature_err(
&fld.cx.parse_sess.span_diagnostic,
"type_macros",
t.span,
feature_gate::GateIssue::Language,
"type macros are experimental");
DummyResult::raw_ty(t.span)
}
}
_ => t
};
fold::noop_fold_ty(t, fld)
}
you also need to change this declaration from libsyntax/feature_gate.rs and move it to be "accepted" (there is a section of "accepted" features below in the file):
// Allows macros to appear in the type position.
(active, type_macros, "1.3.0", Some(27245)),
Also remove #![feature(type_macros)] from any tests that mention it.
Ok, I've removed the check on the feature gate in expand_type, updated the tests and moved the declaration in libsyntax/feature_gate.rs.
Just two questions:
1) should I bump the version number in the declaration to "1.12.0"? (or maybe "1.13.0", it's not clear to me if this commit will be backported to the current beta)
2) should I reference this issue in the commit message? I've put "Closes #27245" for now, I don't know if this convention is ok for this project.
Thanks!
Most helpful comment
This feature is in its _final comment period_ for stabilization (in 1.11).