From b8391077ef8220c1805a8fd68177bba30fc4038b Mon Sep 17 00:00:00 2001 From: zongz <68977949+zong-zhe@users.noreply.github.com> Date: Tue, 14 Nov 2023 17:48:04 +0800 Subject: [PATCH] fix: fix positional argument error missing (#877) Signed-off-by: zongz --- kclvm/sema/src/resolver/global.rs | 2 +- kclvm/sema/src/resolver/test_data/kcl.mod | 2 ++ .../resolver/test_data/schema_params_miss.k | 6 +++++ kclvm/sema/src/resolver/tests.rs | 24 +++++++++++++++++++ 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 kclvm/sema/src/resolver/test_data/schema_params_miss.k 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" + ); +}