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 @@ -454,7 +454,7 @@ object desugar {
454454 ListOfNil
455455 }
456456 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)
458458 ListOfNil
459459 }
460460 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] {
148148 IllegalSuperAccessorID ,
149149 TraitParameterUsedAsParentPrefixID ,
150150 UnknownNamedEnclosingClassOrObjectID ,
151- IllegalCyclicTypeReferenceID
151+ IllegalCyclicTypeReferenceID ,
152+ CaseClassMissingNonImplicitParamListID
152153
153154 def errorNumber = ordinal - 2
154155}
Original file line number Diff line number Diff line change @@ -2396,4 +2396,16 @@ object messages {
23962396 val msg : String = i " illegal cyclic type reference: ${where} ${hl(lastChecked.show)} of $sym refers back to the type itself "
23972397 val explanation : String = " "
23982398 }
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+ }
23992411}
Original file line number Diff line number Diff line change @@ -1687,4 +1687,32 @@ class ErrorMessagesTests extends ErrorMessagesTest {
16871687 assertEquals(" alias" , where)
16881688 assertEquals(" List[X]" , lastChecked.show)
16891689 }
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+ }
16901718}
You can’t perform that action at this time.
0 commit comments