summaryrefslogtreecommitdiffstats
path: root/vendor/syn/src
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/syn/src')
-rw-r--r--vendor/syn/src/custom_keyword.rs2
-rw-r--r--vendor/syn/src/custom_punctuation.rs2
-rw-r--r--vendor/syn/src/export.rs4
-rw-r--r--vendor/syn/src/expr.rs77
-rw-r--r--vendor/syn/src/lib.rs5
-rw-r--r--vendor/syn/src/parse.rs4
-rw-r--r--vendor/syn/src/token.rs22
7 files changed, 81 insertions, 35 deletions
diff --git a/vendor/syn/src/custom_keyword.rs b/vendor/syn/src/custom_keyword.rs
index 9f3ad8702..6ce23db41 100644
--- a/vendor/syn/src/custom_keyword.rs
+++ b/vendor/syn/src/custom_keyword.rs
@@ -128,7 +128,7 @@ macro_rules! custom_keyword {
macro_rules! impl_parse_for_custom_keyword {
($ident:ident) => {
// For peek.
- impl $crate::token::CustomToken for $ident {
+ impl $crate::__private::CustomToken for $ident {
fn peek(cursor: $crate::buffer::Cursor) -> $crate::__private::bool {
if let $crate::__private::Some((ident, _rest)) = cursor.ident() {
ident == $crate::__private::stringify!($ident)
diff --git a/vendor/syn/src/custom_punctuation.rs b/vendor/syn/src/custom_punctuation.rs
index 062fe5169..1b2c768f4 100644
--- a/vendor/syn/src/custom_punctuation.rs
+++ b/vendor/syn/src/custom_punctuation.rs
@@ -113,7 +113,7 @@ macro_rules! custom_punctuation {
#[macro_export]
macro_rules! impl_parse_for_custom_punctuation {
($ident:ident, $($tt:tt)+) => {
- impl $crate::token::CustomToken for $ident {
+ impl $crate::__private::CustomToken for $ident {
fn peek(cursor: $crate::buffer::Cursor) -> $crate::__private::bool {
$crate::__private::peek_punct(cursor, $crate::stringify_punct!($($tt)+))
}
diff --git a/vendor/syn/src/export.rs b/vendor/syn/src/export.rs
index febd322e1..b9ea5c747 100644
--- a/vendor/syn/src/export.rs
+++ b/vendor/syn/src/export.rs
@@ -57,6 +57,10 @@ pub use crate::token::parsing::{peek_punct, punct as parse_punct};
#[doc(hidden)]
pub use crate::token::printing::punct as print_punct;
+#[cfg(feature = "parsing")]
+#[doc(hidden)]
+pub use crate::token::private::CustomToken;
+
#[cfg(feature = "proc-macro")]
#[doc(hidden)]
pub type TokenStream = proc_macro::TokenStream;
diff --git a/vendor/syn/src/expr.rs b/vendor/syn/src/expr.rs
index ae723242e..22400be32 100644
--- a/vendor/syn/src/expr.rs
+++ b/vendor/syn/src/expr.rs
@@ -957,6 +957,8 @@ pub(crate) fn requires_terminator(expr: &Expr) -> bool {
#[cfg(feature = "parsing")]
pub(crate) mod parsing {
use super::*;
+ #[cfg(feature = "full")]
+ use crate::ext::IdentExt;
use crate::parse::discouraged::Speculative;
#[cfg(feature = "full")]
use crate::parse::ParseBuffer;
@@ -1156,6 +1158,25 @@ pub(crate) mod parsing {
}
#[cfg(feature = "full")]
+ fn can_begin_expr(input: ParseStream) -> bool {
+ input.peek(Ident::peek_any) // value name or keyword
+ || input.peek(token::Paren) // tuple
+ || input.peek(token::Bracket) // array
+ || input.peek(token::Brace) // block
+ || input.peek(Lit) // literal
+ || input.peek(Token![!]) && !input.peek(Token![!=]) // operator not
+ || input.peek(Token![-]) && !input.peek(Token![-=]) && !input.peek(Token![->]) // unary minus
+ || input.peek(Token![*]) && !input.peek(Token![*=]) // dereference
+ || input.peek(Token![|]) && !input.peek(Token![|=]) // closure
+ || input.peek(Token![&]) && !input.peek(Token![&=]) // reference
+ || input.peek(Token![..]) // range notation
+ || input.peek(Token![<]) && !input.peek(Token![<=]) && !input.peek(Token![<<=]) // associated path
+ || input.peek(Token![::]) // global path
+ || input.peek(Lifetime) // labeled loop
+ || input.peek(Token![#]) // expression attributes
+ }
+
+ #[cfg(feature = "full")]
fn parse_expr(
input: ParseStream,
mut lhs: Expr,
@@ -1614,7 +1635,7 @@ pub(crate) mod parsing {
} else if input.peek(Token![continue]) {
input.parse().map(Expr::Continue)
} else if input.peek(Token![return]) {
- expr_ret(input, allow_struct).map(Expr::Return)
+ expr_return(input, allow_struct).map(Expr::Return)
} else if input.peek(token::Bracket) {
array_or_repeat(input)
} else if input.peek(Token![let]) {
@@ -2223,7 +2244,7 @@ pub(crate) mod parsing {
impl Parse for ExprReturn {
fn parse(input: ParseStream) -> Result<Self> {
let allow_struct = AllowStruct(true);
- expr_ret(input, allow_struct)
+ expr_return(input, allow_struct)
}
}
@@ -2247,7 +2268,7 @@ pub(crate) mod parsing {
attrs: Vec::new(),
yield_token: input.parse()?,
expr: {
- if !input.is_empty() && !input.peek(Token![,]) && !input.peek(Token![;]) {
+ if can_begin_expr(input) {
Some(input.parse()?)
} else {
None
@@ -2442,34 +2463,46 @@ pub(crate) mod parsing {
#[cfg(feature = "full")]
fn expr_break(input: ParseStream, allow_struct: AllowStruct) -> Result<ExprBreak> {
+ let break_token: Token![break] = input.parse()?;
+
+ let ahead = input.fork();
+ let label: Option<Lifetime> = ahead.parse()?;
+ if label.is_some() && ahead.peek(Token![:]) {
+ // Not allowed: `break 'label: loop {...}`
+ // Parentheses are required. `break ('label: loop {...})`
+ let _ = ambiguous_expr(input, allow_struct)?;
+ let start_span = label.unwrap().apostrophe;
+ let end_span = input.cursor().prev_span();
+ return Err(crate::error::new2(
+ start_span,
+ end_span,
+ "parentheses required",
+ ));
+ }
+
+ input.advance_to(&ahead);
+ let expr = if can_begin_expr(input) && (allow_struct.0 || !input.peek(token::Brace)) {
+ let expr = ambiguous_expr(input, allow_struct)?;
+ Some(Box::new(expr))
+ } else {
+ None
+ };
+
Ok(ExprBreak {
attrs: Vec::new(),
- break_token: input.parse()?,
- label: input.parse()?,
- expr: {
- if input.is_empty()
- || input.peek(Token![,])
- || input.peek(Token![;])
- || !allow_struct.0 && input.peek(token::Brace)
- {
- None
- } else {
- let expr = ambiguous_expr(input, allow_struct)?;
- Some(Box::new(expr))
- }
- },
+ break_token,
+ label,
+ expr,
})
}
#[cfg(feature = "full")]
- fn expr_ret(input: ParseStream, allow_struct: AllowStruct) -> Result<ExprReturn> {
+ fn expr_return(input: ParseStream, allow_struct: AllowStruct) -> Result<ExprReturn> {
Ok(ExprReturn {
attrs: Vec::new(),
return_token: input.parse()?,
expr: {
- if input.is_empty() || input.peek(Token![,]) || input.peek(Token![;]) {
- None
- } else {
+ if can_begin_expr(input) {
// NOTE: return is greedy and eats blocks after it even when in a
// position where structs are not allowed, such as in if statement
// conditions. For example:
@@ -2477,6 +2510,8 @@ pub(crate) mod parsing {
// if return { println!("A") } {} // Prints "A"
let expr = ambiguous_expr(input, allow_struct)?;
Some(Box::new(expr))
+ } else {
+ None
}
},
})
diff --git a/vendor/syn/src/lib.rs b/vendor/syn/src/lib.rs
index a74d4b117..a3df727a9 100644
--- a/vendor/syn/src/lib.rs
+++ b/vendor/syn/src/lib.rs
@@ -249,7 +249,7 @@
//! dynamic library libproc_macro from rustc toolchain.
// Syn types in rustdoc of other crates get linked to here.
-#![doc(html_root_url = "https://docs.rs/syn/2.0.38")]
+#![doc(html_root_url = "https://docs.rs/syn/2.0.39")]
#![cfg_attr(doc_cfg, feature(doc_cfg))]
#![allow(non_camel_case_types)]
#![allow(
@@ -265,6 +265,7 @@
clippy::explicit_auto_deref,
clippy::if_not_else,
clippy::inherent_to_string,
+ clippy::into_iter_without_iter,
clippy::items_after_statements,
clippy::large_enum_variant,
clippy::let_underscore_untyped, // https://github.com/rust-lang/rust-clippy/issues/10410
@@ -811,6 +812,8 @@ mod gen {
#[path = "../gen_helper.rs"]
mod helper;
}
+
+#[cfg(any(feature = "fold", feature = "visit", feature = "visit-mut"))]
pub use crate::gen::*;
// Not public API.
diff --git a/vendor/syn/src/parse.rs b/vendor/syn/src/parse.rs
index 5a2aeb628..50fe110b5 100644
--- a/vendor/syn/src/parse.rs
+++ b/vendor/syn/src/parse.rs
@@ -513,8 +513,8 @@ impl<'a> ParseBuffer<'a> {
///
/// - `input.peek(Token![struct])`
/// - `input.peek(Token![==])`
- /// - `input.peek(Ident)`&emsp;*(does not accept keywords)*
- /// - `input.peek(Ident::peek_any)`
+ /// - `input.peek(syn::Ident)`&emsp;*(does not accept keywords)*
+ /// - `input.peek(syn::Ident::peek_any)`
/// - `input.peek(Lifetime)`
/// - `input.peek(token::Brace)`
///
diff --git a/vendor/syn/src/token.rs b/vendor/syn/src/token.rs
index af7f25c42..05d8f5601 100644
--- a/vendor/syn/src/token.rs
+++ b/vendor/syn/src/token.rs
@@ -88,6 +88,8 @@
//! [Printing]: https://docs.rs/quote/1.0/quote/trait.ToTokens.html
//! [`Span`]: https://docs.rs/proc-macro2/1.0/proc_macro2/struct.Span.html
+#[cfg(feature = "parsing")]
+pub(crate) use self::private::CustomToken;
use self::private::WithSpan;
#[cfg(feature = "parsing")]
use crate::buffer::Cursor;
@@ -134,7 +136,9 @@ pub trait Token: private::Sealed {
fn display() -> &'static str;
}
-mod private {
+pub(crate) mod private {
+ #[cfg(feature = "parsing")]
+ use crate::buffer::Cursor;
use proc_macro2::Span;
#[cfg(feature = "parsing")]
@@ -147,6 +151,14 @@ mod private {
pub struct WithSpan {
pub span: Span,
}
+
+ // Not public API.
+ #[doc(hidden)]
+ #[cfg(feature = "parsing")]
+ pub trait CustomToken {
+ fn peek(cursor: Cursor) -> bool;
+ fn display() -> &'static str;
+ }
}
#[cfg(feature = "parsing")]
@@ -218,14 +230,6 @@ impl_low_level_token!("punctuation token" Punct punct);
impl_low_level_token!("literal" Literal literal);
impl_low_level_token!("token" TokenTree token_tree);
-// Not public API.
-#[doc(hidden)]
-#[cfg(feature = "parsing")]
-pub trait CustomToken {
- fn peek(cursor: Cursor) -> bool;
- fn display() -> &'static str;
-}
-
#[cfg(feature = "parsing")]
impl<T: CustomToken> private::Sealed for T {}