-
Notifications
You must be signed in to change notification settings - Fork 12.8k
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
Use proper spans in ext::tt::transcribe #2887
Comments
Not critical for 0.6; de-milestoning |
FIXMEs are still there. I'm not sure if this should be nominated for a maturity milestone, but if it's something that will trip people up, production ready is probably appropriate. |
Nominating for Milestone 5: Production Ready. |
accepted for production-ready milestone |
visiting for triage, email from 2013 sep 16 |
Accepting for P-low |
Triage: no change |
@nrc Is this still an issue? |
yes |
This is a work in progress PR that potentially should fix #29084, #28308, #25385, #28288, #31011. I think this may also adresse parts of #2887. The problem in this issues seems to be that when transcribing macro arguments, we just clone the argument Nonterminal, which still has to original spans. This leads to the unprintable spans. One solution would be to update the spans of the inserted argument to match the argument in the macro definition. So for [this testcase](https://github.com/rust-lang/rust/compare/master...fhahn:macro-ice?expand=1#diff-f7def7420c51621640707b6337726876R2) the error message would be displayed in the macro definition: src/test/compile-fail/issue-31011.rs:4:12: 4:22 error: attempted access of field `trace` on type `&T`, but no field with that name was found src/test/compile-fail/issue-31011.rs:4 if $ctx.trace { Currently I've added a very simple `update_span` function, which updates the span of the outer-most expression of a `NtExpr`, but this `update_span` function should be updated to handle all Nonterminals. But I'm pretty new to the macro system and would like to check if this approach makes sense, before doing that.
cc @pnkfelix, but I don't think this issue is entirely fixed, we still use some bad spans, that PR just fixed one case of them. |
@jseyfried You've done a lot of work on this file recently, perhaps you could comment if there's still more to be done with the spans? |
I'm not familiar with the details off the top of my head, but IIRC there are comments about spans that could use improvements in the file. |
That memory was correct; there are many FIXME comments in the file. |
There are now four FIXMEs in that file. No idea if that's few enough for this ticket or not. |
If #60620 is correct and gets merged, we would be down to just one FIXME and it is about hygiene. Specifically, when transcribing a MBE, when we replace a meta-variable with a matched nonterminal, currently:
Why the distinction? |
Fix a couple of FIXMEs in ext::tt::transcribe _Blocked on #60618_ A crater run would be nice to make sure my understanding is correct. A quick google search seems to indicate these are extremely rare errors if they are possible (which I don't believe they are). r? @petrochenkov cc rust-lang#2887 (there is only one FIXME left and it is hygiene-related)
#78603 has an answer for this question. |
TB: more fail tests (mostly shared with SB) Although it was not in the tests, `mem::transmute` works for `UnsafeCell -> &` as well. Draft: will also introduce more test cases for cases that fail. Draft: depends on the new error messages from rust-lang#2888
Several FIXMEs (formerly TODOs) there that mention using the correct spans for different errors.
The text was updated successfully, but these errors were encountered: