Skip to content

Commit 5e280e0

Browse files
committed
scaladoc: skip parens around occurences of the same operator
1 parent 35ca2db commit 5e280e0

File tree

2 files changed

+32
-6
lines changed

2 files changed

+32
-6
lines changed

scaladoc-testcases/src/tests/infixTypes.scala

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,12 @@ def someTrait3[G, H]: G SomeTrait2 H //expected: def someTrait3[G, H]: SomeTrait
1919

2020
trait +++[A, B]
2121

22+
trait ++*[A, B]
23+
2224
trait ++:[A, B]
2325

26+
trait +*:[A, B]
27+
2428
trait ***[A, B]
2529

2630
trait **:[A, B]
@@ -30,26 +34,44 @@ def foo[A, B, C, D]: (A SomeTrait B) +++ (C SomeTrait2 D) //expected: def foo[A,
3034

3135
// left-associative, same precedence
3236

33-
def a0[X, Y, Z]: X +++ Y +++ Z //expected: def a0[X, Y, Z]: (X +++ Y) +++ Z
37+
def a0[X, Y, Z]: X +++ Y +++ Z
3438
= a1
3539

36-
def a1[X, Y, Z]: (X +++ Y) +++ Z
40+
def a1[X, Y, Z]: (X +++ Y) +++ Z //expected: def a1[X, Y, Z]: X +++ Y +++ Z
3741
= a0
3842

3943
def a2[X, Y, Z]: X +++ (Y +++ Z)
4044
= ???
4145

42-
// right-associative, same precedence
46+
def a0x[X, Y, Z]: X +++ Y ++* Z //expected: def a0x[X, Y, Z]: (X +++ Y) ++* Z
47+
= a1x
4348

44-
def a3[X, Y, Z]: X ++: Y ++: Z //expected: def a3[X, Y, Z]: X ++: (Y ++: Z)
49+
def a1x[X, Y, Z]: (X +++ Y) ++* Z
50+
= a0x
51+
52+
def a2x[X, Y, Z]: X +++ (Y ++* Z)
4553
= ???
4654

55+
// right-associative, same precedence
56+
57+
def a3[X, Y, Z]: X ++: Y ++: Z
58+
= a5
59+
4760
def a4[X, Y, Z]: (X ++: Y) ++: Z
4861
= ???
4962

50-
def a5[X, Y, Z]: X ++: (Y ++: Z)
63+
def a5[X, Y, Z]: X ++: (Y ++: Z) //expected: def a5[X, Y, Z]: X ++: Y ++: Z
64+
= a3
65+
66+
def a3x[X, Y, Z]: X ++: Y +*: Z //expected: def a3x[X, Y, Z]: X ++: (Y +*: Z)
67+
= a5x
68+
69+
def a4x[X, Y, Z]: (X ++: Y) +*: Z
5170
= ???
5271

72+
def a5x[X, Y, Z]: X ++: (Y +*: Z)
73+
= a3x
74+
5375
// left and right associative, same precedence
5476

5577
def a6[X, Y, Z]: (X +++ Y) ++: Z

scaladoc/src/dotty/tools/scaladoc/tasty/TypesSupport.scala

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,11 @@ trait TypesSupport:
365365
case (at: AppliedType, _: OrType) => at.isFunctionType || isInfix(at)
366366
case (_: AndType, at: AppliedType) => isInfix(at)
367367
case (_: OrType, at: AppliedType) => isInfix(at)
368-
case (at1: AppliedType, at2: AppliedType) => isInfix(at2) && (at1.isFunctionType || isInfix(at1))
368+
case (at1: AppliedType, at2: AppliedType) =>
369+
val leftAssoc = !at1.tycon.typeSymbol.name.endsWith(":")
370+
isInfix(at2) && (at1.isFunctionType || isInfix(at1) && (
371+
at1.tycon.typeSymbol != at2.tycon.typeSymbol || leftAssoc != isLeft
372+
))
369373
case _ => false
370374

371375
private def isInfix(using Quotes)(at: reflect.AppliedType) =

0 commit comments

Comments
 (0)