diff options
Diffstat (limited to 'crates/ide_assists/src/handlers/extract_function.rs')
-rw-r--r-- | crates/ide_assists/src/handlers/extract_function.rs | 20 |
1 files changed, 6 insertions, 14 deletions
diff --git a/crates/ide_assists/src/handlers/extract_function.rs b/crates/ide_assists/src/handlers/extract_function.rs index dd4501709..5fdc8bf38 100644 --- a/crates/ide_assists/src/handlers/extract_function.rs +++ b/crates/ide_assists/src/handlers/extract_function.rs | |||
@@ -16,7 +16,6 @@ use syntax::{ | |||
16 | edit::{AstNodeEdit, IndentLevel}, | 16 | edit::{AstNodeEdit, IndentLevel}, |
17 | AstNode, | 17 | AstNode, |
18 | }, | 18 | }, |
19 | SyntaxElement, | ||
20 | SyntaxKind::{self, BLOCK_EXPR, BREAK_EXPR, COMMENT, PATH_EXPR, RETURN_EXPR}, | 19 | SyntaxKind::{self, BLOCK_EXPR, BREAK_EXPR, COMMENT, PATH_EXPR, RETURN_EXPR}, |
21 | SyntaxNode, SyntaxToken, TextRange, TextSize, TokenAtOffset, WalkEvent, T, | 20 | SyntaxNode, SyntaxToken, TextRange, TextSize, TokenAtOffset, WalkEvent, T, |
22 | }; | 21 | }; |
@@ -62,7 +61,10 @@ pub(crate) fn extract_function(acc: &mut Assists, ctx: &AssistContext) -> Option | |||
62 | return None; | 61 | return None; |
63 | } | 62 | } |
64 | 63 | ||
65 | let node = element_to_node(node); | 64 | let node = match node { |
65 | syntax::NodeOrToken::Node(n) => n, | ||
66 | syntax::NodeOrToken::Token(t) => t.parent()?, | ||
67 | }; | ||
66 | 68 | ||
67 | let body = extraction_target(&node, ctx.frange.range)?; | 69 | let body = extraction_target(&node, ctx.frange.range)?; |
68 | 70 | ||
@@ -560,14 +562,6 @@ impl HasTokenAtOffset for FunctionBody { | |||
560 | } | 562 | } |
561 | } | 563 | } |
562 | 564 | ||
563 | /// node or token's parent | ||
564 | fn element_to_node(node: SyntaxElement) -> SyntaxNode { | ||
565 | match node { | ||
566 | syntax::NodeOrToken::Node(n) => n, | ||
567 | syntax::NodeOrToken::Token(t) => t.parent(), | ||
568 | } | ||
569 | } | ||
570 | |||
571 | /// Try to guess what user wants to extract | 565 | /// Try to guess what user wants to extract |
572 | /// | 566 | /// |
573 | /// We have basically have two cases: | 567 | /// We have basically have two cases: |
@@ -1246,7 +1240,7 @@ fn make_body( | |||
1246 | }) | 1240 | }) |
1247 | } | 1241 | } |
1248 | FlowHandler::If { .. } => { | 1242 | FlowHandler::If { .. } => { |
1249 | let lit_false = ast::Literal::cast(make::tokens::literal("false").parent()).unwrap(); | 1243 | let lit_false = make::expr_literal("false"); |
1250 | with_tail_expr(block, lit_false.into()) | 1244 | with_tail_expr(block, lit_false.into()) |
1251 | } | 1245 | } |
1252 | FlowHandler::IfOption { .. } => { | 1246 | FlowHandler::IfOption { .. } => { |
@@ -1420,9 +1414,7 @@ fn update_external_control_flow(handler: &FlowHandler, syntax: &SyntaxNode) -> S | |||
1420 | fn make_rewritten_flow(handler: &FlowHandler, arg_expr: Option<ast::Expr>) -> Option<ast::Expr> { | 1414 | fn make_rewritten_flow(handler: &FlowHandler, arg_expr: Option<ast::Expr>) -> Option<ast::Expr> { |
1421 | let value = match handler { | 1415 | let value = match handler { |
1422 | FlowHandler::None | FlowHandler::Try { .. } => return None, | 1416 | FlowHandler::None | FlowHandler::Try { .. } => return None, |
1423 | FlowHandler::If { .. } => { | 1417 | FlowHandler::If { .. } => make::expr_literal("true").into(), |
1424 | ast::Literal::cast(make::tokens::literal("true").parent()).unwrap().into() | ||
1425 | } | ||
1426 | FlowHandler::IfOption { .. } => { | 1418 | FlowHandler::IfOption { .. } => { |
1427 | let expr = arg_expr.unwrap_or_else(|| make::expr_tuple(Vec::new())); | 1419 | let expr = arg_expr.unwrap_or_else(|| make::expr_tuple(Vec::new())); |
1428 | let args = make::arg_list(iter::once(expr)); | 1420 | let args = make::arg_list(iter::once(expr)); |