feat: better name suggestions for fn

This commit is contained in:
roife 2024-09-04 03:29:56 +08:00
parent b7138a816d
commit e1653b6d5e

View File

@ -18,7 +18,9 @@
///
/// **NOTE**: they all must be snake lower case
const USELESS_NAMES: &[&str] =
&["new", "default", "option", "some", "none", "ok", "err", "str", "string"];
&["new", "default", "option", "some", "none", "ok", "err", "str", "string", "from", "into"];
const USELESS_NAME_PREFIXES: &[&str] = &["from_", "with_", "into_"];
/// Generic types replaced by their first argument
///
@ -189,6 +191,10 @@ fn normalize(name: &str) -> Option<String> {
return None;
}
if USELESS_NAME_PREFIXES.iter().any(|prefix| name.starts_with(prefix)) {
return None;
}
if !is_valid_name(&name) {
return None;
}
@ -831,4 +837,92 @@ fn foo<T>(some_struct: S<T>) { $0some_struct.some_field$0 }
"some_field",
);
}
#[test]
fn from_and_to_func() {
check(
r#"
//- minicore: from
struct Foo;
struct Bar;
impl From<Foo> for Bar {
fn from(_: Foo) -> Self {
Bar;
}
}
fn f(_: Bar) {}
fn main() {
let foo = Foo {};
f($0Bar::from(foo)$0);
}
"#,
"bar",
);
check(
r#"
//- minicore: from
struct Foo;
struct Bar;
impl From<Foo> for Bar {
fn from(_: Foo) -> Self {
Bar;
}
}
fn f(_: Bar) {}
fn main() {
let foo = Foo {};
f($0Into::<Bar>::into(foo)$0);
}
"#,
"bar",
);
}
#[test]
fn useless_name_prefix() {
check(
r#"
struct Foo;
struct Bar;
impl Bar {
fn from_foo(_: Foo) -> Self {
Foo {}
}
}
fn main() {
let foo = Foo {};
let _ = $0Bar::from_foo(foo)$0;
}
"#,
"bar",
);
check(
r#"
struct Foo;
struct Bar;
impl Bar {
fn with_foo(_: Foo) -> Self {
Bar {}
}
}
fn main() {
let foo = Foo {};
let _ = $0Bar::with_foo(foo)$0;
}
"#,
"bar",
);
}
}