1601: Inline snapshots for tests r=matklad a=theotherphil

Fixes https://github.com/rust-analyzer/rust-analyzer/issues/1127.

The "cargo format" commits are required to get the formatting tests to pass. However, they actually mess up the formatting.

Co-authored-by: Phil Ellison <phil.j.ellison@gmail.com>
This commit is contained in:
bors[bot] 2019-07-29 12:54:40 +00:00
commit 359b3376b3
38 changed files with 870 additions and 1064 deletions

View File

@ -16,7 +16,7 @@ mod complete_postfix;
use ra_db::SourceDatabase; use ra_db::SourceDatabase;
#[cfg(test)] #[cfg(test)]
use crate::completion::completion_item::{check_completion, do_completion}; use crate::completion::completion_item::do_completion;
use crate::{ use crate::{
completion::{ completion::{
completion_context::CompletionContext, completion_context::CompletionContext,

View File

@ -121,172 +121,413 @@ impl ImportResolver {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::completion::{check_completion, CompletionKind}; use crate::completion::{do_completion, CompletionItem, CompletionKind};
use insta::assert_debug_snapshot_matches;
fn check_reference_completion(name: &str, code: &str) { fn do_reference_completion(code: &str) -> Vec<CompletionItem> {
check_completion(name, code, CompletionKind::Reference); do_completion(code, CompletionKind::Reference)
} }
#[test] #[test]
fn completes_bindings_from_let() { fn completes_bindings_from_let() {
check_reference_completion( assert_debug_snapshot_matches!(
"bindings_from_let", do_reference_completion(
r" r"
fn quux(x: i32) { fn quux(x: i32) {
let y = 92; let y = 92;
1 + <|>; 1 + <|>;
let z = (); let z = ();
} }
", "
),
@r###"[
CompletionItem {
label: "quux",
source_range: [91; 91),
delete: [91; 91),
insert: "quux($0)",
kind: Function,
detail: "fn quux(x: i32)",
},
CompletionItem {
label: "x",
source_range: [91; 91),
delete: [91; 91),
insert: "x",
kind: Binding,
detail: "i32",
},
CompletionItem {
label: "y",
source_range: [91; 91),
delete: [91; 91),
insert: "y",
kind: Binding,
detail: "i32",
},
]"###
); );
} }
#[test] #[test]
fn completes_bindings_from_if_let() { fn completes_bindings_from_if_let() {
check_reference_completion( assert_debug_snapshot_matches!(
"bindings_from_if_let", do_reference_completion(
r" r"
fn quux() { fn quux() {
if let Some(x) = foo() { if let Some(x) = foo() {
let y = 92; let y = 92;
}; };
if let Some(a) = bar() { if let Some(a) = bar() {
let b = 62; let b = 62;
1 + <|> 1 + <|>
}
} }
} "
", ),
@r###"[
CompletionItem {
label: "a",
source_range: [242; 242),
delete: [242; 242),
insert: "a",
kind: Binding,
},
CompletionItem {
label: "b",
source_range: [242; 242),
delete: [242; 242),
insert: "b",
kind: Binding,
detail: "i32",
},
CompletionItem {
label: "quux",
source_range: [242; 242),
delete: [242; 242),
insert: "quux()$0",
kind: Function,
detail: "fn quux()",
},
]"###
); );
} }
#[test] #[test]
fn completes_bindings_from_for() { fn completes_bindings_from_for() {
check_reference_completion( assert_debug_snapshot_matches!(
"bindings_from_for", do_reference_completion(
r" r"
fn quux() { fn quux() {
for x in &[1, 2, 3] { for x in &[1, 2, 3] {
<|> <|>
}
} }
} "
", ),
@r###"[
CompletionItem {
label: "quux",
source_range: [95; 95),
delete: [95; 95),
insert: "quux()$0",
kind: Function,
detail: "fn quux()",
},
CompletionItem {
label: "x",
source_range: [95; 95),
delete: [95; 95),
insert: "x",
kind: Binding,
},
]"###
); );
} }
#[test] #[test]
fn completes_generic_params() { fn completes_generic_params() {
check_reference_completion( assert_debug_snapshot_matches!(
"generic_params", do_reference_completion(
r" r"
fn quux<T>() { fn quux<T>() {
<|> <|>
} }
", "
),
@r###"[
CompletionItem {
label: "T",
source_range: [52; 52),
delete: [52; 52),
insert: "T",
kind: TypeParam,
},
CompletionItem {
label: "quux",
source_range: [52; 52),
delete: [52; 52),
insert: "quux()$0",
kind: Function,
detail: "fn quux<T>()",
},
]"###
); );
} }
#[test] #[test]
fn completes_generic_params_in_struct() { fn completes_generic_params_in_struct() {
check_reference_completion( assert_debug_snapshot_matches!(
"generic_params_in_struct", do_reference_completion(
r" r"
struct X<T> { struct X<T> {
x: <|> x: <|>
} }
", "
),
@r###"[
CompletionItem {
label: "T",
source_range: [54; 54),
delete: [54; 54),
insert: "T",
kind: TypeParam,
},
CompletionItem {
label: "X",
source_range: [54; 54),
delete: [54; 54),
insert: "X",
kind: Struct,
},
]"###
); );
} }
#[test] #[test]
fn completes_module_items() { fn completes_module_items() {
check_reference_completion( assert_debug_snapshot_matches!(
"module_items", do_reference_completion(
r" r"
struct Foo; struct Foo;
enum Baz {} enum Baz {}
fn quux() { fn quux() {
<|> <|>
} }
", "
); ),
@r###"[
CompletionItem {
label: "Baz",
source_range: [105; 105),
delete: [105; 105),
insert: "Baz",
kind: Enum,
},
CompletionItem {
label: "Foo",
source_range: [105; 105),
delete: [105; 105),
insert: "Foo",
kind: Struct,
},
CompletionItem {
label: "quux",
source_range: [105; 105),
delete: [105; 105),
insert: "quux()$0",
kind: Function,
detail: "fn quux()",
},
]"###
);
} }
#[test] #[test]
fn completes_extern_prelude() { fn completes_extern_prelude() {
check_reference_completion( assert_debug_snapshot_matches!(
"extern_prelude", do_reference_completion(
r" r"
//- /lib.rs //- /lib.rs
use <|>; use <|>;
//- /other_crate/lib.rs //- /other_crate/lib.rs
// nothing here // nothing here
", "
),
@r#"[
CompletionItem {
label: "other_crate",
source_range: [4; 4),
delete: [4; 4),
insert: "other_crate",
kind: Module,
},
]"#
); );
} }
#[test] #[test]
fn completes_module_items_in_nested_modules() { fn completes_module_items_in_nested_modules() {
check_reference_completion( assert_debug_snapshot_matches!(
"module_items_in_nested_modules", do_reference_completion(
r" r"
struct Foo; struct Foo;
mod m { mod m {
struct Bar; struct Bar;
fn quux() { <|> } fn quux() { <|> }
} }
", "
),
@r###"[
CompletionItem {
label: "Bar",
source_range: [117; 117),
delete: [117; 117),
insert: "Bar",
kind: Struct,
},
CompletionItem {
label: "quux",
source_range: [117; 117),
delete: [117; 117),
insert: "quux()$0",
kind: Function,
detail: "fn quux()",
},
]"###
); );
} }
#[test] #[test]
fn completes_return_type() { fn completes_return_type() {
check_reference_completion( assert_debug_snapshot_matches!(
"return_type", do_reference_completion(
r" r"
struct Foo; struct Foo;
fn x() -> <|> fn x() -> <|>
", "
) ),
@r###"[
CompletionItem {
label: "Foo",
source_range: [55; 55),
delete: [55; 55),
insert: "Foo",
kind: Struct,
},
CompletionItem {
label: "x",
source_range: [55; 55),
delete: [55; 55),
insert: "x()$0",
kind: Function,
detail: "fn x()",
},
]"###
);
} }
#[test] #[test]
fn dont_show_both_completions_for_shadowing() { fn dont_show_both_completions_for_shadowing() {
check_reference_completion( assert_debug_snapshot_matches!(
"dont_show_both_completions_for_shadowing", do_reference_completion(
r" r"
fn foo() { fn foo() {
let bar = 92; let bar = 92;
{ {
let bar = 62; let bar = 62;
<|> <|>
}
} }
} "
", ),
) @r###"[
CompletionItem {
label: "bar",
source_range: [146; 146),
delete: [146; 146),
insert: "bar",
kind: Binding,
detail: "i32",
},
CompletionItem {
label: "foo",
source_range: [146; 146),
delete: [146; 146),
insert: "foo()$0",
kind: Function,
detail: "fn foo()",
},
]"###
);
} }
#[test] #[test]
fn completes_self_in_methods() { fn completes_self_in_methods() {
check_reference_completion("self_in_methods", r"impl S { fn foo(&self) { <|> } }") assert_debug_snapshot_matches!(
do_reference_completion(r"impl S { fn foo(&self) { <|> } }"),
@r#"[
CompletionItem {
label: "Self",
source_range: [25; 25),
delete: [25; 25),
insert: "Self",
kind: TypeParam,
},
CompletionItem {
label: "self",
source_range: [25; 25),
delete: [25; 25),
insert: "self",
kind: Binding,
detail: "&{unknown}",
},
]"#
);
} }
#[test] #[test]
fn completes_prelude() { fn completes_prelude() {
check_reference_completion( assert_debug_snapshot_matches!(
"completes_prelude", do_reference_completion(
" "
//- /main.rs //- /main.rs
fn foo() { let x: <|> } fn foo() { let x: <|> }
//- /std/lib.rs //- /std/lib.rs
#[prelude_import] #[prelude_import]
use prelude::*; use prelude::*;
mod prelude { mod prelude {
struct Option; struct Option;
} }
", "
),
@r#"[
CompletionItem {
label: "Option",
source_range: [18; 18),
delete: [18; 18),
insert: "Option",
kind: Struct,
},
CompletionItem {
label: "foo",
source_range: [18; 18),
delete: [18; 18),
insert: "foo()$0",
kind: Function,
detail: "fn foo()",
},
CompletionItem {
label: "std",
source_range: [18; 18),
delete: [18; 18),
insert: "std",
kind: Module,
},
]"#
); );
} }
} }

View File

@ -39,39 +39,76 @@ fn ${1:feature}() {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::completion::{check_completion, CompletionKind}; use crate::completion::{do_completion, CompletionItem, CompletionKind};
use insta::assert_debug_snapshot_matches;
fn check_snippet_completion(name: &str, code: &str) { fn do_snippet_completion(code: &str) -> Vec<CompletionItem> {
check_completion(name, code, CompletionKind::Snippet); do_completion(code, CompletionKind::Snippet)
} }
#[test] #[test]
fn completes_snippets_in_expressions() { fn completes_snippets_in_expressions() {
check_snippet_completion("snippets_in_expressions", r"fn foo(x: i32) { <|> }"); assert_debug_snapshot_matches!(
do_snippet_completion(r"fn foo(x: i32) { <|> }"),
@r#"[
CompletionItem {
label: "pd",
source_range: [17; 17),
delete: [17; 17),
insert: "eprintln!(\"$0 = {:?}\", $0);",
kind: Snippet,
},
CompletionItem {
label: "ppd",
source_range: [17; 17),
delete: [17; 17),
insert: "eprintln!(\"$0 = {:#?}\", $0);",
kind: Snippet,
},
]"#
);
} }
#[test] #[test]
fn should_not_complete_snippets_in_path() { fn should_not_complete_snippets_in_path() {
check_snippet_completion( assert_debug_snapshot_matches!(
"should_not_complete_snippets_in_path", do_snippet_completion(r"fn foo(x: i32) { ::foo<|> }"),
r"fn foo(x: i32) { ::foo<|> }", @r#"[]"#
); );
check_snippet_completion( assert_debug_snapshot_matches!(
"should_not_complete_snippets_in_path2", do_snippet_completion(r"fn foo(x: i32) { ::<|> }"),
r"fn foo(x: i32) { ::<|> }", @r#"[]"#
); );
} }
#[test] #[test]
fn completes_snippets_in_items() { fn completes_snippets_in_items() {
check_snippet_completion( assert_debug_snapshot_matches!(
"snippets_in_items", do_snippet_completion(
r" r"
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
<|> <|>
} }
", "
),
@r###"[
CompletionItem {
label: "Test function",
source_range: [78; 78),
delete: [78; 78),
insert: "#[test]\nfn ${1:feature}() {\n $0\n}",
kind: Snippet,
lookup: "tfn",
},
CompletionItem {
label: "pub(crate)",
source_range: [78; 78),
delete: [78; 78),
insert: "pub(crate) $0",
kind: Snippet,
},
]"###
); );
} }
} }

View File

@ -299,10 +299,3 @@ pub(crate) fn do_completion(code: &str, kind: CompletionKind) -> Vec<CompletionI
kind_completions.sort_by_key(|c| c.label.clone()); kind_completions.sort_by_key(|c| c.label.clone());
kind_completions kind_completions
} }
#[cfg(test)]
pub(crate) fn check_completion(test_name: &str, code: &str, kind: CompletionKind) {
use insta::assert_debug_snapshot_matches;
let kind_completions = do_completion(code, kind);
assert_debug_snapshot_matches!(test_name, kind_completions);
}

View File

@ -182,80 +182,169 @@ impl Completions {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::completion::{do_completion, CompletionItem, CompletionKind};
use insta::assert_debug_snapshot_matches;
use test_utils::covers; use test_utils::covers;
use crate::completion::{check_completion, CompletionKind}; fn do_reference_completion(code: &str) -> Vec<CompletionItem> {
do_completion(code, CompletionKind::Reference)
fn check_reference_completion(code: &str, expected_completions: &str) {
check_completion(code, expected_completions, CompletionKind::Reference);
} }
#[test] #[test]
fn inserts_parens_for_function_calls() { fn inserts_parens_for_function_calls() {
covers!(inserts_parens_for_function_calls); covers!(inserts_parens_for_function_calls);
check_reference_completion( assert_debug_snapshot_matches!(
"inserts_parens_for_function_calls1", do_reference_completion(
r" r"
fn no_args() {} fn no_args() {}
fn main() { no_<|> } fn main() { no_<|> }
", "
),
@r###"[
CompletionItem {
label: "main",
source_range: [61; 64),
delete: [61; 64),
insert: "main()$0",
kind: Function,
detail: "fn main()",
},
CompletionItem {
label: "no_args",
source_range: [61; 64),
delete: [61; 64),
insert: "no_args()$0",
kind: Function,
detail: "fn no_args()",
},
]"###
); );
check_reference_completion( assert_debug_snapshot_matches!(
"inserts_parens_for_function_calls2", do_reference_completion(
r" r"
fn with_args(x: i32, y: String) {} fn with_args(x: i32, y: String) {}
fn main() { with_<|> } fn main() { with_<|> }
", "
),
@r###"[
CompletionItem {
label: "main",
source_range: [80; 85),
delete: [80; 85),
insert: "main()$0",
kind: Function,
detail: "fn main()",
},
CompletionItem {
label: "with_args",
source_range: [80; 85),
delete: [80; 85),
insert: "with_args($0)",
kind: Function,
detail: "fn with_args(x: i32, y: String)",
},
]"###
);
assert_debug_snapshot_matches!(
do_reference_completion(
r"
struct S {}
impl S {
fn foo(&self) {}
}
fn bar(s: &S) {
s.f<|>
}
"
),
@r###"[
CompletionItem {
label: "foo",
source_range: [163; 164),
delete: [163; 164),
insert: "foo()$0",
kind: Method,
detail: "fn foo(&self)",
},
]"###
); );
check_reference_completion(
"inserts_parens_for_function_calls3",
r"
struct S {}
impl S {
fn foo(&self) {}
}
fn bar(s: &S) {
s.f<|>
}
",
)
} }
#[test] #[test]
fn dont_render_function_parens_in_use_item() { fn dont_render_function_parens_in_use_item() {
check_reference_completion( assert_debug_snapshot_matches!(
"dont_render_function_parens_in_use_item", do_reference_completion(
" "
//- /lib.rs //- /lib.rs
mod m { pub fn foo() {} } mod m { pub fn foo() {} }
use crate::m::f<|>; use crate::m::f<|>;
", "
) ),
@r#"[
CompletionItem {
label: "foo",
source_range: [40; 41),
delete: [40; 41),
insert: "foo",
kind: Function,
detail: "pub fn foo()",
},
]"#
);
} }
#[test] #[test]
fn dont_render_function_parens_if_already_call() { fn dont_render_function_parens_if_already_call() {
check_reference_completion( assert_debug_snapshot_matches!(
"dont_render_function_parens_if_already_call", do_reference_completion(
" "
//- /lib.rs //- /lib.rs
fn frobnicate() {} fn frobnicate() {}
fn main() { fn main() {
frob<|>(); frob<|>();
} }
", "
),
@r#"[
CompletionItem {
label: "frobnicate",
source_range: [35; 39),
delete: [35; 39),
insert: "frobnicate",
kind: Function,
detail: "fn frobnicate()",
},
CompletionItem {
label: "main",
source_range: [35; 39),
delete: [35; 39),
insert: "main",
kind: Function,
detail: "fn main()",
},
]"#
);
assert_debug_snapshot_matches!(
do_reference_completion(
"
//- /lib.rs
struct Foo {}
impl Foo { fn new() -> Foo {} }
fn main() {
Foo::ne<|>();
}
"
),
@r#"[
CompletionItem {
label: "new",
source_range: [67; 69),
delete: [67; 69),
insert: "new",
kind: Function,
detail: "fn new() -> Foo",
},
]"#
); );
check_reference_completion(
"dont_render_function_parens_if_already_call_assoc_fn",
"
//- /lib.rs
struct Foo {}
impl Foo { fn new() -> Foo {} }
fn main() {
Foo::ne<|>();
}
",
)
} }
} }

View File

@ -1,23 +0,0 @@
---
created: "2019-05-23T22:23:35.119822026Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions
---
[
CompletionItem {
label: "quux",
source_range: [83; 83),
delete: [83; 83),
insert: "quux()$0",
kind: Function,
detail: "fn quux()",
},
CompletionItem {
label: "x",
source_range: [83; 83),
delete: [83; 83),
insert: "x",
kind: Binding,
},
]

View File

@ -1,31 +0,0 @@
---
created: "2019-07-23T16:11:48.828805910Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions
---
[
CompletionItem {
label: "a",
source_range: [214; 214),
delete: [214; 214),
insert: "a",
kind: Binding,
},
CompletionItem {
label: "b",
source_range: [214; 214),
delete: [214; 214),
insert: "b",
kind: Binding,
detail: "i32",
},
CompletionItem {
label: "quux",
source_range: [214; 214),
delete: [214; 214),
insert: "quux()$0",
kind: Function,
detail: "fn quux()",
},
]

View File

@ -1,32 +0,0 @@
---
created: "2019-07-23T16:11:48.828811567Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions
---
[
CompletionItem {
label: "quux",
source_range: [79; 79),
delete: [79; 79),
insert: "quux($0)",
kind: Function,
detail: "fn quux(x: i32)",
},
CompletionItem {
label: "x",
source_range: [79; 79),
delete: [79; 79),
insert: "x",
kind: Binding,
detail: "i32",
},
CompletionItem {
label: "y",
source_range: [79; 79),
delete: [79; 79),
insert: "y",
kind: Binding,
detail: "i32",
},
]

View File

@ -1,30 +0,0 @@
---
created: "2019-05-23T22:23:35.139262926Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions
---
[
CompletionItem {
label: "Option",
source_range: [18; 18),
delete: [18; 18),
insert: "Option",
kind: Struct,
},
CompletionItem {
label: "foo",
source_range: [18; 18),
delete: [18; 18),
insert: "foo()$0",
kind: Function,
detail: "fn foo()",
},
CompletionItem {
label: "std",
source_range: [18; 18),
delete: [18; 18),
insert: "std",
kind: Module,
},
]

View File

@ -1,24 +0,0 @@
---
created: "2019-05-23T22:23:35.158296242Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions
---
[
CompletionItem {
label: "frobnicate",
source_range: [35; 39),
delete: [35; 39),
insert: "frobnicate",
kind: Function,
detail: "fn frobnicate()",
},
CompletionItem {
label: "main",
source_range: [35; 39),
delete: [35; 39),
insert: "main",
kind: Function,
detail: "fn main()",
},
]

View File

@ -1,16 +0,0 @@
---
created: "2019-05-23T22:44:10.920136527Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions
---
[
CompletionItem {
label: "new",
source_range: [67; 69),
delete: [67; 69),
insert: "new",
kind: Function,
detail: "fn new() -> Foo",
},
]

View File

@ -1,16 +0,0 @@
---
created: "2019-05-23T22:23:35.154795561Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions
---
[
CompletionItem {
label: "foo",
source_range: [40; 41),
delete: [40; 41),
insert: "foo",
kind: Function,
detail: "pub fn foo()",
},
]

View File

@ -1,24 +0,0 @@
---
created: "2019-07-23T16:11:48.860949870Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions
---
[
CompletionItem {
label: "bar",
source_range: [126; 126),
delete: [126; 126),
insert: "bar",
kind: Binding,
detail: "i32",
},
CompletionItem {
label: "foo",
source_range: [126; 126),
delete: [126; 126),
insert: "foo()$0",
kind: Function,
detail: "fn foo()",
},
]

View File

@ -1,15 +0,0 @@
---
created: "2019-05-23T22:23:35.123197049Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions
---
[
CompletionItem {
label: "other_crate",
source_range: [4; 4),
delete: [4; 4),
insert: "other_crate",
kind: Module,
},
]

View File

@ -1,23 +0,0 @@
---
created: "2019-05-23T22:23:35.123825399Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions
---
[
CompletionItem {
label: "T",
source_range: [44; 44),
delete: [44; 44),
insert: "T",
kind: TypeParam,
},
CompletionItem {
label: "quux",
source_range: [44; 44),
delete: [44; 44),
insert: "quux()$0",
kind: Function,
detail: "fn quux<T>()",
},
]

View File

@ -1,22 +0,0 @@
---
created: "2019-05-23T22:23:35.130778739Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions
---
[
CompletionItem {
label: "T",
source_range: [46; 46),
delete: [46; 46),
insert: "T",
kind: TypeParam,
},
CompletionItem {
label: "X",
source_range: [46; 46),
delete: [46; 46),
insert: "X",
kind: Struct,
},
]

View File

@ -1,24 +0,0 @@
---
created: "2019-05-23T22:23:35.156115632Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions
---
[
CompletionItem {
label: "main",
source_range: [53; 56),
delete: [53; 56),
insert: "main()$0",
kind: Function,
detail: "fn main()",
},
CompletionItem {
label: "no_args",
source_range: [53; 56),
delete: [53; 56),
insert: "no_args()$0",
kind: Function,
detail: "fn no_args()",
},
]

View File

@ -1,24 +0,0 @@
---
created: "2019-05-23T22:44:10.916806744Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions
---
[
CompletionItem {
label: "main",
source_range: [72; 77),
delete: [72; 77),
insert: "main()$0",
kind: Function,
detail: "fn main()",
},
CompletionItem {
label: "with_args",
source_range: [72; 77),
delete: [72; 77),
insert: "with_args($0)",
kind: Function,
detail: "fn with_args(x: i32, y: String)",
},
]

View File

@ -1,16 +0,0 @@
---
created: "2019-05-23T22:44:40.543731193Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions
---
[
CompletionItem {
label: "foo",
source_range: [139; 140),
delete: [139; 140),
insert: "foo()$0",
kind: Method,
detail: "fn foo(&self)",
},
]

View File

@ -1,30 +0,0 @@
---
created: "2019-05-23T22:23:35.133106898Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions
---
[
CompletionItem {
label: "Baz",
source_range: [89; 89),
delete: [89; 89),
insert: "Baz",
kind: Enum,
},
CompletionItem {
label: "Foo",
source_range: [89; 89),
delete: [89; 89),
insert: "Foo",
kind: Struct,
},
CompletionItem {
label: "quux",
source_range: [89; 89),
delete: [89; 89),
insert: "quux()$0",
kind: Function,
detail: "fn quux()",
},
]

View File

@ -1,23 +0,0 @@
---
created: "2019-05-23T22:23:35.134417551Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions
---
[
CompletionItem {
label: "Bar",
source_range: [101; 101),
delete: [101; 101),
insert: "Bar",
kind: Struct,
},
CompletionItem {
label: "quux",
source_range: [101; 101),
delete: [101; 101),
insert: "quux()$0",
kind: Function,
detail: "fn quux()",
},
]

View File

@ -1,23 +0,0 @@
---
created: "2019-05-23T22:23:35.140648630Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions
---
[
CompletionItem {
label: "Foo",
source_range: [47; 47),
delete: [47; 47),
insert: "Foo",
kind: Struct,
},
CompletionItem {
label: "x",
source_range: [47; 47),
delete: [47; 47),
insert: "x()$0",
kind: Function,
detail: "fn x()",
},
]

View File

@ -1,23 +0,0 @@
---
created: "2019-07-23T16:11:48.859812318Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions
---
[
CompletionItem {
label: "Self",
source_range: [25; 25),
delete: [25; 25),
insert: "Self",
kind: TypeParam,
},
CompletionItem {
label: "self",
source_range: [25; 25),
delete: [25; 25),
insert: "self",
kind: Binding,
detail: "&{unknown}",
},
]

View File

@ -1,5 +0,0 @@
Created: 2019-01-23T05:19:36.475253+00:00
Creator: insta@0.1.4
Source: crates/ra_ide_api/src/completion/completion_item.rs
[]

View File

@ -1,5 +0,0 @@
Created: 2019-01-23T05:19:36.476869+00:00
Creator: insta@0.1.4
Source: crates/ra_ide_api/src/completion/completion_item.rs
[]

View File

@ -1,22 +0,0 @@
---
created: "2019-05-23T22:23:35.141901047Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions
---
[
CompletionItem {
label: "pd",
source_range: [17; 17),
delete: [17; 17),
insert: "eprintln!(\"$0 = {:?}\", $0);",
kind: Snippet,
},
CompletionItem {
label: "ppd",
source_range: [17; 17),
delete: [17; 17),
insert: "eprintln!(\"$0 = {:#?}\", $0);",
kind: Snippet,
},
]

View File

@ -1,23 +0,0 @@
---
created: "2019-05-23T22:23:35.149234118Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions
---
[
CompletionItem {
label: "Test function",
source_range: [66; 66),
delete: [66; 66),
insert: "#[test]\nfn ${1:feature}() {\n $0\n}",
kind: Snippet,
lookup: "tfn",
},
CompletionItem {
label: "pub(crate)",
source_range: [66; 66),
delete: [66; 66),
insert: "pub(crate) $0",
kind: Snippet,
},
]

View File

@ -1,191 +0,0 @@
---
created: "2019-06-28T20:46:18.274464142Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/display/structure.rs
expression: structure
---
[
StructureNode {
parent: None,
label: "Foo",
navigation_range: [8; 11),
node_range: [1; 26),
kind: STRUCT_DEF,
detail: None,
deprecated: false,
},
StructureNode {
parent: Some(
0,
),
label: "x",
navigation_range: [18; 19),
node_range: [18; 24),
kind: NAMED_FIELD_DEF,
detail: Some(
"i32",
),
deprecated: false,
},
StructureNode {
parent: None,
label: "m",
navigation_range: [32; 33),
node_range: [28; 158),
kind: MODULE,
detail: None,
deprecated: false,
},
StructureNode {
parent: Some(
2,
),
label: "bar1",
navigation_range: [43; 47),
node_range: [40; 52),
kind: FN_DEF,
detail: Some(
"fn()",
),
deprecated: false,
},
StructureNode {
parent: Some(
2,
),
label: "bar2",
navigation_range: [60; 64),
node_range: [57; 81),
kind: FN_DEF,
detail: Some(
"fn<T>(t: T) -> T",
),
deprecated: false,
},
StructureNode {
parent: Some(
2,
),
label: "bar3",
navigation_range: [89; 93),
node_range: [86; 156),
kind: FN_DEF,
detail: Some(
"fn<A, B>(a: A, b: B) -> Vec< u32 >",
),
deprecated: false,
},
StructureNode {
parent: None,
label: "E",
navigation_range: [165; 166),
node_range: [160; 180),
kind: ENUM_DEF,
detail: None,
deprecated: false,
},
StructureNode {
parent: Some(
6,
),
label: "X",
navigation_range: [169; 170),
node_range: [169; 170),
kind: ENUM_VARIANT,
detail: None,
deprecated: false,
},
StructureNode {
parent: Some(
6,
),
label: "Y",
navigation_range: [172; 173),
node_range: [172; 178),
kind: ENUM_VARIANT,
detail: None,
deprecated: false,
},
StructureNode {
parent: None,
label: "T",
navigation_range: [186; 187),
node_range: [181; 193),
kind: TYPE_ALIAS_DEF,
detail: Some(
"()",
),
deprecated: false,
},
StructureNode {
parent: None,
label: "S",
navigation_range: [201; 202),
node_range: [194; 213),
kind: STATIC_DEF,
detail: Some(
"i32",
),
deprecated: false,
},
StructureNode {
parent: None,
label: "C",
navigation_range: [220; 221),
node_range: [214; 232),
kind: CONST_DEF,
detail: Some(
"i32",
),
deprecated: false,
},
StructureNode {
parent: None,
label: "impl E",
navigation_range: [239; 240),
node_range: [234; 243),
kind: IMPL_BLOCK,
detail: None,
deprecated: false,
},
StructureNode {
parent: None,
label: "impl fmt::Debug for E",
navigation_range: [265; 266),
node_range: [245; 269),
kind: IMPL_BLOCK,
detail: None,
deprecated: false,
},
StructureNode {
parent: None,
label: "mc",
navigation_range: [284; 286),
node_range: [271; 303),
kind: MACRO_CALL,
detail: None,
deprecated: false,
},
StructureNode {
parent: None,
label: "obsolete",
navigation_range: [322; 330),
node_range: [305; 335),
kind: FN_DEF,
detail: Some(
"fn()",
),
deprecated: true,
},
StructureNode {
parent: None,
label: "very_obsolete",
navigation_range: [375; 388),
node_range: [337; 393),
kind: FN_DEF,
detail: Some(
"fn()",
),
deprecated: true,
},
]

View File

@ -204,6 +204,192 @@ fn very_obsolete() {}
.ok() .ok()
.unwrap(); .unwrap();
let structure = file_structure(&file); let structure = file_structure(&file);
assert_debug_snapshot_matches!("file_structure", structure); assert_debug_snapshot_matches!(structure,
@r#"[
StructureNode {
parent: None,
label: "Foo",
navigation_range: [8; 11),
node_range: [1; 26),
kind: STRUCT_DEF,
detail: None,
deprecated: false,
},
StructureNode {
parent: Some(
0,
),
label: "x",
navigation_range: [18; 19),
node_range: [18; 24),
kind: NAMED_FIELD_DEF,
detail: Some(
"i32",
),
deprecated: false,
},
StructureNode {
parent: None,
label: "m",
navigation_range: [32; 33),
node_range: [28; 158),
kind: MODULE,
detail: None,
deprecated: false,
},
StructureNode {
parent: Some(
2,
),
label: "bar1",
navigation_range: [43; 47),
node_range: [40; 52),
kind: FN_DEF,
detail: Some(
"fn()",
),
deprecated: false,
},
StructureNode {
parent: Some(
2,
),
label: "bar2",
navigation_range: [60; 64),
node_range: [57; 81),
kind: FN_DEF,
detail: Some(
"fn<T>(t: T) -> T",
),
deprecated: false,
},
StructureNode {
parent: Some(
2,
),
label: "bar3",
navigation_range: [89; 93),
node_range: [86; 156),
kind: FN_DEF,
detail: Some(
"fn<A, B>(a: A, b: B) -> Vec< u32 >",
),
deprecated: false,
},
StructureNode {
parent: None,
label: "E",
navigation_range: [165; 166),
node_range: [160; 180),
kind: ENUM_DEF,
detail: None,
deprecated: false,
},
StructureNode {
parent: Some(
6,
),
label: "X",
navigation_range: [169; 170),
node_range: [169; 170),
kind: ENUM_VARIANT,
detail: None,
deprecated: false,
},
StructureNode {
parent: Some(
6,
),
label: "Y",
navigation_range: [172; 173),
node_range: [172; 178),
kind: ENUM_VARIANT,
detail: None,
deprecated: false,
},
StructureNode {
parent: None,
label: "T",
navigation_range: [186; 187),
node_range: [181; 193),
kind: TYPE_ALIAS_DEF,
detail: Some(
"()",
),
deprecated: false,
},
StructureNode {
parent: None,
label: "S",
navigation_range: [201; 202),
node_range: [194; 213),
kind: STATIC_DEF,
detail: Some(
"i32",
),
deprecated: false,
},
StructureNode {
parent: None,
label: "C",
navigation_range: [220; 221),
node_range: [214; 232),
kind: CONST_DEF,
detail: Some(
"i32",
),
deprecated: false,
},
StructureNode {
parent: None,
label: "impl E",
navigation_range: [239; 240),
node_range: [234; 243),
kind: IMPL_BLOCK,
detail: None,
deprecated: false,
},
StructureNode {
parent: None,
label: "impl fmt::Debug for E",
navigation_range: [265; 266),
node_range: [245; 269),
kind: IMPL_BLOCK,
detail: None,
deprecated: false,
},
StructureNode {
parent: None,
label: "mc",
navigation_range: [284; 286),
node_range: [271; 303),
kind: MACRO_CALL,
detail: None,
deprecated: false,
},
StructureNode {
parent: None,
label: "obsolete",
navigation_range: [322; 330),
node_range: [305; 335),
kind: FN_DEF,
detail: Some(
"fn()",
),
deprecated: true,
},
StructureNode {
parent: None,
label: "very_obsolete",
navigation_range: [375; 388),
node_range: [337; 393),
kind: FN_DEF,
detail: Some(
"fn()",
),
deprecated: true,
},
]"#
);
} }
} }

View File

@ -341,7 +341,39 @@ mod tests {
); );
let new_name = "foo2"; let new_name = "foo2";
let source_change = analysis.rename(position, new_name).unwrap(); let source_change = analysis.rename(position, new_name).unwrap();
assert_debug_snapshot_matches!("rename_mod", &source_change); assert_debug_snapshot_matches!(&source_change,
@r#"Some(
SourceChange {
label: "rename",
source_file_edits: [
SourceFileEdit {
file_id: FileId(
2,
),
edit: TextEdit {
atoms: [
AtomTextEdit {
delete: [4; 7),
insert: "foo2",
},
],
},
},
],
file_system_edits: [
MoveFile {
src: FileId(
3,
),
dst_source_root: SourceRootId(
0,
),
dst_path: "bar/foo2.rs",
},
],
cursor_position: None,
},
)"#);
} }
#[test] #[test]
@ -356,7 +388,40 @@ mod tests {
); );
let new_name = "foo2"; let new_name = "foo2";
let source_change = analysis.rename(position, new_name).unwrap(); let source_change = analysis.rename(position, new_name).unwrap();
assert_debug_snapshot_matches!("rename_mod_in_dir", &source_change); assert_debug_snapshot_matches!(&source_change,
@r###"Some(
SourceChange {
label: "rename",
source_file_edits: [
SourceFileEdit {
file_id: FileId(
1,
),
edit: TextEdit {
atoms: [
AtomTextEdit {
delete: [4; 7),
insert: "foo2",
},
],
},
},
],
file_system_edits: [
MoveFile {
src: FileId(
2,
),
dst_source_root: SourceRootId(
0,
),
dst_path: "foo2/mod.rs",
},
],
cursor_position: None,
},
)"###
);
} }
fn test_rename(text: &str, new_name: &str, expected: &str) { fn test_rename(text: &str, new_name: &str, expected: &str) {

View File

@ -92,7 +92,26 @@ mod tests {
"#, "#,
); );
let runnables = analysis.runnables(pos.file_id).unwrap(); let runnables = analysis.runnables(pos.file_id).unwrap();
assert_debug_snapshot_matches!("runnables", &runnables) assert_debug_snapshot_matches!(&runnables,
@r#"[
Runnable {
range: [1; 21),
kind: Bin,
},
Runnable {
range: [22; 46),
kind: Test {
name: "test_foo",
},
},
Runnable {
range: [47; 81),
kind: Test {
name: "test_foo",
},
},
]"#
);
} }
#[test] #[test]
@ -108,7 +127,22 @@ mod tests {
"#, "#,
); );
let runnables = analysis.runnables(pos.file_id).unwrap(); let runnables = analysis.runnables(pos.file_id).unwrap();
assert_debug_snapshot_matches!("runnables_module", &runnables) assert_debug_snapshot_matches!(&runnables,
@r#"[
Runnable {
range: [1; 59),
kind: TestMod {
path: "test_mod",
},
},
Runnable {
range: [28; 57),
kind: Test {
name: "test_foo1",
},
},
]"#
);
} }
#[test] #[test]
@ -126,7 +160,22 @@ mod tests {
"#, "#,
); );
let runnables = analysis.runnables(pos.file_id).unwrap(); let runnables = analysis.runnables(pos.file_id).unwrap();
assert_debug_snapshot_matches!("runnables_one_depth_layer_module", &runnables) assert_debug_snapshot_matches!(&runnables,
@r#"[
Runnable {
range: [23; 85),
kind: TestMod {
path: "foo::test_mod",
},
},
Runnable {
range: [46; 79),
kind: Test {
name: "test_foo1",
},
},
]"#
);
} }
#[test] #[test]
@ -146,7 +195,22 @@ mod tests {
"#, "#,
); );
let runnables = analysis.runnables(pos.file_id).unwrap(); let runnables = analysis.runnables(pos.file_id).unwrap();
assert_debug_snapshot_matches!("runnables_multiple_depth_module", &runnables) assert_debug_snapshot_matches!(&runnables,
@r#"[
Runnable {
range: [41; 115),
kind: TestMod {
path: "foo::bar::test_mod",
},
},
Runnable {
range: [68; 105),
kind: Test {
name: "test_foo1",
},
},
]"#
);
} }
#[test] #[test]

View File

@ -1,44 +0,0 @@
---
created: "2019-02-01T07:46:59.130146403+00:00"
creator: insta@0.5.3
expression: "&highlights"
source: crates/ra_ide_api/src/syntax_highlighting.rs
---
[
HighlightedRange {
range: [13; 15),
tag: "keyword"
},
HighlightedRange {
range: [16; 20),
tag: "function"
},
HighlightedRange {
range: [41; 45),
tag: "macro"
},
HighlightedRange {
range: [48; 51),
tag: "keyword"
},
HighlightedRange {
range: [56; 58),
tag: "literal"
},
HighlightedRange {
range: [48; 51),
tag: "keyword"
},
HighlightedRange {
range: [52; 53),
tag: "function"
},
HighlightedRange {
range: [56; 58),
tag: "literal"
},
HighlightedRange {
range: [60; 61),
tag: "text"
}
]

View File

@ -1,38 +0,0 @@
---
created: "2019-05-23T22:23:35.215905447Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/references.rs
expression: "&source_change"
---
Some(
SourceChange {
label: "rename",
source_file_edits: [
SourceFileEdit {
file_id: FileId(
2,
),
edit: TextEdit {
atoms: [
AtomTextEdit {
delete: [4; 7),
insert: "foo2",
},
],
},
},
],
file_system_edits: [
MoveFile {
src: FileId(
3,
),
dst_source_root: SourceRootId(
0,
),
dst_path: "bar/foo2.rs",
},
],
cursor_position: None,
},
)

View File

@ -1,38 +0,0 @@
---
created: "2019-05-23T22:23:35.213830371Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/references.rs
expression: "&source_change"
---
Some(
SourceChange {
label: "rename",
source_file_edits: [
SourceFileEdit {
file_id: FileId(
1,
),
edit: TextEdit {
atoms: [
AtomTextEdit {
delete: [4; 7),
insert: "foo2",
},
],
},
},
],
file_system_edits: [
MoveFile {
src: FileId(
2,
),
dst_source_root: SourceRootId(
0,
),
dst_path: "foo2/mod.rs",
},
],
cursor_position: None,
},
)

View File

@ -1,24 +0,0 @@
---
created: "2019-05-23T22:23:35.217100106Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/runnables.rs
expression: "&runnables"
---
[
Runnable {
range: [1; 21),
kind: Bin,
},
Runnable {
range: [22; 46),
kind: Test {
name: "test_foo",
},
},
Runnable {
range: [47; 81),
kind: Test {
name: "test_foo",
},
},
]

View File

@ -1,20 +0,0 @@
---
created: "2019-05-23T22:23:35.219258850Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/runnables.rs
expression: "&runnables"
---
[
Runnable {
range: [1; 59),
kind: TestMod {
path: "test_mod",
},
},
Runnable {
range: [28; 57),
kind: Test {
name: "test_foo1",
},
},
]

View File

@ -1,20 +0,0 @@
---
created: "2019-05-23T22:23:35.219671663Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/runnables.rs
expression: "&runnables"
---
[
Runnable {
range: [41; 115),
kind: TestMod {
path: "foo::bar::test_mod",
},
},
Runnable {
range: [68; 105),
kind: Test {
name: "test_foo1",
},
},
]

View File

@ -1,20 +0,0 @@
---
created: "2019-05-23T22:23:35.224315047Z"
creator: insta@0.8.1
source: crates/ra_ide_api/src/runnables.rs
expression: "&runnables"
---
[
Runnable {
range: [23; 85),
kind: TestMod {
path: "foo::test_mod",
},
},
Runnable {
range: [46; 79),
kind: Test {
name: "test_foo1",
},
},
]