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 @@ -459,7 +459,7 @@ object desugar {
459
459
ListOfNil
460
460
}
461
461
else if (isCaseClass && originalVparamss.head.exists(_.mods.isOneOf(GivenOrImplicit ))) {
462
- ctx.error(" Case classes should have a non-implicit parameter list " , namePos)
462
+ ctx.error(CaseClassMissingNonImplicitParamList (cdef) , namePos)
463
463
ListOfNil
464
464
}
465
465
else originalVparamss.nestedMap(toDefParam(_, keepAnnotations = false ))
Original file line number Diff line number Diff line change @@ -149,7 +149,8 @@ enum ErrorMessageID extends java.lang.Enum[ErrorMessageID] {
149
149
TraitParameterUsedAsParentPrefixID ,
150
150
UnknownNamedEnclosingClassOrObjectID ,
151
151
IllegalCyclicTypeReferenceID ,
152
- MissingTypeParameterInTypeAppID
152
+ MissingTypeParameterInTypeAppID ,
153
+ CaseClassMissingNonImplicitParamListID
153
154
154
155
def errorNumber = ordinal - 2
155
156
}
Original file line number Diff line number Diff line change @@ -2381,4 +2381,16 @@ object messages {
2381
2381
val msg : String = i " illegal cyclic type reference: ${where} ${hl(lastChecked.show)} of $sym refers back to the type itself "
2382
2382
val explanation : String = " "
2383
2383
}
2384
+
2385
+ case class CaseClassMissingNonImplicitParamList (cdef : untpd.TypeDef )(implicit ctx : Context )
2386
+ extends Message (CaseClassMissingNonImplicitParamListID ) {
2387
+ val kind : String = " Syntax"
2388
+ val msg : String =
2389
+ em """ |A ${hl(" case class" )} must have at least one non-implicit parameter list """
2390
+
2391
+ val explanation : String =
2392
+ em """ | ${cdef.name} must have at least one non-implicit parameter list,
2393
+ | if you're aiming to have a case class parametrized only by implicit ones, you should
2394
+ | add an explicit ${hl(" ()" )} as a parameter list to ${cdef.name}. """ .stripMargin
2395
+ }
2384
2396
}
Original file line number Diff line number Diff line change @@ -1684,4 +1684,32 @@ class ErrorMessagesTests extends ErrorMessagesTest {
1684
1684
assertEquals(" alias" , where)
1685
1685
assertEquals(" List[X]" , lastChecked.show)
1686
1686
}
1687
+
1688
+ @ Test def caseClassMissingParamListSuccessful =
1689
+ checkMessagesAfter(FrontEnd .name) (" case class Test()" )
1690
+ .expectNoErrors
1691
+
1692
+ @ Test def caseClassMissingParamListFailed =
1693
+ checkMessagesAfter(FrontEnd .name) (" case class Test" )
1694
+ .expect {
1695
+ (ictx, messages) =>
1696
+ implicit val ctx : Context = ictx
1697
+ assertMessageCount(1 , messages)
1698
+ val CaseClassMissingParamList (tpe) :: Nil = messages
1699
+ assertEquals(" A case class must have at least one parameter list" , messages.head.msg)
1700
+ }
1701
+
1702
+ @ Test def caseClassMissingNonImplicitParamListSuccessful =
1703
+ checkMessagesAfter(FrontEnd .name) (" case class Test()(given foo: String)" )
1704
+ .expectNoErrors
1705
+
1706
+ @ Test def caseClassMissingNonImplicitParamListFailed =
1707
+ checkMessagesAfter(FrontEnd .name) (" case class Test(given foo: String)" )
1708
+ .expect {
1709
+ (ictx, messages) =>
1710
+ implicit val ctx : Context = ictx
1711
+ assertMessageCount(1 , messages)
1712
+ val CaseClassMissingNonImplicitParamList (tpe) :: Nil = messages
1713
+ assertEquals(" A case class must have at least one non-implicit parameter list" , messages.head.msg)
1714
+ }
1687
1715
}
You can’t perform that action at this time.
0 commit comments