-
Notifications
You must be signed in to change notification settings - Fork 1.6k
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
Do not lint use_self
in proc macro expansion
#9454
Conversation
r? @flip1995 (rust-highfive has picked a reviewer for you, use r? to override) |
@@ -103,6 +103,7 @@ impl<'tcx> LateLintPass<'tcx> for UseSelf { | |||
if parameters.as_ref().map_or(true, |params| { | |||
!params.parenthesized && !params.args.iter().any(|arg| matches!(arg, GenericArg::Lifetime(_))) | |||
}); | |||
if !is_from_proc_macro(cx, item); // expensive, should be last check |
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.
Would item_path.span.from_expansion()
be enough here?
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.
Just tried testing it, and from_expansion
still produces the false positive.
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.
huh, what about for item.span
?
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.
The issue is the proc macro using a real span instead of making a new one. Basically every lint can be triggered from a proc macro, but with the span of the item being linted coming from a token outside the proc macro.
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.
The path span happened to do that but the whole item doesn't, so checking its span should be fine
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.
It depends what span the proc macro sets. If it doesn't set a span with expansion info, but just uses the span given from the item/tokens it looks to clippy as if it is unexpanded code.
@bors r+ Thanks! |
☀️ Test successful - checks-action_dev_test, checks-action_remark_test, checks-action_test |
In which version will this patch be released ? |
fix #9440
fix #8910
fix #6902
changelog: [
use_self
]: Do not lint in proc macro expansion