From c390e92fdd25ced46c589bfbff94e4b0bc4d9c38 Mon Sep 17 00:00:00 2001 From: imtsuki Date: Wed, 15 Jan 2020 01:02:01 +0800 Subject: Add inlay parameter name hints for function calls Signed-off-by: imtsuki --- crates/ra_ide/src/display/function_signature.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'crates/ra_ide/src/display') diff --git a/crates/ra_ide/src/display/function_signature.rs b/crates/ra_ide/src/display/function_signature.rs index 324ad9552..b0eb1f194 100644 --- a/crates/ra_ide/src/display/function_signature.rs +++ b/crates/ra_ide/src/display/function_signature.rs @@ -34,6 +34,8 @@ pub struct FunctionSignature { pub generic_parameters: Vec, /// Parameters of the function pub parameters: Vec, + /// Parameter names of the function + pub parameter_names: Vec, /// Optional return type pub ret_type: Option, /// Where predicates @@ -75,6 +77,7 @@ impl FunctionSignature { name: node.name().map(|n| n.text().to_string()), ret_type: node.name().map(|n| n.text().to_string()), parameters: params, + parameter_names: vec![], generic_parameters: generic_parameters(&node), where_predicates: where_predicates(&node), doc: None, @@ -114,6 +117,7 @@ impl FunctionSignature { name: Some(name), ret_type: None, parameters: params, + parameter_names: vec![], generic_parameters: vec![], where_predicates: vec![], doc: None, @@ -134,6 +138,7 @@ impl FunctionSignature { name: node.name().map(|n| n.text().to_string()), ret_type: None, parameters: params, + parameter_names: vec![], generic_parameters: vec![], where_predicates: vec![], doc: None, @@ -157,6 +162,22 @@ impl From<&'_ ast::FnDef> for FunctionSignature { res } + fn param_name_list(node: &ast::FnDef) -> Vec { + let mut res = vec![]; + if let Some(param_list) = node.param_list() { + if let Some(self_param) = param_list.self_param() { + res.push(self_param.syntax().text().to_string()) + } + + res.extend( + param_list + .params() + .map(|param| param.pat().unwrap().syntax().text().to_string()), + ); + } + res + } + FunctionSignature { kind: CallableKind::Function, visibility: node.visibility().map(|n| n.syntax().text().to_string()), @@ -166,6 +187,7 @@ impl From<&'_ ast::FnDef> for FunctionSignature { .and_then(|r| r.type_ref()) .map(|n| n.syntax().text().to_string()), parameters: param_list(node), + parameter_names: param_name_list(node), generic_parameters: generic_parameters(node), where_predicates: where_predicates(node), // docs are processed separately -- cgit v1.2.3 From d854ad8f279e5a3a4b3908bf5b0afdaba3d37bc9 Mon Sep 17 00:00:00 2001 From: imtsuki Date: Wed, 15 Jan 2020 09:30:19 +0800 Subject: FnSignature: use unwrap_or_default for parameter_name_list Signed-off-by: imtsuki --- crates/ra_ide/src/display/function_signature.rs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'crates/ra_ide/src/display') diff --git a/crates/ra_ide/src/display/function_signature.rs b/crates/ra_ide/src/display/function_signature.rs index b0eb1f194..ddc53a52b 100644 --- a/crates/ra_ide/src/display/function_signature.rs +++ b/crates/ra_ide/src/display/function_signature.rs @@ -169,11 +169,9 @@ impl From<&'_ ast::FnDef> for FunctionSignature { res.push(self_param.syntax().text().to_string()) } - res.extend( - param_list - .params() - .map(|param| param.pat().unwrap().syntax().text().to_string()), - ); + res.extend(param_list.params().map(|param| { + param.pat().map(|pat| pat.syntax().text().to_string()).unwrap_or_default() + })); } res } -- cgit v1.2.3