mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-11 19:14:05 +09:00
linter to run on the build process
This commit is contained in:
11
.idea/runConfigurations/QuickDirtyLint.xml
generated
Normal file
11
.idea/runConfigurations/QuickDirtyLint.xml
generated
Normal 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>
|
||||||
1
.idea/runConfigurations/Terrarum.xml
generated
1
.idea/runConfigurations/Terrarum.xml
generated
@@ -12,6 +12,7 @@
|
|||||||
<artifact name="ModuleComputers" />
|
<artifact name="ModuleComputers" />
|
||||||
<artifact name="TerrarumBuild" />
|
<artifact name="TerrarumBuild" />
|
||||||
</option>
|
</option>
|
||||||
|
<option name="RunConfigurationTask" enabled="false" run_configuration_name="QuickDirtyLint" run_configuration_type="Application" />
|
||||||
</method>
|
</method>
|
||||||
</configuration>
|
</configuration>
|
||||||
</component>
|
</component>
|
||||||
@@ -12,6 +12,7 @@
|
|||||||
<artifact name="ModuleComputers" />
|
<artifact name="ModuleComputers" />
|
||||||
<artifact name="TerrarumBuild" />
|
<artifact name="TerrarumBuild" />
|
||||||
</option>
|
</option>
|
||||||
|
<option name="RunConfigurationTask" enabled="true" run_configuration_name="QuickDirtyLint" run_configuration_type="Application" />
|
||||||
</method>
|
</method>
|
||||||
</configuration>
|
</configuration>
|
||||||
</component>
|
</component>
|
||||||
@@ -1,17 +1,19 @@
|
|||||||
package net.torvald.terrarum
|
package net.torvald.terrarum
|
||||||
|
|
||||||
import io.github.classgraph.ClassGraph
|
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.gameactors.Actor
|
||||||
import net.torvald.terrarum.gameitems.GameItem
|
import net.torvald.terrarum.gameitems.GameItem
|
||||||
import java.util.*
|
import kotlin.system.exitProcess
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by minjaesong on 2023-05-22.
|
* Created by minjaesong on 2023-05-22.
|
||||||
*/
|
*/
|
||||||
fun main() {
|
fun main() {
|
||||||
|
|
||||||
|
val csiR = "\u001B[31m"
|
||||||
|
val csiG = "\u001B[32m"
|
||||||
|
val csi0 = "\u001B[m"
|
||||||
|
|
||||||
val superClasses = listOf(
|
val superClasses = listOf(
|
||||||
Actor::class.java,
|
Actor::class.java,
|
||||||
GameItem::class.java
|
GameItem::class.java
|
||||||
@@ -86,9 +88,20 @@ fun main() {
|
|||||||
).flatMap { listOf(it, "[$it") }
|
).flatMap { listOf(it, "[$it") }
|
||||||
|
|
||||||
val classaNonGrata = listOf(
|
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 ->
|
ClassGraph().acceptPackages("net.torvald.terrarum")/*.verbose()*/.enableAllInfo().scan().let { scan ->
|
||||||
val offendingFields = scan.allClasses.filter { classinfo ->
|
val offendingFields = scan.allClasses.filter { classinfo ->
|
||||||
superClasses.any { classinfo.extendsSuperclass(it) || classinfo.name == it.canonicalName } &&
|
superClasses.any { classinfo.extendsSuperclass(it) || classinfo.name == it.canonicalName } &&
|
||||||
@@ -100,14 +113,24 @@ fun main() {
|
|||||||
!serialisablePrimitives.contains(field.typeSignatureOrTypeDescriptorStr) &&
|
!serialisablePrimitives.contains(field.typeSignatureOrTypeDescriptorStr) &&
|
||||||
serialisableTypes.none { field.typeSignatureOrTypeDescriptorStr.startsWith(it) }
|
serialisableTypes.none { field.typeSignatureOrTypeDescriptorStr.startsWith(it) }
|
||||||
}
|
}
|
||||||
|
}.filter {
|
||||||
|
!classaNomenNonGrata.contains(it.name) && !it.name.startsWith("this") && !it.name.contains("\$delegate")
|
||||||
}
|
}
|
||||||
|
|
||||||
// println(offendingFields)
|
// println(offendingFields)
|
||||||
|
|
||||||
offendingFields.forEach {
|
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)
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user