syn_solidity/expr/
member.rs

1use crate::{utils::ParseNested, Expr, Spanned};
2use proc_macro2::Span;
3use std::fmt;
4use syn::{
5    parse::{Parse, ParseStream},
6    Result, Token,
7};
8
9/// Access of a named member: `obj.k`.
10#[derive(Clone)]
11pub struct ExprMember {
12    pub expr: Box<Expr>,
13    pub dot_token: Token![.],
14    pub member: Box<Expr>,
15}
16
17impl fmt::Debug for ExprMember {
18    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
19        f.debug_struct("ExprMember")
20            .field("expr", &self.expr)
21            .field("member", &self.member)
22            .finish()
23    }
24}
25
26impl ParseNested for ExprMember {
27    fn parse_nested(expr: Box<Expr>, input: ParseStream<'_>) -> Result<Self> {
28        Ok(Self { expr, dot_token: input.parse()?, member: input.parse()? })
29    }
30}
31
32derive_parse!(ExprMember);
33
34impl Spanned for ExprMember {
35    fn span(&self) -> Span {
36        self.expr.span().join(self.member.span()).unwrap_or_else(|| {
37            self.dot_token.span.join(self.member.span()).unwrap_or_else(|| self.expr.span())
38        })
39    }
40
41    fn set_span(&mut self, span: Span) {
42        self.expr.set_span(span);
43    }
44}