diff --git a/rust/kcl-lib/src/docs/kcl_doc.rs b/rust/kcl-lib/src/docs/kcl_doc.rs index 8c95008087a..7a3e8079371 100644 --- a/rust/kcl-lib/src/docs/kcl_doc.rs +++ b/rust/kcl-lib/src/docs/kcl_doc.rs @@ -733,7 +733,7 @@ impl ArgData { let mut result = ArgData { snippet_array: Default::default(), name: arg.identifier.name.clone(), - ty: arg.type_.as_ref().map(|t| t.to_string()), + ty: arg.param_type.as_ref().map(|t| t.to_string()), docs: None, override_in_snippet: None, kind: if arg.labeled { diff --git a/rust/kcl-lib/src/execution/fn_call.rs b/rust/kcl-lib/src/execution/fn_call.rs index a079b364b50..750ff123864 100644 --- a/rust/kcl-lib/src/execution/fn_call.rs +++ b/rust/kcl-lib/src/execution/fn_call.rs @@ -153,13 +153,16 @@ impl<'a> From<&'a FunctionSource> for FunctionDefinition<'a> { let mut named_args = IndexMap::new(); for p in &ast.params { if !p.labeled { - input_arg = Some((p.identifier.name.clone(), p.type_.as_ref().map(|t| t.inner.clone()))); + input_arg = Some(( + p.identifier.name.clone(), + p.param_type.as_ref().map(|t| t.inner.clone()), + )); continue; } named_args.insert( p.identifier.name.clone(), - (p.default_value.clone(), p.type_.as_ref().map(|t| t.inner.clone())), + (p.default_value.clone(), p.param_type.as_ref().map(|t| t.inner.clone())), ); } @@ -899,7 +902,7 @@ mod test { fn opt_param(s: &'static str) -> Parameter { Parameter { identifier: ident(s), - type_: None, + param_type: None, default_value: Some(DefaultParamVal::none()), labeled: true, digest: None, @@ -908,7 +911,7 @@ mod test { fn req_param(s: &'static str) -> Parameter { Parameter { identifier: ident(s), - type_: None, + param_type: None, default_value: None, labeled: true, digest: None, diff --git a/rust/kcl-lib/src/lsp/kcl/hover.rs b/rust/kcl-lib/src/lsp/kcl/hover.rs index 3ec8ac4cfbe..e2a32366d39 100644 --- a/rust/kcl-lib/src/lsp/kcl/hover.rs +++ b/rust/kcl-lib/src/lsp/kcl/hover.rs @@ -333,7 +333,7 @@ impl FunctionExpression { return Some(h); } for arg in &self.params { - if let Some(ty) = &arg.type_ + if let Some(ty) = &arg.param_type && let Some(h) = ty.get_hover_value_for_position(pos, code, opts) { return Some(h); @@ -342,7 +342,7 @@ impl FunctionExpression { if let Some(value) = self.body.get_expr_for_position(pos) { let mut vars = opts.vars.clone().unwrap_or_default(); for arg in &self.params { - let ty = arg.type_.as_ref().map(|ty| ty.to_string()); + let ty = arg.param_type.as_ref().map(|ty| ty.to_string()); vars.insert(arg.identifier.inner.name.clone(), ty); } return value.get_hover_value_for_position( diff --git a/rust/kcl-lib/src/main.rs b/rust/kcl-lib/src/main.rs index 19c684aa75d..c5338500582 100644 --- a/rust/kcl-lib/src/main.rs +++ b/rust/kcl-lib/src/main.rs @@ -44,4 +44,5 @@ async fn main() { .unwrap(); let mut exec_state = ExecState::new(&ctx); ctx.run(&program, &mut exec_state).await.map_err(|e| e.error).unwrap(); + println!("{:#?}", exec_state.errors()); } diff --git a/rust/kcl-lib/src/parsing/ast/digest.rs b/rust/kcl-lib/src/parsing/ast/digest.rs index 39583f65854..3f022255b77 100644 --- a/rust/kcl-lib/src/parsing/ast/digest.rs +++ b/rust/kcl-lib/src/parsing/ast/digest.rs @@ -245,7 +245,7 @@ impl FunctionType { impl Parameter { compute_digest!(|slf, hasher| { hasher.update(slf.identifier.compute_digest()); - match &mut slf.type_ { + match &mut slf.param_type { Some(arg) => { hasher.update(b"Parameter::type_::Some"); hasher.update(arg.compute_digest()) diff --git a/rust/kcl-lib/src/parsing/ast/types/mod.rs b/rust/kcl-lib/src/parsing/ast/types/mod.rs index caf1dafe11d..e7c59efdc80 100644 --- a/rust/kcl-lib/src/parsing/ast/types/mod.rs +++ b/rust/kcl-lib/src/parsing/ast/types/mod.rs @@ -3330,8 +3330,8 @@ pub struct Parameter { pub identifier: Node, /// The type of the parameter. /// This is optional if the user defines a type. - #[serde(skip)] - pub type_: Option>, + #[serde(skip_serializing_if = "Option::is_none")] + pub param_type: Option>, /// Is the parameter optional? /// If so, what is its default value? /// If this is None, then the parameter is required. @@ -3887,15 +3887,15 @@ cylinder = startSketchOn(-XZ) let params = &func_expr.params; assert_eq!(params.len(), 3); assert_eq!( - params[0].type_.as_ref().unwrap().inner, + params[0].param_type.as_ref().unwrap().inner, Type::Primitive(PrimitiveType::Number(NumericSuffix::Mm)) ); assert_eq!( - params[1].type_.as_ref().unwrap().inner, + params[1].param_type.as_ref().unwrap().inner, Type::Primitive(PrimitiveType::String) ); assert_eq!( - params[2].type_.as_ref().unwrap().inner, + params[2].param_type.as_ref().unwrap().inner, Type::Primitive(PrimitiveType::String) ); } @@ -3918,21 +3918,21 @@ cylinder = startSketchOn(-XZ) let params = &func_expr.params; assert_eq!(params.len(), 3); assert_eq!( - params[0].type_.as_ref().unwrap().inner, + params[0].param_type.as_ref().unwrap().inner, Type::Array { ty: Box::new(Type::Primitive(PrimitiveType::Number(NumericSuffix::None))), len: ArrayLen::None } ); assert_eq!( - params[1].type_.as_ref().unwrap().inner, + params[1].param_type.as_ref().unwrap().inner, Type::Array { ty: Box::new(Type::Primitive(PrimitiveType::String)), len: ArrayLen::None } ); assert_eq!( - params[2].type_.as_ref().unwrap().inner, + params[2].param_type.as_ref().unwrap().inner, Type::Primitive(PrimitiveType::String) ); } @@ -3956,14 +3956,14 @@ cylinder = startSketchOn(-XZ) let params = &func_expr.params; assert_eq!(params.len(), 3); assert_eq!( - params[0].type_.as_ref().unwrap().inner, + params[0].param_type.as_ref().unwrap().inner, Type::Array { ty: Box::new(Type::Primitive(PrimitiveType::Number(NumericSuffix::None))), len: ArrayLen::None } ); assert_eq!( - params[1].type_.as_ref().unwrap().inner, + params[1].param_type.as_ref().unwrap().inner, Type::Object { properties: vec![ ( @@ -4019,7 +4019,7 @@ cylinder = startSketchOn(-XZ) } ); assert_eq!( - params[2].type_.as_ref().unwrap().inner, + params[2].param_type.as_ref().unwrap().inner, Type::Primitive(PrimitiveType::String) ); } @@ -4046,7 +4046,7 @@ cylinder = startSketchOn(-XZ) name: "foo".to_owned(), digest: None, }), - type_: None, + param_type: None, default_value: None, labeled: true, digest: None, @@ -4065,7 +4065,7 @@ cylinder = startSketchOn(-XZ) name: "foo".to_owned(), digest: None, }), - type_: None, + param_type: None, default_value: Some(DefaultParamVal::none()), labeled: true, digest: None, @@ -4085,7 +4085,7 @@ cylinder = startSketchOn(-XZ) name: "foo".to_owned(), digest: None, }), - type_: None, + param_type: None, default_value: None, labeled: true, digest: None, @@ -4095,7 +4095,7 @@ cylinder = startSketchOn(-XZ) name: "bar".to_owned(), digest: None, }), - type_: None, + param_type: None, default_value: Some(DefaultParamVal::none()), labeled: true, digest: None, diff --git a/rust/kcl-lib/src/parsing/parser.rs b/rust/kcl-lib/src/parsing/parser.rs index 0f7f7091d9d..9e8d3c8df1b 100644 --- a/rust/kcl-lib/src/parsing/parser.rs +++ b/rust/kcl-lib/src/parsing/parser.rs @@ -3181,7 +3181,7 @@ fn parameters(i: &mut TokenSlice) -> ModalResult> { Ok(Parameter { identifier, - type_, + param_type: type_, default_value, labeled, digest: None, @@ -4612,7 +4612,7 @@ e name: "a".to_owned(), digest: None, }), - type_: None, + param_type: None, default_value: Some(DefaultParamVal::none()), labeled: true, digest: None, @@ -4625,7 +4625,7 @@ e name: "a".to_owned(), digest: None, }), - type_: None, + param_type: None, default_value: None, labeled: true, digest: None, @@ -4639,7 +4639,7 @@ e name: "a".to_owned(), digest: None, }), - type_: None, + param_type: None, default_value: None, labeled: true, digest: None, @@ -4649,7 +4649,7 @@ e name: "b".to_owned(), digest: None, }), - type_: None, + param_type: None, default_value: Some(DefaultParamVal::none()), labeled: true, digest: None, @@ -4664,7 +4664,7 @@ e name: "a".to_owned(), digest: None, }), - type_: None, + param_type: None, default_value: Some(DefaultParamVal::none()), labeled: true, digest: None, @@ -4674,7 +4674,7 @@ e name: "b".to_owned(), digest: None, }), - type_: None, + param_type: None, default_value: None, labeled: true, digest: None, diff --git a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__kw_function_decl_with_default_and_type.snap b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__kw_function_decl_with_default_and_type.snap index 71eaf1c1a2f..f6de63cfeff 100644 --- a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__kw_function_decl_with_default_and_type.snap +++ b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__kw_function_decl_with_default_and_type.snap @@ -61,6 +61,15 @@ expression: actual "start": 7, "type": "Identifier" }, + "param_type": { + "None": null, + "commentStart": 11, + "end": 17, + "moduleId": 0, + "p_type": "Number", + "start": 11, + "type": "Primitive" + }, "default_value": { "commentStart": 20, "end": 21, diff --git a/rust/kcl-lib/src/unparser.rs b/rust/kcl-lib/src/unparser.rs index 20dd9ab8c94..3e91d3e4210 100644 --- a/rust/kcl-lib/src/unparser.rs +++ b/rust/kcl-lib/src/unparser.rs @@ -946,7 +946,7 @@ impl Parameter { if self.default_value.is_some() { buf.push('?'); }; - if let Some(ty) = &self.type_ { + if let Some(ty) = &self.param_type { buf.push_str(": "); write!(buf, "{ty}").no_fail(); } diff --git a/rust/kcl-lib/tests/any_type/ast.snap b/rust/kcl-lib/tests/any_type/ast.snap index 7dce2097b28..17b2143f2ba 100644 --- a/rust/kcl-lib/tests/any_type/ast.snap +++ b/rust/kcl-lib/tests/any_type/ast.snap @@ -67,6 +67,14 @@ description: Result of parsing any_type.kcl "start": 0, "type": "Identifier" }, + "param_type": { + "commentStart": 0, + "end": 0, + "moduleId": 0, + "p_type": "Any", + "start": 0, + "type": "Primitive" + }, "labeled": false } ], @@ -157,6 +165,14 @@ description: Result of parsing any_type.kcl "start": 0, "type": "Identifier" }, + "param_type": { + "commentStart": 0, + "end": 0, + "moduleId": 0, + "p_type": "Any", + "start": 0, + "type": "Primitive" + }, "labeled": false } ], @@ -388,6 +404,18 @@ description: Result of parsing any_type.kcl "start": 0, "type": "Identifier" }, + "param_type": { + "commentStart": 0, + "end": 0, + "len": "None", + "moduleId": 0, + "start": 0, + "ty": { + "type": "Primitive", + "p_type": "Any" + }, + "type": "Array" + }, "labeled": false } ], diff --git a/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ast.snap b/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ast.snap index af724b066f6..7cc74eeb438 100644 --- a/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ast.snap @@ -1919,6 +1919,15 @@ description: Result of parsing cycloidal-gear.kcl "name": "helixAngle", "start": 0, "type": "Identifier" + }, + "param_type": { + "Deg": null, + "commentStart": 0, + "end": 0, + "moduleId": 0, + "p_type": "Number", + "start": 0, + "type": "Primitive" } } ],