@@ -1893,4 +1893,54 @@ class ErrorMessagesTests extends ErrorMessagesTest {
18931893 assertEquals(" Only methods allowed here, since collective parameters are given" , errorMsg)
18941894 assertEquals(" val v: T = t" , x.show)
18951895 }
1896+
1897+ @ Test def anonymousInstanceMustImplementAType =
1898+ checkMessagesAfter(RefChecks .name) {
1899+ """ object Test {
1900+ | extension on[T] (t: T) { }
1901+ |}
1902+ """ .stripMargin
1903+ }
1904+ .expect { (ictx, messages) ⇒
1905+ implicit val ctx : Context = ictx
1906+ assertMessageCount(1 , messages)
1907+ val errorMsg = messages.head.msg
1908+ assertEquals(" anonymous instance must implement a type or have at least one extension method" , errorMsg)
1909+ }
1910+
1911+ @ Test def typeSplicesInValPatterns =
1912+ checkMessagesAfter(RefChecks .name) {
1913+ s """ import scala.quoted._
1914+ |object Foo {
1915+ | def f(using q: QuoteContext) = {
1916+ | val t: Type[Int] = ???
1917+ | val '[ *:[ $$ t] ] = ???
1918+ | }
1919+ |}
1920+ """ .stripMargin
1921+ }
1922+ .expect { (ictx, messages) ⇒
1923+ implicit val ctx : Context = ictx
1924+ assertMessageCount(1 , messages)
1925+ val errorMsg = messages.head.msg
1926+ val TypeSpliceInValPattern (x) :: Nil = messages
1927+ assertEquals(" Type splices cannot be used in val patterns. Consider using `match` instead." , errorMsg)
1928+ assertEquals(" t" , x.show)
1929+ }
1930+
1931+ @ Test def modifierNotAllowedForDefinition =
1932+ checkMessagesAfter(RefChecks .name) {
1933+ """ object Test {
1934+ | opaque def o: Int = 3
1935+ |}
1936+ """ .stripMargin
1937+ }
1938+ .expect { (ictx, messages) ⇒
1939+ implicit val ctx : Context = ictx
1940+ assertMessageCount(1 , messages)
1941+ val errorMsg = messages.head.msg
1942+ val ModifierNotAllowedForDefinition (x) :: Nil = messages
1943+ assertEquals(" Modifier `opaque` is not allowed for this definition" , errorMsg)
1944+ assertEquals(" opaque" , x.flagsString)
1945+ }
18961946}
0 commit comments