Simplify iteration idioms (#13834)

Remove unnecessary uses of `.as_ref()`, `.iter()`, `&**` and similar, mostly in situations when iterating over variables. Many of these changes are only possible following #13826, when we bumped our MSRV to 1.80: several useful implementations on `&Box<[T]>` were only stabilised in Rust 1.80. Some of these changes we could have done earlier, however.
This commit is contained in:
Alex Waygood 2024-10-20 22:25:27 +01:00 committed by GitHub
parent 7fd8e30eed
commit 72adb09bf3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
36 changed files with 72 additions and 73 deletions

View file

@ -487,7 +487,7 @@ fn check_type<T: TypeChecker>(binding: &Binding, semantic: &SemanticModel) -> bo
// The type checker might know how to infer the type based on `init_expr`.
Some(Stmt::Assign(ast::StmtAssign { targets, value, .. })) => targets
.iter()
.find_map(|target| match_value(binding, target, value.as_ref()))
.find_map(|target| match_value(binding, target, value))
.is_some_and(|value| T::match_initializer(value, semantic)),
// ```python
@ -496,7 +496,7 @@ fn check_type<T: TypeChecker>(binding: &Binding, semantic: &SemanticModel) -> bo
//
// In this situation, we check only the annotation.
Some(Stmt::AnnAssign(ast::StmtAnnAssign { annotation, .. })) => {
T::match_annotation(annotation.as_ref(), semantic)
T::match_annotation(annotation, semantic)
}
_ => false,
@ -512,7 +512,7 @@ fn check_type<T: TypeChecker>(binding: &Binding, semantic: &SemanticModel) -> bo
.expressions(source)
.find_map(|expr| expr.as_named_expr())
.and_then(|ast::ExprNamed { target, value, .. }| {
match_value(binding, target.as_ref(), value.as_ref())
match_value(binding, target, value)
})
.is_some_and(|value| T::match_initializer(value, semantic))
})
@ -543,13 +543,13 @@ fn check_type<T: TypeChecker>(binding: &Binding, semantic: &SemanticModel) -> bo
//
// We trust the annotation and see if the type checker matches the annotation.
Some(Stmt::FunctionDef(ast::StmtFunctionDef { parameters, .. })) => {
let Some(parameter) = find_parameter(parameters.as_ref(), binding) else {
let Some(parameter) = find_parameter(parameters, binding) else {
return false;
};
let Some(ref annotation) = parameter.parameter.annotation else {
return false;
};
T::match_annotation(annotation.as_ref(), semantic)
T::match_annotation(annotation, semantic)
}
_ => false,
@ -562,7 +562,7 @@ fn check_type<T: TypeChecker>(binding: &Binding, semantic: &SemanticModel) -> bo
//
// It's a typed declaration, type annotation is the only source of information.
Some(Stmt::AnnAssign(ast::StmtAnnAssign { annotation, .. })) => {
T::match_annotation(annotation.as_ref(), semantic)
T::match_annotation(annotation, semantic)
}
_ => false,
},
@ -726,7 +726,7 @@ impl TypeChecker for IoBaseChecker {
// Ex) `open("file.txt")`
semantic
.resolve_qualified_name(func.as_ref())
.resolve_qualified_name(func)
.is_some_and(|qualified_name| {
matches!(
qualified_name.segments(),
@ -899,7 +899,7 @@ pub fn find_binding_value<'a>(binding: &Binding, semantic: &'a SemanticModel) ->
.expressions(parent_id)
.find_map(|expr| expr.as_named_expr());
if let Some(ast::ExprNamed { target, value, .. }) = parent {
return match_value(binding, target.as_ref(), value.as_ref());
return match_value(binding, target, value);
}
}
// Ex) `x = 1`
@ -907,14 +907,14 @@ pub fn find_binding_value<'a>(binding: &Binding, semantic: &'a SemanticModel) ->
Some(Stmt::Assign(ast::StmtAssign { value, targets, .. })) => {
return targets
.iter()
.find_map(|target| match_value(binding, target, value.as_ref()))
.find_map(|target| match_value(binding, target, value))
}
Some(Stmt::AnnAssign(ast::StmtAnnAssign {
value: Some(value),
target,
..
})) => {
return match_value(binding, target, value.as_ref());
return match_value(binding, target, value);
}
_ => {}
},
@ -958,7 +958,7 @@ fn match_value<'a>(binding: &Binding, target: &Expr, value: &'a Expr) -> Option<
/// Given a target and value, find the value that's assigned to the given symbol.
fn match_target<'a>(binding: &Binding, targets: &[Expr], values: &'a [Expr]) -> Option<&'a Expr> {
for (target, value) in targets.iter().zip(values.iter()) {
for (target, value) in targets.iter().zip(values) {
match target {
Expr::Tuple(ast::ExprTuple {
elts: target_elts, ..

View file

@ -795,7 +795,7 @@ impl<'a> SemanticModel<'a> {
let resolved: QualifiedName = qualified_name
.segments()
.iter()
.chain(tail.iter())
.chain(tail)
.copied()
.collect();
Some(resolved)
@ -809,7 +809,7 @@ impl<'a> SemanticModel<'a> {
.segments()
.iter()
.take(1)
.chain(tail.iter())
.chain(tail)
.copied()
.collect(),
)
@ -832,7 +832,7 @@ impl<'a> SemanticModel<'a> {
qualified_name
.segments()
.iter()
.chain(tail.iter())
.chain(tail)
.copied()
.collect()
};