diff --git a/src/item.rs b/src/item.rs index 0fce87ac6f..9d724b0634 100644 --- a/src/item.rs +++ b/src/item.rs @@ -1159,7 +1159,11 @@ pub(crate) mod parsing { let attrs = input.call(Attribute::parse_outer)?; let path = input.call(Path::parse_mod_style)?; let bang_token: Token![!] = input.parse()?; - let ident: Option = input.parse()?; + let ident: Option = if input.peek(Token![try]) { + input.call(Ident::parse_any).map(Some) + } else { + input.parse() + }?; let (delimiter, tokens) = input.call(mac::parse_delimiter)?; let semi_token: Option = if !delimiter.is_brace() { Some(input.parse()?) diff --git a/src/stmt.rs b/src/stmt.rs index f0dd7f6951..b5434f7ce9 100644 --- a/src/stmt.rs +++ b/src/stmt.rs @@ -188,7 +188,7 @@ pub(crate) mod parsing { let mut is_item_macro = false; if let Ok(path) = ahead.call(Path::parse_mod_style) { if ahead.peek(Token![!]) { - if ahead.peek2(Ident) { + if ahead.peek2(Ident) || ahead.peek2(Token![try]) { is_item_macro = true; } else if ahead.peek2(token::Brace) && !(ahead.peek3(Token![.]) || ahead.peek3(Token![?]))