Skip to content

Commit f5f0ea6

Browse files
authored
Merge pull request #475 from sleekbyte/as-469-swift-3_0_1
#469: Update grammar to support Swift 3.0.1
2 parents 3421e63 + e49c0c0 commit f5f0ea6

26 files changed

+237
-163
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
[Tailor]: https://tailor.sh
3737
[Swift]: https://swift.org
3838

39-
Tailor supports Swift 2 out of the box and helps enforce style guidelines outlined in the [The Swift Programming Language][], [GitHub][], [Ray Wenderlich][], and [Coursera][] style guides. It supports cross-platform usage and can be run on Mac OS X via your shell or integrated with Xcode, as well as on Linux and Windows.
39+
Tailor supports Swift 3.0.1 out of the box and helps enforce style guidelines outlined in the [The Swift Programming Language][], [GitHub][], [Ray Wenderlich][], and [Coursera][] style guides. It supports cross-platform usage and can be run on Mac OS X via your shell or integrated with Xcode, as well as on Linux and Windows.
4040

4141
[The Swift Programming Language]: https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/
4242
[GitHub]: https://github.com/github/swift-style-guide

src/main/antlr/com/sleekbyte/tailor/antlr/Swift.g4

Lines changed: 95 additions & 63 deletions
Large diffs are not rendered by default.

src/main/java/com/sleekbyte/tailor/listeners/BraceStyleListener.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -204,8 +204,8 @@ private void verifyFunctionBraceStyle(SwiftParser.FunctionDeclarationContext ctx
204204
if (ctx.functionBody() == null) {
205205
return;
206206
}
207-
verifyCodeBlockOpenBraceStyle(ctx.functionBody().codeBlock(), ctx.functionSignature().getStop(),
208-
Messages.FUNCTION);
207+
Token left = ParseTreeUtil.getStopTokenForNode(ParseTreeUtil.getLeftSibling(ctx.functionBody()));
208+
verifyCodeBlockOpenBraceStyle(ctx.functionBody().codeBlock(), left, Messages.FUNCTION);
209209
verifyBodyCloseBraceStyle(ctx.functionBody().codeBlock(), Messages.FUNCTION);
210210
}
211211

@@ -266,7 +266,7 @@ private void verifyClosureExpressionBraceStyle(SwiftParser.ClosureExpressionCont
266266
list.map {(element: Int) in element * 2}
267267
*/
268268
ParseTree leftSibling = ParseTreeUtil.getLeftSibling(ctx);
269-
if (leftSibling != null && (leftSibling instanceof SwiftParser.ParenthesizedExpressionContext
269+
if (leftSibling != null && (leftSibling instanceof SwiftParser.FunctionCallArgumentClauseContext
270270
|| leftSibling instanceof SwiftParser.PostfixExpressionContext)) {
271271
Token leftToken = ((ParserRuleContext) leftSibling).getStop();
272272
verifySingleSpaceBeforeOpenBrace(ctx, leftToken);

src/main/java/com/sleekbyte/tailor/listeners/ConstantDecHelper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,12 @@ public static boolean isGlobal(ParserRuleContext ctx) {
5151
}
5252

5353
public static boolean insideClass(ParserRuleContext ctx) {
54-
ParserRuleContext rootCtx = ParseTreeUtil.getNthParent(getDeclarationRoot(ctx), 1);
54+
ParserRuleContext rootCtx = ParseTreeUtil.getNthParent(getDeclarationRoot(ctx), 3);
5555
return rootCtx != null && (rootCtx instanceof SwiftParser.ClassDeclarationContext);
5656
}
5757

5858
public static boolean insideStruct(ParserRuleContext ctx) {
59-
ParserRuleContext rootCtx = ParseTreeUtil.getNthParent(getDeclarationRoot(ctx), 1);
59+
ParserRuleContext rootCtx = ParseTreeUtil.getNthParent(getDeclarationRoot(ctx), 3);
6060
return rootCtx != null && (rootCtx instanceof SwiftParser.StructDeclarationContext);
6161
}
6262
}

src/main/java/com/sleekbyte/tailor/listeners/RedundantParenthesesListener.java

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.sleekbyte.tailor.antlr.SwiftParser.ConditionContext;
88
import com.sleekbyte.tailor.antlr.SwiftParser.DictionaryLiteralItemContext;
99
import com.sleekbyte.tailor.antlr.SwiftParser.ExpressionContext;
10+
import com.sleekbyte.tailor.antlr.SwiftParser.FunctionCallArgumentClauseContext;
1011
import com.sleekbyte.tailor.antlr.SwiftParser.FunctionCallWithClosureExpressionContext;
1112
import com.sleekbyte.tailor.antlr.SwiftParser.InitializerContext;
1213
import com.sleekbyte.tailor.antlr.SwiftParser.ParenthesizedExpressionContext;
@@ -87,8 +88,9 @@ public void enterDictionaryLiteralItem(DictionaryLiteralItemContext ctx) {
8788

8889
@Override
8990
public void enterFunctionCallWithClosureExpression(FunctionCallWithClosureExpressionContext ctx) {
90-
if (ctx.parenthesizedExpression() != null && ctx.parenthesizedExpression().expressionElementList() == null) {
91-
printRedundantParenthesesWarning(ctx.parenthesizedExpression(), Messages.EMPTY_PARENTHESES
91+
FunctionCallArgumentClauseContext argumentClause = ctx.functionCallArgumentClause();
92+
if (argumentClause != null && argumentClause.functionCallArgumentList() == null) {
93+
printRedundantParenthesesWarning(argumentClause, Messages.EMPTY_PARENTHESES
9294
+ Messages.REDUNDANT_METHOD_PARENTHESES);
9395
}
9496
}
@@ -117,15 +119,6 @@ private void verifyRedundantExpressionParentheses(String constructType, Expressi
117119
return;
118120
}
119121

120-
ParenthesizedExpressionContext parenthesizedExpressionContext =
121-
(ParenthesizedExpressionContext) primaryExpression.getChild(0);
122-
123-
// check to not flag tuple initialization
124-
if (parenthesizedExpressionContext.expressionElementList() == null
125-
|| parenthesizedExpressionContext.expressionElementList().getChildCount() != 1) {
126-
return;
127-
}
128-
129122
printRedundantParenthesesWarning(ctx, constructType + Messages.ENCLOSED_PARENTHESES);
130123
}
131124

src/main/java/com/sleekbyte/tailor/listeners/TrailingClosureListener.java

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
import com.sleekbyte.tailor.antlr.SwiftBaseListener;
44
import com.sleekbyte.tailor.antlr.SwiftParser.ConditionListContext;
55
import com.sleekbyte.tailor.antlr.SwiftParser.ExpressionContext;
6-
import com.sleekbyte.tailor.antlr.SwiftParser.ExpressionElementContext;
7-
import com.sleekbyte.tailor.antlr.SwiftParser.ExpressionElementListContext;
6+
import com.sleekbyte.tailor.antlr.SwiftParser.FunctionCallArgumentContext;
7+
import com.sleekbyte.tailor.antlr.SwiftParser.FunctionCallArgumentListContext;
88
import com.sleekbyte.tailor.antlr.SwiftParser.FunctionCallExpressionContext;
99
import com.sleekbyte.tailor.antlr.SwiftParser.PostfixExpressionContext;
1010
import com.sleekbyte.tailor.antlr.SwiftParser.PrimaryExpressionContext;
@@ -45,28 +45,39 @@ public static boolean isInsideConditionList(ParserRuleContext ctx) {
4545

4646
@Override
4747
public void enterFunctionCallExpression(FunctionCallExpressionContext ctx) {
48-
ExpressionElementListContext elemList = ctx.parenthesizedExpression().expressionElementList();
48+
FunctionCallArgumentListContext argumentList =
49+
ctx.functionCallArgumentClause().functionCallArgumentList();
4950

5051
// Check if the function call is inside a condition clause (Issue #401)
5152
if (isInsideConditionList(ctx)) {
5253
return;
5354
}
5455

5556
// Check if the function call has any parameters
56-
if (elemList == null) {
57+
if (argumentList == null) {
5758
return;
5859
}
5960

60-
List<ExpressionElementContext> elements = elemList.expressionElement();
61+
List<FunctionCallArgumentContext> arguments = argumentList.functionCallArgument();
6162

6263
// Check if the last parameter isn't named
63-
ExpressionElementContext element = elements.get(elements.size() - 1);
64-
if (element.expressionElementIdentifier() != null) {
64+
FunctionCallArgumentContext argument = arguments.get(arguments.size() - 1);
65+
if (argument.functionCallIdentifier() != null) {
66+
return;
67+
}
68+
69+
// Check if the last parameter isn't an operator
70+
if (argument.operator() != null) {
71+
return;
72+
}
73+
74+
// Check if the last parameter has an expression
75+
if (argument.expression() == null) {
6576
return;
6677
}
6778

6879
// Check if the parameter is a simple prefix expression
69-
ExpressionContext expression = element.expression();
80+
ExpressionContext expression = argument.expression();
7081
if (expression.binaryExpression().size() != 0) {
7182
return;
7283
}

src/main/java/com/sleekbyte/tailor/listeners/whitespace/ArrowWhitespaceListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public void enterFunctionResult(SwiftParser.FunctionResultContext ctx) {
3131
}
3232

3333
@Override
34-
public void enterSType(SwiftParser.STypeContext ctx) {
34+
public void enterFunctionType(SwiftParser.FunctionTypeContext ctx) {
3535
Optional<ParseTree> arrowOptional = ctx.children.stream()
3636
.filter(node -> node.getText().equals("->"))
3737
.findFirst();

src/main/java/com/sleekbyte/tailor/listeners/whitespace/ColonWhitespaceListener.java

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,10 @@ public void enterConditionalOperator(SwiftParser.ConditionalOperatorContext ctx)
9595
}
9696

9797
@Override
98-
public void enterExpressionElement(SwiftParser.ExpressionElementContext ctx) {
99-
if (ctx.expressionElementIdentifier() != null) {
98+
public void enterTupleElement(SwiftParser.TupleElementContext ctx) {
99+
if (ctx.identifier() != null) {
100100
Token colon = ((TerminalNodeImpl) ctx.getChild(1)).getSymbol();
101-
Token left = ctx.expressionElementIdentifier().getStop();
101+
Token left = ctx.identifier().getStop();
102102

103103
if (ctx.expression() != null) {
104104
Token right = ctx.expression().getStart();
@@ -109,6 +109,22 @@ public void enterExpressionElement(SwiftParser.ExpressionElementContext ctx) {
109109
}
110110
}
111111

112+
@Override
113+
public void enterFunctionCallArgument(SwiftParser.FunctionCallArgumentContext ctx) {
114+
if (ctx.functionCallIdentifier() != null) {
115+
Token colon = ((TerminalNodeImpl) ctx.getChild(1)).getSymbol();
116+
Token left = ctx.functionCallIdentifier().getStop();
117+
if (ctx.expression() == null && ctx.operator() == null) {
118+
verifier.verifyPunctuationLeftAssociation(left, colon, Messages.COLON);
119+
return;
120+
}
121+
ParserRuleContext rightCtx = ctx.expression() == null ? ctx.operator() : ctx.expression();
122+
Token right = rightCtx.getStart();
123+
124+
verifyColonLeftAssociation(left, right, colon);
125+
}
126+
}
127+
112128
@Override
113129
public void enterGenericParameter(SwiftParser.GenericParameterContext ctx) {
114130
if (ctx.getChildCount() == 3) {
@@ -120,6 +136,15 @@ public void enterGenericParameter(SwiftParser.GenericParameterContext ctx) {
120136
}
121137
}
122138

139+
@Override
140+
public void enterArgumentName(SwiftParser.ArgumentNameContext ctx) {
141+
Token colon = ((TerminalNodeImpl) ctx.getChild(1)).getSymbol();
142+
Token left = ctx.identifier() == null
143+
? ((TerminalNodeImpl) ctx.getChild(0)).getSymbol()
144+
: ctx.identifier().getStop();
145+
verifier.verifyPunctuationLeftAssociation(left, colon, Messages.COLON);
146+
}
147+
123148
private void verifyColonIsSpaceDelimited(Token left, Token right, Token colon) {
124149
verifier.verifyPunctuationIsSpaceDelimited(left, right, colon, Messages.COLON);
125150
}

src/main/java/com/sleekbyte/tailor/listeners/whitespace/CommaWhitespaceListener.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@
99
import com.sleekbyte.tailor.antlr.SwiftParser.ClosureParameterListContext;
1010
import com.sleekbyte.tailor.antlr.SwiftParser.ConditionListContext;
1111
import com.sleekbyte.tailor.antlr.SwiftParser.DictionaryLiteralItemsContext;
12-
import com.sleekbyte.tailor.antlr.SwiftParser.ExpressionElementListContext;
12+
import com.sleekbyte.tailor.antlr.SwiftParser.FunctionCallArgumentListContext;
1313
import com.sleekbyte.tailor.antlr.SwiftParser.GenericArgumentListContext;
1414
import com.sleekbyte.tailor.antlr.SwiftParser.IdentifierListContext;
1515
import com.sleekbyte.tailor.antlr.SwiftParser.ParameterListContext;
1616
import com.sleekbyte.tailor.antlr.SwiftParser.PatternInitializerListContext;
1717
import com.sleekbyte.tailor.antlr.SwiftParser.RawValueStyleEnumCaseListContext;
18+
import com.sleekbyte.tailor.antlr.SwiftParser.TupleElementListContext;
1819
import com.sleekbyte.tailor.antlr.SwiftParser.TuplePatternElementListContext;
1920
import com.sleekbyte.tailor.antlr.SwiftParser.TupleTypeElementListContext;
2021
import com.sleekbyte.tailor.antlr.SwiftParser.UnionStyleEnumCaseListContext;
@@ -130,7 +131,12 @@ public void enterCaptureListItems(CaptureListItemsContext ctx) {
130131
}
131132

132133
@Override
133-
public void enterExpressionElementList(ExpressionElementListContext ctx) {
134+
public void enterTupleElementList(TupleElementListContext ctx) {
135+
checkWhitespaceAroundCommaSeparatedList(ctx);
136+
}
137+
138+
@Override
139+
public void enterFunctionCallArgumentList(FunctionCallArgumentListContext ctx) {
134140
checkWhitespaceAroundCommaSeparatedList(ctx);
135141
}
136142

src/main/java/com/sleekbyte/tailor/listeners/whitespace/OperatorWhitespaceListener.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,13 @@ public void enterOperatorDeclaration(SwiftParser.OperatorDeclarationContext ctx)
2929
if (ctx.getChild(0).getChild(i) instanceof SwiftParser.OperatorContext) {
3030
SwiftParser.OperatorContext op = (SwiftParser.OperatorContext) ctx.getChild(0).getChild(i);
3131
Token before = ParseTreeUtil.getStopTokenForNode(ctx.getChild(0).getChild(i - 1));
32-
Token after = ParseTreeUtil.getStartTokenForNode(ctx.getChild(0).getChild(i + 1));
3332

3433
if (verifier.checkLeftSpaces(before, op.getStart(), 1)) {
3534
printer.error(Rules.OPERATOR_WHITESPACE, Messages.OPERATOR + Messages.SPACE_BEFORE,
3635
ListenerUtil.getContextStartLocation(op));
3736
}
3837

39-
if (verifier.checkRightSpaces(after, op.getStop(), 1)) {
40-
printer.error(Rules.OPERATOR_WHITESPACE, Messages.OPERATOR + Messages.SPACE_AFTER,
41-
ListenerUtil.getContextStartLocation(op));
42-
}
38+
// TODO: Verify one space after colon for infix operator declarations
4339
}
4440
}
4541
}

src/main/java/com/sleekbyte/tailor/listeners/whitespace/ParenthesisWhitespaceListener.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,16 @@ public void enterParenthesizedExpression(SwiftParser.ParenthesizedExpressionCont
6060
verifier.verifyBracketContentWhitespace(ctx, Messages.PARENTHESES);
6161
}
6262

63+
@Override
64+
public void enterTupleExpression(SwiftParser.TupleExpressionContext ctx) {
65+
verifier.verifyBracketContentWhitespace(ctx, Messages.PARENTHESES);
66+
}
67+
68+
@Override
69+
public void enterFunctionCallArgumentClause(SwiftParser.FunctionCallArgumentClauseContext ctx) {
70+
verifier.verifyBracketContentWhitespace(ctx, Messages.PARENTHESES);
71+
}
72+
6373
@Override
6474
public void enterInitializerDeclaration(SwiftParser.InitializerDeclarationContext ctx) {
6575
verifier.verifyLeadingWhitespaceBeforeBracket(ctx.parameterClause(), Messages.PARENTHESES,

src/test/java/com/sleekbyte/tailor/functional/AngleBracketWhitespaceTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ protected void addAllExpectedMsgs() {
2424
addExpectedMessage(8, 29, Messages.CHEVRONS + Messages.NO_WHITESPACE_BEFORE);
2525
addExpectedMessage(8, 31, Messages.CHEVRONS + Messages.CONTENT + Messages.LEADING_WHITESPACE);
2626
addExpectedMessage(8, 45, Messages.CHEVRONS + Messages.CONTENT + Messages.NOT_END_SPACE);
27-
addExpectedMessage(17, 61, Messages.CHEVRONS + Messages.CONTENT + Messages.NOT_END_SPACE);
27+
addExpectedMessage(16, 33, Messages.CHEVRONS + Messages.CONTENT + Messages.NOT_END_SPACE);
2828
addExpectedMessage(20, 19, Messages.CHEVRONS + Messages.NO_WHITESPACE_BEFORE);
2929
addExpectedMessage(20, 21, Messages.CHEVRONS + Messages.CONTENT + Messages.LEADING_WHITESPACE);
3030
addExpectedMessage(25, 8, Messages.OPERATOR_OVERLOADING_ONE_SPACE);

src/test/java/com/sleekbyte/tailor/functional/ColonWhitespaceTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ protected void addAllExpectedMsgs() {
116116
addExpectedMessage(start + 6, 20, Messages.SPACE_AFTER);
117117
addExpectedMessage(start + 10, 8, Messages.NO_SPACE_BEFORE);
118118

119-
// expressionElement
119+
// functionCallExpression / explicitMemberExpression
120120
start = 188;
121121
addExpectedMessage(start, 28, Messages.SPACE_AFTER);
122122
addExpectedMessage(start + 1, 29, Messages.NO_SPACE_BEFORE);

src/test/java/com/sleekbyte/tailor/functional/CommaWhitespaceTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,11 @@ protected void addAllExpectedMsgs() {
3636
addExpectedCommaMessage(start + 8, 32, Messages.NO_SPACE_BEFORE);
3737

3838
// Requirement list commas
39-
start = 82;
39+
start = 83;
4040
addExpectedCommaMessage(start, 37, Messages.SPACE_AFTER);
41-
addExpectedCommaMessage(start + 4, 43, Messages.SPACE_AFTER);
42-
addExpectedCommaMessage(start + 4, 43, Messages.NO_SPACE_BEFORE);
43-
addExpectedCommaMessage(start + 8, 1, Messages.NO_SPACE_BEFORE);
41+
addExpectedCommaMessage(start + 3, 43, Messages.SPACE_AFTER);
42+
addExpectedCommaMessage(start + 3, 43, Messages.NO_SPACE_BEFORE);
43+
addExpectedCommaMessage(start + 7, 1, Messages.NO_SPACE_BEFORE);
4444

4545
// Condition clause/list commas
4646
start = 103;

src/test/java/com/sleekbyte/tailor/functional/OperatorWhitespaceTest.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,8 @@ public class OperatorWhitespaceTest extends RuleTest {
1414
protected void addAllExpectedMsgs() {
1515
// Operator declarations
1616
addExpectedMsg(3, 18, Messages.SPACE_BEFORE);
17-
addExpectedMsg(5, 17, Messages.SPACE_AFTER);
18-
addExpectedMsg(7, 18, Messages.SPACE_AFTER);
1917
addExpectedMsg(7, 18, Messages.SPACE_BEFORE);
20-
addExpectedMsg(9, 19, Messages.SPACE_BEFORE);
21-
addExpectedMsg(11, 16, Messages.SPACE_AFTER);
22-
addExpectedMsg(18, 16, Messages.SPACE_BEFORE);
23-
addExpectedMsg(21, 1, Messages.SPACE_AFTER);
24-
addExpectedMsg(26, 5, Messages.SPACE_AFTER);
18+
addExpectedMsg(12, 16, Messages.SPACE_BEFORE);
2519
}
2620

2721
private void addExpectedMsg(int line, int column, String msg) {

src/test/swift/com/sleekbyte/tailor/functional/AngleBracketWhitespaceTest.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@ func simpleMaxWithWhitespace < T: Comparable >(x: T, _ y: T) -> T {
1313
}
1414

1515
func allItemsMatch<
16-
C1: Container, C2: Container
17-
where C1.ItemType == C2.ItemType, C1.ItemType: Equatable >
18-
(someContainer: C1, _ anotherContainer: C2) -> Bool {}
16+
C1: Container, C2: Container >
17+
(someContainer: C1, _ anotherContainer: C2) -> Bool
18+
where C1.ItemType == C2.ItemType, C1.ItemType: Equatable {}
1919

20-
func allItemsMatch < C1: Container, C2: Container
21-
where C1.ItemType == C2.ItemType, C1.ItemType: Equatable>
22-
(someContainer: C1, _ anotherContainer: C2) -> Bool {}
20+
func allItemsMatch < C1: Container, C2: Container>
21+
(someContainer: C1, _ anotherContainer: C2) -> Bool
22+
where C1.ItemType == C2.ItemType, C1.ItemType: Equatable {}
2323

2424

2525
func <<<T>(left: inout [T], right: [T]) -> [T] {

src/test/swift/com/sleekbyte/tailor/functional/BraceWhitespaceTest.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,3 +277,7 @@ public convenience init(name: String...) rethrows {
277277

278278
public convenience init(name: String...) throws {
279279
}
280+
281+
func allItemsMatch<C1: Container, C2: Container>
282+
(someContainer: C1, _ anotherContainer: C2) -> Bool
283+
where C1.ItemType == C2.ItemType, C1.ItemType: Equatable {}

src/test/swift/com/sleekbyte/tailor/functional/ColonWhitespaceTest.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -179,9 +179,9 @@ func someFunction<T: SomeClass, U: SomeProtocol>(someT: T, someU: U) {
179179
}
180180

181181
func allItemsMatch<
182-
C1 : Container, C2: Container
183-
where C1.ItemType == C2.ItemType, C1.ItemType: Equatable>
184-
(someContainer: C1, _ anotherContainer: C2) -> Bool {
182+
C1 : Container, C2: Container>
183+
(someContainer: C1, _ anotherContainer: C2) -> Bool
184+
where C1.ItemType == C2.ItemType, C1.ItemType: Equatable {
185185
}
186186

187187
SystemError.description(for: errorNumber)

src/test/swift/com/sleekbyte/tailor/functional/CommaWhitespaceTest.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -72,15 +72,15 @@ func someFunction<T: SomeClass , U: SomeProtocol, V: AnotherClass>(someT: T, som
7272
// function body goes here
7373
}
7474

75-
func allItemsMatch<C1: Container, C2: Container
75+
func allItemsMatch<C1: Container, C2: Container>
76+
(someContainer: C1, _ anotherContainer: C2) -> Bool
7677
where C1.ItemType == C2.ItemType,
77-
C1.ItemType: Equatable>
78-
(someContainer: C1, _ anotherContainer: C2) -> Bool {
78+
C1.ItemType: Equatable {
7979
}
8080

81-
func allItemsMatch<C1: Container, C2: Container
82-
where C1.ItemType == C2.ItemType,C1.ItemType: Equatable>
83-
(someContainer: C1, _ anotherContainer: C2) -> Bool {
81+
func allItemsMatch<C1: Container, C2: Container>
82+
(someContainer: C1, _ anotherContainer: C2) -> Bool
83+
where C1.ItemType == C2.ItemType,C1.ItemType: Equatable {
8484
}
8585

8686
extension ImageFilter where Self: Sizable , Self: Roundable {

0 commit comments

Comments
 (0)