From d241e8c69e8d6fc8ad4e1716deb0f58035deb924 Mon Sep 17 00:00:00 2001 From: paulpanwang Date: Mon, 18 May 2026 06:23:16 +0800 Subject: [PATCH] fix: report missing generic CLI parameter values (#2016) --- src/core/cli.rs | 6 ++++++ src/core/cli_tests.rs | 31 +++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/src/core/cli.rs b/src/core/cli.rs index f224ef199..fde529da2 100644 --- a/src/core/cli.rs +++ b/src/core/cli.rs @@ -447,6 +447,12 @@ fn parse_function_params( let raw_value = args .get(i + 1) .ok_or_else(|| format!("missing value for --{key}"))?; + if raw_value.starts_with("--") { + let next_key = raw_value.trim_start_matches("--").replace('-', "_"); + if schema.inputs.iter().any(|input| input.name == next_key) { + return Err(format!("missing value for --{key}")); + } + } let value = parse_input_value(&spec.ty, raw_value)?; out.insert(key, value); i += 2; diff --git a/src/core/cli_tests.rs b/src/core/cli_tests.rs index 111586e35..0b904e707 100644 --- a/src/core/cli_tests.rs +++ b/src/core/cli_tests.rs @@ -52,6 +52,37 @@ fn parse_function_params_rejects_unknown_param() { assert!(err.contains("unknown param")); } +#[test] +fn parse_function_params_rejects_flag_like_missing_value() { + let schema = ControllerSchema { + namespace: "test", + function: "configure", + description: "test schema", + inputs: vec![ + FieldSchema { + name: "enabled", + ty: TypeSchema::Bool, + required: true, + comment: "whether the feature is enabled", + }, + FieldSchema { + name: "name", + ty: TypeSchema::String, + required: true, + comment: "feature name", + }, + ], + outputs: vec![], + }; + let args = vec![ + "--enabled".to_string(), + "--name".to_string(), + "demo".to_string(), + ]; + let err = parse_function_params(&schema, &args).expect_err("missing value should fail"); + assert_eq!(err, "missing value for --enabled"); +} + #[test] fn parse_input_value_rejects_invalid_bool() { let err =