File tree 4 files changed +43
-2
lines changed
test/dotty/tools/dotc/reporting
4 files changed +43
-2
lines changed Original file line number Diff line number Diff line change @@ -454,7 +454,7 @@ object desugar {
454
454
ListOfNil
455
455
}
456
456
else if (isCaseClass && originalVparamss.head.exists(_.mods.isOneOf(GivenOrImplicit ))) {
457
- ctx.error(" Case classes should have a non-implicit parameter list " , namePos)
457
+ ctx.error(CaseClassMissingNonImplicitParamList (cdef) , namePos)
458
458
ListOfNil
459
459
}
460
460
else originalVparamss.nestedMap(toDefParam(_, keepAnnotations = false ))
Original file line number Diff line number Diff line change @@ -148,7 +148,8 @@ enum ErrorMessageID extends java.lang.Enum[ErrorMessageID] {
148
148
IllegalSuperAccessorID ,
149
149
TraitParameterUsedAsParentPrefixID ,
150
150
UnknownNamedEnclosingClassOrObjectID ,
151
- IllegalCyclicTypeReferenceID
151
+ IllegalCyclicTypeReferenceID ,
152
+ CaseClassMissingNonImplicitParamListID
152
153
153
154
def errorNumber = ordinal - 2
154
155
}
Original file line number Diff line number Diff line change @@ -2396,4 +2396,16 @@ object messages {
2396
2396
val msg : String = i " illegal cyclic type reference: ${where} ${hl(lastChecked.show)} of $sym refers back to the type itself "
2397
2397
val explanation : String = " "
2398
2398
}
2399
+
2400
+ case class CaseClassMissingNonImplicitParamList (cdef : untpd.TypeDef )(implicit ctx : Context )
2401
+ extends Message (CaseClassMissingNonImplicitParamListID ) {
2402
+ val kind : String = " Syntax"
2403
+ val msg : String =
2404
+ em """ |A ${hl(" case class" )} must have at least one non-implicit parameter list """
2405
+
2406
+ val explanation : String =
2407
+ em """ | ${cdef.name} must have at least one non-implicit parameter list,
2408
+ | if you're aiming to have a case class parametrized only by implicit ones, you should
2409
+ | add an explicit ${hl(" ()" )} as a parameter list to ${cdef.name}. """ .stripMargin
2410
+ }
2399
2411
}
Original file line number Diff line number Diff line change @@ -1687,4 +1687,32 @@ class ErrorMessagesTests extends ErrorMessagesTest {
1687
1687
assertEquals(" alias" , where)
1688
1688
assertEquals(" List[X]" , lastChecked.show)
1689
1689
}
1690
+
1691
+ @ Test def caseClassMissingParamListSuccessful =
1692
+ checkMessagesAfter(FrontEnd .name) (" case class Test()" )
1693
+ .expectNoErrors
1694
+
1695
+ @ Test def caseClassMissingParamListFailed =
1696
+ checkMessagesAfter(FrontEnd .name) (" case class Test" )
1697
+ .expect {
1698
+ (ictx, messages) =>
1699
+ implicit val ctx : Context = ictx
1700
+ assertMessageCount(1 , messages)
1701
+ val CaseClassMissingParamList (tpe) :: Nil = messages
1702
+ assertEquals(" A case class must have at least one parameter list" , messages.head.msg)
1703
+ }
1704
+
1705
+ @ Test def caseClassMissingNonImplicitParamListSuccessful =
1706
+ checkMessagesAfter(FrontEnd .name) (" case class Test()(given foo: String)" )
1707
+ .expectNoErrors
1708
+
1709
+ @ Test def caseClassMissingNonImplicitParamListFailed =
1710
+ checkMessagesAfter(FrontEnd .name) (" case class Test(given foo: String)" )
1711
+ .expect {
1712
+ (ictx, messages) =>
1713
+ implicit val ctx : Context = ictx
1714
+ assertMessageCount(1 , messages)
1715
+ val CaseClassMissingNonImplicitParamList (tpe) :: Nil = messages
1716
+ assertEquals(" A case class must have at least one non-implicit parameter list" , messages.head.msg)
1717
+ }
1690
1718
}
You can’t perform that action at this time.
0 commit comments