oxilean_codegen/bash_backend/
bashexpr_traits.rs1use super::types::BashExpr;
12use std::fmt;
13
14impl fmt::Display for BashExpr {
15 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
16 match self {
17 BashExpr::Var(v) => write!(f, "{}", v),
18 BashExpr::Lit(s) => write!(f, "'{}'", s.replace('\'', "'\\''")),
19 BashExpr::DQuoted(s) => write!(f, "\"{}\"", s),
20 BashExpr::CmdSubst(cmd) => write!(f, "$({})", cmd),
21 BashExpr::ArithExpr(expr) => write!(f, "$(({}))", expr),
22 BashExpr::ProcSubst { is_input, cmd } => {
23 if *is_input {
24 write!(f, "<({})", cmd)
25 } else {
26 write!(f, ">({})", cmd)
27 }
28 }
29 BashExpr::ArrayElem(name, idx) => write!(f, "${{{}[{}]}}", name, idx),
30 BashExpr::ArrayLen(name) => write!(f, "${{#{}[@]}}", name),
31 BashExpr::ArrayAll(name) => write!(f, "\"${{{}[@]}}\"", name),
32 BashExpr::AssocElem(name, key) => write!(f, "${{{}[{}]}}", name, key),
33 BashExpr::Default(var, default) => write!(f, "${{{}:-{}}}", var, default),
34 BashExpr::AssignDefault(var, default) => {
35 write!(f, "${{{}:={}}}", var, default)
36 }
37 BashExpr::Substring(var, off, None) => write!(f, "${{{}:{}}}", var, off),
38 BashExpr::Substring(var, off, Some(len)) => {
39 write!(f, "${{{}:{}:{}}}", var, off, len)
40 }
41 BashExpr::StringLen(var) => write!(f, "${{#{}}}", var),
42 BashExpr::StripPrefix(var, pat) => write!(f, "${{{}#{}}}", var, pat),
43 BashExpr::StripSuffix(var, pat) => write!(f, "${{{}%{}}}", var, pat),
44 BashExpr::UpperCase(var) => write!(f, "${{{}^^}}", var),
45 BashExpr::LowerCase(var) => write!(f, "${{{},,}}", var),
46 BashExpr::LastStatus => write!(f, "$?"),
47 BashExpr::ShellPid => write!(f, "$$"),
48 BashExpr::ScriptName => write!(f, "$0"),
49 BashExpr::Positional(n) => write!(f, "${}", n),
50 BashExpr::AllArgs => write!(f, "\"$@\""),
51 BashExpr::ArgCount => write!(f, "$#"),
52 BashExpr::Concat(a, b) => write!(f, "{}{}", a, b),
53 }
54 }
55}