File tree Expand file tree Collapse file tree 4 files changed +43
-2
lines changed
test/dotty/tools/dotc/reporting Expand file tree Collapse file tree 4 files changed +43
-2
lines changed Original file line number Diff line number Diff line change @@ -459,7 +459,7 @@ object desugar {
459459 ListOfNil
460460 }
461461 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)
463463 ListOfNil
464464 }
465465 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] {
149149 TraitParameterUsedAsParentPrefixID ,
150150 UnknownNamedEnclosingClassOrObjectID ,
151151 IllegalCyclicTypeReferenceID ,
152- MissingTypeParameterInTypeAppID
152+ MissingTypeParameterInTypeAppID ,
153+ CaseClassMissingNonImplicitParamListID
153154
154155 def errorNumber = ordinal - 2
155156}
Original file line number Diff line number Diff line change @@ -2381,4 +2381,16 @@ object messages {
23812381 val msg : String = i " illegal cyclic type reference: ${where} ${hl(lastChecked.show)} of $sym refers back to the type itself "
23822382 val explanation : String = " "
23832383 }
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+ }
23842396}
Original file line number Diff line number Diff line change @@ -1684,4 +1684,32 @@ class ErrorMessagesTests extends ErrorMessagesTest {
16841684 assertEquals(" alias" , where)
16851685 assertEquals(" List[X]" , lastChecked.show)
16861686 }
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+ }
16871715}
You can’t perform that action at this time.
0 commit comments