diff --git a/.github/dependabot.yml b/.github/dependabot.yml index b2af8d1..1f17921 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -11,3 +11,14 @@ updates: actions-dev-updates: dependency-type: development applies-to: version-updates +- package-ecosystem: gradle + directory: / + schedule: + interval: weekly + groups: + gradle-updates: + dependency-type: production + applies-to: version-updates + gradle-dev-updates: + dependency-type: development + applies-to: version-updates diff --git a/build.gradle.kts b/build.gradle.kts index 8b065cc..f6fcf59 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,5 +3,5 @@ plugins { } tasks.withType { - gradleVersion = "8.13" + gradleVersion = "8.14.2" } diff --git a/buildext/build.gradle.kts b/buildext/build.gradle.kts index d7c439b..dbc5b8b 100644 --- a/buildext/build.gradle.kts +++ b/buildext/build.gradle.kts @@ -13,10 +13,10 @@ repositories { } dependencies { - implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:2.1.10") - implementation("org.jetbrains.kotlin:kotlin-serialization:2.1.10") - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.1") - implementation("com.charleskorn.kaml:kaml:0.72.0") + implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:2.2.0") + implementation("org.jetbrains.kotlin:kotlin-serialization:2.2.0") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2") + implementation("com.charleskorn.kaml:kaml:0.83.0") } java { diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index a4b76b9..1b33c55 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 37f853b..ff23a68 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index f5feea6..23d15a9 100755 --- a/gradlew +++ b/gradlew @@ -86,8 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s -' "$PWD" ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -115,7 +114,7 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar +CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. @@ -206,7 +205,7 @@ fi DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # and any embedded shellness will be escaped. # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # treated as '${Hostname}' itself on the command line. @@ -214,7 +213,7 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" # Stop when "xargs" is not available. diff --git a/gradlew.bat b/gradlew.bat index 9b42019..5eed7ee 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -70,11 +70,11 @@ goto fail :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar +set CLASSPATH= @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell diff --git a/minimal/build.gradle.kts b/minimal/build.gradle.kts index b2bfa9c..2f4a788 100644 --- a/minimal/build.gradle.kts +++ b/minimal/build.gradle.kts @@ -1,8 +1,8 @@ plugins { application id("gay.pizza.pork.module") - id("com.github.johnrengelman.shadow") version "8.1.1" - id("org.graalvm.buildtools.native") version "0.9.25" + id("com.gradleup.shadow") version "8.3.8" + id("org.graalvm.buildtools.native") version "0.10.6" } dependencies { diff --git a/support/pork-idea/build.gradle.kts b/support/pork-idea/build.gradle.kts index baadf49..d2668d6 100644 --- a/support/pork-idea/build.gradle.kts +++ b/support/pork-idea/build.gradle.kts @@ -1,7 +1,7 @@ import gay.pizza.pork.buildext.AstCodegenType plugins { - id("org.jetbrains.intellij.platform") version "2.3.0" + id("org.jetbrains.intellij.platform") version "2.6.0" id("gay.pizza.pork.module") id("gay.pizza.pork.ast") } diff --git a/tool/build.gradle.kts b/tool/build.gradle.kts index 29bddc7..554581a 100644 --- a/tool/build.gradle.kts +++ b/tool/build.gradle.kts @@ -1,16 +1,16 @@ plugins { application id("gay.pizza.pork.module") - id("com.github.johnrengelman.shadow") version "8.1.1" - id("org.graalvm.buildtools.native") version "0.9.25" + id("com.gradleup.shadow") version "8.3.8" + id("org.graalvm.buildtools.native") version "0.10.6" } dependencies { api(project(":minimal")) api(project(":compiler")) api(project(":vm")) - api("com.github.ajalt.clikt:clikt:4.2.0") - api("com.charleskorn.kaml:kaml:0.55.0") + api("com.github.ajalt.clikt:clikt:5.0.3") + api("com.charleskorn.kaml:kaml:0.83.0") implementation(project(":common")) } diff --git a/tool/src/main/kotlin/gay/pizza/pork/tool/AstCommand.kt b/tool/src/main/kotlin/gay/pizza/pork/tool/AstCommand.kt index b1c7f5f..5c54cbd 100644 --- a/tool/src/main/kotlin/gay/pizza/pork/tool/AstCommand.kt +++ b/tool/src/main/kotlin/gay/pizza/pork/tool/AstCommand.kt @@ -1,6 +1,7 @@ package gay.pizza.pork.tool import com.github.ajalt.clikt.core.CliktCommand +import com.github.ajalt.clikt.core.Context import com.github.ajalt.clikt.parameters.arguments.argument import gay.pizza.dough.fs.PlatformFsProvider import gay.pizza.pork.ast.gen.Node @@ -9,13 +10,15 @@ import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.json.Json @OptIn(ExperimentalSerializationApi::class) -class AstCommand : CliktCommand(help = "Print AST", name = "ast") { +class AstCommand : CliktCommand("ast") { val path by argument("file") + override fun help(context: Context): String = "Print AST" + private val json = Json { prettyPrint = true prettyPrintIndent = " " - classDiscriminator = "\$" + classDiscriminator = "$" } override fun run() { diff --git a/tool/src/main/kotlin/gay/pizza/pork/tool/AttributeCommand.kt b/tool/src/main/kotlin/gay/pizza/pork/tool/AttributeCommand.kt index 326c9bf..bab141c 100644 --- a/tool/src/main/kotlin/gay/pizza/pork/tool/AttributeCommand.kt +++ b/tool/src/main/kotlin/gay/pizza/pork/tool/AttributeCommand.kt @@ -1,6 +1,7 @@ package gay.pizza.pork.tool import com.github.ajalt.clikt.core.CliktCommand +import com.github.ajalt.clikt.core.Context import com.github.ajalt.clikt.parameters.arguments.argument import com.github.ajalt.clikt.parameters.options.flag import com.github.ajalt.clikt.parameters.options.option @@ -13,10 +14,12 @@ import gay.pizza.pork.minimal.FileTool import gay.pizza.pork.parser.ParserAttributes import gay.pizza.pork.parser.ParserNodeAttribution -class AttributeCommand : CliktCommand(help = "Attribute AST", name = "attribute") { +class AttributeCommand : CliktCommand("attribute") { val hierarchical by option("--hierarchical", help = "Print Hierarchical Output").flag(default = true) val path by argument("file") + override fun help(context: Context): String = "Attribute AST" + override fun run() { val tool = FileTool(PlatformFsProvider.resolve(path)) val attribution = ParserNodeAttribution() diff --git a/tool/src/main/kotlin/gay/pizza/pork/tool/CompileCommand.kt b/tool/src/main/kotlin/gay/pizza/pork/tool/CompileCommand.kt index e9a6a0f..e13c0e0 100644 --- a/tool/src/main/kotlin/gay/pizza/pork/tool/CompileCommand.kt +++ b/tool/src/main/kotlin/gay/pizza/pork/tool/CompileCommand.kt @@ -3,6 +3,7 @@ package gay.pizza.pork.tool import com.charleskorn.kaml.PolymorphismStyle import com.charleskorn.kaml.Yaml import com.github.ajalt.clikt.core.CliktCommand +import com.github.ajalt.clikt.core.Context import com.github.ajalt.clikt.parameters.arguments.argument import com.github.ajalt.clikt.parameters.options.flag import com.github.ajalt.clikt.parameters.options.option @@ -16,12 +17,14 @@ import gay.pizza.pork.bytecode.Opcode import gay.pizza.pork.compiler.Compiler import gay.pizza.pork.minimal.FileTool -class CompileCommand : CliktCommand(help = "Compile Pork", name = "compile") { +class CompileCommand : CliktCommand("compile") { val showIrCode by option("--show-ir-code").flag(default = false) val showIrSymbolGraph by option("--show-ir-symbol-graph").flag(default = false) val path by argument("file") + override fun help(context: Context): String = "Compile Pork" + private val yaml = Yaml( configuration = Yaml.default.configuration.copy( polymorphismStyle = PolymorphismStyle.Property diff --git a/tool/src/main/kotlin/gay/pizza/pork/tool/CopyStdlibCommand.kt b/tool/src/main/kotlin/gay/pizza/pork/tool/CopyStdlibCommand.kt index 849cd1f..4397845 100644 --- a/tool/src/main/kotlin/gay/pizza/pork/tool/CopyStdlibCommand.kt +++ b/tool/src/main/kotlin/gay/pizza/pork/tool/CopyStdlibCommand.kt @@ -1,6 +1,7 @@ package gay.pizza.pork.tool import com.github.ajalt.clikt.core.CliktCommand +import com.github.ajalt.clikt.core.Context import com.github.ajalt.clikt.parameters.arguments.argument import com.github.ajalt.clikt.parameters.arguments.default import gay.pizza.dough.fs.PlatformFsProvider @@ -10,9 +11,11 @@ import gay.pizza.dough.fs.writeString import gay.pizza.pork.tokenizer.readToString import gay.pizza.pork.stdlib.PorkStdlib -class CopyStdlibCommand : CliktCommand(help = "Copy Stdlib", name = "copy-stdlib") { +class CopyStdlibCommand : CliktCommand("copy-stdlib") { val output by argument("output").default("stdlib") + override fun help(context: Context): String = "Copy Stdlib" + override fun run() { val outputFsPath = PlatformFsProvider.resolve(output) for (filePath in PorkStdlib.files) { diff --git a/tool/src/main/kotlin/gay/pizza/pork/tool/HighlightCommand.kt b/tool/src/main/kotlin/gay/pizza/pork/tool/HighlightCommand.kt index 7494313..63758b7 100644 --- a/tool/src/main/kotlin/gay/pizza/pork/tool/HighlightCommand.kt +++ b/tool/src/main/kotlin/gay/pizza/pork/tool/HighlightCommand.kt @@ -1,14 +1,17 @@ package gay.pizza.pork.tool import com.github.ajalt.clikt.core.CliktCommand +import com.github.ajalt.clikt.core.Context import com.github.ajalt.clikt.parameters.arguments.argument import gay.pizza.dough.fs.PlatformFsProvider import gay.pizza.pork.minimal.FileTool import gay.pizza.pork.tokenizer.AnsiHighlightScheme -class HighlightCommand : CliktCommand(help = "Syntax Highlighter", name = "highlight") { +class HighlightCommand : CliktCommand("highlight") { val path by argument("file") + override fun help(context: Context): String = "Syntax Highlighter" + override fun run() { val tool = FileTool(PlatformFsProvider.resolve(path)) print(tool.highlight(AnsiHighlightScheme()).joinToString("")) diff --git a/tool/src/main/kotlin/gay/pizza/pork/tool/ParseCommand.kt b/tool/src/main/kotlin/gay/pizza/pork/tool/ParseCommand.kt index ef4d6d3..7dd36c3 100644 --- a/tool/src/main/kotlin/gay/pizza/pork/tool/ParseCommand.kt +++ b/tool/src/main/kotlin/gay/pizza/pork/tool/ParseCommand.kt @@ -1,17 +1,20 @@ package gay.pizza.pork.tool import com.github.ajalt.clikt.core.CliktCommand +import com.github.ajalt.clikt.core.Context import com.github.ajalt.clikt.parameters.arguments.argument import com.github.ajalt.clikt.parameters.options.flag import com.github.ajalt.clikt.parameters.options.option import gay.pizza.dough.fs.PlatformFsProvider import gay.pizza.pork.minimal.FileTool -class ParseCommand : CliktCommand(help = "Parse Compilation Unit", name = "parse") { +class ParseCommand : CliktCommand("parse") { val loop by option("--loop", help = "Loop Parsing").flag() val measure by option("--measure", help = "Measure Time").flag() val path by argument("file") + override fun help(context: Context): String = "Parse Compilation Unit" + override fun run() { val tool = FileTool(PlatformFsProvider.resolve(path)) diff --git a/tool/src/main/kotlin/gay/pizza/pork/tool/ReprintCommand.kt b/tool/src/main/kotlin/gay/pizza/pork/tool/ReprintCommand.kt index 3e831da..b2e20a3 100644 --- a/tool/src/main/kotlin/gay/pizza/pork/tool/ReprintCommand.kt +++ b/tool/src/main/kotlin/gay/pizza/pork/tool/ReprintCommand.kt @@ -1,13 +1,16 @@ package gay.pizza.pork.tool import com.github.ajalt.clikt.core.CliktCommand +import com.github.ajalt.clikt.core.Context import com.github.ajalt.clikt.parameters.arguments.argument import gay.pizza.dough.fs.PlatformFsProvider import gay.pizza.pork.minimal.FileTool -class ReprintCommand : CliktCommand(help = "Reprint Parsed Compilation Unit", name = "reprint") { +class ReprintCommand : CliktCommand("reprint") { val path by argument("file") + override fun help(context: Context): String = "Reprint Parsed Compilation Unit" + override fun run() { val tool = FileTool(PlatformFsProvider.resolve(path)) print(tool.reprint()) diff --git a/tool/src/main/kotlin/gay/pizza/pork/tool/RootCommand.kt b/tool/src/main/kotlin/gay/pizza/pork/tool/RootCommand.kt index cf723aa..044f5b1 100644 --- a/tool/src/main/kotlin/gay/pizza/pork/tool/RootCommand.kt +++ b/tool/src/main/kotlin/gay/pizza/pork/tool/RootCommand.kt @@ -1,12 +1,10 @@ package gay.pizza.pork.tool import com.github.ajalt.clikt.core.CliktCommand +import com.github.ajalt.clikt.core.Context import com.github.ajalt.clikt.core.subcommands -class RootCommand : CliktCommand( - help = "Pork - The BBQ Language", - name = "pork" -) { +class RootCommand : CliktCommand("pork") { init { subcommands( RunCommand(), @@ -22,5 +20,7 @@ class RootCommand : CliktCommand( ) } + override fun help(context: Context): String = "Pork - The BBQ Language" + override fun run() {} } diff --git a/tool/src/main/kotlin/gay/pizza/pork/tool/RunCommand.kt b/tool/src/main/kotlin/gay/pizza/pork/tool/RunCommand.kt index 536bf1d..ac3896f 100644 --- a/tool/src/main/kotlin/gay/pizza/pork/tool/RunCommand.kt +++ b/tool/src/main/kotlin/gay/pizza/pork/tool/RunCommand.kt @@ -1,6 +1,7 @@ package gay.pizza.pork.tool import com.github.ajalt.clikt.core.CliktCommand +import com.github.ajalt.clikt.core.Context import com.github.ajalt.clikt.parameters.arguments.argument import com.github.ajalt.clikt.parameters.options.default import com.github.ajalt.clikt.parameters.options.flag @@ -15,7 +16,7 @@ import gay.pizza.pork.ffi.JavaNativeProvider import gay.pizza.pork.minimal.ExecutionType import gay.pizza.pork.minimal.FileTool -class RunCommand : CliktCommand(help = "Run Program", name = "run") { +class RunCommand : CliktCommand("run") { val loop by option("--loop", help = "Loop Program").flag() val measure by option("--measure", help = "Measure Time").flag() val quiet by option("--quiet", help = "Silence Prints").flag() @@ -24,6 +25,8 @@ class RunCommand : CliktCommand(help = "Run Program", name = "run") { .default(ExecutionType.VirtualMachine) val path by argument("file") + override fun help(context: Context): String = "Run Program" + override fun run() { val tool = FileTool(PlatformFsProvider.resolve(path)) val nativeRegistry = NativeRegistry() diff --git a/tool/src/main/kotlin/gay/pizza/pork/tool/ScopeAnalysisCommand.kt b/tool/src/main/kotlin/gay/pizza/pork/tool/ScopeAnalysisCommand.kt index 53666bf..cd059f3 100644 --- a/tool/src/main/kotlin/gay/pizza/pork/tool/ScopeAnalysisCommand.kt +++ b/tool/src/main/kotlin/gay/pizza/pork/tool/ScopeAnalysisCommand.kt @@ -1,14 +1,17 @@ package gay.pizza.pork.tool import com.github.ajalt.clikt.core.CliktCommand +import com.github.ajalt.clikt.core.Context import com.github.ajalt.clikt.parameters.arguments.argument import gay.pizza.dough.fs.PlatformFsProvider import gay.pizza.pork.frontend.scope.WorldScope import gay.pizza.pork.minimal.FileTool -class ScopeAnalysisCommand : CliktCommand(help = "Run Scope Analysis", name = "scope-analysis") { +class ScopeAnalysisCommand : CliktCommand("scope-analysis") { val path by argument("file") + override fun help(context: Context): String = "Run Scope Analysis" + override fun run() { val tool = FileTool(PlatformFsProvider.resolve(path)) val world = tool.buildWorld() diff --git a/tool/src/main/kotlin/gay/pizza/pork/tool/TokenizeCommand.kt b/tool/src/main/kotlin/gay/pizza/pork/tool/TokenizeCommand.kt index d304bf5..c414cfb 100644 --- a/tool/src/main/kotlin/gay/pizza/pork/tool/TokenizeCommand.kt +++ b/tool/src/main/kotlin/gay/pizza/pork/tool/TokenizeCommand.kt @@ -1,14 +1,17 @@ package gay.pizza.pork.tool import com.github.ajalt.clikt.core.CliktCommand +import com.github.ajalt.clikt.core.Context import com.github.ajalt.clikt.parameters.arguments.argument import gay.pizza.dough.fs.PlatformFsProvider import gay.pizza.pork.minimal.FileTool import gay.pizza.pork.tokenizer.TokenType -class TokenizeCommand : CliktCommand(help = "Tokenize Compilation Unit", name = "tokenize") { +class TokenizeCommand : CliktCommand("tokenize") { val path by argument("file") + override fun help(context: Context): String = "Tokenize Compilation Unit" + override fun run() { val tool = FileTool(PlatformFsProvider.resolve(path)) val tokenSource = tool.tokenize() diff --git a/tool/src/main/kotlin/gay/pizza/pork/tool/main.kt b/tool/src/main/kotlin/gay/pizza/pork/tool/main.kt index c36f32f..4da4dec 100644 --- a/tool/src/main/kotlin/gay/pizza/pork/tool/main.kt +++ b/tool/src/main/kotlin/gay/pizza/pork/tool/main.kt @@ -1,3 +1,5 @@ package gay.pizza.pork.tool +import com.github.ajalt.clikt.core.main + fun main(args: Array) = RootCommand().main(args)