Revert "Rollup merge of #124099 - voidc:disallow-ambiguous-expr-attrs, r=davidtwco"
This reverts commit57dad1d75e
, reversing changes made to36316df9fe
.
This commit is contained in:
parent
e1ac0fa95b
commit
216424da32
15 changed files with 49 additions and 141 deletions
|
@ -622,8 +622,6 @@ parse_or_pattern_not_allowed_in_let_binding = top-level or-patterns are not allo
|
|||
parse_out_of_range_hex_escape = out of range hex escape
|
||||
.label = must be a character in the range [\x00-\x7f]
|
||||
|
||||
parse_outer_attr_ambiguous = ambiguous outer attributes
|
||||
|
||||
parse_outer_attr_explanation = outer attributes, like `#[test]`, annotate the item following them
|
||||
|
||||
parse_outer_attribute_not_allowed_on_if_else = outer attributes are not allowed on `if` and `else` branches
|
||||
|
|
|
@ -495,15 +495,6 @@ pub(crate) struct OuterAttributeNotAllowedOnIfElse {
|
|||
pub attributes: Span,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(parse_outer_attr_ambiguous)]
|
||||
pub(crate) struct AmbiguousOuterAttributes {
|
||||
#[primary_span]
|
||||
pub span: Span,
|
||||
#[subdiagnostic]
|
||||
pub sugg: WrapInParentheses,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(parse_missing_in_in_for_loop)]
|
||||
pub(crate) struct MissingInInForLoop {
|
||||
|
|
|
@ -328,9 +328,7 @@ impl<'a> Parser<'a> {
|
|||
this.parse_expr_assoc_with(prec + prec_adjustment, LhsExpr::NotYetParsed)
|
||||
})?;
|
||||
|
||||
self.error_ambiguous_outer_attrs(&lhs, lhs_span, rhs.span);
|
||||
let span = lhs_span.to(rhs.span);
|
||||
|
||||
let span = self.mk_expr_sp(&lhs, lhs_span, rhs.span);
|
||||
lhs = match op {
|
||||
AssocOp::Add
|
||||
| AssocOp::Subtract
|
||||
|
@ -429,18 +427,6 @@ impl<'a> Parser<'a> {
|
|||
});
|
||||
}
|
||||
|
||||
fn error_ambiguous_outer_attrs(&self, lhs: &P<Expr>, lhs_span: Span, rhs_span: Span) {
|
||||
if let Some(attr) = lhs.attrs.iter().find(|a| a.style == AttrStyle::Outer) {
|
||||
self.dcx().emit_err(errors::AmbiguousOuterAttributes {
|
||||
span: attr.span.to(rhs_span),
|
||||
sugg: errors::WrapInParentheses::Expression {
|
||||
left: attr.span.shrink_to_lo(),
|
||||
right: lhs_span.shrink_to_hi(),
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/// Possibly translate the current token to an associative operator.
|
||||
/// The method does not advance the current token.
|
||||
///
|
||||
|
@ -520,8 +506,7 @@ impl<'a> Parser<'a> {
|
|||
None
|
||||
};
|
||||
let rhs_span = rhs.as_ref().map_or(cur_op_span, |x| x.span);
|
||||
self.error_ambiguous_outer_attrs(&lhs, lhs.span, rhs_span);
|
||||
let span = lhs.span.to(rhs_span);
|
||||
let span = self.mk_expr_sp(&lhs, lhs.span, rhs_span);
|
||||
let limits =
|
||||
if op == AssocOp::DotDot { RangeLimits::HalfOpen } else { RangeLimits::Closed };
|
||||
let range = self.mk_range(Some(lhs), rhs, limits);
|
||||
|
@ -739,8 +724,7 @@ impl<'a> Parser<'a> {
|
|||
expr_kind: fn(P<Expr>, P<Ty>) -> ExprKind,
|
||||
) -> PResult<'a, P<Expr>> {
|
||||
let mk_expr = |this: &mut Self, lhs: P<Expr>, rhs: P<Ty>| {
|
||||
this.error_ambiguous_outer_attrs(&lhs, lhs_span, rhs.span);
|
||||
this.mk_expr(lhs_span.to(rhs.span), expr_kind(lhs, rhs))
|
||||
this.mk_expr(this.mk_expr_sp(&lhs, lhs_span, rhs.span), expr_kind(lhs, rhs))
|
||||
};
|
||||
|
||||
// Save the state of the parser before parsing type normally, in case there is a
|
||||
|
@ -3858,6 +3842,16 @@ impl<'a> Parser<'a> {
|
|||
self.mk_expr(span, ExprKind::Err(guar))
|
||||
}
|
||||
|
||||
/// Create expression span ensuring the span of the parent node
|
||||
/// is larger than the span of lhs and rhs, including the attributes.
|
||||
fn mk_expr_sp(&self, lhs: &P<Expr>, lhs_span: Span, rhs_span: Span) -> Span {
|
||||
lhs.attrs
|
||||
.iter()
|
||||
.find(|a| a.style == AttrStyle::Outer)
|
||||
.map_or(lhs_span, |a| a.span)
|
||||
.to(rhs_span)
|
||||
}
|
||||
|
||||
fn collect_tokens_for_expr(
|
||||
&mut self,
|
||||
attrs: AttrWrapper,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue