From 7e28924012409352bbacbfebf9fac4e4409f09b8 Mon Sep 17 00:00:00 2001 From: Edwin Cheng Date: Mon, 4 Nov 2019 21:43:36 +0800 Subject: Use ? and destructing to simplifed long code --- crates/ra_hir_expand/src/db.rs | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) (limited to 'crates/ra_hir_expand') diff --git a/crates/ra_hir_expand/src/db.rs b/crates/ra_hir_expand/src/db.rs index b3746924d..8369c2b40 100644 --- a/crates/ra_hir_expand/src/db.rs +++ b/crates/ra_hir_expand/src/db.rs @@ -132,35 +132,33 @@ pub(crate) fn parse_macro_with_info( log::warn!("fail on macro_parse: (reason: {})", err,); }) .ok()?; - let res = match macro_file.macro_file_kind { + + let (parsed, exp_map) = match macro_file.macro_file_kind { MacroFileKind::Items => { - mbe::token_tree_to_items(&tt.0).ok().map(|(p, map)| (Parse::to_syntax(p), map)) + mbe::token_tree_to_items(&tt.0).map(|(p, map)| (p.to_syntax(), map)).ok()? } MacroFileKind::Expr => { - mbe::token_tree_to_expr(&tt.0).ok().map(|(p, map)| (Parse::to_syntax(p), map)) + mbe::token_tree_to_expr(&tt.0).map(|(p, map)| (p.to_syntax(), map)).ok()? } }; - res.map(|(parsed, exp_map)| { - let expand_info = tt.1; - let loc: MacroCallLoc = db.lookup_intern_macro(macro_call_id); + let expand_info = tt.1; + let loc: MacroCallLoc = db.lookup_intern_macro(macro_call_id); + + let arg_tt = loc.ast_id.to_node(db).token_tree(); + let def_tt = loc.def.ast_id.to_node(db).token_tree(); - let def_start = - loc.def.ast_id.to_node(db).token_tree().map(|t| t.syntax().text_range().start()); - let arg_start = - loc.ast_id.to_node(db).token_tree().map(|t| t.syntax().text_range().start()); + let arg_start = arg_tt.map(|t| t.syntax().text_range().start()); + let def_start = def_tt.map(|t| t.syntax().text_range().start()); - let arg_map = arg_start - .map(|start| exp_map.ranges(&expand_info.arg_map, start)) - .unwrap_or_else(|| Vec::new()); - let def_map = def_start - .map(|start| exp_map.ranges(&expand_info.def_map, start)) - .unwrap_or_else(|| Vec::new()); + let arg_map = + arg_start.map(|start| exp_map.ranges(&expand_info.arg_map, start)).unwrap_or_default(); + let def_map = + def_start.map(|start| exp_map.ranges(&expand_info.def_map, start)).unwrap_or_default(); - let info = ExpansionInfo { arg_map, def_map }; + let info = ExpansionInfo { arg_map, def_map }; - ParseMacroWithInfo { parsed, expansion_info: Arc::new(info) } - }) + Some(ParseMacroWithInfo { parsed, expansion_info: Arc::new(info) }) } pub(crate) fn macro_expansion_info( -- cgit v1.2.3