Skip to content
Permalink
Browse files

[Doctools] Read source files for command ordering

  • Loading branch information...
kenzierocks committed Aug 14, 2019
1 parent 487da77 commit a0b9810c446018552ad1405e063a0f82956afeb5
@@ -14,4 +14,5 @@ dependencies {
"implementation"(project(":worldedit-libs:core:ap"))
"implementation"(project(":worldedit-core"))
"implementation"(kotlin("stdlib-jdk8"))
"implementation"(kotlin("reflect"))
}
@@ -48,21 +48,30 @@ import java.nio.file.Files
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()
private val cmdOutput = StringBuilder()
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 @@ Other Permissions
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 @@ Other Permissions
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(",")

0 comments on commit a0b9810

Please sign in to comment.
You can’t perform that action at this time.