Minor clippy perf fixes

This commit is contained in:
Laurențiu Nicola 2021-06-18 14:40:51 +03:00
parent 0d863ccea9
commit e3ce88f6f2
11 changed files with 22 additions and 21 deletions

View file

@ -640,8 +640,7 @@ pub trait HasResolver: Copy {
impl HasResolver for ModuleId { impl HasResolver for ModuleId {
fn resolver(self, db: &dyn DefDatabase) -> Resolver { fn resolver(self, db: &dyn DefDatabase) -> Resolver {
let mut def_map = self.def_map(db); let mut def_map = self.def_map(db);
let mut modules = Vec::new(); let mut modules = vec![(def_map.clone(), self.local_id)];
modules.push((def_map.clone(), self.local_id));
while let Some(parent) = def_map.parent() { while let Some(parent) = def_map.parent() {
def_map = parent.def_map(db); def_map = parent.def_map(db);
modules.push((def_map.clone(), parent.local_id)); modules.push((def_map.clone(), parent.local_id));

View file

@ -202,7 +202,7 @@ fn assert_expand(
let arg_tts = args.into_iter().flat_map(|arg| { let arg_tts = args.into_iter().flat_map(|arg| {
quote! { &(#arg), } quote! { &(#arg), }
}.token_trees).collect::<Vec<_>>(); }.token_trees);
let expanded = quote! { let expanded = quote! {
{ { (##arg_tts); } } { { (##arg_tts); } }
@ -254,7 +254,7 @@ fn format_args_expand(
let _format_string = args.remove(0); let _format_string = args.remove(0);
let arg_tts = args.into_iter().flat_map(|arg| { let arg_tts = args.into_iter().flat_map(|arg| {
quote! { std::fmt::ArgumentV1::new(&(#arg), std::fmt::Display::fmt), } quote! { std::fmt::ArgumentV1::new(&(#arg), std::fmt::Display::fmt), }
}.token_trees).collect::<Vec<_>>(); }.token_trees);
let expanded = quote! { let expanded = quote! {
std::fmt::Arguments::new_v1(&[], &[##arg_tts]) std::fmt::Arguments::new_v1(&[], &[##arg_tts])
}; };

View file

@ -56,7 +56,7 @@ impl BodyValidationDiagnostic {
pub fn collect(db: &dyn HirDatabase, owner: DefWithBodyId) -> Vec<BodyValidationDiagnostic> { pub fn collect(db: &dyn HirDatabase, owner: DefWithBodyId) -> Vec<BodyValidationDiagnostic> {
let _p = profile::span("BodyValidationDiagnostic::collect"); let _p = profile::span("BodyValidationDiagnostic::collect");
let infer = db.infer(owner); let infer = db.infer(owner);
let mut validator = ExprValidator::new(owner, infer.clone()); let mut validator = ExprValidator::new(owner, infer);
validator.validate_body(db); validator.validate_body(db);
validator.diagnostics validator.diagnostics
} }

View file

@ -367,7 +367,7 @@ impl<'a> InferenceContext<'a> {
Expr::Path(p) => { Expr::Path(p) => {
// FIXME this could be more efficient... // FIXME this could be more efficient...
let resolver = resolver_for_expr(self.db.upcast(), self.owner, tgt_expr); let resolver = resolver_for_expr(self.db.upcast(), self.owner, tgt_expr);
self.infer_path(&resolver, p, tgt_expr.into()).unwrap_or(self.err_ty()) self.infer_path(&resolver, p, tgt_expr.into()).unwrap_or_else(|| self.err_ty())
} }
Expr::Continue { .. } => TyKind::Never.intern(&Interner), Expr::Continue { .. } => TyKind::Never.intern(&Interner),
Expr::Break { expr, label } => { Expr::Break { expr, label } => {
@ -511,7 +511,7 @@ impl<'a> InferenceContext<'a> {
_ => None, _ => None,
} }
}) })
.unwrap_or(self.err_ty()); .unwrap_or_else(|| self.err_ty());
let ty = self.insert_type_vars(ty); let ty = self.insert_type_vars(ty);
self.normalize_associated_types_in(ty) self.normalize_associated_types_in(ty)
} }
@ -818,8 +818,10 @@ impl<'a> InferenceContext<'a> {
for stmt in statements { for stmt in statements {
match stmt { match stmt {
Statement::Let { pat, type_ref, initializer } => { Statement::Let { pat, type_ref, initializer } => {
let decl_ty = let decl_ty = type_ref
type_ref.as_ref().map(|tr| self.make_ty(tr)).unwrap_or(self.err_ty()); .as_ref()
.map(|tr| self.make_ty(tr))
.unwrap_or_else(|| self.err_ty());
// Always use the declared type when specified // Always use the declared type when specified
let mut ty = decl_ty.clone(); let mut ty = decl_ty.clone();

View file

@ -192,7 +192,7 @@ impl<'a> InferenceContext<'a> {
Pat::Path(path) => { Pat::Path(path) => {
// FIXME use correct resolver for the surrounding expression // FIXME use correct resolver for the surrounding expression
let resolver = self.resolver.clone(); let resolver = self.resolver.clone();
self.infer_path(&resolver, path, pat.into()).unwrap_or(self.err_ty()) self.infer_path(&resolver, path, pat.into()).unwrap_or_else(|| self.err_ty())
} }
Pat::Bind { mode, name: _, subpat } => { Pat::Bind { mode, name: _, subpat } => {
let mode = if mode == &BindingAnnotation::Unannotated { let mode = if mode == &BindingAnnotation::Unannotated {

View file

@ -562,7 +562,7 @@ impl<'a> TyLoweringContext<'a> {
}, },
); );
ty.unwrap_or(TyKind::Error.intern(&Interner)) ty.unwrap_or_else(|| TyKind::Error.intern(&Interner))
} else { } else {
TyKind::Error.intern(&Interner) TyKind::Error.intern(&Interner)
} }

View file

@ -25,7 +25,7 @@ pub(crate) fn goto_type_definition(
let token: SyntaxToken = pick_best(file.syntax().token_at_offset(position.offset))?; let token: SyntaxToken = pick_best(file.syntax().token_at_offset(position.offset))?;
let token: SyntaxToken = sema.descend_into_macros(token); let token: SyntaxToken = sema.descend_into_macros(token);
let (ty, node) = sema.token_ancestors_with_macros(token.clone()).find_map(|node| { let (ty, node) = sema.token_ancestors_with_macros(token).find_map(|node| {
let ty = match_ast! { let ty = match_ast! {
match node { match node {
ast::Expr(it) => sema.type_of_expr(&it)?, ast::Expr(it) => sema.type_of_expr(&it)?,

View file

@ -35,14 +35,14 @@ pub(crate) fn remove_dbg(acc: &mut Assists, ctx: &AssistContext) -> Option<()> {
.prev_sibling_or_token() .prev_sibling_or_token()
.and_then(whitespace_start) .and_then(whitespace_start)
.map(|start| TextRange::new(start, macro_call.syntax().text_range().end())) .map(|start| TextRange::new(start, macro_call.syntax().text_range().end()))
.unwrap_or(macro_call.syntax().text_range()) .unwrap_or_else(|| macro_call.syntax().text_range())
}, },
ast::ExprStmt(it) => { ast::ExprStmt(it) => {
let start = it let start = it
.syntax() .syntax()
.prev_sibling_or_token() .prev_sibling_or_token()
.and_then(whitespace_start) .and_then(whitespace_start)
.unwrap_or(it.syntax().text_range().start()); .unwrap_or_else(|| it.syntax().text_range().start());
let end = it.syntax().text_range().end(); let end = it.syntax().text_range().end();
TextRange::new(start, end) TextRange::new(start, end)

View file

@ -28,23 +28,23 @@ pub fn read_dylib_info(dylib_path: &Path) -> io::Result<RustCInfo> {
let ver_str = read_version(dylib_path)?; let ver_str = read_version(dylib_path)?;
let mut items = ver_str.split_whitespace(); let mut items = ver_str.split_whitespace();
let tag = items.next().ok_or(err!("version format error"))?; let tag = items.next().ok_or_else(|| err!("version format error"))?;
if tag != "rustc" { if tag != "rustc" {
return Err(err!("version format error (No rustc tag)")); return Err(err!("version format error (No rustc tag)"));
} }
let version_part = items.next().ok_or(err!("no version string"))?; let version_part = items.next().ok_or_else(|| err!("no version string"))?;
let mut version_parts = version_part.split('-'); let mut version_parts = version_part.split('-');
let version = version_parts.next().ok_or(err!("no version"))?; let version = version_parts.next().ok_or_else(|| err!("no version"))?;
let channel = version_parts.next().unwrap_or_default().to_string(); let channel = version_parts.next().unwrap_or_default().to_string();
let commit = items.next().ok_or(err!("no commit info"))?; let commit = items.next().ok_or_else(|| err!("no commit info"))?;
// remove ( // remove (
if commit.len() == 0 { if commit.len() == 0 {
return Err(err!("commit format error")); return Err(err!("commit format error"));
} }
let commit = commit[1..].to_string(); let commit = commit[1..].to_string();
let date = items.next().ok_or(err!("no date info"))?; let date = items.next().ok_or_else(|| err!("no date info"))?;
// remove ) // remove )
if date.len() == 0 { if date.len() == 0 {
return Err(err!("date format error")); return Err(err!("date format error"));

View file

@ -187,7 +187,7 @@ impl WorkspaceBuildData {
let mut deserializer = serde_json::Deserializer::from_str(line); let mut deserializer = serde_json::Deserializer::from_str(line);
deserializer.disable_recursion_limit(); deserializer.disable_recursion_limit();
let message = Message::deserialize(&mut deserializer) let message = Message::deserialize(&mut deserializer)
.unwrap_or(Message::TextLine(line.to_string())); .unwrap_or_else(|_| Message::TextLine(line.to_string()));
match message { match message {
Message::BuildScriptExecuted(BuildScript { Message::BuildScriptExecuted(BuildScript {

View file

@ -131,7 +131,7 @@ impl Fixture {
res.push(meta) res.push(meta)
} else { } else {
if line.starts_with("// ") if line.starts_with("// ")
&& line.contains(":") && line.contains(':')
&& !line.contains("::") && !line.contains("::")
&& line.chars().all(|it| !it.is_uppercase()) && line.chars().all(|it| !it.is_uppercase())
{ {