+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
#[cfg(feature = "parsing")]
use crate::error::Error;
#[cfg(feature = "parsing")]
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
use std::ops::{AddAssign, MulAssign};
// For implementing base10_digits() accessor on LitInt.
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
//! A stably addressed token buffer supporting efficient traversal based on a
//! cheaply copyable cursor.
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
#[cfg(feature = "full")]
use crate::expr::Expr;
#[cfg(any(feature = "printing", feature = "full"))]
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
/// Define a type that supports parsing and printing a given identifier as if it
/// were a keyword.
///
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
/// Define a type that supports parsing and printing a multi-character symbol
/// as if it were a punctuation token.
///
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
use crate::attr::Attribute;
use crate::expr::{Expr, Index, Member};
use crate::ident::Ident;
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
use crate::attr::Attribute;
use crate::data::{Fields, FieldsNamed, Variant};
use crate::generics::Generics;
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
//! Extensions to the parsing API with niche applicability.
use crate::buffer::Cursor;
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
use std::iter;
use std::mem::ManuallyDrop;
use std::ops::{Deref, DerefMut};
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
#[cfg(feature = "parsing")]
use crate::buffer::Cursor;
use crate::thread::ThreadBound;
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
#[doc(hidden)]
pub use std::clone::Clone;
#[doc(hidden)]
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
use crate::attr::Attribute;
#[cfg(all(feature = "parsing", feature = "full"))]
use crate::error::Result;
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
//! Extension traits to provide parsing methods on foreign types.
use crate::buffer::Cursor;
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
use crate::attr::Attribute;
use crate::item::Item;
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
use crate::classify;
use crate::expr::Expr;
#[cfg(feature = "full")]
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
// This file is @generated by syn-internal-codegen.
// It is not intended for manual editing.
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
// This file is @generated by syn-internal-codegen.
// It is not intended for manual editing.
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
// This file is @generated by syn-internal-codegen.
// It is not intended for manual editing.
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
// This file is @generated by syn-internal-codegen.
// It is not intended for manual editing.
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
// This file is @generated by syn-internal-codegen.
// It is not intended for manual editing.
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
// This file is @generated by syn-internal-codegen.
// It is not intended for manual editing.
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
// This file is @generated by syn-internal-codegen.
// It is not intended for manual editing.
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
use crate::attr::Attribute;
use crate::expr::Expr;
use crate::ident::Ident;
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
use crate::error::Result;
use crate::parse::ParseBuffer;
use crate::token;
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
#[cfg(feature = "parsing")]
use crate::lookahead;
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
use crate::attr::Attribute;
use crate::data::{Fields, FieldsNamed, Variant};
use crate::derive::{Data, DataEnum, DataStruct, DataUnion, DeriveInput};
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
//! [![github]](https://github.com/dtolnay/syn) [![crates-io]](https://crates.io/crates/syn) [![docs-rs]](crate)
//!
//! [github]: https://img.shields.io/badge/github-8da0cb?style=for-the-badge&labelColor=555555&logo=github
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
#[cfg(feature = "parsing")]
use crate::lookahead;
use proc_macro2::{Ident, Span};
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
#[cfg(feature = "parsing")]
use crate::lookahead;
#[cfg(feature = "parsing")]
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
use crate::buffer::Cursor;
use crate::error::{self, Error};
use crate::sealed::lookahead::Sealed;
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
#[cfg(feature = "parsing")]
use crate::error::Result;
#[cfg(feature = "parsing")]
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
#[cfg_attr(
not(any(feature = "full", feature = "derive")),
allow(unknown_lints, unused_macro_rules)
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
//! Facility for interpreting structured content inside of an `Attribute`.
use crate::error::{Error, Result};
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
ast_enum! {
/// A binary operator: `+`, `+=`, `&`.
#[cfg_attr(docsrs, doc(cfg(any(feature = "full", feature = "derive"))))]
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
//! Parsing interface for parsing a token stream into a syntax tree node.
//!
//! Parsing in Syn is built on parser functions that take in a [`ParseStream`]
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
/// Parse the input TokenStream of a macro, triggering a compile error if the
/// tokens fail to parse.
///
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
/// Quasi-quotation macro that accepts input like the [`quote!`] macro but uses
/// type inference to figure out a return type for those tokens.
///
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
use crate::attr::Attribute;
use crate::expr::Member;
use crate::ident::Ident;
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
#[cfg(feature = "parsing")]
use crate::error::Result;
use crate::expr::Expr;
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
#[cfg(all(feature = "printing", feature = "full"))]
use crate::attr::{AttrStyle, Attribute};
#[cfg(feature = "printing")]
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
use proc_macro2::TokenStream;
use quote::ToTokens;
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
//! A punctuated sequence of syntax tree nodes separated by punctuation.
//!
//! Lots of things in Rust are punctuated sequences.
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
use crate::path::Path;
use crate::token;
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
use self::{Action::*, Input::*};
use proc_macro2::{Delimiter, Ident, Spacing, TokenTree};
use syn::parse::{ParseStream, Result};
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
#[cfg(feature = "parsing")]
pub(crate) mod lookahead {
pub trait Sealed: Copy {}
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
use proc_macro2::extra::DelimSpan;
use proc_macro2::{Delimiter, Group, Span, TokenStream};
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
//! A trait that can provide the `Span` of the complete contents of a syntax
//! tree node.
//!
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
use crate::attr::Attribute;
use crate::expr::Expr;
use crate::item::Item;
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
use std::fmt::{self, Debug};
use std::thread::{self, ThreadId};
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
//! Tokens representing Rust punctuation, keywords, and delimiters.
//!
//! The type names in this module can be difficult to keep straight, so we
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
use proc_macro2::{Delimiter, TokenStream, TokenTree};
use std::hash::{Hash, Hasher};
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
use crate::attr::Attribute;
use crate::expr::Expr;
use crate::generics::{BoundLifetimes, TypeParamBound};
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
use crate::parse::ParseStream;
use proc_macro2::{Delimiter, TokenStream};
use std::cmp::Ordering;
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
pub(crate) fn skip(mut s: &str) -> &str {
'skip: while !s.is_empty() {
let byte = s.as_bytes()[0];