File tree Expand file tree Collapse file tree 3 files changed +62
-0
lines changed
Sources/SwiftFormatPrettyPrint
Tests/SwiftFormatPrettyPrintTests Expand file tree Collapse file tree 3 files changed +62
-0
lines changed Original file line number Diff line number Diff line change @@ -1391,6 +1391,22 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
13911391 return . visitChildren
13921392 }
13931393
1394+ override func visit( _ node: CustomAttributeSyntax ) -> SyntaxVisitorContinueKind {
1395+ // "Custom attributes" are better known to users as "property wrappers".
1396+ before ( node. firstToken, tokens: . open)
1397+ if let argumentList = node. argumentList,
1398+ let leftParen = node. leftParen, let rightParen = node. rightParen
1399+ {
1400+ arrangeFunctionCallArgumentList (
1401+ argumentList,
1402+ leftDelimiter: leftParen,
1403+ rightDelimiter: rightParen,
1404+ forcesBreakBeforeRightDelimiter: false )
1405+ }
1406+ after ( node. lastToken, tokens: . close)
1407+ return . visitChildren
1408+ }
1409+
13941410 override func visit( _ node: AvailabilitySpecListSyntax ) -> SyntaxVisitorContinueKind {
13951411 insertTokens ( . break( . same, size: 1 ) , betweenElementsOf: node)
13961412 return . visitChildren
Original file line number Diff line number Diff line change @@ -314,4 +314,49 @@ final class AttributeTests: PrettyPrintTestCase {
314314
315315 assertPrettyPrintEqual ( input: input, expected: expected, linelength: 30 )
316316 }
317+
318+ func testPropertyWrappers( ) {
319+ // Property wrappers are `CustomAttributeSyntax` nodes (not `AttributeSyntax`) and their
320+ // arguments are `TupleExprElementListSyntax` (like regular function call argument lists), so
321+ // make sure that those are formatted properly.
322+ let input =
323+ """
324+ struct X {
325+ @Wrapper var value: String
326+
327+ @Wrapper ( ) var value: String
328+
329+ @Wrapper (arg1: " value " )var value: String
330+
331+ @Wrapper (arg1: " value " )
332+ var value: String
333+
334+ @Wrapper (arg1: " value " ,arg2:otherValue)
335+ var value: String
336+ }
337+ """
338+
339+ let expected =
340+ """
341+ struct X {
342+ @Wrapper var value: String
343+
344+ @Wrapper() var value: String
345+
346+ @Wrapper(arg1: " value " )
347+ var value: String
348+
349+ @Wrapper(arg1: " value " )
350+ var value: String
351+
352+ @Wrapper(
353+ arg1: " value " ,
354+ arg2: otherValue)
355+ var value: String
356+ }
357+
358+ """
359+
360+ assertPrettyPrintEqual ( input: input, expected: expected, linelength: 32 )
361+ }
317362}
Original file line number Diff line number Diff line change @@ -69,6 +69,7 @@ extension AttributeTests {
6969 ( " testObjCAttributesDiscretionaryLineBreaking " , testObjCAttributesDiscretionaryLineBreaking) ,
7070 ( " testObjCAttributesPerLineBreaking " , testObjCAttributesPerLineBreaking) ,
7171 ( " testObjCBinPackedAttributes " , testObjCBinPackedAttributes) ,
72+ ( " testPropertyWrappers " , testPropertyWrappers) ,
7273 ]
7374}
7475
You can’t perform that action at this time.
0 commit comments