diff options
| author | David Tolnay <dtolnay@gmail.com> | 2025-06-13 13:55:37 -0700 |
|---|---|---|
| committer | David Tolnay <dtolnay@gmail.com> | 2025-06-13 18:09:13 -0700 |
| commit | 2171f89eb223a4f5f3af74df24104d77c1a8a6aa (patch) | |
| tree | 9ca78ec4a2a227d020e0163785b29aecc931dd20 /compiler/rustc_lint/src | |
| parent | d75b0ae7ce2338055c6cade1978b06cdb099147d (diff) | |
| download | rust-2171f89eb223a4f5f3af74df24104d77c1a8a6aa.tar.gz rust-2171f89eb223a4f5f3af74df24104d77c1a8a6aa.zip | |
Reduce precedence of expressions that have an outer attr
Diffstat (limited to 'compiler/rustc_lint/src')
| -rw-r--r-- | compiler/rustc_lint/src/context.rs | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/compiler/rustc_lint/src/context.rs b/compiler/rustc_lint/src/context.rs index 5679d4566dc..b6bf45dfbcf 100644 --- a/compiler/rustc_lint/src/context.rs +++ b/compiler/rustc_lint/src/context.rs @@ -7,6 +7,7 @@ use std::cell::Cell; use std::slice; use rustc_ast::BindingMode; +use rustc_ast::util::parser::ExprPrecedence; use rustc_data_structures::fx::FxIndexMap; use rustc_data_structures::sync; use rustc_data_structures::unord::UnordMap; @@ -850,6 +851,20 @@ impl<'tcx> LateContext<'tcx> { }) } + /// Returns the effective precedence of an expression for the purpose of + /// rendering diagnostic. This is not the same as the precedence that would + /// be used for pretty-printing HIR by rustc_hir_pretty. + pub fn precedence(&self, expr: &hir::Expr<'_>) -> ExprPrecedence { + let for_each_attr = |id: hir::HirId, callback: &mut dyn FnMut(&hir::Attribute)| { + for attr in self.tcx.hir_attrs(id) { + if attr.span().desugaring_kind().is_none() { + callback(attr); + } + } + }; + expr.precedence(&for_each_attr) + } + /// If the given expression is a local binding, find the initializer expression. /// If that initializer expression is another local binding, find its initializer again. /// |
