-
Notifications
You must be signed in to change notification settings - Fork 13.4k
Suggest to bind self.x
to x
when field x
may be in format string
#141633
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
base: master
Are you sure you want to change the base?
Conversation
Signed-off-by: xizheyin <xizheyin@smail.nju.edu.cn>
Signed-off-by: xizheyin <xizheyin@smail.nju.edu.cn>
Please choose another assignee. |
r? @davidtwco rustbot has assigned @davidtwco. Use |
// Check if the field is used in a format string, such as `{x}`. | ||
// Note that both `let y = {x}` and `"{x}"` can match this pattern. | ||
let maybe_field_is_format_named_arg = source_map |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Use maybe
to imply that maybe x
is in the format string, and add a comment here to clarify.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think this is an improvement, the help message being changed is just as correct as what you are suggesting, but feels more appropriate as it adds to the format macro that is where the error originates rather than adding another line entirely. You could attempt to improve this with a structured suggestion that the user add a , foo = self.foo
argument to the format macro.
For structured suggestions, I tried, but I don't currently have a better way to get the HIR or ast of the format macro, in this diagnostic I can only get the span of x. There is so little information given here. Do you have a good idea? |
The original help message is wrong for the following example
So, a line of binding had to be added to ensure that the formatted string and this case in the example were satisfied. |
The problem is that there's not a good way to detect that we're in the format (or write, print etc) macro to begin with. But format string parsing has a specialized error path for With that PR reverted, users will go from Not that elegant, but it works. |
But if we suggest creating a new variable, the suggestion is always correct; let x = &self.x;
format!("{x}"); |
I'm more curious if this is considered proper advice if it's suggested through a two-paragraph application?
Yes, this prompts the user once and avoids having to apply the suggestion twice. |
It's not, but you also have to weigh that against how accurate the suggestion is and how likely someone is to run into it to begin with. Going through code snippets and looking for braces is a hacky thing that risks being inaccurate. |
Does |
I tried this and it was false. Probably because it's not what the macro expands out to, but is simply treated as a variable. |
This PR seems to be on hold for a while, maybe David doesn't have time on this PR for a while. |
|
Fixes #141350
I added the new test in the first commit, and committed the changes in the second one.
r? @fmease
cc @mejrs