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 {
1391
1391
return . visitChildren
1392
1392
}
1393
1393
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
+
1394
1410
override func visit( _ node: AvailabilitySpecListSyntax ) -> SyntaxVisitorContinueKind {
1395
1411
insertTokens ( . break( . same, size: 1 ) , betweenElementsOf: node)
1396
1412
return . visitChildren
Original file line number Diff line number Diff line change @@ -314,4 +314,49 @@ final class AttributeTests: PrettyPrintTestCase {
314
314
315
315
assertPrettyPrintEqual ( input: input, expected: expected, linelength: 30 )
316
316
}
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
+ }
317
362
}
Original file line number Diff line number Diff line change @@ -69,6 +69,7 @@ extension AttributeTests {
69
69
( " testObjCAttributesDiscretionaryLineBreaking " , testObjCAttributesDiscretionaryLineBreaking) ,
70
70
( " testObjCAttributesPerLineBreaking " , testObjCAttributesPerLineBreaking) ,
71
71
( " testObjCBinPackedAttributes " , testObjCBinPackedAttributes) ,
72
+ ( " testPropertyWrappers " , testPropertyWrappers) ,
72
73
]
73
74
}
74
75
You can’t perform that action at this time.
0 commit comments