linter to run on the build process

This commit is contained in:
minjaesong
2023-09-20 14:29:24 +09:00
parent 32f5da1909
commit a2e9f30e30
4 changed files with 41 additions and 5 deletions

View File

@@ -0,0 +1,11 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="QuickDirtyLint" type="Application" factoryName="Application">
<option name="ALTERNATIVE_JRE_PATH" value="17" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
<option name="MAIN_CLASS_NAME" value="net.torvald.terrarum.QuickDirtyLintKt" />
<module name="TerrarumBuild" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>

View File

@@ -12,6 +12,7 @@
<artifact name="ModuleComputers" />
<artifact name="TerrarumBuild" />
</option>
<option name="RunConfigurationTask" enabled="false" run_configuration_name="QuickDirtyLint" run_configuration_type="Application" />
</method>
</configuration>
</component>

View File

@@ -12,6 +12,7 @@
<artifact name="ModuleComputers" />
<artifact name="TerrarumBuild" />
</option>
<option name="RunConfigurationTask" enabled="true" run_configuration_name="QuickDirtyLint" run_configuration_type="Application" />
</method>
</configuration>
</component>

View File

@@ -1,17 +1,19 @@
package net.torvald.terrarum
import io.github.classgraph.ClassGraph
import io.github.classgraph.ClassInfo
import net.torvald.random.HQRNG
import net.torvald.terrarum.gameactors.Actor
import net.torvald.terrarum.gameitems.GameItem
import java.util.*
import kotlin.system.exitProcess
/**
* Created by minjaesong on 2023-05-22.
*/
fun main() {
val csiR = "\u001B[31m"
val csiG = "\u001B[32m"
val csi0 = "\u001B[m"
val superClasses = listOf(
Actor::class.java,
GameItem::class.java
@@ -86,9 +88,20 @@ fun main() {
).flatMap { listOf(it, "[$it") }
val classaNonGrata = listOf(
"net.torvald.terrarum.modulebasegame.MovableWorldCamera"
"net.torvald.terrarum.modulebasegame.MovableWorldCamera",
"net.torvald.terrarum.modulebasegame.TitleScreen\$CameraPlayer"
)
val classaNomenNonGrata = listOf(
"Companion", "bulletDatabase"
)
val remarks = mapOf(
"Ljava/util/List" to "java.util.List has no zero-arg constructor."
)
var retcode = 0
ClassGraph().acceptPackages("net.torvald.terrarum")/*.verbose()*/.enableAllInfo().scan().let { scan ->
val offendingFields = scan.allClasses.filter { classinfo ->
superClasses.any { classinfo.extendsSuperclass(it) || classinfo.name == it.canonicalName } &&
@@ -100,14 +113,24 @@ fun main() {
!serialisablePrimitives.contains(field.typeSignatureOrTypeDescriptorStr) &&
serialisableTypes.none { field.typeSignatureOrTypeDescriptorStr.startsWith(it) }
}
}.filter {
!classaNomenNonGrata.contains(it.name) && !it.name.startsWith("this") && !it.name.contains("\$delegate")
}
// println(offendingFields)
offendingFields.forEach {
println("\u001B[1m${it.name}\u001B[m\n\t\u001B[32mfrom: \u001B[m${it.className}\n\t\u001B[32mtype: \u001B[m${it.typeSignatureOrTypeDescriptorStr}")
println("\u001B[1m${it.name}\u001B[m\n" +
"\t${csiG}from: ${csi0}${it.className}\n" +
"\t${csiG}type: ${csi0}${it.typeSignatureOrTypeDescriptorStr}\n" +
"\t${csiG}remarks: ${csi0}${remarks.keys.filter { key -> it.typeSignatureOrTypeDescriptorStr.startsWith(key) }.map { remarks[it] }.joinToString(" ")}")
retcode = 1
}
}
if (retcode != 0) {
println("\n${csiR}Having above classes as non-@Transient may cause savegame to not load!$csi0")
}
exitProcess(retcode)
}