@@ -1893,4 +1893,54 @@ class ErrorMessagesTests extends ErrorMessagesTest {
1893
1893
assertEquals(" Only methods allowed here, since collective parameters are given" , errorMsg)
1894
1894
assertEquals(" val v: T = t" , x.show)
1895
1895
}
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
+ }
1896
1946
}
0 commit comments