From b3cc7c057d3e926c9a31467cb956a9c6f5320740 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sun, 24 Feb 2019 14:18:10 +0300 Subject: dont show introduce variable everywhere --- crates/ra_assists/src/introduce_variable.rs | 68 ++++++++++++----------------- crates/ra_assists/src/lib.rs | 20 ++++++--- 2 files changed, 42 insertions(+), 46 deletions(-) (limited to 'crates/ra_assists/src') diff --git a/crates/ra_assists/src/introduce_variable.rs b/crates/ra_assists/src/introduce_variable.rs index 3d708ebb2..3fab29e29 100644 --- a/crates/ra_assists/src/introduce_variable.rs +++ b/crates/ra_assists/src/introduce_variable.rs @@ -9,6 +9,9 @@ use ra_syntax::{ use crate::{AssistCtx, Assist, AssistId}; pub(crate) fn introduce_variable(mut ctx: AssistCtx) -> Option { + if ctx.frange.range.is_empty() { + return None; + } let node = ctx.covering_node(); if !valid_covering_node(node) { return None; @@ -118,7 +121,7 @@ fn anchor_stmt(expr: &ast::Expr) -> Option<(&SyntaxNode, bool)> { #[cfg(test)] mod tests { use super::*; - use crate::helpers::{check_assist, check_assist_not_applicable, check_assist_range, check_assist_target, check_assist_range_target}; + use crate::helpers::{check_assist_range_not_applicable, check_assist_range, check_assist_range_target}; #[test] fn test_introduce_var_simple() { @@ -309,11 +312,11 @@ fn main() { #[test] fn test_introduce_var_path_simple() { - check_assist( + check_assist_range( introduce_variable, " fn main() { - let o = S<|>ome(true); + let o = <|>Some(true)<|>; } ", " @@ -327,11 +330,11 @@ fn main() { #[test] fn test_introduce_var_path_method() { - check_assist( + check_assist_range( introduce_variable, " fn main() { - let v = b<|>ar.foo(); + let v = <|>bar.foo()<|>; } ", " @@ -345,11 +348,11 @@ fn main() { #[test] fn test_introduce_var_return() { - check_assist( + check_assist_range( introduce_variable, " fn foo() -> u32 { - r<|>eturn 2 + 2; + <|>return 2 + 2<|>; } ", " @@ -363,13 +366,13 @@ fn foo() -> u32 { #[test] fn test_introduce_var_does_not_add_extra_whitespace() { - check_assist( + check_assist_range( introduce_variable, " fn foo() -> u32 { - r<|>eturn 2 + 2; + <|>return 2 + 2<|>; } ", " @@ -382,12 +385,12 @@ fn foo() -> u32 { ", ); - check_assist( + check_assist_range( introduce_variable, " fn foo() -> u32 { - r<|>eturn 2 + 2; + <|>return 2 + 2<|>; } ", " @@ -399,7 +402,7 @@ fn foo() -> u32 { ", ); - check_assist( + check_assist_range( introduce_variable, " fn foo() -> u32 { @@ -408,7 +411,7 @@ fn foo() -> u32 { // bar - r<|>eturn 2 + 2; + <|>return 2 + 2<|>; } ", " @@ -427,12 +430,12 @@ fn foo() -> u32 { #[test] fn test_introduce_var_break() { - check_assist( + check_assist_range( introduce_variable, " fn main() { let result = loop { - b<|>reak 2 + 2; + <|>break 2 + 2<|>; }; } ", @@ -449,11 +452,11 @@ fn main() { #[test] fn test_introduce_var_for_cast() { - check_assist( + check_assist_range( introduce_variable, " fn main() { - let v = 0f32 a<|>s u32; + let v = <|>0f32 as u32<|>; } ", " @@ -467,39 +470,26 @@ fn main() { #[test] fn test_introduce_var_for_return_not_applicable() { - check_assist_not_applicable( - introduce_variable, - " -fn foo() { - r<|>eturn; -} -", - ); + check_assist_range_not_applicable(introduce_variable, "fn foo() { <|>return<|>; } "); } #[test] fn test_introduce_var_for_break_not_applicable() { - check_assist_not_applicable( + check_assist_range_not_applicable( introduce_variable, - " -fn main() { - loop { - b<|>reak; - }; -} -", + "fn main() { loop { <|>break<|>; }; }", ); } #[test] fn test_introduce_var_in_comment_not_applicable() { - check_assist_not_applicable( + check_assist_range_not_applicable( introduce_variable, " fn main() { let x = true; let tuple = match x { - // c<|>omment + // <|>comment<|> true => (2 + 2, true) _ => (0, false) }; @@ -511,13 +501,9 @@ fn main() { // FIXME: This is not quite correct, but good enough(tm) for the sorting heuristic #[test] fn introduce_var_target() { - check_assist_target( + check_assist_range_target( introduce_variable, - " -fn foo() -> u32 { - r<|>eturn 2 + 2; -} -", + "fn foo() -> u32 { <|>return 2 + 2<|>; }", "2 + 2", ); diff --git a/crates/ra_assists/src/lib.rs b/crates/ra_assists/src/lib.rs index 56d276867..8e161dd37 100644 --- a/crates/ra_assists/src/lib.rs +++ b/crates/ra_assists/src/lib.rs @@ -259,6 +259,17 @@ mod helpers { let assist = AssistCtx::with_ctx(&db, frange, true, assist); assert!(assist.is_none()); } + + pub(crate) fn check_assist_range_not_applicable( + assist: fn(AssistCtx) -> Option, + before: &str, + ) { + let (range, before) = extract_range(before); + let (db, _source_root, file_id) = MockDatabase::with_single_file(&before); + let frange = FileRange { file_id, range }; + let assist = AssistCtx::with_ctx(&db, frange, true, assist); + assert!(assist.is_none()); + } } #[cfg(test)] @@ -266,7 +277,7 @@ mod tests { use hir::mock::MockDatabase; use ra_syntax::TextRange; use ra_db::FileRange; - use test_utils::{extract_offset}; + use test_utils::{extract_offset, extract_range}; #[test] fn assist_order_field_struct() { @@ -286,16 +297,15 @@ mod tests { fn assist_order_if_expr() { let before = " pub fn test_some_range(a: int) -> bool { - if let 2..6 = 5<|> { + if let 2..6 = <|>5<|> { true } else { false } }"; - let (before_cursor_pos, before) = extract_offset(before); + let (range, before) = extract_range(before); let (db, _source_root, file_id) = MockDatabase::with_single_file(&before); - let frange = - FileRange { file_id, range: TextRange::offset_len(before_cursor_pos, 0.into()) }; + let frange = FileRange { file_id, range }; let assists = super::assists(&db, frange); let mut assists = assists.iter(); -- cgit v1.2.3