From 8992c47786adecaac1f696734a8bd5393c090fa1 Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Wed, 10 Sep 2025 16:49:48 +0200 Subject: [PATCH 1/4] Adding scalafix scapegoat linter. --- .github/workflows/ci.yml | 2 +- .scalafix.conf | 94 ++++++++++++++++++ build.gradle | 16 +-- docs/readthedocs/developersguide.md | 1 + .../usersguide/intellij-gradle-settings.png | Bin 0 -> 21661 bytes gradle/scripts/scalafix.gradle | 6 ++ .../weather/WeatherSourceWrapper.scala | 2 +- .../ie3/simona/util/ResultFileHierarchy.scala | 5 +- 8 files changed, 109 insertions(+), 17 deletions(-) create mode 100644 .scalafix.conf create mode 100644 docs/readthedocs/images/usersguide/intellij-gradle-settings.png create mode 100644 gradle/scripts/scalafix.gradle diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5c476bf1da..ab37345b4e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -67,7 +67,7 @@ jobs: run: bash scripts/run-version-check.sh - name: Build Project - run: ./gradlew --refresh-dependencies clean assemble spotlessCheck + run: ./gradlew --refresh-dependencies clean assemble spotlessCheck scalafix - name: Run Tests run: ./gradlew test reportScoverage checkScoverage diff --git a/.scalafix.conf b/.scalafix.conf new file mode 100644 index 0000000000..4b1ef3ac81 --- /dev/null +++ b/.scalafix.conf @@ -0,0 +1,94 @@ +rules = [ + DisableSyntax, + LeakingImplicitClassVal, + # from scalafix-scapegoat + ArrayEquals, + ArraysInFormat, + ArraysToString, + AvoidSizeEqualsZero, + AvoidSizeNotEqualsZero, + AvoidToMinusOne, + BigDecimalDoubleConstructor, + BigDecimalScaleWithoutRoundingMode, + BooleanParameter, + BoundedByFinalType, + BrokenOddness, + CatchException, + CatchExceptionImmediatelyRethrown, + CatchFatal, + CatchNpe, + CatchThrowable, + ClassNames, + CollectionIndexOnNonIndexedSeq, + CollectionNamingConfusion, + CollectionNegativeIndex, + CollectionPromotionToAny, + ComparingFloatingPointTypes, + ComparisonToEmptyList, + ComparisonToEmptySet, + ComparisonWithSelf, + ConstantIf, + DivideByOne, + DoubleNegation, + DuplicateImport, + DuplicateMapKey, + DuplicateSetValue, + EitherGet, + EmptyCaseClass, + EmptyFor, + EmptyIfBlock, + #EmptyInterpolatedString, + EmptyMethod, + EmptySynchronizedBlock, + EmptyTryBlock, + EmptyWhileBlock, + ExistsSimplifiableToContains, + FilterDotHead, + FilterDotHeadOption, + FilterDotIsEmpty, + FilterDotSize, + FilterOptionAndGet, + FinalModifierOnCaseClass, + FinalizerWithoutSuper, + FindAndNotEqualsNoneReplaceWithExists, + FindDotIsDefined, + IllegalFormatString, + ImpossibleOptionSizeCondition, + IncorrectNumberOfArgsToFormat, + IncorrectlyNamedExceptions, + InterpolationToString, + InvalidRegexTest, + #LonelySealedTrait, + LooksLikeInterpolatedString, + MapGetAndGetOrElse, + MethodReturningAny, + NanComparison, + NullAssignment, + NullParameter, + OptionGet, + OptionSize, + RepeatedCaseBody, + RepeatedIfElseBody, + StripMarginOnRegex, + SwallowedException, + #TryGet, # was disabled in scapegoat + UnnecessaryConversion, + UnreachableCatch, + UnsafeContains, + UnsafeStringContains, + UnsafeTraversableMethods, + UnusedMethodParameter, + VarCouldBeVal, + VariableShadowing, + WhileTrue +] + +DisableSyntax { + noWhileLoops = true + #noIsInstanceOf = true # FIXME can be enabled once pureconfig is in use + #noAsInstanceOf = true # FIXME same + noXml = true + noFinalize = true + noValPatterns = true +} + diff --git a/build.gradle b/build.gradle index 0ef266c0bc..765836d51b 100644 --- a/build.gradle +++ b/build.gradle @@ -6,6 +6,7 @@ plugins { id 'signing' id 'maven-publish' // publish to a maven repo (local or mvn central, has to be defined) id 'com.diffplug.spotless' version '7.2.1' // code format + id 'io.github.cosmicsilence.scalafix' version '0.2.4' id "com.github.ben-manes.versions" version '0.52.0' id "de.undercouch.download" version "5.6.0" // downloads plugin id "kr.motd.sphinx" version "2.10.1" // documentation generation @@ -146,8 +147,7 @@ dependencies { implementation "org.locationtech.jts.io:jts-io-common:${jtsVersion}" /* Scala compiler plugin for static code analysis */ - implementation "com.sksamuel.scapegoat:scalac-scapegoat-plugin_${scalaBinaryVersion}:${scapegoatVersion}" - scalaCompilerPlugin "com.sksamuel.scapegoat:scalac-scapegoat-plugin_${scalaBinaryVersion}:${scapegoatVersion}" + scalafix "io.github.dedis:scapegoat-scalafix_${scalaVersion}:1.1.4" /* Kafka */ implementation "org.apache.kafka:kafka-clients:${confluentKafkaVersion}-ccs" @@ -202,11 +202,7 @@ shadowJar { // using compileScala instead of tasks.withType(ScalaCompile) prevents applying scapegoat to scala test classes // see https://docs.gradle.org/current/userguide/scala_plugin.html#sec:configure_scala_classpath for details tasks.withType(ScalaCompile).configureEach { - scalaCompileOptions.additionalParameters = scala3compilerOptions + [ - "-Xplugin:" + configurations.scalaCompilerPlugin.asPath, - "-P:scapegoat:dataDir:" + project.layout.buildDirectory.get().asFile.absolutePath + "/reports/scapegoat/src/", - "-P:scapegoat:disabledInspections:TryGet" - ] + scalaCompileOptions.additionalParameters = scala3compilerOptions scalaCompileOptions.forkOptions.jvmArgs = [ '-Xss2m', '-XX:-UseGCOverheadLimit' @@ -215,11 +211,7 @@ tasks.withType(ScalaCompile).configureEach { // separate scapegoat report for test classes compileTestScala { - scalaCompileOptions.additionalParameters = scala3compilerOptions + [ - "-Xplugin:" + configurations.scalaCompilerPlugin.asPath, - "-P:scapegoat:dataDir:" + project.layout.buildDirectory.get().asFile.absolutePath + "/reports/scapegoat/testsrc/", - "-P:scapegoat:disabledInspections:TryGet" - ] + scalaCompileOptions.additionalParameters = scala3compilerOptions } tasks.register("printVersion") { diff --git a/docs/readthedocs/developersguide.md b/docs/readthedocs/developersguide.md index 89289cc112..ddbea88b0a 100644 --- a/docs/readthedocs/developersguide.md +++ b/docs/readthedocs/developersguide.md @@ -30,6 +30,7 @@ In short, mergeable PRs have to meet our standards in several areas: - Automated checks - GitHub Actions run succeeds, i.e. - The code needs to be properly formatted (`gradle spotlessApply`) + - The code needs to adhere to some standards regarding import order etc. (`gradle scalafix`) - The code needs to compile - All tests need to succeed - [SonarQube](https://simona.ie3.e-technik.tu-dortmund.de/sonar/dashboard?id=edu.ie3%3Asimona) run succeeds, i.e. diff --git a/docs/readthedocs/images/usersguide/intellij-gradle-settings.png b/docs/readthedocs/images/usersguide/intellij-gradle-settings.png new file mode 100644 index 0000000000000000000000000000000000000000..d461a36f11d94550c9a63632e28d83a3b2cd3901 GIT binary patch literal 21661 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%0DrIKLTXcTpf|3JUT@B0z` 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 literal 0 HcmV?d00001 diff --git a/gradle/scripts/scalafix.gradle b/gradle/scripts/scalafix.gradle new file mode 100644 index 0000000000..0dd618e156 --- /dev/null +++ b/gradle/scripts/scalafix.gradle @@ -0,0 +1,6 @@ +scalafix { + configFile = file(".scalafix.conf") + includes = ["/edu/**/*.scala"] + excludes = ["**/generated/**"] + ignoreSourceSets = ["scoverage"] +} \ No newline at end of file diff --git a/src/main/scala/edu/ie3/simona/service/weather/WeatherSourceWrapper.scala b/src/main/scala/edu/ie3/simona/service/weather/WeatherSourceWrapper.scala index 09cae00a5f..16f1b74ce2 100644 --- a/src/main/scala/edu/ie3/simona/service/weather/WeatherSourceWrapper.scala +++ b/src/main/scala/edu/ie3/simona/service/weather/WeatherSourceWrapper.scala @@ -139,7 +139,7 @@ private[weather] final case class WeatherSourceWrapper private ( case EMPTY_WEATHER_DATA.diffIrr => // Some data sets do not provide diffuse irradiance, so we do not // warn here - logger.debug("Diffuse solar irradiance not available at $point.") + logger.debug(s"Diffuse solar irradiance not available at $point.") (averagedWeather.diffIrr, 0d) case nonEmptyDiffIrr => (averagedWeather.diffIrr + nonEmptyDiffIrr * weight, weight) diff --git a/src/main/scala/edu/ie3/simona/util/ResultFileHierarchy.scala b/src/main/scala/edu/ie3/simona/util/ResultFileHierarchy.scala index ea7b3ed2f2..c96947f2fd 100644 --- a/src/main/scala/edu/ie3/simona/util/ResultFileHierarchy.scala +++ b/src/main/scala/edu/ie3/simona/util/ResultFileHierarchy.scala @@ -51,9 +51,8 @@ object ResultFileHierarchy extends LazyLogging { addTimeStampToOutputDir: Boolean = true, ): ResultFileHierarchy = { - val runStartTimeUTC = Option.when(addTimeStampToOutputDir)( - new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss").format(new java.util.Date()) - ) + val runStartTimeUTC = + Option.when(addTimeStampToOutputDir)("yyyy-MM-dd_HH-mm-ss") val baseOutputDir = buildBaseOutputDir(outputDir) From 78099b69b5b1a3ae16f8a645411ca8e66066a686 Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Thu, 11 Sep 2025 08:22:24 +0200 Subject: [PATCH 2/4] Fixing scalafix in ci. --- .github/workflows/ci.yml | 2 +- build.gradle | 5 +++-- gradle/scripts/scalafix.gradle | 3 +++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ab37345b4e..1eda94b498 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -67,7 +67,7 @@ jobs: run: bash scripts/run-version-check.sh - name: Build Project - run: ./gradlew --refresh-dependencies clean assemble spotlessCheck scalafix + run: ./gradlew --refresh-dependencies clean assemble spotlessCheck scalafixMain scalafixTest - name: Run Tests run: ./gradlew test reportScoverage checkScoverage diff --git a/build.gradle b/build.gradle index 765836d51b..0c5de34503 100644 --- a/build.gradle +++ b/build.gradle @@ -40,7 +40,8 @@ ext { "-language:implicitConversions", "-language:existentials", "-Wunused:all", - "-Xmax-inlines:128" + "-Xmax-inlines:128", + "-Ywarn-unused" ] } @@ -146,7 +147,7 @@ dependencies { } implementation "org.locationtech.jts.io:jts-io-common:${jtsVersion}" - /* Scala compiler plugin for static code analysis */ + /* Scalafix plugin for static code analysis */ scalafix "io.github.dedis:scapegoat-scalafix_${scalaVersion}:1.1.4" /* Kafka */ diff --git a/gradle/scripts/scalafix.gradle b/gradle/scripts/scalafix.gradle index 0dd618e156..04ae0140da 100644 --- a/gradle/scripts/scalafix.gradle +++ b/gradle/scripts/scalafix.gradle @@ -3,4 +3,7 @@ scalafix { includes = ["/edu/**/*.scala"] excludes = ["**/generated/**"] ignoreSourceSets = ["scoverage"] + semanticdb { + autoConfigure = false + } } \ No newline at end of file From 252892870da9c4f6ca8a3c7e6c245454e0997607 Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Thu, 11 Sep 2025 08:55:28 +0200 Subject: [PATCH 3/4] Fixing failing test. --- .scalafix.conf | 2 +- build.gradle | 3 +-- .../scala/edu/ie3/simona/util/ResultFileHierarchy.scala | 5 +++-- .../scala/edu/ie3/util/scala/io/ScalaReflectionSerde.scala | 6 +++--- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.scalafix.conf b/.scalafix.conf index 4b1ef3ac81..4df9c05bec 100644 --- a/.scalafix.conf +++ b/.scalafix.conf @@ -54,7 +54,7 @@ rules = [ FindDotIsDefined, IllegalFormatString, ImpossibleOptionSizeCondition, - IncorrectNumberOfArgsToFormat, + #IncorrectNumberOfArgsToFormat, # with this the addition of timestamps fails IncorrectlyNamedExceptions, InterpolationToString, InvalidRegexTest, diff --git a/build.gradle b/build.gradle index 0c5de34503..507603b781 100644 --- a/build.gradle +++ b/build.gradle @@ -40,8 +40,7 @@ ext { "-language:implicitConversions", "-language:existentials", "-Wunused:all", - "-Xmax-inlines:128", - "-Ywarn-unused" + "-Xmax-inlines:128" ] } diff --git a/src/main/scala/edu/ie3/simona/util/ResultFileHierarchy.scala b/src/main/scala/edu/ie3/simona/util/ResultFileHierarchy.scala index c96947f2fd..ea7b3ed2f2 100644 --- a/src/main/scala/edu/ie3/simona/util/ResultFileHierarchy.scala +++ b/src/main/scala/edu/ie3/simona/util/ResultFileHierarchy.scala @@ -51,8 +51,9 @@ object ResultFileHierarchy extends LazyLogging { addTimeStampToOutputDir: Boolean = true, ): ResultFileHierarchy = { - val runStartTimeUTC = - Option.when(addTimeStampToOutputDir)("yyyy-MM-dd_HH-mm-ss") + val runStartTimeUTC = Option.when(addTimeStampToOutputDir)( + new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss").format(new java.util.Date()) + ) val baseOutputDir = buildBaseOutputDir(outputDir) diff --git a/src/main/scala/edu/ie3/util/scala/io/ScalaReflectionSerde.scala b/src/main/scala/edu/ie3/util/scala/io/ScalaReflectionSerde.scala index d2beeeba3a..bc9ea77699 100644 --- a/src/main/scala/edu/ie3/util/scala/io/ScalaReflectionSerde.scala +++ b/src/main/scala/edu/ie3/util/scala/io/ScalaReflectionSerde.scala @@ -26,7 +26,7 @@ import org.apache.kafka.common.serialization.{Deserializer, Serializer} */ object ScalaReflectionSerde { - def reflectionSerializer4S[T >: Null: SchemaFor: Encoder]: Serializer[T] = + def reflectionSerializer4S[T >: Null: {SchemaFor, Encoder}]: Serializer[T] = new Serializer[T] { val inner = new GenericAvroSerializer() val schema: Schema = AvroSchema[T] @@ -45,7 +45,7 @@ object ScalaReflectionSerde { override def close(): Unit = inner.close() } - def reflectionDeserializer4S[T >: Null: SchemaFor: Decoder]: Deserializer[T] = + def reflectionDeserializer4S[T >: Null: {SchemaFor, Decoder}]: Deserializer[T] = new Deserializer[T] { val inner = new GenericAvroDeserializer() val schema: Schema = AvroSchema[T] @@ -60,7 +60,7 @@ object ScalaReflectionSerde { Option(maybeData) .filter(_.nonEmpty) .map(data => fromRecord.from(inner.deserialize(topic, data))) - .getOrElse(null.asInstanceOf[T]) + .orNull override def close(): Unit = inner.close() } From 3752b7aa355831e82b92315ef92cd507922953d5 Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Thu, 11 Sep 2025 09:11:47 +0200 Subject: [PATCH 4/4] Fix scala3 syntax issue. --- .../scala/edu/ie3/util/scala/io/ScalaReflectionSerde.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/scala/edu/ie3/util/scala/io/ScalaReflectionSerde.scala b/src/main/scala/edu/ie3/util/scala/io/ScalaReflectionSerde.scala index bc9ea77699..8cab1e207f 100644 --- a/src/main/scala/edu/ie3/util/scala/io/ScalaReflectionSerde.scala +++ b/src/main/scala/edu/ie3/util/scala/io/ScalaReflectionSerde.scala @@ -26,7 +26,7 @@ import org.apache.kafka.common.serialization.{Deserializer, Serializer} */ object ScalaReflectionSerde { - def reflectionSerializer4S[T >: Null: {SchemaFor, Encoder}]: Serializer[T] = + def reflectionSerializer4S[T >: Null: SchemaFor: Encoder]: Serializer[T] = new Serializer[T] { val inner = new GenericAvroSerializer() val schema: Schema = AvroSchema[T] @@ -45,7 +45,7 @@ object ScalaReflectionSerde { override def close(): Unit = inner.close() } - def reflectionDeserializer4S[T >: Null: {SchemaFor, Decoder}]: Deserializer[T] = + def reflectionDeserializer4S[T >: Null: SchemaFor: Decoder]: Deserializer[T] = new Deserializer[T] { val inner = new GenericAvroDeserializer() val schema: Schema = AvroSchema[T]