Allow command options to have nullable types and default values (#1444)

This commit is contained in:
Jen Basch
2026-02-26 08:34:46 -08:00
committed by GitHub
parent 3ef065b6b6
commit 4cf2a1b42c
4 changed files with 2 additions and 32 deletions

View File

@@ -513,12 +513,6 @@ public final class CommandSpecParser {
var typeNode = resolved.getFirst();
isNullable = resolved.getSecond();
defaultValue = CommandSpecParser.this.getDefaultValue(prop, requireExplicitDefault);
if (isNullable && defaultValue != null) {
throw exceptionBuilder()
.evalError("commandOptionTypeNullableWithDefaultValue", prop.getName())
.withSourceSection(prop.getHeaderSection())
.build();
}
resolve(prop, typeNode);
return this;

View File

@@ -1098,11 +1098,6 @@ Found both `@Flag` and `@Argument` annotations for options property `{0}`.\n\
\n\
Only one option type may be specified.
commandOptionTypeNullableWithDefaultValue=\
Unexpected option property `{0}` with nullable type and default value.\n\
\n\
Options with default values must not be nullable.
commandOptionUnsupportedType=\
Command option property `{0}` has unsupported {1}type `{2}`.

View File

@@ -292,26 +292,6 @@ class CommandSpecParserTest {
assertThat(exc.message).contains("No type annotation found for `foo` property.")
}
@Test
fun `nullable option with default not allowed`() {
val moduleUri =
writePklFile(
"cmd.pkl",
renderOptions +
"""
class Options {
foo: String? = "bar"
}
"""
.trimIndent(),
)
val exc = assertThrows<PklException> { parse(moduleUri) }
assertThat(exc.message).contains("foo: String? = \"bar\"")
assertThat(exc.message)
.contains("Unexpected option property `foo` with nullable type and default value")
}
@Test
fun `option with union type containing non-string-literals`() {
val moduleUri =