Skip to main content

oxilean_codegen/dart_backend/
dartexpr_traits.rs

1//! # DartExpr - Trait Implementations
2//!
3//! This module contains trait implementations for `DartExpr`.
4//!
5//! ## Implemented Traits
6//!
7//! - `Display`
8//!
9//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
10
11use crate::lcnf::*;
12
13use super::functions::{fmt_args, fmt_typed_params};
14use super::types::DartExpr;
15use std::fmt;
16
17impl fmt::Display for DartExpr {
18    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
19        match self {
20            DartExpr::Lit(lit) => write!(f, "{}", lit),
21            DartExpr::Var(name) => write!(f, "{}", name),
22            DartExpr::Field(expr, field) => write!(f, "{}.{}", expr, field),
23            DartExpr::MethodCall(recv, method, args) => {
24                write!(f, "{}.{}(", recv, method)?;
25                fmt_args(f, args)?;
26                write!(f, ")")
27            }
28            DartExpr::Call(callee, args) => {
29                write!(f, "{}(", callee)?;
30                fmt_args(f, args)?;
31                write!(f, ")")
32            }
33            DartExpr::New(class, named, args) => {
34                if let Some(n) = named {
35                    write!(f, "{}.{}(", class, n)?;
36                } else {
37                    write!(f, "{}(", class)?;
38                }
39                fmt_args(f, args)?;
40                write!(f, ")")
41            }
42            DartExpr::ListLit(elems) => {
43                write!(f, "[")?;
44                fmt_args(f, elems)?;
45                write!(f, "]")
46            }
47            DartExpr::MapLit(pairs) => {
48                write!(f, "{{")?;
49                for (i, (k, v)) in pairs.iter().enumerate() {
50                    if i > 0 {
51                        write!(f, ", ")?;
52                    }
53                    write!(f, "{}: {}", k, v)?;
54                }
55                write!(f, "}}")
56            }
57            DartExpr::SetLit(elems) => {
58                write!(f, "{{")?;
59                fmt_args(f, elems)?;
60                write!(f, "}}")
61            }
62            DartExpr::Lambda(params, body) => {
63                write!(f, "(")?;
64                fmt_typed_params(f, params)?;
65                write!(f, ") {{ return {}; }}", body)
66            }
67            DartExpr::Arrow(params, body) => {
68                write!(f, "(")?;
69                fmt_typed_params(f, params)?;
70                write!(f, ") => {}", body)
71            }
72            DartExpr::BinOp(left, op, right) => write!(f, "({} {} {})", left, op, right),
73            DartExpr::UnaryOp(op, expr) => write!(f, "({}{})", op, expr),
74            DartExpr::Ternary(cond, then, else_) => {
75                write!(f, "({} ? {} : {})", cond, then, else_)
76            }
77            DartExpr::NullAware(expr, field) => write!(f, "{}?.{}", expr, field),
78            DartExpr::NullCoalesce(expr, fallback) => {
79                write!(f, "({} ?? {})", expr, fallback)
80            }
81            DartExpr::Cascade(recv, method, args) => {
82                write!(f, "{}..{}(", recv, method)?;
83                fmt_args(f, args)?;
84                write!(f, ")")
85            }
86            DartExpr::Await(expr) => write!(f, "await {}", expr),
87            DartExpr::As(expr, ty) => write!(f, "({} as {})", expr, ty),
88            DartExpr::Is(expr, ty) => write!(f, "({} is {})", expr, ty),
89            DartExpr::Throw(expr) => write!(f, "throw {}", expr),
90            DartExpr::Spread(expr) => write!(f, "...{}", expr),
91            DartExpr::Index(expr, idx) => write!(f, "{}[{}]", expr, idx),
92            DartExpr::Raw(s) => write!(f, "{}", s),
93        }
94    }
95}