@@ -18,7 +18,9 @@ const USELESS_TRAITS: &[&str] = &["Send", "Sync", "Copy", "Clone", "Eq", "Partia
18
18
///
19
19
/// **NOTE**: they all must be snake lower case
20
20
const USELESS_NAMES : & [ & str ] =
21
- & [ "new" , "default" , "option" , "some" , "none" , "ok" , "err" , "str" , "string" ] ;
21
+ & [ "new" , "default" , "option" , "some" , "none" , "ok" , "err" , "str" , "string" , "from" , "into" ] ;
22
+
23
+ const USELESS_NAME_PREFIXES : & [ & str ] = & [ "from_" , "with_" , "into_" ] ;
22
24
23
25
/// Generic types replaced by their first argument
24
26
///
@@ -189,6 +191,10 @@ fn normalize(name: &str) -> Option<String> {
189
191
return None ;
190
192
}
191
193
194
+ if USELESS_NAME_PREFIXES . iter ( ) . any ( |prefix| name. starts_with ( prefix) ) {
195
+ return None ;
196
+ }
197
+
192
198
if !is_valid_name ( & name) {
193
199
return None ;
194
200
}
@@ -831,4 +837,92 @@ fn foo<T>(some_struct: S<T>) { $0some_struct.some_field$0 }
831
837
"some_field" ,
832
838
) ;
833
839
}
840
+
841
+ #[ test]
842
+ fn from_and_to_func ( ) {
843
+ check (
844
+ r#"
845
+ //- minicore: from
846
+ struct Foo;
847
+ struct Bar;
848
+
849
+ impl From<Foo> for Bar {
850
+ fn from(_: Foo) -> Self {
851
+ Bar;
852
+ }
853
+ }
854
+
855
+ fn f(_: Bar) {}
856
+
857
+ fn main() {
858
+ let foo = Foo {};
859
+ f($0Bar::from(foo)$0);
860
+ }
861
+ "# ,
862
+ "bar" ,
863
+ ) ;
864
+
865
+ check (
866
+ r#"
867
+ //- minicore: from
868
+ struct Foo;
869
+ struct Bar;
870
+
871
+ impl From<Foo> for Bar {
872
+ fn from(_: Foo) -> Self {
873
+ Bar;
874
+ }
875
+ }
876
+
877
+ fn f(_: Bar) {}
878
+
879
+ fn main() {
880
+ let foo = Foo {};
881
+ f($0Into::<Bar>::into(foo)$0);
882
+ }
883
+ "# ,
884
+ "bar" ,
885
+ ) ;
886
+ }
887
+
888
+ #[ test]
889
+ fn useless_name_prefix ( ) {
890
+ check (
891
+ r#"
892
+ struct Foo;
893
+ struct Bar;
894
+
895
+ impl Bar {
896
+ fn from_foo(_: Foo) -> Self {
897
+ Foo {}
898
+ }
899
+ }
900
+
901
+ fn main() {
902
+ let foo = Foo {};
903
+ let _ = $0Bar::from_foo(foo)$0;
904
+ }
905
+ "# ,
906
+ "bar" ,
907
+ ) ;
908
+
909
+ check (
910
+ r#"
911
+ struct Foo;
912
+ struct Bar;
913
+
914
+ impl Bar {
915
+ fn with_foo(_: Foo) -> Self {
916
+ Bar {}
917
+ }
918
+ }
919
+
920
+ fn main() {
921
+ let foo = Foo {};
922
+ let _ = $0Bar::with_foo(foo)$0;
923
+ }
924
+ "# ,
925
+ "bar" ,
926
+ ) ;
927
+ }
834
928
}
0 commit comments