Skip to content

Commit

Permalink
Fix completion snippet for reexported functions
Browse files Browse the repository at this point in the history
Fixes #3356.
  • Loading branch information
flodiebold committed Mar 3, 2020
1 parent 5abc459 commit e55fc28
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 4 deletions.
51 changes: 51 additions & 0 deletions crates/ra_ide/src/completion/complete_path.rs
Expand Up @@ -784,4 +784,55 @@ mod tests {
"###
);
}

#[test]
fn completes_reexported_items_under_correct_name() {
assert_debug_snapshot!(
do_reference_completion(
r"
fn foo() {
self::m::<|>
}
mod m {
pub use super::p::wrong_fn as right_fn;
pub use super::p::WRONG_CONST as RIGHT_CONST;
pub use super::p::WrongType as RightType;
}
mod p {
fn wrong_fn() {}
const WRONG_CONST: u32 = 1;
struct WrongType {};
}
"
),
@r###"
[
CompletionItem {
label: "RIGHT_CONST",
source_range: [57; 57),
delete: [57; 57),
insert: "RIGHT_CONST",
kind: Const,
},
CompletionItem {
label: "RightType",
source_range: [57; 57),
delete: [57; 57),
insert: "RightType",
kind: Struct,
},
CompletionItem {
label: "right_fn()",
source_range: [57; 57),
delete: [57; 57),
insert: "right_fn()$0",
kind: Function,
lookup: "right_fn",
detail: "fn wrong_fn()",
},
]
"###
);
}
}
7 changes: 3 additions & 4 deletions crates/ra_ide/src/completion/presentation.rs
Expand Up @@ -193,11 +193,10 @@ impl Completions {
name: Option<String>,
func: hir::Function,
) {
let func_name = func.name(ctx.db);
let has_self_param = func.has_self_param(ctx.db);
let params = func.params(ctx.db);

let name = name.unwrap_or_else(|| func_name.to_string());
let name = name.unwrap_or_else(|| func.name(ctx.db).to_string());
let ast_node = func.source(ctx.db).value;
let detail = function_label(&ast_node);

Expand All @@ -219,9 +218,9 @@ impl Completions {
{
tested_by!(inserts_parens_for_function_calls);
let (snippet, label) = if params.is_empty() || has_self_param && params.len() == 1 {
(format!("{}()$0", func_name), format!("{}()", name))
(format!("{}()$0", name), format!("{}()", name))
} else {
(format!("{}($0)", func_name), format!("{}(…)", name))
(format!("{}($0)", name), format!("{}(…)", name))
};
builder = builder.lookup_by(name).label(label).insert_snippet(snippet);
}
Expand Down

0 comments on commit e55fc28

Please sign in to comment.