Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir/src/source_analyzer.rs')
-rw-r--r--crates/hir/src/source_analyzer.rs15
1 files changed, 15 insertions, 0 deletions
diff --git a/crates/hir/src/source_analyzer.rs b/crates/hir/src/source_analyzer.rs
index f86c571005..2e61946a73 100644
--- a/crates/hir/src/source_analyzer.rs
+++ b/crates/hir/src/source_analyzer.rs
@@ -782,6 +782,21 @@ impl SourceAnalyzer {
false
}
+ pub(crate) fn is_diverging_match_arm(
+ &self,
+ db: &dyn HirDatabase,
+ match_arm: &ast::MatchArm,
+ ) -> Option<bool> {
+ let infer = self.infer.as_ref()?;
+ let match_expr = match_arm.syntax().ancestors().find_map(ast::MatchExpr::cast)?;
+ let match_id = self.expr_id(db, &match_expr.into())?;
+ let diverging_arms = infer.diverging_arms.get(&match_id)?;
+ let match_arm_expr = match_arm.expr()?;
+ let match_arm_expr_id = self.expr_id(db, &match_arm_expr)?;
+
+ Some(diverging_arms.contains(&match_arm_expr_id))
+ }
+
fn resolve_impl_method_or_trait_def(
&self,
db: &dyn HirDatabase,