pub fn maybe_emit_expr_attr_err(&self, attr: &Attribute) {
        if !self.features.map(|features| features.stmt_expr_attributes).unwrap_or(true) {
            let mut err = feature_err(self.sess,
                                      sym::stmt_expr_attributes,
                                      attr.span,
                                      "attributes on expressions are experimental");

            if attr.is_doc_comment() {
                err.help("`///` is for documentation comments. For a plain comment, use `//`.");
            }

            err.emit();
        }
    }
/// If attributes are not allowed on expressions, emit an error for `attr`
If attributes are not allowed on expressions, emit an error for `attr`
If attributes are not allowed on expressions emit an error for ` attr `
pub fn maybe_emit_expr_attr_err(&self, attr: &Attribute) {
        if !self.features.map(|features| features.stmt_expr_attributes).unwrap_or(true) {
            let mut err = feature_err(self.sess,
                                      sym::stmt_expr_attributes,
                                      attr.span,
                                      "attributes on expressions are experimental");
            if attr.is_doc_comment() {
                err.help("`///` is for documentation comments. For a plain comment, use `//`.");
            }
            err.emit();
        }
    }
pub fn maybe_emit_expr_attr_err ( & self , attr : & Attribute ) { if ! self . features . map ( | features | features . stmt_expr_attributes ) . unwrap_or ( true ) { let mut err = feature_err ( self . sess , sym :: stmt_expr_attributes , attr . span , " " ) ; if attr . is_doc_comment ( ) { err . help ( " " ) ; } err . emit ( ) ; } }
If attributes are not allowed on expressions, emit an error for `attr`
If attributes are not allowed on expressions emit an error for ` attr `
&self
attr
&Attribute