syn_solidity/stmt/
return.rs1use crate::{Expr, Spanned};
2use proc_macro2::Span;
3use std::fmt;
4use syn::{
5 parse::{Parse, ParseStream},
6 Result, Token,
7};
8
9#[derive(Clone)]
14pub struct StmtReturn {
15 pub return_token: Token![return],
16 pub expr: Option<Expr>,
17 pub semi_token: Token![;],
18}
19
20impl fmt::Debug for StmtReturn {
21 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
22 f.debug_struct("StmtReturn").field("expr", &self.expr).finish()
23 }
24}
25
26impl Parse for StmtReturn {
27 fn parse(input: ParseStream<'_>) -> Result<Self> {
28 Ok(Self {
29 return_token: input.parse()?,
30 expr: if input.peek(Token![;]) { None } else { Some(input.parse()?) },
31 semi_token: input.parse()?,
32 })
33 }
34}
35
36impl Spanned for StmtReturn {
37 fn span(&self) -> Span {
38 let span = self.return_token.span;
39 span.join(self.semi_token.span).unwrap_or(span)
40 }
41
42 fn set_span(&mut self, span: Span) {
43 self.return_token.span = span;
44 self.semi_token.span = span;
45 }
46}