Skip to content
This repository was archived by the owner on May 31, 2025. It is now read-only.

Commit 702e490

Browse files
authored
W-11932674: add language level option (#63)
1 parent cea30bd commit 702e490

File tree

5 files changed

+43
-17
lines changed

5 files changed

+43
-17
lines changed

native-cli/src/main/scala/org/mule/weave/dwnative/NativeRuntime.scala

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,7 @@ import org.mule.weave.v2.io.service.CustomWorkingDirectoryService
1212
import org.mule.weave.v2.io.service.WorkingDirectoryService
1313
import org.mule.weave.v2.model.EvaluationContext
1414
import org.mule.weave.v2.model.ServiceManager
15-
import org.mule.weave.v2.model.service.CharsetProviderService
16-
import org.mule.weave.v2.model.service.DefaultSecurityManagerService
17-
import org.mule.weave.v2.model.service.LoggingService
18-
import org.mule.weave.v2.model.service.ProtocolUrlSourceProviderResolverService
19-
import org.mule.weave.v2.model.service.ReadFunctionProtocolHandler
20-
import org.mule.weave.v2.model.service.SecurityManagerService
21-
import org.mule.weave.v2.model.service.UrlProtocolHandler
22-
import org.mule.weave.v2.model.service.UrlSourceProviderResolverService
23-
import org.mule.weave.v2.model.service.WeaveRuntimePrivilege
15+
import org.mule.weave.v2.model.service.{CharsetProviderService, DefaultLanguageLevelService, DefaultSecurityManagerService, LanguageLevelService, LoggingService, ProtocolUrlSourceProviderResolverService, ReadFunctionProtocolHandler, SecurityManagerService, UrlProtocolHandler, UrlSourceProviderResolverService, WeaveLanguageLevelService, WeaveRuntimePrivilege}
2416
import org.mule.weave.v2.model.values.BinaryValue
2517
import org.mule.weave.v2.module.reader.AutoPersistedOutputStream
2618
import org.mule.weave.v2.module.reader.SourceProvider
@@ -46,23 +38,32 @@ import org.mule.weave.v2.sdk.NameIdentifierHelper
4638
import org.mule.weave.v2.sdk.SPIBasedModuleLoaderProvider
4739
import org.mule.weave.v2.sdk.TwoLevelWeaveResourceResolver
4840
import org.mule.weave.v2.sdk.WeaveResourceResolver
41+
import org.mule.weave.v2.utils.DataWeaveVersion
4942

5043
import java.io.File
5144
import java.io.OutputStream
5245
import java.io.PrintWriter
5346
import java.io.StringWriter
5447
import java.nio.charset.Charset
5548
import java.nio.charset.StandardCharsets
49+
import java.util.Properties
5650

57-
class NativeRuntime(libDir: File, path: Array[File], console: Console) {
51+
class NativeRuntime(libDir: File, path: Array[File], console: Console, maybeLanguageLevel: Option[DataWeaveVersion] = None) {
5852

5953
private val dataWeaveUtils = new DataWeaveUtils(console)
6054

6155
private val pathBasedResourceResolver: PathBasedResourceResolver = PathBasedResourceResolver(path ++ Option(libDir.listFiles()).getOrElse(new Array[File](0)))
6256

57+
private val languageLevelService: LanguageLevelService = {
58+
maybeLanguageLevel match {
59+
case Some(version) => WeaveLanguageLevelService(version)
60+
case None => DefaultLanguageLevelService
61+
}
62+
}
63+
6364
private val weaveScriptingEngine: DataWeaveScriptingEngine = {
6465
setupEnv()
65-
DataWeaveScriptingEngine(new NativeModuleComponentFactory(() => pathBasedResourceResolver, systemFirst = true), ParserConfiguration())
66+
new DataWeaveScriptingEngine(new NativeModuleComponentFactory(() => pathBasedResourceResolver, systemFirst = true), ParserConfiguration(), new Properties(), languageLevelService = languageLevelService)
6667
}
6768

6869
if (console.isDebugEnabled()) {

native-cli/src/main/scala/org/mule/weave/dwnative/cli/CLIArgumentsParser.scala

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import org.mule.weave.v2.io.FileHelper
2323
import org.mule.weave.v2.parser.ast.variables.NameIdentifier
2424
import org.mule.weave.v2.runtime.utils.AnsiColor.red
2525
import org.mule.weave.v2.sdk.NameIdentifierHelper
26+
import org.mule.weave.v2.utils.DataWeaveVersion
2627

2728
import java.io.File
2829
import scala.collection.mutable
@@ -40,6 +41,7 @@ class CLIArgumentsParser(console: Console) {
4041
var output: Option[String] = None
4142
var eval: Boolean = false
4243
var maybePrivileges: Option[Seq[String]] = None
44+
var maybeLanguageLevel: Option[DataWeaveVersion] = None
4345

4446
var dependencyResolver: Option[(NativeRuntime) => Array[DependencyResolutionResult]] = None
4547

@@ -278,6 +280,11 @@ class CLIArgumentsParser(console: Console) {
278280
val privileges = commandLine.getOptionValue(Options.PRIVILEGES)
279281
maybePrivileges = Some(privileges.split(","))
280282
}
283+
284+
if (commandLine.hasOption(Options.LANGUAGE_LEVEL)) {
285+
val languageLevelStr = commandLine.getOptionValue(Options.LANGUAGE_LEVEL)
286+
maybeLanguageLevel = Some(DataWeaveVersion(languageLevelStr))
287+
}
281288

282289
val commandLineArgs = commandLine.getArgs
283290
if (commandLineArgs != null) {
@@ -300,7 +307,7 @@ class CLIArgumentsParser(console: Console) {
300307
Right(s"Missing <script-content> or -f <file-path> or --spell ")
301308
} else {
302309

303-
val config: WeaveRunnerConfig = WeaveRunnerConfig(paths, eval, scriptToRun.get, dependencyResolver ,params.toMap, inputs.toMap, output, maybePrivileges)
310+
val config: WeaveRunnerConfig = WeaveRunnerConfig(paths, eval, scriptToRun.get, dependencyResolver ,params.toMap, inputs.toMap, output, maybePrivileges, maybeLanguageLevel)
304311
Left(new RunWeaveCommand(config, console))
305312
}
306313
}

native-cli/src/main/scala/org/mule/weave/dwnative/cli/Options.scala

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ object Options {
2323
val VERBOSE = "verbose"
2424
val VERSION = "version"
2525
val EXPERIMENTAL_TAG = "[Experimental]"
26+
val LANGUAGE_LEVEL = "language-level"
2627

2728
val OPTIONS: CliOptions = {
2829
val options = new CliOptions()
@@ -123,7 +124,15 @@ object Options {
123124
)
124125

125126
options.addOption(null, UPDATE_GRIMOIRES, false, s"$EXPERIMENTAL_TAG Update all wizard grimoires.")
126-
127+
128+
options.addOption(Option.builder()
129+
.longOpt(LANGUAGE_LEVEL)
130+
.hasArg(true)
131+
.argName("language-level")
132+
.desc(s"$LANGUAGE_LEVEL sets the language level under which the script runs")
133+
.build()
134+
)
135+
127136
options
128137
}
129138
}

native-cli/src/main/scala/org/mule/weave/dwnative/cli/commands/RunWeaveCommand.scala

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import org.mule.weave.v2.model.values.StringValue
1616
import org.mule.weave.v2.module.DataFormatManager
1717
import org.mule.weave.v2.runtime.ExecuteResult
1818
import org.mule.weave.v2.runtime.ScriptingBindings
19+
import org.mule.weave.v2.utils.DataWeaveVersion
1920
import sun.misc.Signal
2021
import sun.misc.SignalHandler
2122

@@ -24,7 +25,6 @@ import java.io.FileOutputStream
2425
import java.io.OutputStream
2526
import java.io.PrintWriter
2627
import java.io.StringWriter
27-
import scala.collection.immutable
2828
import scala.util.Try
2929

3030
class RunWeaveCommand(val config: WeaveRunnerConfig, console: Console) extends WeaveCommand {
@@ -38,7 +38,7 @@ class RunWeaveCommand(val config: WeaveRunnerConfig, console: Console) extends W
3838
def exec(): Int = {
3939
var exitCode = ExitCodes.SUCCESS
4040
val path: Array[File] = config.path.map(new File(_))
41-
val nativeRuntime: NativeRuntime = new NativeRuntime(weaveUtils.getLibPathHome(), path, console)
41+
val nativeRuntime: NativeRuntime = new NativeRuntime(weaveUtils.getLibPathHome(), path, console, config.maybeLanguageLevel)
4242
config.dependencyResolver.foreach((dep) => {
4343
val results = dep(nativeRuntime)
4444
results.foreach((dm) => {
@@ -170,7 +170,8 @@ case class WeaveRunnerConfig(path: Array[String],
170170
params: Map[String, String],
171171
inputs: Map[String, File],
172172
outputPath: Option[String],
173-
maybePrivileges: Option[Seq[String]])
173+
maybePrivileges: Option[Seq[String]],
174+
maybeLanguageLevel: Option[DataWeaveVersion])
174175

175176

176177
case class WeaveModule(content: String, nameIdentifier: String)

native-cli/src/test/scala/org/mule/weave/dwnative/cli/ArgumentsParserTest.scala

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,15 @@ class ArgumentsParserTest extends FreeSpec with Matchers {
9696
val runWeaveCommand = commandToRun.asInstanceOf[CreateSpellCommand]
9797
assert(runWeaveCommand.spellName == "Test")
9898
}
99-
99+
100+
"should parse language-level correctly" in {
101+
val parser = new CLIArgumentsParser(new TestConsole())
102+
val value = parser.parse(Array("'Test'", "--language-level", "2.4"))
103+
assert(value.isLeft)
104+
val commandToRun = value.left.get
105+
assert(commandToRun.isInstanceOf[RunWeaveCommand])
106+
}
107+
100108
"should fail parsing unrecognized argument" in {
101109
val parser = new CLIArgumentsParser(new TestConsole())
102110
val value = parser.parse(Array("-o", "/tmp/out.json", "--parameter", "p1", "p2", "p3", "1 to 10" ))

0 commit comments

Comments
 (0)