From aedcf3cff2d5c0593b13d055a2ba65cc47a9b333 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 26 Sep 2025 16:28:17 +0000 Subject: [PATCH 1/5] Initial plan From a9737367d639cfbe1c87d5d429e0a01aba369ed0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 26 Sep 2025 16:36:23 +0000 Subject: [PATCH 2/5] Update function metadata to support multiple categories Co-authored-by: SteveL-MSFT <11859881+SteveL-MSFT@users.noreply.github.com> --- dsc/src/subcommand.rs | 2 +- dsc_lib/src/functions/add.rs | 2 +- dsc_lib/src/functions/and.rs | 2 +- dsc_lib/src/functions/array.rs | 2 +- dsc_lib/src/functions/base64.rs | 2 +- dsc_lib/src/functions/bool.rs | 2 +- dsc_lib/src/functions/coalesce.rs | 2 +- dsc_lib/src/functions/concat.rs | 2 +- dsc_lib/src/functions/contains.rs | 2 +- dsc_lib/src/functions/context.rs | 2 +- dsc_lib/src/functions/copy_index.rs | 2 +- dsc_lib/src/functions/create_array.rs | 2 +- dsc_lib/src/functions/create_object.rs | 2 +- dsc_lib/src/functions/div.rs | 2 +- dsc_lib/src/functions/empty.rs | 2 +- dsc_lib/src/functions/ends_with.rs | 2 +- dsc_lib/src/functions/envvar.rs | 2 +- dsc_lib/src/functions/equals.rs | 2 +- dsc_lib/src/functions/false.rs | 2 +- dsc_lib/src/functions/first.rs | 2 +- dsc_lib/src/functions/format.rs | 2 +- dsc_lib/src/functions/greater.rs | 2 +- dsc_lib/src/functions/greater_or_equals.rs | 2 +- dsc_lib/src/functions/if.rs | 2 +- dsc_lib/src/functions/index_of.rs | 2 +- dsc_lib/src/functions/int.rs | 2 +- dsc_lib/src/functions/join.rs | 2 +- dsc_lib/src/functions/last_index_of.rs | 2 +- dsc_lib/src/functions/length.rs | 2 +- dsc_lib/src/functions/less.rs | 2 +- dsc_lib/src/functions/less_or_equals.rs | 2 +- dsc_lib/src/functions/max.rs | 2 +- dsc_lib/src/functions/min.rs | 2 +- dsc_lib/src/functions/mod.rs | 6 +++--- dsc_lib/src/functions/mod_function.rs | 2 +- dsc_lib/src/functions/mul.rs | 2 +- dsc_lib/src/functions/not.rs | 2 +- dsc_lib/src/functions/null.rs | 2 +- dsc_lib/src/functions/or.rs | 2 +- dsc_lib/src/functions/parameters.rs | 2 +- dsc_lib/src/functions/path.rs | 2 +- dsc_lib/src/functions/reference.rs | 2 +- dsc_lib/src/functions/resource_id.rs | 2 +- dsc_lib/src/functions/secret.rs | 2 +- dsc_lib/src/functions/skip.rs | 2 +- dsc_lib/src/functions/starts_with.rs | 2 +- dsc_lib/src/functions/string.rs | 2 +- dsc_lib/src/functions/sub.rs | 2 +- dsc_lib/src/functions/system_root.rs | 2 +- dsc_lib/src/functions/true.rs | 2 +- dsc_lib/src/functions/union.rs | 2 +- dsc_lib/src/functions/unique_string.rs | 2 +- dsc_lib/src/functions/utc_now.rs | 2 +- dsc_lib/src/functions/variables.rs | 2 +- 54 files changed, 56 insertions(+), 56 deletions(-) diff --git a/dsc/src/subcommand.rs b/dsc/src/subcommand.rs index bf559cf65..dd4255fd0 100644 --- a/dsc/src/subcommand.rs +++ b/dsc/src/subcommand.rs @@ -709,7 +709,7 @@ fn list_functions(functions: &FunctionDispatcher, function_name: Option<&String> }; table.add_row(vec![ - function.category.to_string(), + function.category.iter().map(|c| c.to_string()).collect::>().join(", "), function.name, function.min_args.to_string(), max_args, diff --git a/dsc_lib/src/functions/add.rs b/dsc_lib/src/functions/add.rs index fe0cd4f40..608ea1659 100644 --- a/dsc_lib/src/functions/add.rs +++ b/dsc_lib/src/functions/add.rs @@ -16,7 +16,7 @@ impl Function for Add { FunctionMetadata { name: "add".to_string(), description: t!("functions.add.description").to_string(), - category: FunctionCategory::Numeric, + category: vec![FunctionCategory::Numeric], min_args: 2, max_args: 2, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/and.rs b/dsc_lib/src/functions/and.rs index 3d9efbc14..fbc3d0d22 100644 --- a/dsc_lib/src/functions/and.rs +++ b/dsc_lib/src/functions/and.rs @@ -16,7 +16,7 @@ impl Function for And { FunctionMetadata { name: "and".to_string(), description: t!("functions.and.description").to_string(), - category: FunctionCategory::Logical, + category: vec![FunctionCategory::Logical], min_args: 2, max_args: usize::MAX, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/array.rs b/dsc_lib/src/functions/array.rs index c2ab2ec19..bebfe4af6 100644 --- a/dsc_lib/src/functions/array.rs +++ b/dsc_lib/src/functions/array.rs @@ -16,7 +16,7 @@ impl Function for Array { FunctionMetadata { name: "array".to_string(), description: t!("functions.array.description").to_string(), - category: FunctionCategory::Array, + category: vec![FunctionCategory::Array], min_args: 1, max_args: 1, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/base64.rs b/dsc_lib/src/functions/base64.rs index 40caf1ec6..66adedfdf 100644 --- a/dsc_lib/src/functions/base64.rs +++ b/dsc_lib/src/functions/base64.rs @@ -18,7 +18,7 @@ impl Function for Base64 { FunctionMetadata { name: "base64".to_string(), description: t!("functions.base64.description").to_string(), - category: FunctionCategory::String, + category: vec![FunctionCategory::String], min_args: 1, max_args: 1, accepted_arg_ordered_types: vec![vec![FunctionArgKind::String]], diff --git a/dsc_lib/src/functions/bool.rs b/dsc_lib/src/functions/bool.rs index e82816f83..28ec13de2 100644 --- a/dsc_lib/src/functions/bool.rs +++ b/dsc_lib/src/functions/bool.rs @@ -16,7 +16,7 @@ impl Function for Bool { FunctionMetadata { name: "bool".to_string(), description: t!("functions.bool.description").to_string(), - category: FunctionCategory::Logical, + category: vec![FunctionCategory::Logical], min_args: 1, max_args: 1, accepted_arg_ordered_types: vec![vec![FunctionArgKind::String, FunctionArgKind::Number]], diff --git a/dsc_lib/src/functions/coalesce.rs b/dsc_lib/src/functions/coalesce.rs index 69521ac2d..76b023fb0 100644 --- a/dsc_lib/src/functions/coalesce.rs +++ b/dsc_lib/src/functions/coalesce.rs @@ -16,7 +16,7 @@ impl Function for Coalesce { FunctionMetadata { name: "coalesce".to_string(), description: t!("functions.coalesce.description").to_string(), - category: FunctionCategory::Comparison, + category: vec![FunctionCategory::Logical], min_args: 1, max_args: usize::MAX, accepted_arg_ordered_types: vec![vec![ diff --git a/dsc_lib/src/functions/concat.rs b/dsc_lib/src/functions/concat.rs index e3ce6c3b9..4f7f712da 100644 --- a/dsc_lib/src/functions/concat.rs +++ b/dsc_lib/src/functions/concat.rs @@ -16,7 +16,7 @@ impl Function for Concat { FunctionMetadata { name: "concat".to_string(), description: t!("functions.concat.description").to_string(), - category: FunctionCategory::String, + category: vec![FunctionCategory::String, FunctionCategory::Array], min_args: 2, max_args: usize::MAX, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/contains.rs b/dsc_lib/src/functions/contains.rs index 7d70e593e..c23a420da 100644 --- a/dsc_lib/src/functions/contains.rs +++ b/dsc_lib/src/functions/contains.rs @@ -16,7 +16,7 @@ impl Function for Contains { FunctionMetadata { name: "contains".to_string(), description: t!("functions.contains.description").to_string(), - category: FunctionCategory::Array, + category: vec![FunctionCategory::String, FunctionCategory::Array], min_args: 2, max_args: 2, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/context.rs b/dsc_lib/src/functions/context.rs index c6531816e..c9e06215a 100644 --- a/dsc_lib/src/functions/context.rs +++ b/dsc_lib/src/functions/context.rs @@ -23,7 +23,7 @@ impl Function for Context { FunctionMetadata { name: "context".to_string(), description: t!("functions.context.description").to_string(), - category: FunctionCategory::System, + category: vec![FunctionCategory::Deployment], min_args: 0, max_args: 0, accepted_arg_ordered_types: vec![], diff --git a/dsc_lib/src/functions/copy_index.rs b/dsc_lib/src/functions/copy_index.rs index 3cf7469ad..28048e22e 100644 --- a/dsc_lib/src/functions/copy_index.rs +++ b/dsc_lib/src/functions/copy_index.rs @@ -16,7 +16,7 @@ impl Function for CopyIndex { FunctionMetadata { name: "copyIndex".to_string(), description: t!("functions.copyIndex.description").to_string(), - category: FunctionCategory::Numeric, + category: vec![FunctionCategory::Deployment], min_args: 0, max_args: 2, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/create_array.rs b/dsc_lib/src/functions/create_array.rs index cc8492677..41cb66acf 100644 --- a/dsc_lib/src/functions/create_array.rs +++ b/dsc_lib/src/functions/create_array.rs @@ -16,7 +16,7 @@ impl Function for CreateArray { FunctionMetadata { name: "createArray".to_string(), description: t!("functions.createArray.description").to_string(), - category: FunctionCategory::Array, + category: vec![FunctionCategory::Array], min_args: 0, max_args: usize::MAX, accepted_arg_ordered_types: vec![], diff --git a/dsc_lib/src/functions/create_object.rs b/dsc_lib/src/functions/create_object.rs index 9c1838b3b..878fa5b58 100644 --- a/dsc_lib/src/functions/create_object.rs +++ b/dsc_lib/src/functions/create_object.rs @@ -16,7 +16,7 @@ impl Function for CreateObject { FunctionMetadata { name: "createObject".to_string(), description: t!("functions.createObject.description").to_string(), - category: FunctionCategory::Object, + category: vec![FunctionCategory::Object], min_args: 0, max_args: usize::MAX, accepted_arg_ordered_types: vec![], diff --git a/dsc_lib/src/functions/div.rs b/dsc_lib/src/functions/div.rs index 6950e7b8a..eec6ce673 100644 --- a/dsc_lib/src/functions/div.rs +++ b/dsc_lib/src/functions/div.rs @@ -16,7 +16,7 @@ impl Function for Div { FunctionMetadata { name: "div".to_string(), description: t!("functions.div.description").to_string(), - category: FunctionCategory::Numeric, + category: vec![FunctionCategory::Numeric], min_args: 2, max_args: 2, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/empty.rs b/dsc_lib/src/functions/empty.rs index 96acfcec1..81cb59e46 100644 --- a/dsc_lib/src/functions/empty.rs +++ b/dsc_lib/src/functions/empty.rs @@ -16,7 +16,7 @@ impl Function for Empty { FunctionMetadata { name: "empty".to_string(), description: t!("functions.empty.description").to_string(), - category: FunctionCategory::Array, + category: vec![FunctionCategory::String, FunctionCategory::Array, FunctionCategory::Object], min_args: 1, max_args: 1, accepted_arg_ordered_types: vec![vec![FunctionArgKind::Array, FunctionArgKind::Object, FunctionArgKind::String]], diff --git a/dsc_lib/src/functions/ends_with.rs b/dsc_lib/src/functions/ends_with.rs index b723b3177..7030d07d0 100644 --- a/dsc_lib/src/functions/ends_with.rs +++ b/dsc_lib/src/functions/ends_with.rs @@ -17,7 +17,7 @@ impl Function for EndsWith { FunctionMetadata { name: "endsWith".to_string(), description: t!("functions.endsWith.description").to_string(), - category: FunctionCategory::String, + category: vec![FunctionCategory::String], min_args: 2, max_args: 2, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/envvar.rs b/dsc_lib/src/functions/envvar.rs index e06c28849..bb4a77263 100644 --- a/dsc_lib/src/functions/envvar.rs +++ b/dsc_lib/src/functions/envvar.rs @@ -17,7 +17,7 @@ impl Function for Envvar { FunctionMetadata { name: "envvar".to_string(), description: t!("functions.envvar.description").to_string(), - category: FunctionCategory::System, + category: vec![FunctionCategory::System], min_args: 1, max_args: 1, accepted_arg_ordered_types: vec![vec![FunctionArgKind::String]], diff --git a/dsc_lib/src/functions/equals.rs b/dsc_lib/src/functions/equals.rs index 93016aabf..b96c276ed 100644 --- a/dsc_lib/src/functions/equals.rs +++ b/dsc_lib/src/functions/equals.rs @@ -16,7 +16,7 @@ impl Function for Equals { FunctionMetadata { name: "equals".to_string(), description: t!("functions.equals.description").to_string(), - category: FunctionCategory::Comparison, + category: vec![FunctionCategory::Comparison], min_args: 2, max_args: 2, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/false.rs b/dsc_lib/src/functions/false.rs index 4311118ea..4b17da112 100644 --- a/dsc_lib/src/functions/false.rs +++ b/dsc_lib/src/functions/false.rs @@ -16,7 +16,7 @@ impl Function for False { FunctionMetadata { name: "false".to_string(), description: t!("functions.false.description").to_string(), - category: FunctionCategory::Logical, + category: vec![FunctionCategory::Logical], min_args: 0, max_args: 0, accepted_arg_ordered_types: vec![], diff --git a/dsc_lib/src/functions/first.rs b/dsc_lib/src/functions/first.rs index 4c0a3caac..25395c5e6 100644 --- a/dsc_lib/src/functions/first.rs +++ b/dsc_lib/src/functions/first.rs @@ -16,7 +16,7 @@ impl Function for First { FunctionMetadata { name: "first".to_string(), description: t!("functions.first.description").to_string(), - category: FunctionCategory::Array, + category: vec![FunctionCategory::String, FunctionCategory::Array], min_args: 1, max_args: 1, accepted_arg_ordered_types: vec![vec![FunctionArgKind::Array, FunctionArgKind::String]], diff --git a/dsc_lib/src/functions/format.rs b/dsc_lib/src/functions/format.rs index 570c977d0..e58336d1c 100644 --- a/dsc_lib/src/functions/format.rs +++ b/dsc_lib/src/functions/format.rs @@ -87,7 +87,7 @@ impl Function for Format { FunctionMetadata { name: "format".to_string(), description: t!("functions.format.description").to_string(), - category: FunctionCategory::String, + category: vec![FunctionCategory::String], min_args: 2, max_args: usize::MAX, accepted_arg_ordered_types: vec![vec![FunctionArgKind::String]], diff --git a/dsc_lib/src/functions/greater.rs b/dsc_lib/src/functions/greater.rs index 6182d1439..4083749c1 100644 --- a/dsc_lib/src/functions/greater.rs +++ b/dsc_lib/src/functions/greater.rs @@ -16,7 +16,7 @@ impl Function for Greater { FunctionMetadata { name: "greater".to_string(), description: t!("functions.greater.description").to_string(), - category: FunctionCategory::Comparison, + category: vec![FunctionCategory::Comparison], min_args: 2, max_args: 2, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/greater_or_equals.rs b/dsc_lib/src/functions/greater_or_equals.rs index 6ecd3dc5d..aeb9cf76e 100644 --- a/dsc_lib/src/functions/greater_or_equals.rs +++ b/dsc_lib/src/functions/greater_or_equals.rs @@ -16,7 +16,7 @@ impl Function for GreaterOrEquals { FunctionMetadata { name: "greaterOrEquals".to_string(), description: t!("functions.greaterOrEquals.description").to_string(), - category: FunctionCategory::Comparison, + category: vec![FunctionCategory::Comparison], min_args: 2, max_args: 2, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/if.rs b/dsc_lib/src/functions/if.rs index 5da1d3abf..12dfed340 100644 --- a/dsc_lib/src/functions/if.rs +++ b/dsc_lib/src/functions/if.rs @@ -16,7 +16,7 @@ impl Function for If { FunctionMetadata { name: "if".to_string(), description: t!("functions.if.description").to_string(), - category: FunctionCategory::Logical, + category: vec![FunctionCategory::Logical], min_args: 3, max_args: 3, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/index_of.rs b/dsc_lib/src/functions/index_of.rs index 0d90f7f59..2ca367d9b 100644 --- a/dsc_lib/src/functions/index_of.rs +++ b/dsc_lib/src/functions/index_of.rs @@ -16,7 +16,7 @@ impl Function for IndexOf { FunctionMetadata { name: "indexOf".to_string(), description: t!("functions.indexOf.description").to_string(), - category: FunctionCategory::Array, + category: vec![FunctionCategory::String], min_args: 2, max_args: 2, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/int.rs b/dsc_lib/src/functions/int.rs index 6018c62dc..e1ae91fa9 100644 --- a/dsc_lib/src/functions/int.rs +++ b/dsc_lib/src/functions/int.rs @@ -17,7 +17,7 @@ impl Function for Int { FunctionMetadata { name: "int".to_string(), description: t!("functions.int.description").to_string(), - category: FunctionCategory::Numeric, + category: vec![FunctionCategory::Numeric], min_args: 1, max_args: 1, accepted_arg_ordered_types: vec![vec![FunctionArgKind::String, FunctionArgKind::Number]], diff --git a/dsc_lib/src/functions/join.rs b/dsc_lib/src/functions/join.rs index 71a5d2b88..1f7354bcb 100644 --- a/dsc_lib/src/functions/join.rs +++ b/dsc_lib/src/functions/join.rs @@ -27,7 +27,7 @@ impl Function for Join { FunctionMetadata { name: "join".to_string(), description: t!("functions.join.description").to_string(), - category: FunctionCategory::String, + category: vec![FunctionCategory::String], min_args: 2, max_args: 2, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/last_index_of.rs b/dsc_lib/src/functions/last_index_of.rs index b8ff2da33..b51be2031 100644 --- a/dsc_lib/src/functions/last_index_of.rs +++ b/dsc_lib/src/functions/last_index_of.rs @@ -16,7 +16,7 @@ impl Function for LastIndexOf { FunctionMetadata { name: "lastIndexOf".to_string(), description: t!("functions.lastIndexOf.description").to_string(), - category: FunctionCategory::Array, + category: vec![FunctionCategory::String], min_args: 2, max_args: 2, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/length.rs b/dsc_lib/src/functions/length.rs index 7f2ddb033..4b4ac67b5 100644 --- a/dsc_lib/src/functions/length.rs +++ b/dsc_lib/src/functions/length.rs @@ -16,7 +16,7 @@ impl Function for Length { FunctionMetadata { name: "length".to_string(), description: t!("functions.length.description").to_string(), - category: FunctionCategory::Array, + category: vec![FunctionCategory::String, FunctionCategory::Array, FunctionCategory::Object], min_args: 1, max_args: 1, accepted_arg_ordered_types: vec![vec![FunctionArgKind::Array, FunctionArgKind::Object, FunctionArgKind::String]], diff --git a/dsc_lib/src/functions/less.rs b/dsc_lib/src/functions/less.rs index 741651116..98dbccff5 100644 --- a/dsc_lib/src/functions/less.rs +++ b/dsc_lib/src/functions/less.rs @@ -16,7 +16,7 @@ impl Function for Less { FunctionMetadata { name: "less".to_string(), description: t!("functions.less.description").to_string(), - category: FunctionCategory::Comparison, + category: vec![FunctionCategory::Comparison], min_args: 2, max_args: 2, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/less_or_equals.rs b/dsc_lib/src/functions/less_or_equals.rs index 2aff630aa..52404d602 100644 --- a/dsc_lib/src/functions/less_or_equals.rs +++ b/dsc_lib/src/functions/less_or_equals.rs @@ -16,7 +16,7 @@ impl Function for LessOrEquals { FunctionMetadata { name: "lessOrEquals".to_string(), description: t!("functions.lessOrEquals.description").to_string(), - category: FunctionCategory::Comparison, + category: vec![FunctionCategory::Comparison], min_args: 2, max_args: 2, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/max.rs b/dsc_lib/src/functions/max.rs index 22709fa3b..5047c0641 100644 --- a/dsc_lib/src/functions/max.rs +++ b/dsc_lib/src/functions/max.rs @@ -16,7 +16,7 @@ impl Function for Max { FunctionMetadata { name: "max".to_string(), description: t!("functions.max.description").to_string(), - category: FunctionCategory::Numeric, + category: vec![FunctionCategory::Numeric], min_args: 1, max_args: usize::MAX, accepted_arg_ordered_types: vec![vec![FunctionArgKind::Number, FunctionArgKind::Array]], diff --git a/dsc_lib/src/functions/min.rs b/dsc_lib/src/functions/min.rs index e0c7812a2..f6e00ddf8 100644 --- a/dsc_lib/src/functions/min.rs +++ b/dsc_lib/src/functions/min.rs @@ -16,7 +16,7 @@ impl Function for Min { FunctionMetadata { name: "min".to_string(), description: t!("functions.min.description").to_string(), - category: FunctionCategory::Numeric, + category: vec![FunctionCategory::Numeric], min_args: 1, max_args: usize::MAX, accepted_arg_ordered_types: vec![vec![FunctionArgKind::Number, FunctionArgKind::Array]], diff --git a/dsc_lib/src/functions/mod.rs b/dsc_lib/src/functions/mod.rs index e881acc3e..413d49e4d 100644 --- a/dsc_lib/src/functions/mod.rs +++ b/dsc_lib/src/functions/mod.rs @@ -93,7 +93,7 @@ impl Display for FunctionArgKind { pub struct FunctionMetadata { pub name: String, pub description: String, - pub category: FunctionCategory, + pub category: Vec, pub min_args: usize, pub max_args: usize, pub accepted_arg_ordered_types: Vec>, @@ -267,7 +267,7 @@ impl FunctionDispatcher { self.functions.iter().map(|(name, function)| { let metadata = function.get_metadata(); FunctionDefinition { - category: metadata.category, + category: metadata.category.clone(), name: name.clone(), description: metadata.description, min_args: metadata.min_args, @@ -289,7 +289,7 @@ impl Default for FunctionDispatcher { #[derive(Clone, Debug, Ord, PartialOrd, Eq, PartialEq, Serialize, JsonSchema)] #[serde(deny_unknown_fields)] pub struct FunctionDefinition { - pub category: FunctionCategory, + pub category: Vec, pub name: String, pub description: String, #[serde(rename = "minArgs")] diff --git a/dsc_lib/src/functions/mod_function.rs b/dsc_lib/src/functions/mod_function.rs index be0d261a1..091bc9c6c 100644 --- a/dsc_lib/src/functions/mod_function.rs +++ b/dsc_lib/src/functions/mod_function.rs @@ -16,7 +16,7 @@ impl Function for Mod { FunctionMetadata { name: "mod".to_string(), description: t!("functions.mod.description").to_string(), - category: FunctionCategory::Numeric, + category: vec![FunctionCategory::Numeric], min_args: 2, max_args: 2, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/mul.rs b/dsc_lib/src/functions/mul.rs index ba3c7e136..9eb61b678 100644 --- a/dsc_lib/src/functions/mul.rs +++ b/dsc_lib/src/functions/mul.rs @@ -16,7 +16,7 @@ impl Function for Mul { FunctionMetadata { name: "mul".to_string(), description: t!("functions.mul.description").to_string(), - category: FunctionCategory::Numeric, + category: vec![FunctionCategory::Numeric], min_args: 2, max_args: 2, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/not.rs b/dsc_lib/src/functions/not.rs index 7c8e9db1e..b409ed591 100644 --- a/dsc_lib/src/functions/not.rs +++ b/dsc_lib/src/functions/not.rs @@ -16,7 +16,7 @@ impl Function for Not { FunctionMetadata { name: "not".to_string(), description: t!("functions.not.description").to_string(), - category: FunctionCategory::Logical, + category: vec![FunctionCategory::Logical], min_args: 1, max_args: 1, accepted_arg_ordered_types: vec![vec![FunctionArgKind::Boolean]], diff --git a/dsc_lib/src/functions/null.rs b/dsc_lib/src/functions/null.rs index d0fe34c23..d226a19bb 100644 --- a/dsc_lib/src/functions/null.rs +++ b/dsc_lib/src/functions/null.rs @@ -16,7 +16,7 @@ impl Function for Null { FunctionMetadata { name: "null".to_string(), description: t!("functions.null.description").to_string(), - category: FunctionCategory::Object, + category: vec![FunctionCategory::Logical], min_args: 0, max_args: 0, accepted_arg_ordered_types: vec![], diff --git a/dsc_lib/src/functions/or.rs b/dsc_lib/src/functions/or.rs index c3e75defb..a38305b72 100644 --- a/dsc_lib/src/functions/or.rs +++ b/dsc_lib/src/functions/or.rs @@ -16,7 +16,7 @@ impl Function for Or { FunctionMetadata { name: "or".to_string(), description: t!("functions.or.description").to_string(), - category: FunctionCategory::Logical, + category: vec![FunctionCategory::Logical], min_args: 2, max_args: usize::MAX, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/parameters.rs b/dsc_lib/src/functions/parameters.rs index 955477725..e498662d5 100644 --- a/dsc_lib/src/functions/parameters.rs +++ b/dsc_lib/src/functions/parameters.rs @@ -18,7 +18,7 @@ impl Function for Parameters { FunctionMetadata { name: "parameters".to_string(), description: t!("functions.parameters.description").to_string(), - category: FunctionCategory::Deployment, + category: vec![FunctionCategory::Deployment], min_args: 1, max_args: 1, accepted_arg_ordered_types: vec![vec![FunctionArgKind::String]], diff --git a/dsc_lib/src/functions/path.rs b/dsc_lib/src/functions/path.rs index 6b0e087f1..c348b1ea7 100644 --- a/dsc_lib/src/functions/path.rs +++ b/dsc_lib/src/functions/path.rs @@ -20,7 +20,7 @@ impl Function for Path { FunctionMetadata { name: "path".to_string(), description: t!("functions.path.description").to_string(), - category: FunctionCategory::System, + category: vec![FunctionCategory::String], min_args: 2, max_args: usize::MAX, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/reference.rs b/dsc_lib/src/functions/reference.rs index 978712d45..4f7019abe 100644 --- a/dsc_lib/src/functions/reference.rs +++ b/dsc_lib/src/functions/reference.rs @@ -16,7 +16,7 @@ impl Function for Reference { FunctionMetadata { name: "reference".to_string(), description: t!("functions.reference.description").to_string(), - category: FunctionCategory::Resource, + category: vec![FunctionCategory::Deployment], min_args: 1, max_args: 1, accepted_arg_ordered_types: vec![vec![FunctionArgKind::String]], diff --git a/dsc_lib/src/functions/resource_id.rs b/dsc_lib/src/functions/resource_id.rs index 82a499db2..b4b562cbf 100644 --- a/dsc_lib/src/functions/resource_id.rs +++ b/dsc_lib/src/functions/resource_id.rs @@ -15,7 +15,7 @@ impl Function for ResourceId { FunctionMetadata { name: "resourceId".to_string(), description: t!("functions.resourceId.description").to_string(), - category: FunctionCategory::Resource, + category: vec![FunctionCategory::Resource], min_args: 2, max_args: 2, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/secret.rs b/dsc_lib/src/functions/secret.rs index 9497873e1..9b5205232 100644 --- a/dsc_lib/src/functions/secret.rs +++ b/dsc_lib/src/functions/secret.rs @@ -18,7 +18,7 @@ impl Function for Secret { FunctionMetadata { name: "secret".to_string(), description: t!("functions.secret.description").to_string(), - category: FunctionCategory::System, + category: vec![FunctionCategory::Deployment], min_args: 1, max_args: 2, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/skip.rs b/dsc_lib/src/functions/skip.rs index 8776f595a..c527ed9fc 100644 --- a/dsc_lib/src/functions/skip.rs +++ b/dsc_lib/src/functions/skip.rs @@ -16,7 +16,7 @@ impl Function for Skip { FunctionMetadata { name: "skip".to_string(), description: t!("functions.skip.description").to_string(), - category: FunctionCategory::Array, + category: vec![FunctionCategory::Array], min_args: 2, max_args: 2, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/starts_with.rs b/dsc_lib/src/functions/starts_with.rs index 16709cdda..40a73d618 100644 --- a/dsc_lib/src/functions/starts_with.rs +++ b/dsc_lib/src/functions/starts_with.rs @@ -17,7 +17,7 @@ impl Function for StartsWith { FunctionMetadata { name: "startsWith".to_string(), description: t!("functions.startsWith.description").to_string(), - category: FunctionCategory::String, + category: vec![FunctionCategory::String], min_args: 2, max_args: 2, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/string.rs b/dsc_lib/src/functions/string.rs index 9dccf8d4b..d40e7684e 100644 --- a/dsc_lib/src/functions/string.rs +++ b/dsc_lib/src/functions/string.rs @@ -16,7 +16,7 @@ impl Function for StringFn { FunctionMetadata { name: "string".to_string(), description: t!("functions.string.description").to_string(), - category: FunctionCategory::String, + category: vec![FunctionCategory::String], min_args: 1, max_args: 1, accepted_arg_ordered_types: vec![vec![ diff --git a/dsc_lib/src/functions/sub.rs b/dsc_lib/src/functions/sub.rs index 488c4e686..94772aa75 100644 --- a/dsc_lib/src/functions/sub.rs +++ b/dsc_lib/src/functions/sub.rs @@ -16,7 +16,7 @@ impl Function for Sub { FunctionMetadata { name: "sub".to_string(), description: t!("functions.sub.description").to_string(), - category: FunctionCategory::Numeric, + category: vec![FunctionCategory::Numeric], min_args: 2, max_args: 2, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/system_root.rs b/dsc_lib/src/functions/system_root.rs index ef8abe9ee..30083a8e1 100644 --- a/dsc_lib/src/functions/system_root.rs +++ b/dsc_lib/src/functions/system_root.rs @@ -18,7 +18,7 @@ impl Function for SystemRoot { FunctionMetadata { name: "systemRoot".to_string(), description: t!("functions.systemRoot.description").to_string(), - category: FunctionCategory::System, + category: vec![FunctionCategory::System], min_args: 0, max_args: 0, accepted_arg_ordered_types: vec![], diff --git a/dsc_lib/src/functions/true.rs b/dsc_lib/src/functions/true.rs index 34ade6bb8..c01a3faed 100644 --- a/dsc_lib/src/functions/true.rs +++ b/dsc_lib/src/functions/true.rs @@ -16,7 +16,7 @@ impl Function for True { FunctionMetadata { name: "true".to_string(), description: t!("functions.true.description").to_string(), - category: FunctionCategory::Logical, + category: vec![FunctionCategory::Logical], min_args: 0, max_args: 0, accepted_arg_ordered_types: vec![], diff --git a/dsc_lib/src/functions/union.rs b/dsc_lib/src/functions/union.rs index a839ae684..db2741b58 100644 --- a/dsc_lib/src/functions/union.rs +++ b/dsc_lib/src/functions/union.rs @@ -16,7 +16,7 @@ impl Function for Union { FunctionMetadata { name: "union".to_string(), description: t!("functions.union.description").to_string(), - category: FunctionCategory::Array, + category: vec![FunctionCategory::Array], min_args: 2, max_args: usize::MAX, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/unique_string.rs b/dsc_lib/src/functions/unique_string.rs index 7da9fd894..884a9269c 100644 --- a/dsc_lib/src/functions/unique_string.rs +++ b/dsc_lib/src/functions/unique_string.rs @@ -19,7 +19,7 @@ impl Function for UniqueString { FunctionMetadata { name: "uniqueString".to_string(), description: t!("functions.uniqueString.description").to_string(), - category: FunctionCategory::String, + category: vec![FunctionCategory::String], min_args: 1, max_args: usize::MAX, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/utc_now.rs b/dsc_lib/src/functions/utc_now.rs index 020600b4e..34912ec14 100644 --- a/dsc_lib/src/functions/utc_now.rs +++ b/dsc_lib/src/functions/utc_now.rs @@ -18,7 +18,7 @@ impl Function for UtcNow { FunctionMetadata { name: "utcNow".to_string(), description: t!("functions.utcNow.description").to_string(), - category: FunctionCategory::Date, + category: vec![FunctionCategory::Date], min_args: 0, max_args: 1, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/variables.rs b/dsc_lib/src/functions/variables.rs index c696c267c..9f4dfcf9b 100644 --- a/dsc_lib/src/functions/variables.rs +++ b/dsc_lib/src/functions/variables.rs @@ -16,7 +16,7 @@ impl Function for Variables { FunctionMetadata { name: "variables".to_string(), description: t!("functions.variables.description").to_string(), - category: FunctionCategory::Deployment, + category: vec![FunctionCategory::Deployment], min_args: 1, max_args: 1, accepted_arg_ordered_types: vec![vec![FunctionArgKind::String]], From 3e64dd82bab625c5db37281ff805708bb4d55912 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 26 Sep 2025 17:35:40 +0000 Subject: [PATCH 3/5] Fix build failure by allowing cargo to use crates.io registry Co-authored-by: SteveL-MSFT <11859881+SteveL-MSFT@users.noreply.github.com> --- .cargo/config.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index 27cca1ce0..4a4f9f7aa 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -17,4 +17,4 @@ rustflags = ["-Ccontrol-flow-guard", "-Ctarget-feature=+crt-static", "-Clink-arg # The following is only needed for release builds [source.crates-io] -replace-with = "POWERSHELL" +# replace-with = "POWERSHELL" From c9d0010b1c4cf1da914271daf7d9dab4bee0afe0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 26 Sep 2025 19:02:53 +0000 Subject: [PATCH 4/5] Fix clippy error: replace redundant closure with method reference Co-authored-by: SteveL-MSFT <11859881+SteveL-MSFT@users.noreply.github.com> --- dsc/src/subcommand.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dsc/src/subcommand.rs b/dsc/src/subcommand.rs index dd4255fd0..57d85cdc0 100644 --- a/dsc/src/subcommand.rs +++ b/dsc/src/subcommand.rs @@ -709,7 +709,7 @@ fn list_functions(functions: &FunctionDispatcher, function_name: Option<&String> }; table.add_row(vec![ - function.category.iter().map(|c| c.to_string()).collect::>().join(", "), + function.category.iter().map(std::string::ToString::to_string).collect::>().join(", "), function.name, function.min_args.to_string(), max_args, From 7a065563d56e956b14f2abcefb0943a18cc09107 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 26 Sep 2025 19:32:46 +0000 Subject: [PATCH 5/5] Fix function categorization and revert cargo config change Co-authored-by: SteveL-MSFT <11859881+SteveL-MSFT@users.noreply.github.com> --- .cargo/config.toml | 2 +- dsc_lib/src/functions/coalesce.rs | 2 +- dsc_lib/src/functions/copy_index.rs | 2 +- dsc_lib/src/functions/empty.rs | 2 +- dsc_lib/src/functions/first.rs | 2 +- dsc_lib/src/functions/index_of.rs | 2 +- dsc_lib/src/functions/last_index_of.rs | 2 +- dsc_lib/src/functions/length.rs | 2 +- dsc_lib/src/functions/null.rs | 2 +- dsc_lib/src/functions/reference.rs | 2 +- dsc_lib/src/functions/skip.rs | 2 +- dsc_lib/src/functions/union.rs | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index 4a4f9f7aa..27cca1ce0 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -17,4 +17,4 @@ rustflags = ["-Ccontrol-flow-guard", "-Ctarget-feature=+crt-static", "-Clink-arg # The following is only needed for release builds [source.crates-io] -# replace-with = "POWERSHELL" +replace-with = "POWERSHELL" diff --git a/dsc_lib/src/functions/coalesce.rs b/dsc_lib/src/functions/coalesce.rs index 76b023fb0..7d2f26af9 100644 --- a/dsc_lib/src/functions/coalesce.rs +++ b/dsc_lib/src/functions/coalesce.rs @@ -16,7 +16,7 @@ impl Function for Coalesce { FunctionMetadata { name: "coalesce".to_string(), description: t!("functions.coalesce.description").to_string(), - category: vec![FunctionCategory::Logical], + category: vec![FunctionCategory::Comparison], min_args: 1, max_args: usize::MAX, accepted_arg_ordered_types: vec![vec![ diff --git a/dsc_lib/src/functions/copy_index.rs b/dsc_lib/src/functions/copy_index.rs index 28048e22e..4503b20ed 100644 --- a/dsc_lib/src/functions/copy_index.rs +++ b/dsc_lib/src/functions/copy_index.rs @@ -16,7 +16,7 @@ impl Function for CopyIndex { FunctionMetadata { name: "copyIndex".to_string(), description: t!("functions.copyIndex.description").to_string(), - category: vec![FunctionCategory::Deployment], + category: vec![FunctionCategory::Numeric], min_args: 0, max_args: 2, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/empty.rs b/dsc_lib/src/functions/empty.rs index 81cb59e46..8e6c6a300 100644 --- a/dsc_lib/src/functions/empty.rs +++ b/dsc_lib/src/functions/empty.rs @@ -16,7 +16,7 @@ impl Function for Empty { FunctionMetadata { name: "empty".to_string(), description: t!("functions.empty.description").to_string(), - category: vec![FunctionCategory::String, FunctionCategory::Array, FunctionCategory::Object], + category: vec![FunctionCategory::Array, FunctionCategory::Object, FunctionCategory::String], min_args: 1, max_args: 1, accepted_arg_ordered_types: vec![vec![FunctionArgKind::Array, FunctionArgKind::Object, FunctionArgKind::String]], diff --git a/dsc_lib/src/functions/first.rs b/dsc_lib/src/functions/first.rs index 25395c5e6..f3d442afa 100644 --- a/dsc_lib/src/functions/first.rs +++ b/dsc_lib/src/functions/first.rs @@ -16,7 +16,7 @@ impl Function for First { FunctionMetadata { name: "first".to_string(), description: t!("functions.first.description").to_string(), - category: vec![FunctionCategory::String, FunctionCategory::Array], + category: vec![FunctionCategory::Array, FunctionCategory::String], min_args: 1, max_args: 1, accepted_arg_ordered_types: vec![vec![FunctionArgKind::Array, FunctionArgKind::String]], diff --git a/dsc_lib/src/functions/index_of.rs b/dsc_lib/src/functions/index_of.rs index 2ca367d9b..136157785 100644 --- a/dsc_lib/src/functions/index_of.rs +++ b/dsc_lib/src/functions/index_of.rs @@ -16,7 +16,7 @@ impl Function for IndexOf { FunctionMetadata { name: "indexOf".to_string(), description: t!("functions.indexOf.description").to_string(), - category: vec![FunctionCategory::String], + category: vec![FunctionCategory::Array, FunctionCategory::String], min_args: 2, max_args: 2, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/last_index_of.rs b/dsc_lib/src/functions/last_index_of.rs index b51be2031..fad0996f1 100644 --- a/dsc_lib/src/functions/last_index_of.rs +++ b/dsc_lib/src/functions/last_index_of.rs @@ -16,7 +16,7 @@ impl Function for LastIndexOf { FunctionMetadata { name: "lastIndexOf".to_string(), description: t!("functions.lastIndexOf.description").to_string(), - category: vec![FunctionCategory::String], + category: vec![FunctionCategory::Array, FunctionCategory::String], min_args: 2, max_args: 2, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/length.rs b/dsc_lib/src/functions/length.rs index 4b4ac67b5..f773ef8b1 100644 --- a/dsc_lib/src/functions/length.rs +++ b/dsc_lib/src/functions/length.rs @@ -16,7 +16,7 @@ impl Function for Length { FunctionMetadata { name: "length".to_string(), description: t!("functions.length.description").to_string(), - category: vec![FunctionCategory::String, FunctionCategory::Array, FunctionCategory::Object], + category: vec![FunctionCategory::Array, FunctionCategory::Object, FunctionCategory::String], min_args: 1, max_args: 1, accepted_arg_ordered_types: vec![vec![FunctionArgKind::Array, FunctionArgKind::Object, FunctionArgKind::String]], diff --git a/dsc_lib/src/functions/null.rs b/dsc_lib/src/functions/null.rs index d226a19bb..457407476 100644 --- a/dsc_lib/src/functions/null.rs +++ b/dsc_lib/src/functions/null.rs @@ -16,7 +16,7 @@ impl Function for Null { FunctionMetadata { name: "null".to_string(), description: t!("functions.null.description").to_string(), - category: vec![FunctionCategory::Logical], + category: vec![FunctionCategory::Object], min_args: 0, max_args: 0, accepted_arg_ordered_types: vec![], diff --git a/dsc_lib/src/functions/reference.rs b/dsc_lib/src/functions/reference.rs index 4f7019abe..07e0b37a6 100644 --- a/dsc_lib/src/functions/reference.rs +++ b/dsc_lib/src/functions/reference.rs @@ -16,7 +16,7 @@ impl Function for Reference { FunctionMetadata { name: "reference".to_string(), description: t!("functions.reference.description").to_string(), - category: vec![FunctionCategory::Deployment], + category: vec![FunctionCategory::Resource], min_args: 1, max_args: 1, accepted_arg_ordered_types: vec![vec![FunctionArgKind::String]], diff --git a/dsc_lib/src/functions/skip.rs b/dsc_lib/src/functions/skip.rs index c527ed9fc..b506d1cb9 100644 --- a/dsc_lib/src/functions/skip.rs +++ b/dsc_lib/src/functions/skip.rs @@ -16,7 +16,7 @@ impl Function for Skip { FunctionMetadata { name: "skip".to_string(), description: t!("functions.skip.description").to_string(), - category: vec![FunctionCategory::Array], + category: vec![FunctionCategory::Array, FunctionCategory::String], min_args: 2, max_args: 2, accepted_arg_ordered_types: vec![ diff --git a/dsc_lib/src/functions/union.rs b/dsc_lib/src/functions/union.rs index db2741b58..7c3b47e4f 100644 --- a/dsc_lib/src/functions/union.rs +++ b/dsc_lib/src/functions/union.rs @@ -16,7 +16,7 @@ impl Function for Union { FunctionMetadata { name: "union".to_string(), description: t!("functions.union.description").to_string(), - category: vec![FunctionCategory::Array], + category: vec![FunctionCategory::Array, FunctionCategory::Object], min_args: 2, max_args: usize::MAX, accepted_arg_ordered_types: vec![