scala / bug

Scala 2 bug reports only. Please, no questions — proper bug reports only.
https://scala-lang.org
232 stars 21 forks source link

[Scala 2.13.12] -quickfix produces invalid syntax #12882

Closed scoquelin closed 1 year ago

scoquelin commented 1 year ago

Reproduction steps

Scala version: 2.13.12

Here is the Holiday.scala source file (with implicit def function missing explicit type) :

class Holiday(date: java.time.LocalDate)

object HolidayConversion {
  implicit def dateToHoliday(date: java.time.LocalDate) = new Holiday(date)
}

Problem

After compiling with Scala 2.13.12 with -quickfix compiler flag :

$ scalac -version
Scala compiler version 2.13.12 -- Copyright 2002-2023, LAMP/EPFL and Lightbend, 
$ scalac -quickfix:any Holiday.scala
Holiday.scala:4: warning: [rewritten by -quickfix] Implicit definition should have explicit type (inferred Holiday)
  implicit def dateToHoliday(date: java.time.LocalDate) = new Holiday(date)
               ^

the modified code

class Holiday(date: java.time.LocalDate)

object HolidayConversion {
  implicit def dateToHoliday: Holiday(date: java.time.LocalDate) = new Holiday(date)
}

does not compile :

$ scalac -quickfix:any Holiday.scala
Holiday.scala:4: error: [rewritten by -quickfix] '=' expected but '(' found.
  implicit def dateToHoliday: Holiday(date: java.time.LocalDate) = new Holiday(date)
                                     ^
Holiday.scala:5: error: [rewritten by -quickfix] illegal start of simple expression
}
^
2 errors

would have expected this code to be generated instead (or worst case nothing modified) :

class Holiday(date: java.time.LocalDate)

object HolidayConversion {
  implicit def dateToHoliday(date: java.time.LocalDate): Holiday = new Holiday(date)
}
scoquelin commented 1 year ago

just realised I might have just filed a duplicate of #12860 which is currently being addressed so closing

som-snytt commented 1 year ago

Thanks, I was just taking a look at the PR and this ticket, and your example still fails, so I'll reopen for now.

[error] Test scala.tools.nsc.reporters.CodeActionXsource3Test.t12882 failed: org.junit.ComparisonFailure:
[error] class Holiday(date: java.time.LocalDate)
[error]
[error] object HolidayConversion {
[error]   implicit def dateToHoliday: Holiday(date: java.time.LocalDate) = new Holiday(date)
[error] }
[error]  expected:<...it def dateToHoliday[(date: java.time.LocalDate): Holiday] = new Holiday(date)...> but was:<...it def dateToHoliday[: Holiday(date: java.time.LocalDate)] = new Holiday(date)...>, took 0.05 sec
SethTisue commented 1 year ago

attn @lrytz

som-snytt commented 1 year ago

I assigned myself since I learned a bit about lrytz's mysterious feature also known as "the rytz fix". But I fell asleep and will take it up again in daylight.