Suggest to bind self.x to x when field x may be in format string#141633
Suggest to bind self.x to x when field x may be in format string#141633xizheyin wants to merge 2 commits intorust-lang:mainfrom
self.x to x when field x may be in format string#141633Conversation
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.
Use maybe to imply that maybe x is in the format string, and add a comment here to clarify.
davidtwco
left a comment
There was a problem hiding this comment.
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. |
|
|
|
I'll re-examine this PR these days. I recall that #142594 couldn't help because of #142594 (comment). |
|
☔ The latest upstream changes (presumably #149836) made this pull request unmergeable. Please resolve the merge conflicts. |
Fixes #141350
I added the new test in the first commit, and committed the changes in the second one.
r? @fmease
cc @mejrs