(&mut self, pattern: &ast::Pattern)
| 2393 | } |
| 2394 | |
| 2395 | fn scan_pattern(&mut self, pattern: &ast::Pattern) -> SymbolTableResult { |
| 2396 | use ast::Pattern::*; |
| 2397 | match pattern { |
| 2398 | MatchValue(ast::PatternMatchValue { value, .. }) => { |
| 2399 | self.scan_expression(value, ExpressionContext::Load)? |
| 2400 | } |
| 2401 | MatchSingleton(_) => {} |
| 2402 | MatchSequence(ast::PatternMatchSequence { patterns, .. }) => { |
| 2403 | self.scan_patterns(patterns)? |
| 2404 | } |
| 2405 | MatchMapping(ast::PatternMatchMapping { |
| 2406 | keys, |
| 2407 | patterns, |
| 2408 | rest, |
| 2409 | .. |
| 2410 | }) => { |
| 2411 | self.scan_expressions(keys, ExpressionContext::Load)?; |
| 2412 | self.scan_patterns(patterns)?; |
| 2413 | if let Some(rest) = rest { |
| 2414 | self.register_ident(rest, SymbolUsage::Assigned)?; |
| 2415 | } |
| 2416 | } |
| 2417 | MatchClass(ast::PatternMatchClass { cls, arguments, .. }) => { |
| 2418 | self.scan_expression(cls, ExpressionContext::Load)?; |
| 2419 | self.scan_patterns(&arguments.patterns)?; |
| 2420 | for kw in &arguments.keywords { |
| 2421 | self.scan_pattern(&kw.pattern)?; |
| 2422 | } |
| 2423 | } |
| 2424 | MatchStar(ast::PatternMatchStar { name, .. }) => { |
| 2425 | if let Some(name) = name { |
| 2426 | self.register_ident(name, SymbolUsage::Assigned)?; |
| 2427 | } |
| 2428 | } |
| 2429 | MatchAs(ast::PatternMatchAs { pattern, name, .. }) => { |
| 2430 | if let Some(pattern) = pattern { |
| 2431 | self.scan_pattern(pattern)?; |
| 2432 | } |
| 2433 | if let Some(name) = name { |
| 2434 | self.register_ident(name, SymbolUsage::Assigned)?; |
| 2435 | } |
| 2436 | } |
| 2437 | MatchOr(ast::PatternMatchOr { patterns, .. }) => self.scan_patterns(patterns)?, |
| 2438 | } |
| 2439 | Ok(()) |
| 2440 | } |
| 2441 | |
| 2442 | /// Scan default parameter values (evaluated in the enclosing scope) |
| 2443 | fn scan_parameter_defaults(&mut self, parameters: &ast::Parameters) -> SymbolTableResult { |
no test coverage detected