mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-02 22:54:58 +00:00
Merge #9290
9290: internal: enforce no #[ignore] and no #[should_panic] r=matklad a=matklad
bors r+
🤖
Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
This commit is contained in:
commit
79703efc7f
7 changed files with 60 additions and 85 deletions
|
@ -1130,15 +1130,15 @@ fn foo<'foobar>(_: &'foobar ()) {
|
|||
}
|
||||
|
||||
#[test]
|
||||
#[ignore] // requires the HIR to somehow track these hrtb lifetimes
|
||||
fn goto_lifetime_hrtb() {
|
||||
check(
|
||||
// FIXME: requires the HIR to somehow track these hrtb lifetimes
|
||||
check_unresolved(
|
||||
r#"trait Foo<T> {}
|
||||
fn foo<T>() where for<'a> T: Foo<&'a$0 (u8, u16)>, {}
|
||||
//^^
|
||||
"#,
|
||||
);
|
||||
check(
|
||||
check_unresolved(
|
||||
r#"trait Foo<T> {}
|
||||
fn foo<T>() where for<'a$0> T: Foo<&'a (u8, u16)>, {}
|
||||
//^^
|
||||
|
@ -1147,9 +1147,9 @@ fn foo<T>() where for<'a$0> T: Foo<&'a (u8, u16)>, {}
|
|||
}
|
||||
|
||||
#[test]
|
||||
#[ignore] // requires ForTypes to be implemented
|
||||
fn goto_lifetime_hrtb_for_type() {
|
||||
check(
|
||||
// FIXME: requires ForTypes to be implemented
|
||||
check_unresolved(
|
||||
r#"trait Foo<T> {}
|
||||
fn foo<T>() where T: for<'a> Foo<&'a$0 (u8, u16)>, {}
|
||||
//^^
|
||||
|
|
|
@ -361,8 +361,6 @@ pub struct Foo { pub bar: () }
|
|||
}
|
||||
|
||||
#[test]
|
||||
#[ignore]
|
||||
// FIXME reenable this test when `Semantics::resolve_record_field` works with union fields
|
||||
fn fix_visibility_of_union_field() {
|
||||
check_assist(
|
||||
fix_visibility,
|
||||
|
|
|
@ -811,9 +811,8 @@ fn bar(baz: Baz::Bof) ${0:-> ()} {
|
|||
}
|
||||
|
||||
#[test]
|
||||
#[ignore]
|
||||
// FIXME fix printing the generics of a `Ty` to make this test pass
|
||||
fn add_function_with_generic_arg() {
|
||||
// FIXME: This is wrong, generated `bar` should include generic parameter.
|
||||
check_assist(
|
||||
generate_function,
|
||||
r"
|
||||
|
@ -826,7 +825,7 @@ fn foo<T>(t: T) {
|
|||
bar(t)
|
||||
}
|
||||
|
||||
fn bar<T>(t: T) ${0:-> ()} {
|
||||
fn bar(t: T) ${0:-> ()} {
|
||||
todo!()
|
||||
}
|
||||
",
|
||||
|
@ -834,9 +833,8 @@ fn bar<T>(t: T) ${0:-> ()} {
|
|||
}
|
||||
|
||||
#[test]
|
||||
#[ignore]
|
||||
// FIXME Fix function type printing to make this test pass
|
||||
fn add_function_with_fn_arg() {
|
||||
// FIXME: The argument in `bar` is wrong.
|
||||
check_assist(
|
||||
generate_function,
|
||||
r"
|
||||
|
@ -857,7 +855,7 @@ fn foo() {
|
|||
bar(Baz::new);
|
||||
}
|
||||
|
||||
fn bar(arg: fn() -> Baz) ${0:-> ()} {
|
||||
fn bar(new: fn) ${0:-> ()} {
|
||||
todo!()
|
||||
}
|
||||
",
|
||||
|
@ -865,9 +863,8 @@ fn bar(arg: fn() -> Baz) ${0:-> ()} {
|
|||
}
|
||||
|
||||
#[test]
|
||||
#[ignore]
|
||||
// FIXME Fix closure type printing to make this test pass
|
||||
fn add_function_with_closure_arg() {
|
||||
// FIXME: The argument in `bar` is wrong.
|
||||
check_assist(
|
||||
generate_function,
|
||||
r"
|
||||
|
@ -882,7 +879,7 @@ fn foo() {
|
|||
bar(closure)
|
||||
}
|
||||
|
||||
fn bar(closure: impl Fn(i64) -> i64) ${0:-> ()} {
|
||||
fn bar(closure: ()) ${0:-> ()} {
|
||||
todo!()
|
||||
}
|
||||
",
|
||||
|
@ -986,13 +983,10 @@ fn foo() {
|
|||
}
|
||||
|
||||
#[test]
|
||||
#[ignore]
|
||||
// Ignored until local imports are supported.
|
||||
// See https://github.com/rust-analyzer/rust-analyzer/issues/1165
|
||||
fn qualified_path_uses_correct_scope() {
|
||||
check_assist(
|
||||
generate_function,
|
||||
"
|
||||
r#"
|
||||
mod foo {
|
||||
pub struct Foo;
|
||||
}
|
||||
|
@ -1001,8 +995,8 @@ fn bar() {
|
|||
let foo = Foo;
|
||||
baz$0(foo)
|
||||
}
|
||||
",
|
||||
"
|
||||
"#,
|
||||
r#"
|
||||
mod foo {
|
||||
pub struct Foo;
|
||||
}
|
||||
|
@ -1015,7 +1009,7 @@ fn bar() {
|
|||
fn baz(foo: foo::Foo) ${0:-> ()} {
|
||||
todo!()
|
||||
}
|
||||
",
|
||||
"#,
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -1141,40 +1135,29 @@ fn bar() {}
|
|||
// The assist is only active if the cursor is on an unresolved path,
|
||||
// but the assist should only be offered if the path is a function call.
|
||||
generate_function,
|
||||
r"
|
||||
r#"
|
||||
fn foo() {
|
||||
bar(b$0az);
|
||||
}
|
||||
|
||||
fn bar(baz: ()) {}
|
||||
",
|
||||
"#,
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[ignore]
|
||||
fn create_method_with_no_args() {
|
||||
check_assist(
|
||||
// FIXME: This is wrong, this should just work.
|
||||
check_assist_not_applicable(
|
||||
generate_function,
|
||||
r"
|
||||
r#"
|
||||
struct Foo;
|
||||
impl Foo {
|
||||
fn foo(&self) {
|
||||
self.bar()$0;
|
||||
}
|
||||
}
|
||||
",
|
||||
r"
|
||||
struct Foo;
|
||||
impl Foo {
|
||||
fn foo(&self) {
|
||||
self.bar();
|
||||
}
|
||||
fn bar(&self) {
|
||||
todo!();
|
||||
}
|
||||
}
|
||||
",
|
||||
"#,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -93,57 +93,20 @@ mod tests {
|
|||
}
|
||||
|
||||
#[test]
|
||||
#[ignore] // FIXME: Fixtures cant test proc-macros/derives yet as we cant specify them in fixtures
|
||||
fn empty_derive() {
|
||||
check(
|
||||
r#"#[derive($0)] struct Test;"#,
|
||||
expect![[r#"
|
||||
at Clone
|
||||
at Clone, Copy
|
||||
at Debug
|
||||
at Default
|
||||
at Hash
|
||||
at PartialEq
|
||||
at PartialEq, Eq
|
||||
at PartialEq, PartialOrd
|
||||
at PartialEq, Eq, PartialOrd, Ord
|
||||
"#]],
|
||||
);
|
||||
// FIXME: Add build-in derives to fixture.
|
||||
check(r#"#[derive($0)] struct Test;"#, expect![[r#""#]]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[ignore] // FIXME: Fixtures cant test proc-macros/derives yet as we cant specify them in fixtures
|
||||
fn derive_with_input() {
|
||||
check(
|
||||
r#"#[derive(serde::Serialize, PartialEq, $0)] struct Test;"#,
|
||||
expect![[r#"
|
||||
at Clone
|
||||
at Clone, Copy
|
||||
at Debug
|
||||
at Default
|
||||
at Hash
|
||||
at Eq
|
||||
at PartialOrd
|
||||
at Eq, PartialOrd, Ord
|
||||
"#]],
|
||||
)
|
||||
// FIXME: Add build-in derives to fixture.
|
||||
check(r#"#[derive(serde::Serialize, PartialEq, $0)] struct Test;"#, expect![[r#""#]])
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[ignore] // FIXME: Fixtures cant test proc-macros/derives yet as we cant specify them in fixtures
|
||||
fn derive_with_input2() {
|
||||
check(
|
||||
r#"#[derive($0 serde::Serialize, PartialEq)] struct Test;"#,
|
||||
expect![[r#"
|
||||
at Clone
|
||||
at Clone, Copy
|
||||
at Debug
|
||||
at Default
|
||||
at Hash
|
||||
at Eq
|
||||
at PartialOrd
|
||||
at Eq, PartialOrd, Ord
|
||||
"#]],
|
||||
)
|
||||
// FIXME: Add build-in derives to fixture.
|
||||
check(r#"#[derive($0 serde::Serialize, PartialEq)] struct Test;"#, expect![[r#""#]])
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,7 +21,7 @@ SOURCE_FILE@0..60
|
|||
PATH@15..21
|
||||
PATH_SEGMENT@15..21
|
||||
NAME_REF@15..21
|
||||
IDENT@15..21 "ignore"
|
||||
IDENT@15..21 "Ignore"
|
||||
R_BRACK@21..22 "]"
|
||||
WHITESPACE@22..23 "\n"
|
||||
FN_KW@23..25 "fn"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#[cfg(test)]
|
||||
#[ignore]
|
||||
#[Ignore]
|
||||
fn foo() {}
|
||||
|
||||
#[path = "a.rs"]
|
||||
|
|
|
@ -89,6 +89,7 @@ fn rust_files_are_tidy() {
|
|||
let text = read_file(&path).unwrap();
|
||||
check_todo(&path, &text);
|
||||
check_dbg(&path, &text);
|
||||
check_test_attrs(&path, &text);
|
||||
check_trailing_ws(&path, &text);
|
||||
deny_clippy(&path, &text);
|
||||
tidy_docs.visit(&path, &text);
|
||||
|
@ -334,6 +335,36 @@ fn check_dbg(path: &Path, text: &str) {
|
|||
}
|
||||
}
|
||||
|
||||
fn check_test_attrs(path: &Path, text: &str) {
|
||||
let ignore_rule =
|
||||
"https://github.com/rust-analyzer/rust-analyzer/blob/master/docs/dev/style.md#ignore";
|
||||
let need_ignore: &[&str] = &[
|
||||
// Special case to run `#[ignore]` tests
|
||||
"ide/src/runnables.rs",
|
||||
// A legit test which needs to be ignored, as it takes too long to run
|
||||
// :(
|
||||
"hir_def/src/nameres/collector.rs",
|
||||
// Obviously needs ignore.
|
||||
"ide_assists/src/handlers/toggle_ignore.rs",
|
||||
// See above.
|
||||
"ide_assists/src/tests/generated.rs",
|
||||
];
|
||||
if text.contains("#[ignore") && !need_ignore.iter().any(|p| path.ends_with(p)) {
|
||||
panic!("\ndon't `#[ignore]` tests, see:\n\n {}\n\n {}\n", ignore_rule, path.display(),)
|
||||
}
|
||||
|
||||
let panic_rule =
|
||||
"https://github.com/rust-analyzer/rust-analyzer/blob/master/docs/dev/style.md#panic";
|
||||
let need_panic: &[&str] = &["test_utils/src/fixture.rs"];
|
||||
if text.contains("#[should_panic") && !need_panic.iter().any(|p| path.ends_with(p)) {
|
||||
panic!(
|
||||
"\ndon't add `#[should_panic]` tests, see:\n\n {}\n\n {}\n",
|
||||
panic_rule,
|
||||
path.display(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fn check_trailing_ws(path: &Path, text: &str) {
|
||||
if is_exclude_dir(path, &["test_data"]) {
|
||||
return;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue