Compilation error when local variable name clashes with implicit one

The code below compiles fine

import cats._
import cats.implicits._
import scala.concurrent.{ExecutionContext, Future}

implicit val e: scala.concurrent.ExecutionContext = scala.concurrent.ExecutionContext.global
val x = List(1, 2).traverse(ee =>
   Future.successful(true).map(v => (v, 1)) 
 )

print(x)

But it doesn’t compile when names match (ee and e in code above)

import cats._
import cats.implicits._
import scala.concurrent.{ExecutionContext, Future}

implicit val variableE: scala.concurrent.ExecutionContext = scala.concurrent.ExecutionContext.global
val x = List(1, 2).traverse(variableE =>
   Future.successful(true).map(v => (v, 1)) 
 )

print(x)

Reproducible for Scala v2.13.10

Shadowing of implicits was a Scala 2 feature (it is a mechanism for removing an implicit from lexically scoped implicits), but problematic as you show.

The feature is removed in Scala 3. That is item 2 in this section where it is mentioned.

Worth adding that if shadowing is never desired, the style is to use arbitrary identifiers:

implicit val `unlikely to be shadowed accidentally`: T = ???