collapse some nested blocks

This commit is contained in:
Daniel Eades 2023-01-10 20:40:08 +00:00
parent 95fc3ba41c
commit d218b237fd
10 changed files with 62 additions and 78 deletions

View file

@ -1136,18 +1136,16 @@ impl<'a> InferenceContext<'a> {
if self.diverges.is_always() { if self.diverges.is_always() {
// we don't even make an attempt at coercion // we don't even make an attempt at coercion
self.table.new_maybe_never_var() self.table.new_maybe_never_var()
} else { } else if let Some(t) = expected.only_has_type(&mut self.table) {
if let Some(t) = expected.only_has_type(&mut self.table) { if self.coerce(Some(expr), &TyBuilder::unit(), &t).is_err() {
if self.coerce(Some(expr), &TyBuilder::unit(), &t).is_err() { self.result.type_mismatches.insert(
self.result.type_mismatches.insert( expr.into(),
expr.into(), TypeMismatch { expected: t.clone(), actual: TyBuilder::unit() },
TypeMismatch { expected: t.clone(), actual: TyBuilder::unit() }, );
);
}
t
} else {
TyBuilder::unit()
} }
t
} else {
TyBuilder::unit()
} }
} }
} }
@ -1314,13 +1312,13 @@ impl<'a> InferenceContext<'a> {
} else { } else {
param_ty param_ty
}; };
if !coercion_target.is_unknown() { if !coercion_target.is_unknown()
if self.coerce(Some(arg), &ty, &coercion_target).is_err() { && self.coerce(Some(arg), &ty, &coercion_target).is_err()
self.result.type_mismatches.insert( {
arg.into(), self.result.type_mismatches.insert(
TypeMismatch { expected: coercion_target, actual: ty.clone() }, arg.into(),
); TypeMismatch { expected: coercion_target, actual: ty.clone() },
} );
} }
} }
} }

View file

@ -251,17 +251,14 @@ fn layout_of_unit(cx: &LayoutCx<'_>, dl: &TargetDataLayout) -> Result<Layout, La
fn struct_tail_erasing_lifetimes(db: &dyn HirDatabase, pointee: Ty) -> Ty { fn struct_tail_erasing_lifetimes(db: &dyn HirDatabase, pointee: Ty) -> Ty {
match pointee.kind(Interner) { match pointee.kind(Interner) {
TyKind::Adt(AdtId(adt), subst) => match adt { TyKind::Adt(AdtId(hir_def::AdtId::StructId(i)), subst) => {
&hir_def::AdtId::StructId(i) => { let data = db.struct_data(*i);
let data = db.struct_data(i); let mut it = data.variant_data.fields().iter().rev();
let mut it = data.variant_data.fields().iter().rev(); match it.next() {
match it.next() { Some((f, _)) => field_ty(db, (*i).into(), f, subst),
Some((f, _)) => field_ty(db, i.into(), f, subst), None => pointee,
None => pointee,
}
} }
_ => pointee, }
},
_ => pointee, _ => pointee,
} }
} }

View file

@ -161,19 +161,17 @@ fn collect_used_generics<'gp>(
.and_then(|lt| known_generics.iter().find(find_lifetime(&lt.text()))), .and_then(|lt| known_generics.iter().find(find_lifetime(&lt.text()))),
), ),
ast::Type::ArrayType(ar) => { ast::Type::ArrayType(ar) => {
if let Some(expr) = ar.expr() { if let Some(ast::Expr::PathExpr(p)) = ar.expr() {
if let ast::Expr::PathExpr(p) = expr { if let Some(path) = p.path() {
if let Some(path) = p.path() { if let Some(name_ref) = path.as_single_name_ref() {
if let Some(name_ref) = path.as_single_name_ref() { if let Some(param) = known_generics.iter().find(|gp| {
if let Some(param) = known_generics.iter().find(|gp| { if let ast::GenericParam::ConstParam(cp) = gp {
if let ast::GenericParam::ConstParam(cp) = gp { cp.name().map_or(false, |n| n.text() == name_ref.text())
cp.name().map_or(false, |n| n.text() == name_ref.text()) } else {
} else { false
false
}
}) {
generics.push(param);
} }
}) {
generics.push(param);
} }
} }
} }

View file

@ -389,19 +389,17 @@ fn source_edit_from_name_ref(
edit.delete(TextRange::new(s, e)); edit.delete(TextRange::new(s, e));
return true; return true;
} }
} else if init == name_ref { } else if init == name_ref && field_name.text() == new_name {
if field_name.text() == new_name { cov_mark::hit!(test_rename_local_put_init_shorthand);
cov_mark::hit!(test_rename_local_put_init_shorthand); // Foo { field: local } -> Foo { field }
// Foo { field: local } -> Foo { field } // ^^^^^^^ delete this
// ^^^^^^^ delete this
// same names, we can use a shorthand here instead. // same names, we can use a shorthand here instead.
// we do not want to erase attributes hence this range start // we do not want to erase attributes hence this range start
let s = field_name.syntax().text_range().end(); let s = field_name.syntax().text_range().end();
let e = init.syntax().text_range().end(); let e = init.syntax().text_range().end();
edit.delete(TextRange::new(s, e)); edit.delete(TextRange::new(s, e));
return true; return true;
}
} }
} }
// init shorthand // init shorthand

View file

@ -323,10 +323,10 @@ impl Query {
if symbol.name != self.query { if symbol.name != self.query {
continue; continue;
} }
} else if self.case_sensitive { } else if self.case_sensitive
if self.query.chars().any(|c| !symbol.name.contains(c)) { && self.query.chars().any(|c| !symbol.name.contains(c))
continue; {
} continue;
} }
res.push(symbol.clone()); res.push(symbol.clone());

View file

@ -64,12 +64,10 @@ pub(super) fn type_info(
bt_end = if config.markdown() { "```\n" } else { "" } bt_end = if config.markdown() { "```\n" } else { "" }
) )
.into() .into()
} else if config.markdown() {
Markup::fenced_block(&original.display(sema.db))
} else { } else {
if config.markdown() { original.display(sema.db).to_string().into()
Markup::fenced_block(&original.display(sema.db))
} else {
original.display(sema.db).to_string().into()
}
}; };
res.actions.push(HoverAction::goto_type_from_targets(sema.db, targets)); res.actions.push(HoverAction::goto_type_from_targets(sema.db, targets));
Some(res) Some(res)

View file

@ -161,10 +161,8 @@ fn remove_newline(
} }
} }
if config.join_assignments { if config.join_assignments && join_assignments(edit, &prev, &next).is_some() {
if join_assignments(edit, &prev, &next).is_some() { return;
return;
}
} }
if config.unwrap_trivial_blocks { if config.unwrap_trivial_blocks {

View file

@ -413,11 +413,10 @@ fn traverse(
let string = ast::String::cast(token); let string = ast::String::cast(token);
let string_to_highlight = ast::String::cast(descended_token.clone()); let string_to_highlight = ast::String::cast(descended_token.clone());
if let Some((string, expanded_string)) = string.zip(string_to_highlight) { if let Some((string, expanded_string)) = string.zip(string_to_highlight) {
if string.is_raw() { if string.is_raw()
if inject::ra_fixture(hl, sema, config, &string, &expanded_string).is_some() && inject::ra_fixture(hl, sema, config, &string, &expanded_string).is_some()
{ {
continue; continue;
}
} }
highlight_format_string(hl, &string, &expanded_string, range); highlight_format_string(hl, &string, &expanded_string, range);
highlight_escape_string(hl, &string, range.start()); highlight_escape_string(hl, &string, range.start());

View file

@ -205,10 +205,8 @@ fn on_eq_typed(file: &SourceFile, offset: TextSize) -> Option<TextEdit> {
if expr_stmt.semicolon_token().is_some() { if expr_stmt.semicolon_token().is_some() {
return None; return None;
} }
} else { } else if !ast::StmtList::can_cast(binop.syntax().parent()?.kind()) {
if !ast::StmtList::can_cast(binop.syntax().parent()?.kind()) { return None;
return None;
}
} }
let expr = binop.rhs()?; let expr = binop.rhs()?;

View file

@ -307,10 +307,10 @@ impl GlobalState {
} }
} }
if !was_quiescent || state_changed || memdocs_added_or_removed { if (!was_quiescent || state_changed || memdocs_added_or_removed)
if self.config.publish_diagnostics() { && self.config.publish_diagnostics()
self.update_diagnostics() {
} self.update_diagnostics()
} }
} }