KCL: Fix cryptic error in type mismatch (#5735)

Previous error message:
"Expected a kcl_lib::execution::geometry::SolidSet but found Sketch"

New error message:
"Expected a SolidSet but found Sketch. You can convert a sketch (2D) into a Solid (3D) by calling a function like `extrude` or `revolve`"

Two improvements:
 - Don't print the fully-qualified Rust name (e.g. kcl_lib::executor::Solid) instead use the last part of that (e.g. just Solid)
 - Allow specific suggestions for combinations of got/want (e.g. "You can convert a sketch (2D) into a Solid (3D) by calling a function like `extrude` or `revolve`")

Closes #5616
This commit is contained in:
Adam Chalmers
2025-03-10 22:53:16 -05:00
committed by GitHub
parent 546b4ea3b8
commit d6ad4b6e66
4 changed files with 46 additions and 6 deletions

View File

@ -857,7 +857,7 @@ part = rectShape([0, 0], 20, 20)
};
assert_eq!(
err.error.message(),
"Expected a kcl_lib::std::shapes::SketchOrSurface but found string (text)"
"This function expected this argument to be of type SketchOrSurface but it's actually of type string (text)"
);
}
@ -2086,6 +2086,26 @@ async fn kcl_test_ensure_nothing_left_in_batch_multi_file() {
ctx.close().await;
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_better_type_names() {
let code = r#"startSketchOn('XY')
|> circle(center = [-95.51, -74.7], radius = 262.23)
|> appearance(metalness = 0.9)
"#;
let result = execute_and_snapshot(code, UnitLength::Mm, None).await;
let err = match result.err() {
Some(x) => match x {
ExecError::Kcl(kcl_error_with_outputs) => kcl_error_with_outputs.error.message().to_owned(),
ExecError::Connection(_) => todo!(),
ExecError::BadPng(_) => todo!(),
ExecError::BadExport(_) => todo!(),
},
None => todo!(),
};
assert_eq!(err, "This function expected this argument to be of type SolidSet but it's actually of type Sketch. You can convert a sketch (2D) into a Solid (3D) by calling a function like `extrude` or `revolve`");
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_exporting_step_file() {
// This tests export like how we do it in cli and kcl.py.