diff options
| author | Shoyu Vanilla <modulo641@gmail.com> | 2024-08-12 23:36:28 +0900 |
|---|---|---|
| committer | Shoyu Vanilla <modulo641@gmail.com> | 2024-08-12 23:36:28 +0900 |
| commit | 81561ff168e7357dfc03208be51fb4cbf3e3088c (patch) | |
| tree | 886aa694de0a4011d58da4d582e4ef16a9989e5b | |
| parent | e66f3db9fa890fa6eb85ff5d55ff837455f81124 (diff) | |
| download | rust-81561ff168e7357dfc03208be51fb4cbf3e3088c.tar.gz rust-81561ff168e7357dfc03208be51fb4cbf3e3088c.zip | |
fix: Trailing excess comma in "Convert to named struct" assist
| -rw-r--r-- | src/tools/rust-analyzer/crates/ide-assists/src/handlers/convert_tuple_struct_to_named_struct.rs | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/src/tools/rust-analyzer/crates/ide-assists/src/handlers/convert_tuple_struct_to_named_struct.rs b/src/tools/rust-analyzer/crates/ide-assists/src/handlers/convert_tuple_struct_to_named_struct.rs index 44f31dcb849..c72bd411d64 100644 --- a/src/tools/rust-analyzer/crates/ide-assists/src/handlers/convert_tuple_struct_to_named_struct.rs +++ b/src/tools/rust-analyzer/crates/ide-assists/src/handlers/convert_tuple_struct_to_named_struct.rs @@ -2,7 +2,7 @@ use either::Either; use ide_db::defs::{Definition, NameRefClass}; use syntax::{ ast::{self, AstNode, HasGenericParams, HasVisibility}, - match_ast, SyntaxNode, + match_ast, SyntaxKind, SyntaxNode, }; use crate::{assist_context::SourceChangeBuilder, AssistContext, AssistId, AssistKind, Assists}; @@ -100,7 +100,9 @@ fn edit_struct_def( ast::make::tokens::single_newline().text(), ); edit.insert(tuple_fields_text_range.start(), w.syntax().text()); - edit.insert(tuple_fields_text_range.start(), ","); + if !w.syntax().last_token().is_some_and(|t| t.kind() == SyntaxKind::COMMA) { + edit.insert(tuple_fields_text_range.start(), ","); + } edit.insert( tuple_fields_text_range.start(), ast::make::tokens::single_newline().text(), @@ -882,4 +884,27 @@ fn f() { "#, ); } + + #[test] + fn where_clause_with_trailing_comma() { + check_assist( + convert_tuple_struct_to_named_struct, + r#" +trait Foo {} + +struct Bar$0<T>(pub T) +where + T: Foo,; +"#, + r#" +trait Foo {} + +struct Bar<T> +where + T: Foo, +{ pub field1: T } + +"#, + ); + } } |
