aboutsummaryrefslogtreecommitdiff
path: root/syn-mid/src/arg.rs
diff options
context:
space:
mode:
Diffstat (limited to 'syn-mid/src/arg.rs')
-rw-r--r--syn-mid/src/arg.rs99
1 files changed, 0 insertions, 99 deletions
diff --git a/syn-mid/src/arg.rs b/syn-mid/src/arg.rs
deleted file mode 100644
index 593a1ac..0000000
--- a/syn-mid/src/arg.rs
+++ /dev/null
@@ -1,99 +0,0 @@
-use syn::{Attribute, Lifetime, Token};
-
-use super::PatType;
-
-ast_enum_of_structs! {
- /// An argument in a function signature: the `n: usize` in `fn f(n: usize)`.
- pub enum FnArg {
- /// The `self` argument of an associated method, whether taken by value
- /// or by reference.
- Receiver(Receiver),
-
- /// A function argument accepted by pattern and type.
- Typed(PatType),
- }
-}
-
-ast_struct! {
- /// The `self` argument of an associated method, whether taken by value
- /// or by reference.
- pub struct Receiver {
- pub attrs: Vec<Attribute>,
- pub reference: Option<(Token![&], Option<Lifetime>)>,
- pub mutability: Option<Token![mut]>,
- pub self_token: Token![self],
- }
-}
-
-mod parsing {
- use syn::{
- parse::{discouraged::Speculative, Parse, ParseStream, Result},
- Attribute, Token,
- };
-
- use super::{FnArg, PatType, Receiver};
-
- impl Parse for FnArg {
- fn parse(input: ParseStream<'_>) -> Result<Self> {
- let attrs = input.call(Attribute::parse_outer)?;
-
- let ahead = input.fork();
- if let Ok(mut receiver) = ahead.parse::<Receiver>() {
- if !ahead.peek(Token![:]) {
- input.advance_to(&ahead);
- receiver.attrs = attrs;
- return Ok(FnArg::Receiver(receiver));
- }
- }
-
- let mut typed = input.call(fn_arg_typed)?;
- typed.attrs = attrs;
- Ok(FnArg::Typed(typed))
- }
- }
-
- impl Parse for Receiver {
- fn parse(input: ParseStream<'_>) -> Result<Self> {
- Ok(Self {
- attrs: Vec::new(),
- reference: {
- if input.peek(Token![&]) {
- Some((input.parse()?, input.parse()?))
- } else {
- None
- }
- },
- mutability: input.parse()?,
- self_token: input.parse()?,
- })
- }
- }
-
- fn fn_arg_typed(input: ParseStream<'_>) -> Result<PatType> {
- Ok(PatType {
- attrs: Vec::new(),
- pat: input.parse()?,
- colon_token: input.parse()?,
- ty: Box::new(input.parse()?),
- })
- }
-}
-
-mod printing {
- use proc_macro2::TokenStream;
- use quote::{ToTokens, TokenStreamExt};
-
- use super::Receiver;
-
- impl ToTokens for Receiver {
- fn to_tokens(&self, tokens: &mut TokenStream) {
- tokens.append_all(&self.attrs);
- if let Some((ampersand, lifetime)) = &self.reference {
- ampersand.to_tokens(tokens);
- lifetime.to_tokens(tokens);
- }
- self.mutability.to_tokens(tokens);
- self.self_token.to_tokens(tokens);
- }
- }
-}