add more completion about "impl"
diff --git a/crates/ide-completion/src/completions/item_list.rs b/crates/ide-completion/src/completions/item_list.rs
index 4ae00cc..30ffeff 100644
--- a/crates/ide-completion/src/completions/item_list.rs
+++ b/crates/ide-completion/src/completions/item_list.rs
@@ -114,6 +114,8 @@
             add_keyword("trait", "trait $1 {\n    $0\n}");
             if no_vis_qualifiers {
                 add_keyword("impl", "impl $1 {\n    $0\n}");
+                add_keyword("impl for", "impl $1 for $2 {\n    $0\n}");
+                add_keyword("impl<> for <>", "impl<$4> $1 for $2<$3> {\n    $0\n}");
             }
         }
 
@@ -144,6 +146,8 @@
         add_keyword("use", "use $0");
         if no_vis_qualifiers {
             add_keyword("impl", "impl $1 {\n    $0\n}");
+            add_keyword("impl for", "impl $1 for $2 {\n    $0\n}");
+            add_keyword("impl<> for <>", "impl<$4> $1 for $2<$3> {\n    $0\n}");
         }
     }
 
diff --git a/crates/ide-completion/src/completions/keyword.rs b/crates/ide-completion/src/completions/keyword.rs
index 14b0d54..d0ba910 100644
--- a/crates/ide-completion/src/completions/keyword.rs
+++ b/crates/ide-completion/src/completions/keyword.rs
@@ -56,6 +56,8 @@
                 kw extern
                 kw fn
                 kw impl
+                kw impl for
+                kw impl<> for <>
                 kw trait
             "#]],
         );
diff --git a/crates/ide-completion/src/tests/expression.rs b/crates/ide-completion/src/tests/expression.rs
index 22d42ba..5314be3 100644
--- a/crates/ide-completion/src/tests/expression.rs
+++ b/crates/ide-completion/src/tests/expression.rs
@@ -171,6 +171,8 @@
             kw if
             kw if let
             kw impl
+            kw impl for
+            kw impl<> for <>
             kw let
             kw letm
             kw loop
@@ -236,8 +238,8 @@
     }
 "#,
         expect![[r#"
-            fn foo()  fn()
-            bt u32     u32
+            fn foo()    fn()
+            bt u32       u32
             kw async
             kw const
             kw crate::
@@ -249,6 +251,8 @@
             kw if
             kw if let
             kw impl
+            kw impl for
+            kw impl<> for <>
             kw let
             kw letm
             kw loop
@@ -285,8 +289,8 @@
     }
 "#,
         expect![[r#"
-            fn foo()  fn()
-            bt u32     u32
+            fn foo()    fn()
+            bt u32       u32
             kw async
             kw const
             kw crate::
@@ -300,6 +304,8 @@
             kw if
             kw if let
             kw impl
+            kw impl for
+            kw impl<> for <>
             kw let
             kw letm
             kw loop
@@ -360,8 +366,8 @@
     check(
         r"fn my() { loop { $0 } }",
         expect![[r#"
-            fn my()   fn()
-            bt u32     u32
+            fn my()     fn()
+            bt u32       u32
             kw async
             kw break
             kw const
@@ -375,6 +381,8 @@
             kw if
             kw if let
             kw impl
+            kw impl for
+            kw impl<> for <>
             kw let
             kw letm
             kw loop
@@ -946,8 +954,8 @@
 fn foo() { if foo {} $0 }
 "#,
         expect![[r#"
-            fn foo()  fn()
-            bt u32     u32
+            fn foo()    fn()
+            bt u32       u32
             kw async
             kw const
             kw crate::
@@ -961,6 +969,8 @@
             kw if
             kw if let
             kw impl
+            kw impl for
+            kw impl<> for <>
             kw let
             kw letm
             kw loop
@@ -988,8 +998,8 @@
 fn foo() { if foo {} el$0 }
 "#,
         expect![[r#"
-            fn foo()  fn()
-            bt u32     u32
+            fn foo()    fn()
+            bt u32       u32
             kw async
             kw const
             kw crate::
@@ -1003,6 +1013,8 @@
             kw if
             kw if let
             kw impl
+            kw impl for
+            kw impl<> for <>
             kw let
             kw letm
             kw loop
@@ -1080,8 +1092,8 @@
 fn foo() { if foo {} $0 let x = 92; }
 "#,
         expect![[r#"
-            fn foo()  fn()
-            bt u32     u32
+            fn foo()    fn()
+            bt u32       u32
             kw async
             kw const
             kw crate::
@@ -1095,6 +1107,8 @@
             kw if
             kw if let
             kw impl
+            kw impl for
+            kw impl<> for <>
             kw let
             kw letm
             kw loop
@@ -1122,8 +1136,8 @@
 fn foo() { if foo {} el$0 let x = 92; }
 "#,
         expect![[r#"
-            fn foo()  fn()
-            bt u32     u32
+            fn foo()    fn()
+            bt u32       u32
             kw async
             kw const
             kw crate::
@@ -1137,6 +1151,8 @@
             kw if
             kw if let
             kw impl
+            kw impl for
+            kw impl<> for <>
             kw let
             kw letm
             kw loop
@@ -1164,8 +1180,8 @@
 fn foo() { if foo {} el$0 { let x = 92; } }
 "#,
         expect![[r#"
-            fn foo()  fn()
-            bt u32     u32
+            fn foo()    fn()
+            bt u32       u32
             kw async
             kw const
             kw crate::
@@ -1179,6 +1195,8 @@
             kw if
             kw if let
             kw impl
+            kw impl for
+            kw impl<> for <>
             kw let
             kw letm
             kw loop
@@ -1217,9 +1235,9 @@
 pub struct UnstableThisShouldNotBeListed;
 "#,
         expect![[r#"
-            fn main() fn()
+            fn main()   fn()
             md std
-            bt u32     u32
+            bt u32       u32
             kw async
             kw const
             kw crate::
@@ -1231,6 +1249,8 @@
             kw if
             kw if let
             kw impl
+            kw impl for
+            kw impl<> for <>
             kw let
             kw letm
             kw loop
@@ -1285,6 +1305,8 @@
             kw if
             kw if let
             kw impl
+            kw impl for
+            kw impl<> for <>
             kw let
             kw letm
             kw loop
@@ -1529,6 +1551,8 @@
             kw if
             kw if let
             kw impl
+            kw impl for
+            kw impl<> for <>
             kw let
             kw letm
             kw loop
@@ -1986,6 +2010,8 @@
             kw if
             kw if let
             kw impl
+            kw impl for
+            kw impl<> for <>
             kw let
             kw letm
             kw loop
@@ -2044,9 +2070,9 @@
 }
     "#,
         expect![[r#"
-            fn foo()  fn()
+            fn foo()    fn()
             md proc_macros
-            bt u32     u32
+            bt u32       u32
             kw async
             kw const
             kw crate::
@@ -2058,6 +2084,8 @@
             kw if
             kw if let
             kw impl
+            kw impl for
+            kw impl<> for <>
             kw let
             kw letm
             kw loop
diff --git a/crates/ide-completion/src/tests/item.rs b/crates/ide-completion/src/tests/item.rs
index be2c37d..a2d2cf3 100644
--- a/crates/ide-completion/src/tests/item.rs
+++ b/crates/ide-completion/src/tests/item.rs
@@ -284,6 +284,8 @@
             kw if
             kw if let
             kw impl
+            kw impl for
+            kw impl<> for <>
             kw let
             kw letm
             kw loop
diff --git a/crates/ide-completion/src/tests/item_list.rs b/crates/ide-completion/src/tests/item_list.rs
index 841c421..ee77845 100644
--- a/crates/ide-completion/src/tests/item_list.rs
+++ b/crates/ide-completion/src/tests/item_list.rs
@@ -16,6 +16,8 @@
             kw extern
             kw fn
             kw impl
+            kw impl for
+            kw impl<> for <>
             kw mod
             kw pub
             kw pub(crate)
@@ -50,6 +52,8 @@
             kw extern
             kw fn
             kw impl
+            kw impl for
+            kw impl<> for <>
             kw mod
             kw pub
             kw pub(crate)
@@ -83,6 +87,8 @@
             kw extern
             kw fn
             kw impl
+            kw impl for
+            kw impl<> for <>
             kw mod
             kw pub
             kw pub(crate)
@@ -122,6 +128,8 @@
             kw extern
             kw fn
             kw impl
+            kw impl for
+            kw impl<> for <>
             kw trait
         "#]],
     );
@@ -385,6 +393,8 @@
             kw extern
             kw fn
             kw impl
+            kw impl for
+            kw impl<> for <>
             kw mod
             kw pub
             kw pub(crate)
diff --git a/crates/ide-completion/src/tests/special.rs b/crates/ide-completion/src/tests/special.rs
index 70caeac..ca579b8 100644
--- a/crates/ide-completion/src/tests/special.rs
+++ b/crates/ide-completion/src/tests/special.rs
@@ -1008,6 +1008,8 @@
             kw if
             kw if let
             kw impl
+            kw impl for
+            kw impl<> for <>
             kw let
             kw letm
             kw loop
@@ -1059,6 +1061,8 @@
             kw if
             kw if let
             kw impl
+            kw impl for
+            kw impl<> for <>
             kw let
             kw letm
             kw loop
@@ -1184,6 +1188,8 @@
             kw if
             kw if let
             kw impl
+            kw impl for
+            kw impl<> for <>
             kw let
             kw letm
             kw loop
@@ -1428,8 +1434,8 @@
 "#,
         Some('_'),
         expect![[r#"
-            fn foo()  fn()
-            bt u32     u32
+            fn foo()    fn()
+            bt u32       u32
             kw async
             kw const
             kw crate::
@@ -1441,6 +1447,8 @@
             kw if
             kw if let
             kw impl
+            kw impl for
+            kw impl<> for <>
             kw let
             kw letm
             kw loop