[Doctools] Read source files for command ordering

This commit is contained in:
Kenzie Togami 2019-08-13 20:06:15 -07:00
parent 487da77a72
commit a0b9810c44
No known key found for this signature in database
GPG Key ID: 5D200B325E157A81
2 changed files with 17 additions and 7 deletions

View File

@ -14,4 +14,5 @@
"implementation"(project(":worldedit-libs:core:ap"))
"implementation"(project(":worldedit-core"))
"implementation"(kotlin("stdlib-jdk8"))
"implementation"(kotlin("reflect"))
}

View File

@ -48,10 +48,10 @@
import java.nio.file.Paths
import java.util.stream.Stream
import kotlin.streams.toList
import org.enginehub.piston.annotation.Command as CommandAnnotation
class DocumentationPrinter private constructor() {
private val nameRegex = Regex("name = \"(.+?)\"")
private val serializer = PlainComponentSerializer({ "" }, TranslatableComponent::key)
private val commands = WorldEdit.getInstance().platformManager.platformCommandManager.commandManager.allCommands
.map { it.name to it }.toList().toMap()
@ -59,10 +59,19 @@ class DocumentationPrinter private constructor() {
private val permsOutput = StringBuilder()
private suspend inline fun <reified T> SequenceScope<String>.yieldAllCommandsIn() {
for (method in T::class.java.methods) {
val cmdAnno = method.getDeclaredAnnotation(CommandAnnotation::class.java)
if (cmdAnno != null) {
yield(cmdAnno.name)
val sourceFile = Paths.get("worldedit-core/src/main/java/" + T::class.qualifiedName!!.replace('.', '/') + ".java")
require(Files.exists(sourceFile)) { "Source not found for ${T::class.qualifiedName}"}
Files.newBufferedReader(sourceFile).useLines { lines ->
var inCommand = false
for (line in lines) {
if (inCommand) {
when (val match = nameRegex.find(line)) {
null -> if (line.trim() == ")") inCommand = false
else -> yield(match.groupValues[1])
}
} else if (line.contains("@Command(")) {
inCommand = true
}
}
}
}
@ -219,8 +228,7 @@ private fun dumpSection(title: String, addCommandNames: suspend SequenceScope<St
private fun cmdsToPerms(cmds: List<Command>, prefix: String) {
cmds.forEach { c ->
permsOutput.append(" ").append(cmdToPerm(prefix, c)).append("\n")
c.parts.filter { p -> p is SubCommandPart }
.map { p -> p as SubCommandPart }
c.parts.filterIsInstance<SubCommandPart>()
.forEach { scp ->
cmdsToPerms(scp.commands.sortedBy { it.name }, prefix + c.name + " ")
}
@ -260,6 +268,7 @@ private fun writeCommandBlock(command: Command, prefix: String, parents: Stream<
cmdOutput.appendln()
for ((k, v) in entries) {
val rstSafe = v.replace("\"", "\\\"").replace("\n", "\n" + " ".repeat(2))
.lineSequence().map { line -> line.ifBlank { "" } }.joinToString(separator = "\n")
cmdOutput.append(" ".repeat(2))
.append(k)
.append(",")