From 62230c1c60072c563e2c24db3cd84812b11e70f0 Mon Sep 17 00:00:00 2001 From: Febriananda Wida Pramudita Date: Mon, 17 Feb 2025 21:15:14 +0700 Subject: [PATCH] add more testcase --- src/expr.rs | 37 ++++++-- src/items.rs | 15 +-- src/utils.rs | 20 +++- tests/source/issue-6470/case-1.rs | 147 ++++++++++++++++++++++++++++++ tests/source/issue-6470/case-2.rs | 75 +++++++++++++++ tests/target/issue-6470/case-1.rs | 72 +++++++++++++++ tests/target/issue-6470/case-2.rs | 68 ++++++++++++++ 7 files changed, 409 insertions(+), 25 deletions(-) diff --git a/src/expr.rs b/src/expr.rs index 4b849515985..cc9d5928ade 100644 --- a/src/expr.rs +++ b/src/expr.rs @@ -6,7 +6,7 @@ use rustc_ast::token::{Delimiter, Lit, LitKind}; use rustc_ast::{ForLoopKind, MatchKind, ast, ptr, token}; use rustc_span::{BytePos, Span}; use tracing::debug; - +use tracing::field::debug; use crate::chains::rewrite_chain; use crate::closures; use crate::comment::{ @@ -30,11 +30,7 @@ use crate::spanned::Spanned; use crate::stmt; use crate::string::{StringFormat, rewrite_string}; use crate::types::{PathContext, rewrite_path}; -use crate::utils::{ - colon_spaces, contains_skip, count_newlines, filtered_str_fits, first_line_ends_with, - inner_attributes, last_line_extendable, last_line_width, mk_sp, outer_attributes, - semicolon_for_expr, unicode_str_width, wrap_str, -}; +use crate::utils::{colon_spaces, contains_skip, count_newlines, filtered_str_fits, first_line_ends_with, inner_attributes, is_absolute_decl_path, last_line_extendable, last_line_width, mk_sp, outer_attributes, semicolon_for_expr, unicode_str_width, wrap_str}; use crate::vertical::rewrite_with_alignment; use crate::visitor::FmtVisitor; @@ -1880,8 +1876,27 @@ pub(crate) fn wrap_struct_field( } } -pub(crate) fn struct_lit_field_separator(config: &Config) -> &str { - colon_spaces(config, false) +pub(crate) fn struct_lit_field_separator(config: &Config, force_space_after_colon: bool) -> &str { + colon_spaces(config, force_space_after_colon) +} + +fn extract_ast_path_from_expr(expr: &ast::Expr) -> Option<&ast::Path> { + match &expr.kind { + ast::ExprKind::Call(ptr_expr, ..) => extract_ast_path_from_expr(&*ptr_expr), + ast::ExprKind::MethodCall(box_method_call, ..) => extract_ast_path_from_expr(&*box_method_call.receiver), + ast::ExprKind::Binary(_, left_expr, ..) => extract_ast_path_from_expr(&*left_expr), + ast::ExprKind::Cast(ptr_expr, ..) => extract_ast_path_from_expr(&*ptr_expr), + ast::ExprKind::Type(ptr_expr, ..) => extract_ast_path_from_expr(&*ptr_expr), + ast::ExprKind::Field(ptr_expr, ..) => extract_ast_path_from_expr(&*ptr_expr), + ast::ExprKind::Index(ptr_expr, ..) => extract_ast_path_from_expr(&*ptr_expr), + ast::ExprKind::Range(Some(start_expr), ..) => extract_ast_path_from_expr(&*start_expr), + ast::ExprKind::Path(_, path, ..) => Some(&path), + ast::ExprKind::MacCall(mac, ..) => Some(&(*mac).path), + ast::ExprKind::Struct(ptr_struct_expr, ..) => { + Some(&(*ptr_struct_expr).path) + } + _ => None, + } } pub(crate) fn rewrite_field( @@ -1901,7 +1916,11 @@ pub(crate) fn rewrite_field( if field.is_shorthand { Ok(attrs_str + name) } else { - let mut separator = String::from(struct_lit_field_separator(context.config)); + let force_space_after_colon = match extract_ast_path_from_expr(&field.expr) { + Some(path) => is_absolute_decl_path(path), + _ => false, + }; + let mut separator = String::from(struct_lit_field_separator(context.config, force_space_after_colon)); for _ in 0..prefix_max_width.saturating_sub(name.len()) { separator.push(' '); } diff --git a/src/items.rs b/src/items.rs index 44441d2e527..16d45d183fb 100644 --- a/src/items.rs +++ b/src/items.rs @@ -97,7 +97,7 @@ impl Rewrite for ast::Local { if let Some(ref ty) = self.ty { let force_space_after_colon = - is_ty_kind_with_absolute_decl(&ty.clone().into_inner().kind); + is_ty_kind_with_absolute_decl(&(*ty).kind); let separator = type_annotation_separator(context.config, force_space_after_colon); let ty_shape = if pat_str.contains('\n') { @@ -2087,19 +2087,6 @@ impl<'a> StaticParts<'a> { } } -fn is_ty_kind_with_absolute_decl(ty_kind: &ast::TyKind) -> bool { - match ty_kind { - ast::TyKind::Path(None, ast_path) => { - let segments = &ast_path.segments; - match segments.first() { - Some(path_segment) => path_segment.ident.name == symbol::kw::PathRoot, - None => false, - } - } - _ => false, - } -} - fn rewrite_static( context: &RewriteContext<'_>, static_parts: &StaticParts<'_>, diff --git a/src/utils.rs b/src/utils.rs index f013a829d28..65b7a78cd78 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -6,10 +6,10 @@ use rustc_ast::ast::{ }; use rustc_ast::ptr; use rustc_ast_pretty::pprust; -use rustc_span::{BytePos, LocalExpnId, Span, Symbol, SyntaxContext, sym, symbol}; +use rustc_span::{sym, symbol, BytePos, LocalExpnId, Span, Symbol, SyntaxContext}; use unicode_width::UnicodeWidthStr; -use crate::comment::{CharClasses, FullCodeCharKind, LineClasses, filter_normal_code}; +use crate::comment::{filter_normal_code, CharClasses, FullCodeCharKind, LineClasses}; use crate::config::{Config, StyleEdition}; use crate::rewrite::RewriteContext; use crate::shape::{Indent, Shape}; @@ -715,3 +715,19 @@ mod test { ); } } + + +pub fn is_absolute_decl_path(path :&ast::Path) -> bool { + let segments = &path.segments; + match segments.first() { + Some(path_segment) => path_segment.ident.name == symbol::kw::PathRoot, + None => false, + } +} + +pub fn is_ty_kind_with_absolute_decl(ty_kind: &ast::TyKind) -> bool { + match ty_kind { + ast::TyKind::Path(None, ast_path) => is_absolute_decl_path(ast_path), + _ => false, + } +} \ No newline at end of file diff --git a/tests/source/issue-6470/case-1.rs b/tests/source/issue-6470/case-1.rs index 900e6f052b1..7a911ee7e17 100644 --- a/tests/source/issue-6470/case-1.rs +++ b/tests/source/issue-6470/case-1.rs @@ -13,6 +13,11 @@ struct SomeStruct { field8 :i32, field9: i32, field10 : i32, + + field11:&::some_crate::Thing, + field12: &::some_crate::Thing, + field13 :&::some_crate::Thing, + field14 : &::some_crate::Thing, } const THING1: ::some_crate::SomeType = ::some_crate::SomeType::default(); @@ -28,6 +33,31 @@ const THING8 :i32 = 0; const THING9: i32 = 0; const THING10 : i32 = 0; +const THING11:&::some_crate::SomeType = ::some_crate::SomeType::default(); +const THING12: &::some_crate::SomeType = ::some_crate::SomeType::default(); +const THING13 :&::some_crate::SomeType = ::some_crate::SomeType::default(); +const THING14 : &::some_crate::SomeType = ::some_crate::SomeType::default(); + + + +static STATIC1: ::some_crate::SomeType = ::some_crate::SomeType::default(); +static STATIC2 : ::some_crate::SomeType = ::some_crate::SomeType::default(); + +static STATIC3: some_crate::SomeType = some_crate::SomeType::default(); +static STATIC4 :some_crate::SomeType = some_crate::SomeType::default(); +static STATIC5: some_crate::SomeType = some_crate::SomeType::default(); +static STATIC6 : some_crate::SomeType = some_crate::SomeType::default(); + +static STATIC7: i32 = 0; +static STATIC8 :i32 = 0; +static STATIC9: i32 = 0; +static STATIC10 : i32 = 0; + +static STATIC11:&::some_crate::SomeType = ::some_crate::SomeType::default(); +static STATIC12: &::some_crate::SomeType = ::some_crate::SomeType::default(); +static STATIC13 :&::some_crate::SomeType = ::some_crate::SomeType::default(); +static STATIC14 : &::some_crate::SomeType = ::some_crate::SomeType::default(); + fn main() { let x1: ::some_crate::SomeType = ::some_crate::SomeType::default(); let x2 : ::some_crate::SomeType = ::some_crate::SomeType::default(); @@ -41,4 +71,121 @@ fn main() { let x8 :i32 = 0; let x9: i32 = 0; let x10 : i32 = 0; + + let x11:&::some_crate::SomeType = ::some_crate::SomeType::default(); + let x12 :&::some_crate::SomeType = ::some_crate::SomeType::default(); + let x13: &::some_crate::SomeType = ::some_crate::SomeType::default(); + let x14 : &::some_crate::SomeType = ::some_crate::SomeType::default(); + + + let y_call = SomeStruct { + field1: ::some_crate::Thing::default(), + field2 : ::some_crate::Thing::default(), + + field3:some_crate::Thing::default(), + field4 :some_crate::Thing::default(), + field5: some_crate::Thing::default(), + field6 : some_crate::Thing::default(), + + field7:12, + field8 :12, + field9: 12, + field10 : 12, + + field11:&::some_crate::Thing::default(), + field12: &::some_crate::Thing::default(), + field13 :&::some_crate::Thing::default(), + field14 : &::some_crate::Thing::default(), + }; + + let y_method_call = SomeStruct { + field1: ::some_crate::Thing::Default.call(), + field2 : ::some_crate::Thing::Default.call(), + + ..y_call + }; + + let y_binary = SomeStruct { + field1: ::some_crate::Thing::Default+ 12, + field2 : ::some_crate::Thing::Default + 12, + + ..y_call + }; + + let y_cast = SomeStruct { + field1: ::some_crate::Thing::Default as i32, + field2 : ::some_crate::Thing::Default as i32, + + ..y_call + }; + + let y_type = SomeStruct { + field7: ::some_crate::Thing::Default, + field8 : ::some_crate::Thing::Default, + + ..y_call + }; + + let y_field = SomeStruct { + field1: ::some_crate::Thing::Default.some_field, + field2 : ::some_crate::Thing::Default.some_field, + + ..y_call + }; + + let y_index = SomeStruct { + field1: ::some_crate::Thing::Default[0], + field2 : ::some_crate::Thing::Default[0], + + ..y_call + }; + + let y_range = SomeStruct { + field1: ::some_crate::Thing::DefaultStart..12, + field2 : ::some_crate::Thing::DefaultStart..12, + + ..y_call + }; + + let y_path = SomeStruct { + field1: ::some_crate::Thing::Default, + field2 : ::some_crate::Thing::Default, + + ..y_call + }; + + let y_mac_call = SomeStruct { + field1: ::some_crate::macr!(), + field2 : ::some_crate::macr!(), + + ..y_call + }; + + let y_struct = SomeStruct { + field1: ::some_crate::Thing::SomeStruct{ + fieldA1: 123, + fieldA2: 123, + }, + field2 : ::some_crate::Thing::SomeStruct{ + fieldA1: 123, + fieldA2: 123, + }, + + ..y_call + }; } + +fn func1(x: ::some_crate::SomeType) {} +fn func2(x : ::some_crate::SomeType) {} +fn func3(x:some_crate::SomeType) {} +fn func4(x :some_crate::SomeType) {} +fn func5(x: some_crate::SomeType) {} +fn func6(x : some_crate::SomeType) {} +fn func7(x:i32) {} +fn func8(x: i32) {} +fn func9(x :i32) {} +fn func10(x : i32) {} +fn func11(x:&::some_crate::SomeType) {} +fn func12(x :&::some_crate::SomeType) {} +fn func13(x: &::some_crate::SomeType) {} +fn func14(x : &::some_crate::SomeType) {} diff --git a/tests/source/issue-6470/case-2.rs b/tests/source/issue-6470/case-2.rs index 4e0bbfbaa6b..5ae5238c483 100644 --- a/tests/source/issue-6470/case-2.rs +++ b/tests/source/issue-6470/case-2.rs @@ -3,6 +3,8 @@ struct SomeStruct { field1: ::some_crate::Thing, field2 : ::some_crate::Thing, + field1_enum: ::some_crate::Thing, + field2_enum : ::some_crate::Thing, field3:some_crate::Thing, field4 :some_crate::Thing, @@ -13,6 +15,11 @@ struct SomeStruct { field8 :i32, field9: i32, field10 : i32, + + field11:&::some_crate::Thing, + field12: &::some_crate::Thing, + field13 :&::some_crate::Thing, + field14 : &::some_crate::Thing, } const THING1: ::some_crate::SomeType = ::some_crate::SomeType::default(); @@ -28,6 +35,31 @@ const THING8 :i32 = 0; const THING9: i32 = 0; const THING10 : i32 = 0; +const THING11:&::some_crate::SomeType = ::some_crate::SomeType::default(); +const THING12: &::some_crate::SomeType = ::some_crate::SomeType::default(); +const THING13 :&::some_crate::SomeType = ::some_crate::SomeType::default(); +const THING14 : &::some_crate::SomeType = ::some_crate::SomeType::default(); + + + +static STATIC1: ::some_crate::SomeType = ::some_crate::SomeType::default(); +static STATIC2 : ::some_crate::SomeType = ::some_crate::SomeType::default(); + +static STATIC3: some_crate::SomeType = some_crate::SomeType::default(); +static STATIC4 :some_crate::SomeType = some_crate::SomeType::default(); +static STATIC5: some_crate::SomeType = some_crate::SomeType::default(); +static STATIC6 : some_crate::SomeType = some_crate::SomeType::default(); + +static STATIC7: i32 = 0; +static STATIC8 :i32 = 0; +static STATIC9: i32 = 0; +static STATIC10 : i32 = 0; + +static STATIC11:&::some_crate::SomeType = ::some_crate::SomeType::default(); +static STATIC12: &::some_crate::SomeType = ::some_crate::SomeType::default(); +static STATIC13 :&::some_crate::SomeType = ::some_crate::SomeType::default(); +static STATIC14 : &::some_crate::SomeType = ::some_crate::SomeType::default(); + fn main() { let x1: ::some_crate::SomeType = ::some_crate::SomeType::default(); let x2 : ::some_crate::SomeType = ::some_crate::SomeType::default(); @@ -41,4 +73,47 @@ fn main() { let x8 :i32 = 0; let x9: i32 = 0; let x10 : i32 = 0; + + let x11:&::some_crate::SomeType = ::some_crate::SomeType::default(); + let x12 :&::some_crate::SomeType = ::some_crate::SomeType::default(); + let x13: &::some_crate::SomeType = ::some_crate::SomeType::default(); + let x14 : &::some_crate::SomeType = ::some_crate::SomeType::default(); + + let y = SomeStruct { + field1: ::some_crate::Thing::default(), + field2 : ::some_crate::Thing::default(), + field1_enum: ::some_crate::Thing::Enum1, + field2_enum : ::some_crate::Thing::Enum1, + + + field3:some_crate::Thing::default(), + field4 :some_crate::Thing::default(), + field5: some_crate::Thing::default(), + field6 : some_crate::Thing::default(), + + field7:12, + field8 :12, + field9: 12, + field10 : 12, + + field11:&::some_crate::Thing::default(), + field12: &::some_crate::Thing::default(), + field13 :&::some_crate::Thing::default(), + field14 : &::some_crate::Thing::default(), + }; } + +fn func1(x: ::some_crate::SomeType) {} +fn func2(x : ::some_crate::SomeType) {} +fn func3(x:some_crate::SomeType) {} +fn func4(x :some_crate::SomeType) {} +fn func5(x: some_crate::SomeType) {} +fn func6(x : some_crate::SomeType) {} +fn func7(x:i32) {} +fn func8(x: i32) {} +fn func9(x :i32) {} +fn func10(x : i32) {} +fn func11(x:&::some_crate::SomeType) {} +fn func12(x :&::some_crate::SomeType) {} +fn func13(x: &::some_crate::SomeType) {} +fn func14(x : &::some_crate::SomeType) {} diff --git a/tests/target/issue-6470/case-1.rs b/tests/target/issue-6470/case-1.rs index 5c13720adc4..40460a3811f 100644 --- a/tests/target/issue-6470/case-1.rs +++ b/tests/target/issue-6470/case-1.rs @@ -3,6 +3,8 @@ struct SomeStruct { field1: ::some_crate::Thing, field2: ::some_crate::Thing, + field1_enum: ::some_crate::Thing, + field2_enum: ::some_crate::Thing, field3:some_crate::Thing, field4:some_crate::Thing, @@ -13,6 +15,11 @@ struct SomeStruct { field8:i32, field9:i32, field10:i32, + + field11:&::some_crate::Thing, + field12:&::some_crate::Thing, + field13:&::some_crate::Thing, + field14:&::some_crate::Thing, } const THING1: ::some_crate::SomeType = ::some_crate::SomeType::default(); @@ -28,6 +35,29 @@ const THING8:i32 = 0; const THING9:i32 = 0; const THING10:i32 = 0; +const THING11:&::some_crate::SomeType = ::some_crate::SomeType::default(); +const THING12:&::some_crate::SomeType = ::some_crate::SomeType::default(); +const THING13:&::some_crate::SomeType = ::some_crate::SomeType::default(); +const THING14:&::some_crate::SomeType = ::some_crate::SomeType::default(); + +static STATIC1: ::some_crate::SomeType = ::some_crate::SomeType::default(); +static STATIC2: ::some_crate::SomeType = ::some_crate::SomeType::default(); + +static STATIC3:some_crate::SomeType = some_crate::SomeType::default(); +static STATIC4:some_crate::SomeType = some_crate::SomeType::default(); +static STATIC5:some_crate::SomeType = some_crate::SomeType::default(); +static STATIC6:some_crate::SomeType = some_crate::SomeType::default(); + +static STATIC7:i32 = 0; +static STATIC8:i32 = 0; +static STATIC9:i32 = 0; +static STATIC10:i32 = 0; + +static STATIC11:&::some_crate::SomeType = ::some_crate::SomeType::default(); +static STATIC12:&::some_crate::SomeType = ::some_crate::SomeType::default(); +static STATIC13:&::some_crate::SomeType = ::some_crate::SomeType::default(); +static STATIC14:&::some_crate::SomeType = ::some_crate::SomeType::default(); + fn main() { let x1: ::some_crate::SomeType = ::some_crate::SomeType::default(); let x2: ::some_crate::SomeType = ::some_crate::SomeType::default(); @@ -41,4 +71,46 @@ fn main() { let x8:i32 = 0; let x9:i32 = 0; let x10:i32 = 0; + + let x11:&::some_crate::SomeType = ::some_crate::SomeType::default(); + let x12:&::some_crate::SomeType = ::some_crate::SomeType::default(); + let x13:&::some_crate::SomeType = ::some_crate::SomeType::default(); + let x14:&::some_crate::SomeType = ::some_crate::SomeType::default(); + + let y = SomeStruct { + field1: ::some_crate::Thing::default(), + field2: ::some_crate::Thing::default(), + field1_enum: ::some_crate::Thing::Enum1, + field2_enum: ::some_crate::Thing::Enum1, + + field3:some_crate::Thing::default(), + field4:some_crate::Thing::default(), + field5:some_crate::Thing::default(), + field6:some_crate::Thing::default(), + + field7:12, + field8:12, + field9:12, + field10:12, + + field11:&::some_crate::Thing::default(), + field12:&::some_crate::Thing::default(), + field13:&::some_crate::Thing::default(), + field14:&::some_crate::Thing::default(), + }; } + +fn func1(x:::some_crate::SomeType) {} +fn func2(x:::some_crate::SomeType) {} +fn func3(x:some_crate::SomeType) {} +fn func4(x:some_crate::SomeType) {} +fn func5(x:some_crate::SomeType) {} +fn func6(x:some_crate::SomeType) {} +fn func7(x:i32) {} +fn func8(x:i32) {} +fn func9(x:i32) {} +fn func10(x:i32) {} +fn func11(x:&::some_crate::SomeType) {} +fn func12(x:&::some_crate::SomeType) {} +fn func13(x:&::some_crate::SomeType) {} +fn func14(x:&::some_crate::SomeType) {} diff --git a/tests/target/issue-6470/case-2.rs b/tests/target/issue-6470/case-2.rs index 033e707ed5f..b7d7e526188 100644 --- a/tests/target/issue-6470/case-2.rs +++ b/tests/target/issue-6470/case-2.rs @@ -13,6 +13,11 @@ struct SomeStruct { field8: i32, field9: i32, field10: i32, + + field11: &::some_crate::Thing, + field12: &::some_crate::Thing, + field13: &::some_crate::Thing, + field14: &::some_crate::Thing, } const THING1: ::some_crate::SomeType = ::some_crate::SomeType::default(); @@ -28,6 +33,29 @@ const THING8: i32 = 0; const THING9: i32 = 0; const THING10: i32 = 0; +const THING11: &::some_crate::SomeType = ::some_crate::SomeType::default(); +const THING12: &::some_crate::SomeType = ::some_crate::SomeType::default(); +const THING13: &::some_crate::SomeType = ::some_crate::SomeType::default(); +const THING14: &::some_crate::SomeType = ::some_crate::SomeType::default(); + +static STATIC1: ::some_crate::SomeType = ::some_crate::SomeType::default(); +static STATIC2: ::some_crate::SomeType = ::some_crate::SomeType::default(); + +static STATIC3: some_crate::SomeType = some_crate::SomeType::default(); +static STATIC4: some_crate::SomeType = some_crate::SomeType::default(); +static STATIC5: some_crate::SomeType = some_crate::SomeType::default(); +static STATIC6: some_crate::SomeType = some_crate::SomeType::default(); + +static STATIC7: i32 = 0; +static STATIC8: i32 = 0; +static STATIC9: i32 = 0; +static STATIC10: i32 = 0; + +static STATIC11: &::some_crate::SomeType = ::some_crate::SomeType::default(); +static STATIC12: &::some_crate::SomeType = ::some_crate::SomeType::default(); +static STATIC13: &::some_crate::SomeType = ::some_crate::SomeType::default(); +static STATIC14: &::some_crate::SomeType = ::some_crate::SomeType::default(); + fn main() { let x1: ::some_crate::SomeType = ::some_crate::SomeType::default(); let x2: ::some_crate::SomeType = ::some_crate::SomeType::default(); @@ -41,4 +69,44 @@ fn main() { let x8: i32 = 0; let x9: i32 = 0; let x10: i32 = 0; + + let x11: &::some_crate::SomeType = ::some_crate::SomeType::default(); + let x12: &::some_crate::SomeType = ::some_crate::SomeType::default(); + let x13: &::some_crate::SomeType = ::some_crate::SomeType::default(); + let x14: &::some_crate::SomeType = ::some_crate::SomeType::default(); + + let y = SomeStruct { + field1: ::some_crate::Thing::default(), + field2: ::some_crate::Thing::default(), + + field3: some_crate::Thing::default(), + field4: some_crate::Thing::default(), + field5: some_crate::Thing::default(), + field6: some_crate::Thing::default(), + + field7: 12, + field8: 12, + field9: 12, + field10: 12, + + field11: &::some_crate::Thing::default(), + field12: &::some_crate::Thing::default(), + field13: &::some_crate::Thing::default(), + field14: &::some_crate::Thing::default(), + }; } + +fn func1(x: ::some_crate::SomeType) {} +fn func2(x: ::some_crate::SomeType) {} +fn func3(x: some_crate::SomeType) {} +fn func4(x: some_crate::SomeType) {} +fn func5(x: some_crate::SomeType) {} +fn func6(x: some_crate::SomeType) {} +fn func7(x: i32) {} +fn func8(x: i32) {} +fn func9(x: i32) {} +fn func10(x: i32) {} +fn func11(x: &::some_crate::SomeType) {} +fn func12(x: &::some_crate::SomeType) {} +fn func13(x: &::some_crate::SomeType) {} +fn func14(x: &::some_crate::SomeType) {}