oxilean_parse/pattern/
patterncompiler_pattern_to_string_group.rs1use crate::Pattern;
8
9use super::patterncompiler_type::PatternCompiler;
10
11impl PatternCompiler {
12 #[allow(dead_code)]
14 pub fn pattern_to_string(&self, pattern: &Pattern) -> String {
15 match pattern {
16 Pattern::Wild => "_".to_string(),
17 Pattern::Var(name) => name.clone(),
18 Pattern::Ctor(name, args) => {
19 if args.is_empty() {
20 name.clone()
21 } else {
22 let args_str: Vec<String> = args
23 .iter()
24 .map(|a| {
25 let s = self.pattern_to_string(&a.value);
26 if matches!(
27 & a.value, Pattern::Ctor(_, ref sub) if ! sub.is_empty()
28 ) {
29 format!("({})", s)
30 } else {
31 s
32 }
33 })
34 .collect();
35 format!("{} {}", name, args_str.join(" "))
36 }
37 }
38 Pattern::Lit(lit) => format!("{}", lit),
39 Pattern::Or(left, right) => {
40 let ls = self.pattern_to_string(&left.value);
41 let rs = self.pattern_to_string(&right.value);
42 format!("{} | {}", ls, rs)
43 }
44 }
45 }
46 pub fn canonicalize(&self, pattern: &Pattern) -> String {
48 self.pattern_to_string(pattern)
49 }
50}