(
meta: &mut ParserMetadata,
tok: &Option<Token>,
name: &str,
)
| 108 | pub struct Then; |
| 109 | |
| 110 | pub fn handle_variable_reference( |
| 111 | meta: &mut ParserMetadata, |
| 112 | tok: &Option<Token>, |
| 113 | name: &str, |
| 114 | ) -> Result<VariableDecl, Failure> { |
| 115 | handle_identifier_name(meta, name, tok.clone())?; |
| 116 | match meta.get_var_used(name) { |
| 117 | Some(variable_unit) => { |
| 118 | let mut var = variable_unit.clone(); |
| 119 | if let Some(narrowed) = meta.get_narrowed_type(name) { |
| 120 | var.kind = narrowed.clone(); |
| 121 | } |
| 122 | Ok(var) |
| 123 | } |
| 124 | None => { |
| 125 | let message = format!("Variable '{name}' does not exist"); |
| 126 | // Find other similar variable if exists |
| 127 | if let Some(comment) = handle_similar_variable(meta, name) { |
| 128 | error!(meta, tok.clone(), message, comment) |
| 129 | } else { |
| 130 | error!(meta, tok.clone(), message) |
| 131 | } |
| 132 | } |
| 133 | } |
| 134 | } |
| 135 | |
| 136 | pub fn prevent_constant_mutation( |
| 137 | meta: &mut ParserMetadata, |
no test coverage detected