Scalafmt config file error results in very unhelpful error message
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 45/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Área
- build-system, tooling
Línea de trabajo
Comienza en lib/src/main/java/com/diffplug/spotless/scala/ScalaFmtStep.java, especialmente en createFormat y en la línea relacionada con el acceso incondicional a Either. Reproduce el fallo con el build.gradle.kts mostrado y el .scalafmt.conf no válido; después, verifica que los errores de configuración produzcan una excepción reportada útil en lugar de InvocationTargetException y NoSuchElementException.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
If you have any errors in the Scalafmt configuration file, e.g. a mistype in an option name, the Scalafmt step will fail with a very unhelpful error message:
Caused by: java.lang.reflect.InvocationTargetException
at com.diffplug.spotless.scala.ScalaFmtStep.invokeNoArg(ScalaFmtStep.java:142)
at com.diffplug.spotless.scala.ScalaFmtStep.access$100(ScalaFmtStep.java:38)
at com.diffplug.spotless.scala.ScalaFmtStep$State.createFormat(ScalaFmtStep.java:130)
at com.diffplug.spotless.FormatterStepImpl$Standard.format(FormatterStepImpl.java:76)
at com.diffplug.spotless.FormatterStep$Strict.format(FormatterStep.java:76)
at com.diffplug.spotless.Formatter.compute(Formatter.java:230)
... 90 more
Caused by: java.util.NoSuchElementException: Either.right.value on Left
at scala.util.Either$RightProjection.get(Either.scala:453)
... 96 more
Spotless configuration
build.gradle.kts:
spotless {
scala {
scalafmt("2.3.2").configFile(rootProject.layout.projectDirectory.file(".scalafmt.conf"))
}
}
.scalafmt.conf:
// does not matter, as long as there is some error
unknownProperty = 123
Thoughts
The reason why this happens is an unconditional call to either.right.get:
This is not a right way to do it: in Scala, proper handling would've looked like this:
config = either match {
case Left(e) => // e is an error (maybe even a `Throwable`), log it somehow or wrap it into an exception and throw it
case Right(r) => r // successful result
}
In Java, I guess something like this should work (without reflection):
if (either.isLeft()) {
$ErrorType$ e = either.left().get()
// handle error
} else {
config = either.right().get()
}
Gradle version
6.1.1, but probably not relevant
Spotless version
3.26.1
OS
macOS 10.14.6
- Lenguaje dominante
- Java
- Estrellas
- 5.7k
- Forks
- 560
- Merge medio
- 1 d 13 h
- PR fusionados (30 d)
- 43
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de diffplug/spotless
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 15/100
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 66/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 52/100
Todos los issues de diffplug/spotless
Issues similares
-
bug
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
apache/cloudstack#14222 ·
-
[BUG]茶杯方块在取茶时会引发崩溃 Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
-
Cannot differ own consent and managed consents in My Consents view and detailed consent view. Abierto1.0.0-alpha2 Type/Improvement
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
wso2/dpdp-accelerator#272 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
infinispan/infinispan#18150 ·
-
area/frontend
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100