| 744 | } |
| 745 | |
| 746 | fn duplicate_parameter_name<Ctx: SemanticSyntaxContext>( |
| 747 | parameters: &ast::Parameters, |
| 748 | ctx: &Ctx, |
| 749 | ) { |
| 750 | if parameters.len() < 2 { |
| 751 | return; |
| 752 | } |
| 753 | |
| 754 | let mut all_arg_names = |
| 755 | FxHashSet::with_capacity_and_hasher(parameters.len(), FxBuildHasher); |
| 756 | |
| 757 | for parameter in parameters { |
| 758 | let range = parameter.name().range(); |
| 759 | let param_name = parameter.name().as_str(); |
| 760 | if !all_arg_names.insert(param_name) { |
| 761 | // test_err params_duplicate_names |
| 762 | // def foo(a, a=10, *a, a, a: str, **a): ... |
| 763 | Self::add_error( |
| 764 | ctx, |
| 765 | SemanticSyntaxErrorKind::DuplicateParameter(param_name.to_string()), |
| 766 | range, |
| 767 | ); |
| 768 | } |
| 769 | } |
| 770 | } |
| 771 | |
| 772 | fn irrefutable_match_case<Ctx: SemanticSyntaxContext>(stmt: &ast::StmtMatch, ctx: &Ctx) { |
| 773 | // test_ok irrefutable_case_pattern_at_end |