diff options
| author | bors <bors@rust-lang.org> | 2023-04-11 07:36:42 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-04-11 07:36:42 +0000 |
| commit | fa3db447d79aba60d3e97901b0b455d4e38efd28 (patch) | |
| tree | 869207b03e81cff4a88ab91622182151fdcb77af | |
| parent | 208a74ca5079d2f605f7dd7cd3864e355c12be22 (diff) | |
| parent | 475aa2839f3edd814369f067fc382f576dbb31de (diff) | |
| download | rust-fa3db447d79aba60d3e97901b0b455d4e38efd28.tar.gz rust-fa3db447d79aba60d3e97901b0b455d4e38efd28.zip | |
Auto merge of #14536 - ClSlaid:feat/reorder-impl-items/not-applicative-editing-assoc-items, r=Veykril
fix: restrict applicable range of `reorder-impl-trait-items` This PR should complete the need for restricting the applicable range of `reorder-impl-trait-items`. When the cursor is in the associated items of the `impl` range, the assist will be disabled. Fix: #14515 ## Showcases Note: If there is any available `code-action` (`ide-assist`) available, a lightbulb icon from `lspsaga` will show in the left. - cursor in `impl` headers  Code action is available. And it is reordering impl items.  - cursor in `impl` associated items 
| -rw-r--r-- | crates/ide-assists/src/handlers/reorder_impl_items.rs | 41 | ||||
| -rw-r--r-- | crates/ide-assists/src/tests/generated.rs | 2 |
2 files changed, 39 insertions, 4 deletions
diff --git a/crates/ide-assists/src/handlers/reorder_impl_items.rs b/crates/ide-assists/src/handlers/reorder_impl_items.rs index 208c3e109dd..af96950761e 100644 --- a/crates/ide-assists/src/handlers/reorder_impl_items.rs +++ b/crates/ide-assists/src/handlers/reorder_impl_items.rs @@ -21,7 +21,7 @@ use crate::{AssistContext, AssistId, AssistKind, Assists}; // } // // struct Bar; -// $0impl Foo for Bar { +// $0impl Foo for Bar$0 { // const B: u8 = 17; // fn c() {} // type A = String; @@ -45,6 +45,16 @@ use crate::{AssistContext, AssistId, AssistKind, Assists}; pub(crate) fn reorder_impl_items(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option<()> { let impl_ast = ctx.find_node_at_offset::<ast::Impl>()?; let items = impl_ast.assoc_item_list()?; + + // restrict the range + // if cursor is in assoc_items, abort + let assoc_range = items.syntax().text_range(); + let cursor_position = ctx.offset(); + if assoc_range.contains_inclusive(cursor_position) { + cov_mark::hit!(not_applicable_editing_assoc_items); + return None; + } + let assoc_items = items.assoc_items().collect::<Vec<_>>(); let path = impl_ast @@ -264,9 +274,9 @@ trait Bar { } struct Foo; -impl Bar for Foo { +$0impl Bar for Foo { type Fooo = (); - type Foo = ();$0 + type Foo = (); }"#, r#" trait Bar { @@ -281,4 +291,29 @@ impl Bar for Foo { }"#, ) } + + #[test] + fn not_applicable_editing_assoc_items() { + cov_mark::check!(not_applicable_editing_assoc_items); + check_assist_not_applicable( + reorder_impl_items, + r#" +trait Bar { + type T; + const C: (); + fn a() {} + fn z() {} + fn b() {} +} +struct Foo; +impl Bar for Foo { + type T = ();$0 + const C: () = (); + fn z() {} + fn a() {} + fn b() {} +} + "#, + ) + } } diff --git a/crates/ide-assists/src/tests/generated.rs b/crates/ide-assists/src/tests/generated.rs index f093dfddfae..0096254ecb7 100644 --- a/crates/ide-assists/src/tests/generated.rs +++ b/crates/ide-assists/src/tests/generated.rs @@ -2141,7 +2141,7 @@ trait Foo { } struct Bar; -$0impl Foo for Bar { +$0impl Foo for Bar$0 { const B: u8 = 17; fn c() {} type A = String; |
