You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Manishearth opened this issue
Apr 14, 2018
· 1 comment
Labels
A-macrosArea: All kinds of macros (custom derive, macro_rules!, proc macros, ..)E-mediumCall for participation: Medium difficulty. Experience needed to fix: Intermediate.E-mentorCall for participation: This issue has a mentor. Use #t-compiler/help on Zulip for discussion.
We should provide the ability for builtin derives to specify a string for each argument name, e.g. the args vector here (usage) would be a vector of tuples.
To fix this we also need to generate identifiers hygenically. Currently we generate __arg_0 so that it does not clash with other constants, but instead we should be doing something like ident_of("argumentname").gensym() which we then pass around.
(Ideally, we'd do the same for the other double underscored idents in the deriving code)
The text was updated successfully, but these errors were encountered:
Manishearth
added
E-mentor
Call for participation: This issue has a mentor. Use #t-compiler/help on Zulip for discussion.
A-macros
Area: All kinds of macros (custom derive, macro_rules!, proc macros, ..)
E-medium
Call for participation: Medium difficulty. Experience needed to fix: Intermediate.
labels
Apr 14, 2018
…earth
Provide better names for builtin deriving-generated attributes
First attempt at fixing #49967
Not in love with any choices here, don't be shy if you aren't happy with anything :)
I've tested that this produces nicer names in documentation, and that it no longer has issues conflicting with constants with the same name. (I guess we _could_ make a test for that... unsure if that would be valuable)
In all cases I took the names from the methods as declared in the relevant trait.
In some cases I had to prepend the names with _ otherwise there were errors about un-used variables. I'm uneasy with the inconsistency... do they all need to be like that? Is there a way to generate an alternate impl or use a different name (`_`?) in the cases where the arguments are not used?
Lastly the gensym addition to Ident I implemented largely as suggested, but I want to point out it's a little circuitous (at least, as far as I understand it). `cx.ident_of(name)` is just `Ident::from_str`, so we create an Ident then another Ident from it. `Ident::with_empty_ctxt(Symbol::gensym(string))` may or may not be equivalent, I don't know if it's important to intern it _then_ gensym it. It seems like either we could use that, or if we do want a new method to make this convenient, it could be on Ident instead (`from_str_gensymed`?)
A-macrosArea: All kinds of macros (custom derive, macro_rules!, proc macros, ..)E-mediumCall for participation: Medium difficulty. Experience needed to fix: Intermediate.E-mentorCall for participation: This issue has a mentor. Use #t-compiler/help on Zulip for discussion.
Currently, these show up as
__arg_0
, etc in docs:We should provide the ability for builtin derives to specify a string for each argument name, e.g. the
args
vector here (usage) would be a vector of tuples.To fix this we also need to generate identifiers hygenically. Currently we generate
__arg_0
so that it does not clash with other constants, but instead we should be doing something likeident_of("argumentname").gensym()
which we then pass around.(Ideally, we'd do the same for the other double underscored idents in the deriving code)
@zofrex is working on this
The text was updated successfully, but these errors were encountered: