aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide_api
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_ide_api')
-rw-r--r--crates/ra_ide_api/src/call_info.rs27
1 files changed, 14 insertions, 13 deletions
diff --git a/crates/ra_ide_api/src/call_info.rs b/crates/ra_ide_api/src/call_info.rs
index 831c4ad12..29fa7d30b 100644
--- a/crates/ra_ide_api/src/call_info.rs
+++ b/crates/ra_ide_api/src/call_info.rs
@@ -40,13 +40,8 @@ pub(crate) fn call_info(db: &RootDatabase, position: FilePosition) -> Option<Cal
40 } else if num_params > 1 { 40 } else if num_params > 1 {
41 // Count how many parameters into the call we are. 41 // Count how many parameters into the call we are.
42 if let Some(arg_list) = calling_node.arg_list() { 42 if let Some(arg_list) = calling_node.arg_list() {
43 // Number of arguments specified at the caller site 43 // Number of arguments specified at the call site
44 let mut num_args_of_call = arg_list.args().count(); 44 let num_args_at_callsite = arg_list.args().count();
45
46 // If we are calling a method account for the `self` argument.
47 if has_self {
48 num_args_of_call = num_args_of_call + 1;
49 }
50 45
51 let arg_list_range = arg_list.syntax().range(); 46 let arg_list_range = arg_list.syntax().range();
52 if !arg_list_range.contains_inclusive(position.offset) { 47 if !arg_list_range.contains_inclusive(position.offset) {
@@ -54,12 +49,18 @@ pub(crate) fn call_info(db: &RootDatabase, position: FilePosition) -> Option<Cal
54 return None; 49 return None;
55 } 50 }
56 51
57 let param = arg_list 52 let mut param = std::cmp::min(
58 .args() 53 num_args_at_callsite,
59 .position(|arg| arg.syntax().range().contains(position.offset)) 54 arg_list
60 .or(Some(num_params - 1)) 55 .args()
61 .min(Some(num_args_of_call)) 56 .take_while(|arg| arg.syntax().range().end() < position.offset)
62 .unwrap(); 57 .count(),
58 );
59
60 // If we are in a method account for `self`
61 if has_self {
62 param = param + 1;
63 }
63 64
64 call_info.active_parameter = Some(param); 65 call_info.active_parameter = Some(param);
65 } 66 }