Rollup merge of #130235 - compiler-errors:nested-if, r=michaelwoerister
Simplify some nested `if` statements Applies some but not all instances of `clippy::collapsible_if`. Some ended up looking worse afterwards, though, so I left those out. Also applies instances of `clippy::collapsible_else_if` Review with whitespace disabled please.
This commit is contained in:
commit
3ba12756d3
61 changed files with 563 additions and 671 deletions
|
@ -1233,64 +1233,63 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
|
|||
&& ns == namespace
|
||||
&& in_module != parent_scope.module
|
||||
&& !ident.span.normalize_to_macros_2_0().from_expansion()
|
||||
&& filter_fn(res)
|
||||
{
|
||||
if filter_fn(res) {
|
||||
// create the path
|
||||
let mut segms = if lookup_ident.span.at_least_rust_2018() {
|
||||
// crate-local absolute paths start with `crate::` in edition 2018
|
||||
// FIXME: may also be stabilized for Rust 2015 (Issues #45477, #44660)
|
||||
crate_path.clone()
|
||||
// create the path
|
||||
let mut segms = if lookup_ident.span.at_least_rust_2018() {
|
||||
// crate-local absolute paths start with `crate::` in edition 2018
|
||||
// FIXME: may also be stabilized for Rust 2015 (Issues #45477, #44660)
|
||||
crate_path.clone()
|
||||
} else {
|
||||
ThinVec::new()
|
||||
};
|
||||
segms.append(&mut path_segments.clone());
|
||||
|
||||
segms.push(ast::PathSegment::from_ident(ident));
|
||||
let path = Path { span: name_binding.span, segments: segms, tokens: None };
|
||||
|
||||
if child_accessible {
|
||||
// Remove invisible match if exists
|
||||
if let Some(idx) = candidates
|
||||
.iter()
|
||||
.position(|v: &ImportSuggestion| v.did == did && !v.accessible)
|
||||
{
|
||||
candidates.remove(idx);
|
||||
}
|
||||
}
|
||||
|
||||
if candidates.iter().all(|v: &ImportSuggestion| v.did != did) {
|
||||
// See if we're recommending TryFrom, TryInto, or FromIterator and add
|
||||
// a note about editions
|
||||
let note = if let Some(did) = did {
|
||||
let requires_note = !did.is_local()
|
||||
&& this.tcx.get_attrs(did, sym::rustc_diagnostic_item).any(
|
||||
|attr| {
|
||||
[sym::TryInto, sym::TryFrom, sym::FromIterator]
|
||||
.map(|x| Some(x))
|
||||
.contains(&attr.value_str())
|
||||
},
|
||||
);
|
||||
|
||||
requires_note.then(|| {
|
||||
format!(
|
||||
"'{}' is included in the prelude starting in Edition 2021",
|
||||
path_names_to_string(&path)
|
||||
)
|
||||
})
|
||||
} else {
|
||||
ThinVec::new()
|
||||
None
|
||||
};
|
||||
segms.append(&mut path_segments.clone());
|
||||
|
||||
segms.push(ast::PathSegment::from_ident(ident));
|
||||
let path = Path { span: name_binding.span, segments: segms, tokens: None };
|
||||
|
||||
if child_accessible {
|
||||
// Remove invisible match if exists
|
||||
if let Some(idx) = candidates
|
||||
.iter()
|
||||
.position(|v: &ImportSuggestion| v.did == did && !v.accessible)
|
||||
{
|
||||
candidates.remove(idx);
|
||||
}
|
||||
}
|
||||
|
||||
if candidates.iter().all(|v: &ImportSuggestion| v.did != did) {
|
||||
// See if we're recommending TryFrom, TryInto, or FromIterator and add
|
||||
// a note about editions
|
||||
let note = if let Some(did) = did {
|
||||
let requires_note = !did.is_local()
|
||||
&& this.tcx.get_attrs(did, sym::rustc_diagnostic_item).any(
|
||||
|attr| {
|
||||
[sym::TryInto, sym::TryFrom, sym::FromIterator]
|
||||
.map(|x| Some(x))
|
||||
.contains(&attr.value_str())
|
||||
},
|
||||
);
|
||||
|
||||
requires_note.then(|| {
|
||||
format!(
|
||||
"'{}' is included in the prelude starting in Edition 2021",
|
||||
path_names_to_string(&path)
|
||||
)
|
||||
})
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
||||
candidates.push(ImportSuggestion {
|
||||
did,
|
||||
descr: res.descr(),
|
||||
path,
|
||||
accessible: child_accessible,
|
||||
doc_visible: child_doc_visible,
|
||||
note,
|
||||
via_import,
|
||||
});
|
||||
}
|
||||
candidates.push(ImportSuggestion {
|
||||
did,
|
||||
descr: res.descr(),
|
||||
path,
|
||||
accessible: child_accessible,
|
||||
doc_visible: child_doc_visible,
|
||||
note,
|
||||
via_import,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -958,12 +958,12 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
|
|||
});
|
||||
}
|
||||
|
||||
if !restricted_shadowing && binding.expansion != LocalExpnId::ROOT {
|
||||
if let NameBindingKind::Import { import, .. } = binding.kind
|
||||
&& matches!(import.kind, ImportKind::MacroExport)
|
||||
{
|
||||
self.macro_expanded_macro_export_errors.insert((path_span, binding.span));
|
||||
}
|
||||
if !restricted_shadowing
|
||||
&& binding.expansion != LocalExpnId::ROOT
|
||||
&& let NameBindingKind::Import { import, .. } = binding.kind
|
||||
&& matches!(import.kind, ImportKind::MacroExport)
|
||||
{
|
||||
self.macro_expanded_macro_export_errors.insert((path_span, binding.span));
|
||||
}
|
||||
|
||||
self.record_use(ident, binding, used);
|
||||
|
|
|
@ -1256,28 +1256,23 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
|
|||
extern_crate_span: self.tcx.source_span(self.local_def_id(extern_crate_id)),
|
||||
},
|
||||
);
|
||||
} else {
|
||||
if ns == TypeNS {
|
||||
let err = if crate_private_reexport {
|
||||
self.dcx().create_err(CannotBeReexportedCratePublicNS {
|
||||
span: import.span,
|
||||
ident,
|
||||
})
|
||||
} else {
|
||||
self.dcx()
|
||||
.create_err(CannotBeReexportedPrivateNS { span: import.span, ident })
|
||||
};
|
||||
err.emit();
|
||||
} else if ns == TypeNS {
|
||||
let err = if crate_private_reexport {
|
||||
self.dcx()
|
||||
.create_err(CannotBeReexportedCratePublicNS { span: import.span, ident })
|
||||
} else {
|
||||
let mut err = if crate_private_reexport {
|
||||
self.dcx()
|
||||
.create_err(CannotBeReexportedCratePublic { span: import.span, ident })
|
||||
} else {
|
||||
self.dcx()
|
||||
.create_err(CannotBeReexportedPrivate { span: import.span, ident })
|
||||
};
|
||||
self.dcx().create_err(CannotBeReexportedPrivateNS { span: import.span, ident })
|
||||
};
|
||||
err.emit();
|
||||
} else {
|
||||
let mut err = if crate_private_reexport {
|
||||
self.dcx()
|
||||
.create_err(CannotBeReexportedCratePublic { span: import.span, ident })
|
||||
} else {
|
||||
self.dcx().create_err(CannotBeReexportedPrivate { span: import.span, ident })
|
||||
};
|
||||
|
||||
match binding.kind {
|
||||
match binding.kind {
|
||||
NameBindingKind::Res(Res::Def(DefKind::Macro(_), def_id))
|
||||
// exclude decl_macro
|
||||
if self.get_macro_by_def_id(def_id).macro_rules =>
|
||||
|
@ -1293,8 +1288,7 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
|
|||
});
|
||||
}
|
||||
}
|
||||
err.emit();
|
||||
}
|
||||
err.emit();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -4781,16 +4781,14 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
|
|||
if let Some(res) = res
|
||||
&& let Some(def_id) = res.opt_def_id()
|
||||
&& !def_id.is_local()
|
||||
&& self.r.tcx.crate_types().contains(&CrateType::ProcMacro)
|
||||
&& matches!(
|
||||
self.r.tcx.sess.opts.resolve_doc_links,
|
||||
ResolveDocLinks::ExportedMetadata
|
||||
)
|
||||
{
|
||||
if self.r.tcx.crate_types().contains(&CrateType::ProcMacro)
|
||||
&& matches!(
|
||||
self.r.tcx.sess.opts.resolve_doc_links,
|
||||
ResolveDocLinks::ExportedMetadata
|
||||
)
|
||||
{
|
||||
// Encoding foreign def ids in proc macro crate metadata will ICE.
|
||||
return None;
|
||||
}
|
||||
// Encoding foreign def ids in proc macro crate metadata will ICE.
|
||||
return None;
|
||||
}
|
||||
res
|
||||
});
|
||||
|
|
|
@ -2255,25 +2255,24 @@ impl<'a: 'ast, 'ast, 'tcx> LateResolutionVisitor<'a, '_, 'ast, 'tcx> {
|
|||
fn let_binding_suggestion(&mut self, err: &mut Diag<'_>, ident_span: Span) -> bool {
|
||||
if let Some(Expr { kind: ExprKind::Assign(lhs, ..), .. }) = self.diag_metadata.in_assignment
|
||||
&& let ast::ExprKind::Path(None, ref path) = lhs.kind
|
||||
&& !ident_span.from_expansion()
|
||||
{
|
||||
if !ident_span.from_expansion() {
|
||||
let (span, text) = match path.segments.first() {
|
||||
Some(seg) if let Some(name) = seg.ident.as_str().strip_prefix("let") => {
|
||||
// a special case for #117894
|
||||
let name = name.strip_prefix('_').unwrap_or(name);
|
||||
(ident_span, format!("let {name}"))
|
||||
}
|
||||
_ => (ident_span.shrink_to_lo(), "let ".to_string()),
|
||||
};
|
||||
let (span, text) = match path.segments.first() {
|
||||
Some(seg) if let Some(name) = seg.ident.as_str().strip_prefix("let") => {
|
||||
// a special case for #117894
|
||||
let name = name.strip_prefix('_').unwrap_or(name);
|
||||
(ident_span, format!("let {name}"))
|
||||
}
|
||||
_ => (ident_span.shrink_to_lo(), "let ".to_string()),
|
||||
};
|
||||
|
||||
err.span_suggestion_verbose(
|
||||
span,
|
||||
"you might have meant to introduce a new binding",
|
||||
text,
|
||||
Applicability::MaybeIncorrect,
|
||||
);
|
||||
return true;
|
||||
}
|
||||
err.span_suggestion_verbose(
|
||||
span,
|
||||
"you might have meant to introduce a new binding",
|
||||
text,
|
||||
Applicability::MaybeIncorrect,
|
||||
);
|
||||
return true;
|
||||
}
|
||||
false
|
||||
}
|
||||
|
|
|
@ -270,12 +270,10 @@ fn strip_generics_from_path_segment(segment: Vec<char>) -> Result<String, Malfor
|
|||
// Give a helpful error message instead of completely ignoring the angle brackets.
|
||||
return Err(MalformedGenerics::HasFullyQualifiedSyntax);
|
||||
}
|
||||
} else if param_depth == 0 {
|
||||
stripped_segment.push(c);
|
||||
} else {
|
||||
if param_depth == 0 {
|
||||
stripped_segment.push(c);
|
||||
} else {
|
||||
latest_generics_chunk.push(c);
|
||||
}
|
||||
latest_generics_chunk.push(c);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue