(
&mut self,
s: S,
d: D,
input_name: &str,
expr: &Expr,
this_id: NodeID,
shadow_id: Option<NodeID>,
)
| 94 | } |
| 95 | |
| 96 | fn _input( |
| 97 | &mut self, |
| 98 | s: S, |
| 99 | d: D, |
| 100 | input_name: &str, |
| 101 | expr: &Expr, |
| 102 | this_id: NodeID, |
| 103 | shadow_id: Option<NodeID>, |
| 104 | ) -> io::Result<()> { |
| 105 | write_comma_io(&mut self.zip, &mut self.inputs_comma)?; |
| 106 | write!(self, r#""{input_name}":"#)?; |
| 107 | match expr { |
| 108 | Expr::Value { value, span: _ } => return self.value_input(input_name, value), |
| 109 | Expr::Name(name) => return self.name_input(s, d, input_name, name, shadow_id), |
| 110 | Expr::Dot { lhs, rhs, rhs_span } => { |
| 111 | if let Expr::Name(lhs_name) = &**lhs { |
| 112 | if let Some(enum_) = s.get_enum(lhs_name.basename()) { |
| 113 | if let Some(variant) = |
| 114 | enum_.variants.iter().find(|variant| &variant.name == rhs) |
| 115 | { |
| 116 | return self |
| 117 | .value_input(input_name, &variant.value.as_ref().unwrap().0); |
| 118 | } else { |
| 119 | d.report( |
| 120 | DiagnosticKind::UnrecognizedEnumVariant( |
| 121 | lhs_name.basename().clone(), |
| 122 | ), |
| 123 | rhs_span, |
| 124 | ); |
| 125 | } |
| 126 | } |
| 127 | } |
| 128 | } |
| 129 | _ => {} |
| 130 | } |
| 131 | self.node_input(input_name, this_id, shadow_id) |
| 132 | } |
| 133 | |
| 134 | fn value_input(&mut self, name: &str, value: &Value) -> io::Result<()> { |
| 135 | match value { |
no test coverage detected