is_{some,ok}_and
This commit is contained in:
parent
fe3038f263
commit
079a2e865f
8 changed files with 21 additions and 13 deletions
|
@ -91,7 +91,7 @@ pub(super) fn check_refining_return_position_impl_trait_in_trait<'tcx>(
|
||||||
|
|
||||||
// This opaque also needs to be from the impl method -- otherwise,
|
// This opaque also needs to be from the impl method -- otherwise,
|
||||||
// it's a refinement to a TAIT.
|
// it's a refinement to a TAIT.
|
||||||
if !tcx.hir().get_if_local(impl_opaque.def_id).map_or(false, |node| {
|
if !tcx.hir().get_if_local(impl_opaque.def_id).is_some_and(|node| {
|
||||||
matches!(
|
matches!(
|
||||||
node.expect_item().expect_opaque_ty().origin,
|
node.expect_item().expect_opaque_ty().origin,
|
||||||
hir::OpaqueTyOrigin::AsyncFn(def_id) | hir::OpaqueTyOrigin::FnReturn(def_id)
|
hir::OpaqueTyOrigin::AsyncFn(def_id) | hir::OpaqueTyOrigin::FnReturn(def_id)
|
||||||
|
|
|
@ -736,7 +736,7 @@ impl<'s, P: LintLevelsProvider> LintLevelsBuilder<'s, P> {
|
||||||
if attr.has_name(sym::doc)
|
if attr.has_name(sym::doc)
|
||||||
&& attr
|
&& attr
|
||||||
.meta_item_list()
|
.meta_item_list()
|
||||||
.map_or(false, |l| ast::attr::list_contains_name(&l, sym::hidden))
|
.is_some_and(|l| ast::attr::list_contains_name(&l, sym::hidden))
|
||||||
{
|
{
|
||||||
self.insert(LintId::of(MISSING_DOCS), (Level::Allow, LintLevelSource::Default));
|
self.insert(LintId::of(MISSING_DOCS), (Level::Allow, LintLevelSource::Default));
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -792,7 +792,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
||||||
// If `extern_crate` is `None`, then the crate was injected (e.g., by the allocator).
|
// If `extern_crate` is `None`, then the crate was injected (e.g., by the allocator).
|
||||||
// Treat that kind of crate as "indirect", since it's an implementation detail of
|
// Treat that kind of crate as "indirect", since it's an implementation detail of
|
||||||
// the language.
|
// the language.
|
||||||
|| self.extern_crate(key.as_def_id()).map_or(false, |e| e.is_direct())
|
|| self.extern_crate(key.as_def_id()).is_some_and(|e| e.is_direct())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -552,7 +552,7 @@ impl UnsafeOpKind {
|
||||||
) {
|
) {
|
||||||
let parent_id = tcx.hir().get_parent_item(hir_id);
|
let parent_id = tcx.hir().get_parent_item(hir_id);
|
||||||
let parent_owner = tcx.hir().owner(parent_id);
|
let parent_owner = tcx.hir().owner(parent_id);
|
||||||
let should_suggest = parent_owner.fn_sig().map_or(false, |sig| sig.header.is_unsafe());
|
let should_suggest = parent_owner.fn_sig().is_some_and(|sig| sig.header.is_unsafe());
|
||||||
let unsafe_not_inherited_note = if should_suggest {
|
let unsafe_not_inherited_note = if should_suggest {
|
||||||
suggest_unsafe_block.then(|| {
|
suggest_unsafe_block.then(|| {
|
||||||
let body_span = tcx.hir().body(parent_owner.body_id().unwrap()).value.span;
|
let body_span = tcx.hir().body(parent_owner.body_id().unwrap()).value.span;
|
||||||
|
|
|
@ -823,7 +823,7 @@ impl Map {
|
||||||
) {
|
) {
|
||||||
// Allocate a value slot if it doesn't have one, and the user requested one.
|
// Allocate a value slot if it doesn't have one, and the user requested one.
|
||||||
assert!(self.places[place].value_index.is_none());
|
assert!(self.places[place].value_index.is_none());
|
||||||
if tcx.layout_of(param_env.and(ty)).map_or(false, |layout| layout.abi.is_scalar()) {
|
if tcx.layout_of(param_env.and(ty)).is_ok_and(|layout| layout.abi.is_scalar()) {
|
||||||
self.places[place].value_index = Some(self.value_count.into());
|
self.places[place].value_index = Some(self.value_count.into());
|
||||||
self.value_count += 1;
|
self.value_count += 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1869,7 +1869,7 @@ impl<'a: 'ast, 'ast, 'tcx> LateResolutionVisitor<'a, '_, 'ast, 'tcx> {
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
fields.map_or(false, |fields| {
|
fields.is_some_and(|fields| {
|
||||||
fields
|
fields
|
||||||
.iter()
|
.iter()
|
||||||
.filter(|vis| !self.r.is_accessible_from(**vis, self.parent_scope.module))
|
.filter(|vis| !self.r.is_accessible_from(**vis, self.parent_scope.module))
|
||||||
|
|
|
@ -361,15 +361,23 @@ fn impl_intersection_has_impossible_obligation<'a, 'cx, 'tcx>(
|
||||||
let infcx = selcx.infcx;
|
let infcx = selcx.infcx;
|
||||||
|
|
||||||
obligations.iter().find(|obligation| {
|
obligations.iter().find(|obligation| {
|
||||||
if infcx.next_trait_solver() {
|
let evaluation_result = if infcx.next_trait_solver() {
|
||||||
infcx.evaluate_obligation(obligation).map_or(false, |result| !result.may_apply())
|
infcx.evaluate_obligation(obligation)
|
||||||
} else {
|
} else {
|
||||||
// We use `evaluate_root_obligation` to correctly track intercrate
|
// We use `evaluate_root_obligation` to correctly track intercrate
|
||||||
// ambiguity clauses. We cannot use this in the new solver.
|
// ambiguity clauses. We cannot use this in the new solver.
|
||||||
selcx.evaluate_root_obligation(obligation).map_or(
|
selcx.evaluate_root_obligation(obligation)
|
||||||
false, // Overflow has occurred, and treat the obligation as possibly holding.
|
};
|
||||||
|result| !result.may_apply(),
|
|
||||||
)
|
match evaluation_result {
|
||||||
|
Ok(result) => !result.may_apply(),
|
||||||
|
// If overflow occurs, we need to conservatively treat the goal as possibly holding,
|
||||||
|
// since there can be instantiations of this goal that don't overflow and result in
|
||||||
|
// success. This isn't much of a problem in the old solver, since we treat overflow
|
||||||
|
// fatally (this still can be encountered: <https://github.com/rust-lang/rust/issues/105231>),
|
||||||
|
// but in the new solver, this is very important for correctness, since overflow
|
||||||
|
// *must* be treated as ambiguity for completeness.
|
||||||
|
Err(_overflow) => false,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ impl Instance {
|
||||||
|
|
||||||
pub fn is_foreign_item(&self) -> bool {
|
pub fn is_foreign_item(&self) -> bool {
|
||||||
let item = CrateItem::try_from(*self);
|
let item = CrateItem::try_from(*self);
|
||||||
item.as_ref().map_or(false, CrateItem::is_foreign_item)
|
item.as_ref().is_ok_and(CrateItem::is_foreign_item)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get the instance type with generic substitutions applied and lifetimes erased.
|
/// Get the instance type with generic substitutions applied and lifetimes erased.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue