From 3a2a13756f325b1dd8ddd54a0a0b24b99180fb82 Mon Sep 17 00:00:00 2001 From: Changyu Li Date: Tue, 25 Jun 2019 13:14:54 -0700 Subject: Review 1 --- crates/ra_assists/src/fill_match_arms.rs | 35 +++++++++++++++++--------------- 1 file changed, 19 insertions(+), 16 deletions(-) (limited to 'crates') diff --git a/crates/ra_assists/src/fill_match_arms.rs b/crates/ra_assists/src/fill_match_arms.rs index a0e0f110f..71b101b40 100644 --- a/crates/ra_assists/src/fill_match_arms.rs +++ b/crates/ra_assists/src/fill_match_arms.rs @@ -1,4 +1,5 @@ use std::fmt::Write; +use itertools::Itertools; use hir::{ AdtDef, FieldSource, HasSource, @@ -9,19 +10,14 @@ use ra_syntax::ast::{self, AstNode}; use crate::{AssistCtx, Assist, AssistId}; fn is_trivial_arm(arm: &ast::MatchArm) -> bool { - for (i, p) in arm.pats().enumerate() { - if i > 0 { - return false; - } - - match p.kind() { - ast::PatKind::PlaceholderPat(_) => {} - _ => { - return false; - } - }; + fn single_pattern(arm: &ast::MatchArm) -> Option { + let (pat,) = arm.pats().collect_tuple()?; + Some(pat.kind()) + } + match single_pattern(arm) { + Some(ast::PatKind::PlaceholderPat(..)) => true, + _ => false, } - return true; } pub(crate) fn fill_match_arms(mut ctx: AssistCtx) -> Option { @@ -32,12 +28,19 @@ pub(crate) fn fill_match_arms(mut ctx: AssistCtx) -> Option { - for (i, a) in arm_list.arms().enumerate() { - if i > 0 { - return None; + let mut arm_iter = arm_list.arms(); + let first = arm_iter.next(); + + match first { + // If there arm list is empty or there is only one trivial arm, then proceed. + Some(arm) if is_trivial_arm(arm) => { + if arm_iter.next() != None { + return None; + } } + None => {} - if !is_trivial_arm(a) { + _ => { return None; } } -- cgit v1.2.3