Skip to content

Commit 93a93ab

Browse files
authored
Create message for missing arguments (#16158)
Fixes #16130
2 parents 2052fc2 + 7c49b03 commit 93a93ab

File tree

8 files changed

+23
-20
lines changed

8 files changed

+23
-20
lines changed

compiler/src/dotty/tools/dotc/reporting/ErrorMessageID.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ enum ErrorMessageID(val isActive: Boolean = true) extends java.lang.Enum[ErrorMe
6767
case AmbiguousOverloadID // errorNumber: 51
6868
case ReassignmentToValID // errorNumber: 52
6969
case TypeDoesNotTakeParametersID // errorNumber: 53
70-
case ParameterizedTypeLacksArgumentsID // errorNumber: 54
70+
case ParameterizedTypeLacksArgumentsID extends ErrorMessageID(isActive = false) // errorNumber: 54
7171
case VarValParametersMayNotBeCallByNameID // errorNumber: 55
7272
case MissingTypeParameterForID // errorNumber: 56
7373
case DoesNotConformToBoundID // errorNumber: 57
@@ -184,7 +184,8 @@ enum ErrorMessageID(val isActive: Boolean = true) extends java.lang.Enum[ErrorMe
184184
case ImplicitSearchTooLargeID // errorNumber: 168
185185
case TargetNameOnTopLevelClassID // errorNumber: 169
186186
case NotClassTypeID // errorNumber 170
187-
187+
case MissingArgumentID // errorNumer 171
188+
188189
def errorNumber = ordinal - 1
189190

190191
object ErrorMessageID:

compiler/src/dotty/tools/dotc/reporting/messages.scala

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1406,15 +1406,6 @@ import cc.CaptureSet.IdentityCaptRefMap
14061406
|"""
14071407
}
14081408

1409-
class ParameterizedTypeLacksArguments(psym: Symbol)(using Context)
1410-
extends TypeMsg(ParameterizedTypeLacksArgumentsID) {
1411-
def msg = em"Parameterized $psym lacks argument list"
1412-
def explain =
1413-
em"""The $psym is declared with non-implicit parameters, you may not leave
1414-
|out the parameter list when extending it.
1415-
|"""
1416-
}
1417-
14181409
class VarValParametersMayNotBeCallByName(name: TermName, mutable: Boolean)(using Context)
14191410
extends SyntaxMsg(VarValParametersMayNotBeCallByNameID) {
14201411
def varOrVal = if (mutable) em"${hl("var")}" else em"${hl("val")}"
@@ -1445,6 +1436,13 @@ import cc.CaptureSet.IdentityCaptRefMap
14451436
def explain = em"A fully applied type is expected but $tpe takes $numParams $parameters"
14461437
}
14471438

1439+
class MissingArgument(pname: Name, methString: String)(using Context)
1440+
extends TypeMsg(MissingArgumentID):
1441+
def msg =
1442+
if pname.firstPart contains '$' then s"not enough arguments for $methString"
1443+
else s"missing argument for parameter $pname of $methString"
1444+
def explain = ""
1445+
14481446
class DoesNotConformToBound(tpe: Type, which: String, bound: Type)(using Context)
14491447
extends TypeMismatchMsg(
14501448
if which == "lower" then bound else tpe,
@@ -2535,3 +2533,4 @@ import cc.CaptureSet.IdentityCaptRefMap
25352533
extends TypeMsg(NotClassTypeID), ShowMatchTrace(tp):
25362534
def msg = ex"$tp is not a class type"
25372535
def explain = ""
2536+

compiler/src/dotty/tools/dotc/typer/Applications.scala

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -580,12 +580,8 @@ trait Applications extends Compatibility {
580580
else
581581
formals1
582582

583-
def missingArg(n: Int): Unit = {
584-
val pname = methodType.paramNames(n)
585-
fail(
586-
if (pname.firstPart contains '$') s"not enough arguments for $methString"
587-
else s"missing argument for parameter $pname of $methString")
588-
}
583+
def missingArg(n: Int): Unit =
584+
fail(MissingArgument(methodType.paramNames(n), methString))
589585

590586
def tryDefault(n: Int, args1: List[Arg]): Unit = {
591587
val sym = methRef.symbol

compiler/test/dotty/tools/repl/ShadowingTests.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ class ShadowingTests extends ReplTest(options = ShadowingTests.options):
8080
shadowed = "class C(val c: Int)",
8181
script =
8282
"""|scala> new C().c
83-
|-- Error: ----------------------------------------------------------------------
83+
|-- [E171] Type Error: ----------------------------------------------------------
8484
|1 | new C().c
8585
| | ^^^^^^^
8686
| | missing argument for parameter c of constructor C in class C: (c: Int): C

tests/neg/i16130.check

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
-- [E171] Type Error: tests/neg/i16130.scala:3:16 ----------------------------------------------------------------------
2+
3 | val foo = new Foo {} // error
3+
| ^^^
4+
| missing argument for parameter x of constructor Foo in trait Foo: (x: Int): Foo

tests/neg/i16130.scala

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
@main def ParameterizedTypeLacksArgumentsID =
2+
trait Foo(x: Int)
3+
val foo = new Foo {} // error

tests/neg/i6778.check

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
| class A is not a trait
55
|
66
| longer explanation available when compiling with `-explain`
7-
-- Error: tests/neg/i6778.scala:3:6 ------------------------------------------------------------------------------------
7+
-- [E171] Type Error: tests/neg/i6778.scala:3:6 ------------------------------------------------------------------------
88
3 |class Bar extends Foo with A(10) // error // error
99
| ^
1010
| missing argument for parameter x of constructor A in class A: (x: Int): A

tests/neg/i9436.check

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
| method f1 must be called with () argument
55
|
66
| longer explanation available when compiling with `-explain`
7-
-- Error: tests/neg/i9436.scala:9:14 -----------------------------------------------------------------------------------
7+
-- [E171] Type Error: tests/neg/i9436.scala:9:14 -----------------------------------------------------------------------
88
9 | println(x.f2(1)) // error
99
| ^^^^^^^
1010
| missing argument for parameter y of method f2: (x: Int, y: Int): Int

0 commit comments

Comments
 (0)