syn_solidity/stmt/
expr.rs

1use crate::{Expr, Spanned};
2use proc_macro2::Span;
3use std::fmt;
4use syn::{
5    parse::{Parse, ParseStream},
6    Result, Token,
7};
8
9/// An expression with a trailing semicolon.
10#[derive(Clone)]
11pub struct StmtExpr {
12    pub expr: Expr,
13    pub semi_token: Token![;],
14}
15
16impl fmt::Debug for StmtExpr {
17    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
18        f.debug_struct("StmtExpr").field("expr", &self.expr).finish()
19    }
20}
21
22impl Parse for StmtExpr {
23    fn parse(input: ParseStream<'_>) -> Result<Self> {
24        Ok(Self { expr: input.parse()?, semi_token: input.parse()? })
25    }
26}
27
28impl Spanned for StmtExpr {
29    fn span(&self) -> Span {
30        let span = self.expr.span();
31        span.join(self.semi_token.span).unwrap_or(span)
32    }
33
34    fn set_span(&mut self, span: Span) {
35        self.expr.set_span(span);
36        self.semi_token.span = span;
37    }
38}