mirror of
https://github.com/rust-lang/rust-analyzer
synced 2025-01-28 04:45:05 +00:00
Macro tests
This commit is contained in:
parent
03ca33406e
commit
216e093f90
2 changed files with 69 additions and 118 deletions
|
@ -15,130 +15,27 @@ pub(super) fn complete_macro_in_item_position(acc: &mut Completions, ctx: &Compl
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use insta::assert_debug_snapshot;
|
use expect::{expect, Expect};
|
||||||
|
|
||||||
use crate::completion::{test_utils::do_completion, CompletionItem, CompletionKind};
|
use crate::completion::{test_utils::completion_list, CompletionKind};
|
||||||
|
|
||||||
fn do_reference_completion(code: &str) -> Vec<CompletionItem> {
|
fn check(ra_fixture: &str, expect: Expect) {
|
||||||
do_completion(code, CompletionKind::Reference)
|
let actual = completion_list(ra_fixture, CompletionKind::Reference);
|
||||||
|
expect.assert_eq(&actual)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn completes_macros_as_item() {
|
fn completes_macros_as_item() {
|
||||||
assert_debug_snapshot!(
|
check(
|
||||||
do_reference_completion(
|
r#"
|
||||||
"
|
macro_rules! foo { () => {} }
|
||||||
//- /main.rs
|
fn foo() {}
|
||||||
macro_rules! foo {
|
|
||||||
() => {}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn foo() {}
|
<|>
|
||||||
|
"#,
|
||||||
<|>
|
expect![[r#"
|
||||||
"
|
ma foo!(…) macro_rules! foo
|
||||||
),
|
"#]],
|
||||||
@r###"
|
)
|
||||||
[
|
|
||||||
CompletionItem {
|
|
||||||
label: "foo!(…)",
|
|
||||||
source_range: 48..48,
|
|
||||||
delete: 48..48,
|
|
||||||
insert: "foo!($0)",
|
|
||||||
kind: Macro,
|
|
||||||
detail: "macro_rules! foo",
|
|
||||||
},
|
|
||||||
]
|
|
||||||
"###
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn completes_vec_macros_with_square_brackets() {
|
|
||||||
assert_debug_snapshot!(
|
|
||||||
do_reference_completion(
|
|
||||||
"
|
|
||||||
//- /main.rs
|
|
||||||
/// Creates a [`Vec`] containing the arguments.
|
|
||||||
///
|
|
||||||
/// - Create a [`Vec`] containing a given list of elements:
|
|
||||||
///
|
|
||||||
/// ```
|
|
||||||
/// let v = vec![1, 2, 3];
|
|
||||||
/// assert_eq!(v[0], 1);
|
|
||||||
/// assert_eq!(v[1], 2);
|
|
||||||
/// assert_eq!(v[2], 3);
|
|
||||||
/// ```
|
|
||||||
macro_rules! vec {
|
|
||||||
() => {}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn foo() {}
|
|
||||||
|
|
||||||
<|>
|
|
||||||
"
|
|
||||||
),
|
|
||||||
@r###"
|
|
||||||
[
|
|
||||||
CompletionItem {
|
|
||||||
label: "vec![…]",
|
|
||||||
source_range: 282..282,
|
|
||||||
delete: 282..282,
|
|
||||||
insert: "vec![$0]",
|
|
||||||
kind: Macro,
|
|
||||||
detail: "macro_rules! vec",
|
|
||||||
documentation: Documentation(
|
|
||||||
"Creates a [`Vec`] containing the arguments.\n\n- Create a [`Vec`] containing a given list of elements:\n\n```\nlet v = vec![1, 2, 3];\nassert_eq!(v[0], 1);\nassert_eq!(v[1], 2);\nassert_eq!(v[2], 3);\n```",
|
|
||||||
),
|
|
||||||
},
|
|
||||||
]
|
|
||||||
"###
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn completes_macros_braces_guessing() {
|
|
||||||
assert_debug_snapshot!(
|
|
||||||
do_reference_completion(
|
|
||||||
"
|
|
||||||
//- /main.rs
|
|
||||||
/// Foo
|
|
||||||
///
|
|
||||||
/// Not call `fooo!()` `fooo!()`, or `_foo![]` `_foo![]`.
|
|
||||||
/// Call as `let _=foo! { hello world };`
|
|
||||||
macro_rules! foo {
|
|
||||||
() => {}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
<|>
|
|
||||||
}
|
|
||||||
"
|
|
||||||
),
|
|
||||||
@r###"
|
|
||||||
[
|
|
||||||
CompletionItem {
|
|
||||||
label: "foo! {…}",
|
|
||||||
source_range: 164..164,
|
|
||||||
delete: 164..164,
|
|
||||||
insert: "foo! {$0}",
|
|
||||||
kind: Macro,
|
|
||||||
detail: "macro_rules! foo",
|
|
||||||
documentation: Documentation(
|
|
||||||
"Foo\n\nNot call `fooo!()` `fooo!()`, or `_foo![]` `_foo![]`.\nCall as `let _=foo! { hello world };`",
|
|
||||||
),
|
|
||||||
},
|
|
||||||
CompletionItem {
|
|
||||||
label: "main()",
|
|
||||||
source_range: 164..164,
|
|
||||||
delete: 164..164,
|
|
||||||
insert: "main()$0",
|
|
||||||
kind: Function,
|
|
||||||
lookup: "main",
|
|
||||||
detail: "fn main()",
|
|
||||||
},
|
|
||||||
]
|
|
||||||
"###
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -174,6 +174,7 @@ impl Completions {
|
||||||
builder
|
builder
|
||||||
.insert_snippet(cap, format!("{}!{}$0{}", name, bra, ket))
|
.insert_snippet(cap, format!("{}!{}$0{}", name, bra, ket))
|
||||||
.label(format!("{}!{}…{}", name, bra, ket))
|
.label(format!("{}!{}…{}", name, bra, ket))
|
||||||
|
.lookup_by(format!("{}!", name))
|
||||||
}
|
}
|
||||||
None if needs_bang => builder.insert_text(format!("{}!", name)),
|
None if needs_bang => builder.insert_text(format!("{}!", name)),
|
||||||
_ => {
|
_ => {
|
||||||
|
@ -1079,4 +1080,57 @@ fn go(world: &WorldSnapshot) { go(w<|>) }
|
||||||
"#]],
|
"#]],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn guesses_macro_braces() {
|
||||||
|
check_edit(
|
||||||
|
"vec!",
|
||||||
|
r#"
|
||||||
|
/// Creates a [`Vec`] containing the arguments.
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// let v = vec![1, 2, 3];
|
||||||
|
/// assert_eq!(v[0], 1);
|
||||||
|
/// assert_eq!(v[1], 2);
|
||||||
|
/// assert_eq!(v[2], 3);
|
||||||
|
/// ```
|
||||||
|
macro_rules! vec { () => {} }
|
||||||
|
|
||||||
|
fn fn main() { v<|> }
|
||||||
|
"#,
|
||||||
|
r#"
|
||||||
|
/// Creates a [`Vec`] containing the arguments.
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// let v = vec![1, 2, 3];
|
||||||
|
/// assert_eq!(v[0], 1);
|
||||||
|
/// assert_eq!(v[1], 2);
|
||||||
|
/// assert_eq!(v[2], 3);
|
||||||
|
/// ```
|
||||||
|
macro_rules! vec { () => {} }
|
||||||
|
|
||||||
|
fn fn main() { vec![$0] }
|
||||||
|
"#,
|
||||||
|
);
|
||||||
|
|
||||||
|
check_edit(
|
||||||
|
"foo!",
|
||||||
|
r#"
|
||||||
|
/// Foo
|
||||||
|
///
|
||||||
|
/// Don't call `fooo!()` `fooo!()`, or `_foo![]` `_foo![]`,
|
||||||
|
/// call as `let _=foo! { hello world };`
|
||||||
|
macro_rules! foo { () => {} }
|
||||||
|
fn main() { <|> }
|
||||||
|
"#,
|
||||||
|
r#"
|
||||||
|
/// Foo
|
||||||
|
///
|
||||||
|
/// Don't call `fooo!()` `fooo!()`, or `_foo![]` `_foo![]`,
|
||||||
|
/// call as `let _=foo! { hello world };`
|
||||||
|
macro_rules! foo { () => {} }
|
||||||
|
fn main() { foo! {$0} }
|
||||||
|
"#,
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue