diff --git a/kclvm/sema/src/resolver/global.rs b/kclvm/sema/src/resolver/global.rs index dfd766793..10284fb6e 100644 --- a/kclvm/sema/src/resolver/global.rs +++ b/kclvm/sema/src/resolver/global.rs @@ -760,7 +760,7 @@ impl<'ctx> Resolver<'ctx> { params.push(Parameter { name, ty: ty.clone(), - has_default: args.node.defaults.get(i).is_some(), + has_default: args.node.defaults.get(i).map_or(false, |arg| arg.is_some()), }); } } diff --git a/kclvm/sema/src/resolver/test_data/kcl.mod b/kclvm/sema/src/resolver/test_data/kcl.mod index e69de29bb..c51d42cae 100644 --- a/kclvm/sema/src/resolver/test_data/kcl.mod +++ b/kclvm/sema/src/resolver/test_data/kcl.mod @@ -0,0 +1,2 @@ +[package] + diff --git a/kclvm/sema/src/resolver/test_data/schema_params_miss.k b/kclvm/sema/src/resolver/test_data/schema_params_miss.k new file mode 100644 index 000000000..4c8c7d387 --- /dev/null +++ b/kclvm/sema/src/resolver/test_data/schema_params_miss.k @@ -0,0 +1,6 @@ +schema D[name: str]: # '' + n: str = name + +d = D() { # expected 1 positional argument, found 0 + n = "" +} \ No newline at end of file diff --git a/kclvm/sema/src/resolver/tests.rs b/kclvm/sema/src/resolver/tests.rs index 805fae547..0bab904f9 100644 --- a/kclvm/sema/src/resolver/tests.rs +++ b/kclvm/sema/src/resolver/tests.rs @@ -719,3 +719,27 @@ fn undef_lambda_param() { ) ); } + +#[test] +fn test_schema_params_count() { + let sess = Arc::new(ParseSession::default()); + let mut program = load_program( + sess.clone(), + &["./src/resolver/test_data/schema_params_miss.k"], + None, + None, + ) + .unwrap(); + let scope = resolve_program(&mut program); + assert_eq!(scope.handler.diagnostics.len(), 1); + let diag = &scope.handler.diagnostics[0]; + assert_eq!( + diag.code, + Some(DiagnosticId::Error(ErrorKind::CompileError)) + ); + assert_eq!(diag.messages.len(), 1); + assert_eq!( + diag.messages[0].message, + "expected 1 positional argument, found 0" + ); +}