mirror of
https://github.com/EngineHub/WorldEdit.git
synced 2024-12-15 04:41:37 +08:00
[Doctools] Read source files for command ordering
This commit is contained in:
parent
487da77a72
commit
a0b9810c44
@ -14,4 +14,5 @@
|
||||
"implementation"(project(":worldedit-libs:core:ap"))
|
||||
"implementation"(project(":worldedit-core"))
|
||||
"implementation"(kotlin("stdlib-jdk8"))
|
||||
"implementation"(kotlin("reflect"))
|
||||
}
|
||||
|
@ -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(",")
|
||||
|
Loading…
Reference in New Issue
Block a user