mirror of
https://github.com/GayPizzaSpecifications/pork.git
synced 2025-08-03 13:11:32 +00:00
stdlib: generate stdlib.manifest
This commit is contained in:
@ -33,5 +33,13 @@ gradlePlugin {
|
||||
displayName = "Pork Module"
|
||||
description = "Module convention for pork"
|
||||
}
|
||||
|
||||
create("pork_stdlib") {
|
||||
id = "gay.pizza.pork.stdlib"
|
||||
implementationClass = "gay.pizza.pork.buildext.PorkStdlibPlugin"
|
||||
|
||||
displayName = "Pork Stdlib"
|
||||
description = "Stdlib generation code for pork"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -15,10 +15,6 @@ import kotlin.io.path.deleteIfExists
|
||||
import kotlin.io.path.writeText
|
||||
|
||||
open class GenerateAstCode : DefaultTask() {
|
||||
init {
|
||||
outputs.upToDateWhen { false }
|
||||
}
|
||||
|
||||
@get:InputFile
|
||||
var astDescriptionFile: File = project.file("src/main/ast/pork.yml")
|
||||
|
||||
|
@ -0,0 +1,34 @@
|
||||
package gay.pizza.pork.buildext
|
||||
|
||||
import org.gradle.api.DefaultTask
|
||||
import org.gradle.api.file.RegularFile
|
||||
import org.gradle.api.provider.Provider
|
||||
import org.gradle.api.tasks.InputDirectory
|
||||
import org.gradle.api.tasks.OutputFile
|
||||
import org.gradle.api.tasks.TaskAction
|
||||
import java.io.File
|
||||
import kotlin.io.path.deleteIfExists
|
||||
import kotlin.io.path.writeText
|
||||
|
||||
open class GenerateStdlibManifest : DefaultTask() {
|
||||
@get:InputDirectory
|
||||
val porkStdlibCode: File = project.file("src/main/pork")
|
||||
|
||||
@get:OutputFile
|
||||
val stdlibManifestFile: Provider<RegularFile> =
|
||||
project.layout.buildDirectory.file("generated/pork/stdlib.manifest")
|
||||
|
||||
@TaskAction
|
||||
fun generate() {
|
||||
val files = porkStdlibCode.walkTopDown().mapNotNull { file ->
|
||||
if (!file.isFile || !file.name.endsWith(".pork")) {
|
||||
null
|
||||
} else {
|
||||
file.relativeTo(porkStdlibCode).path
|
||||
}
|
||||
}
|
||||
val manifestFilePath = stdlibManifestFile.get().asFile.toPath()
|
||||
manifestFilePath.deleteIfExists()
|
||||
manifestFilePath.writeText(files.joinToString("\n") + "\n")
|
||||
}
|
||||
}
|
@ -2,9 +2,15 @@ package gay.pizza.pork.buildext
|
||||
|
||||
import org.gradle.api.Plugin
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.kotlin.dsl.create
|
||||
|
||||
class PorkAstPlugin : Plugin<Project> {
|
||||
override fun apply(target: Project) {
|
||||
target.tasks.create("generateAstCode", GenerateAstCode::class.java)
|
||||
val generateAstCode = createGenerateAstCode(target)
|
||||
val processResources = target.tasks.getByName("processResources")
|
||||
processResources.dependsOn(generateAstCode)
|
||||
}
|
||||
|
||||
private fun createGenerateAstCode(project: Project): GenerateAstCode =
|
||||
project.tasks.create("generateAstCode", GenerateAstCode::class)
|
||||
}
|
||||
|
@ -0,0 +1,16 @@
|
||||
package gay.pizza.pork.buildext
|
||||
|
||||
import org.gradle.api.Plugin
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.kotlin.dsl.create
|
||||
|
||||
class PorkStdlibPlugin : Plugin<Project> {
|
||||
override fun apply(target: Project) {
|
||||
val generateStdlibManifest = createGenerateStdlibManifest(target)
|
||||
val processResources = target.tasks.getByName("processResources")
|
||||
processResources.dependsOn(generateStdlibManifest)
|
||||
}
|
||||
|
||||
private fun createGenerateStdlibManifest(project: Project): GenerateStdlibManifest =
|
||||
project.tasks.create("generateStdlibManifest", GenerateStdlibManifest::class)
|
||||
}
|
Reference in New Issue
Block a user