(&mut self, parameter: &ast::Parameter)
| 1214 | } |
| 1215 | |
| 1216 | fn scan_parameter(&mut self, parameter: &ast::Parameter) -> SymbolTableResult { |
| 1217 | self.check_name( |
| 1218 | parameter.name.as_str(), |
| 1219 | ExpressionContext::Store, |
| 1220 | parameter.name.range, |
| 1221 | )?; |
| 1222 | |
| 1223 | let usage = if parameter.annotation.is_some() { |
| 1224 | SymbolUsage::AnnotationParameter |
| 1225 | } else { |
| 1226 | SymbolUsage::Parameter |
| 1227 | }; |
| 1228 | |
| 1229 | // Check for duplicate parameter names |
| 1230 | let table = self.tables.last().unwrap(); |
| 1231 | if table.symbols.contains_key(parameter.name.as_str()) { |
| 1232 | return Err(SymbolTableError { |
| 1233 | error: format!( |
| 1234 | "duplicate argument '{}' in function definition", |
| 1235 | parameter.name |
| 1236 | ), |
| 1237 | location: Some( |
| 1238 | self.source_file |
| 1239 | .to_source_code() |
| 1240 | .source_location(parameter.name.range.start(), PositionEncoding::Utf8), |
| 1241 | ), |
| 1242 | }); |
| 1243 | } |
| 1244 | |
| 1245 | self.register_ident(¶meter.name, usage) |
| 1246 | } |
| 1247 | |
| 1248 | fn scan_annotation(&mut self, annotation: &ast::Expr) -> SymbolTableResult { |
| 1249 | self.scan_annotation_inner(annotation, false) |
no test coverage detected