diff options
| author | bors <bors@rust-lang.org> | 2024-08-13 06:24:19 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2024-08-13 06:24:19 +0000 |
| commit | 84ac708b4587f9e543406056f325d90129e65cc2 (patch) | |
| tree | c13ea194b9c7455e0e1b6fe3eb2eaf66f7f3ec73 | |
| parent | 0a336b3934913793639599ad80777881070c5d7f (diff) | |
| parent | 81561ff168e7357dfc03208be51fb4cbf3e3088c (diff) | |
| download | rust-84ac708b4587f9e543406056f325d90129e65cc2.tar.gz rust-84ac708b4587f9e543406056f325d90129e65cc2.zip | |
Auto merge of #17867 - ShoyuVanilla:issue-17854, r=Veykril
fix: Trailing excess comma in "Convert to named struct" assist Fixes #17854
| -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 } + +"#, + ); + } } |
