mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-11-10 07:04:22 +00:00
Auto merge of #18041 - roife:fix-issue-17631, r=Veykril
feat: better name suggestions for fn fix #17631. Better name suggestions for fn-calls / method-calls in the form of `from()`, `from_xxx()`, `into()`, etc.
This commit is contained in:
commit
e35227d186
1 changed files with 95 additions and 1 deletions
|
@ -18,7 +18,9 @@ const USELESS_TRAITS: &[&str] = &["Send", "Sync", "Copy", "Clone", "Eq", "Partia
|
|||
///
|
||||
/// **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",
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue