File tree Expand file tree Collapse file tree 3 files changed +43
-4
lines changed 
compiler/src/dotty/tools/dotc/reporting Expand file tree Collapse file tree 3 files changed +43
-4
lines changed Original file line number Diff line number Diff line change @@ -2125,8 +2125,27 @@ extends NamingMsg(AlreadyDefinedID):
21252125        i "  in  ${conflicting.associatedFile}" 
21262126      else  if  conflicting.owner ==  owner then  " " 
21272127      else  i "  in  ${conflicting.owner}" 
2128+     def  print (tpe : Type ):  String  = 
2129+       def  addParams (tpe : Type ):  List [String ] =  tpe match 
2130+         case  tpe : MethodType  => 
2131+           val  s  =  if  tpe.isContextualMethod then  i " ( ${tpe.paramInfos}%, %) => "  else  " " 
2132+           s ::  addParams(tpe.resType)
2133+         case  tpe : PolyType  => 
2134+           i " [ ${tpe.paramNames}%, %] => "  ::  addParams(tpe.resType)
2135+         case  tpe => 
2136+           i " $tpe"  ::  Nil 
2137+       addParams(tpe).mkString("  "  )
21282138    def  note  = 
2129-       if  owner.is(Method ) ||  conflicting.is(Method ) then 
2139+       if  conflicting.is(Given ) &&  name.startsWith(" given_"  ) then 
2140+         i """ | 
2141+             | 
2142+             |Provide an explicit, unique name to given definitions, 
2143+             |since the names assigned to anonymous givens may clash. For example: 
2144+             | 
2145+             |      given myGiven:  ${print(atPhase(typerPhase)(conflicting.info))}  // define an instance 
2146+             |      given myGiven @  ${print(atPhase(typerPhase)(conflicting.info))} // as a pattern variable 
2147+             | """ 
2148+       else  if  owner.is(Method ) ||  conflicting.is(Method ) then 
21302149        " \n\n Note that overloaded methods must all be defined in the same group of toplevel definitions" 
21312150      else  " " 
21322151    if  conflicting.isTerm !=  name.isTermName then 
Original file line number Diff line number Diff line change 1- -- [E161] Naming Error: tests/neg/i23119.scala:7 :4 ---------------------------------------------------------------------
2- 7  |    given Option[List[Int]] = Some(List(x)) // error
1+ -- [E161] Naming Error: tests/neg/i23119.scala:8 :4 ---------------------------------------------------------------------
2+ 8  |    given Option[List[Int]] = Some(List(x)) // error
33  |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
44  |    given_Option_List is already defined as given instance given_Option_List
55  |
6-   |    Note that overloaded methods must all be defined in the same group of toplevel definitions
6+   |    Provide an explicit, unique name to given definitions,
7+   |    since the names assigned to anonymous givens may clash. For example:
8+   |
9+   |          given myGiven: Option[List[String]]  // define an instance
10+   |          given myGiven @ Option[List[String]] // as a pattern variable
11+ -- [E161] Naming Error: tests/neg/i23119.scala:18:8 --------------------------------------------------------------------
12+ 18 |  given [A] => List[A] = ??? // error
13+    |  ^^^^^^^^^^^^^^^^^^^^^^^^^^
14+    |  given_List_A is already defined as given instance given_List_A
15+    |
16+    |  Provide an explicit, unique name to given definitions,
17+    |  since the names assigned to anonymous givens may clash. For example:
18+    |
19+    |        given myGiven: [A] => List[A]  // define an instance
20+    |        given myGiven @ [A] => List[A] // as a pattern variable
Original file line number Diff line number Diff line change 1+ //>  using  options  -explain 
12
23@ main def  test  =  println :
34  for  x <-  1  to 2 
1112//   given_Option_List is already defined as given instance given_Option_List
1213//  Previously the naming clash was noticed when extracting values in the map or do function:
1314//   duplicate pattern variable: given_Option_List
15+ 
16+ def  also  = 
17+   given  [A ] =>  List [A ] =  ??? 
18+   given  [A ] =>  List [A ] =  ???  //  error
19+   ()
    
 
   
 
     
   
   
          
     
  
    
     
 
    
      
     
 
     
    You can’t perform that action at this time.
  
 
    
  
     
    
      
        
     
 
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments