From 620ea21faea1016d166edcb2b82fb2bcc9c8477e Mon Sep 17 00:00:00 2001 From: Tom Pridham Date: Sat, 1 Feb 2025 16:47:13 -0700 Subject: [PATCH] fix: wording on unexpected character in arrays and objects --- src/lang/abstractSyntaxTree.test.ts | 6 +++-- src/wasm-lib/kcl/src/parsing/parser.rs | 33 +++++++++++++++++++++----- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/lang/abstractSyntaxTree.test.ts b/src/lang/abstractSyntaxTree.test.ts index 8a830a3a66..18bbf618a2 100644 --- a/src/lang/abstractSyntaxTree.test.ts +++ b/src/lang/abstractSyntaxTree.test.ts @@ -53,7 +53,9 @@ describe('parsing errors', () => { const result = parse(code) if (err(result)) throw result const error = result.errors[0] - expect(error.message).toBe('Array is missing a closing bracket(`]`)') - expect(error.sourceRange).toEqual([28, 29, 0]) + expect(error.message).toBe( + 'Unexpected character encountered. You might be missing a comma in between elements.' + ) + expect(error.sourceRange).toEqual([29, 31, 0]) }) }) diff --git a/src/wasm-lib/kcl/src/parsing/parser.rs b/src/wasm-lib/kcl/src/parsing/parser.rs index e94719bf8b..ecfeabb81f 100644 --- a/src/wasm-lib/kcl/src/parsing/parser.rs +++ b/src/wasm-lib/kcl/src/parsing/parser.rs @@ -765,7 +765,7 @@ pub(crate) fn array_elem_by_elem(i: &mut TokenSlice) -> PResult PResult> { context: vec![], cause: Some(CompilationError::fatal( start_range, - "Object is missing a comma in between properties", + "Unexpected character encountered. You might be missing a comma in between properties.", )), }; return Err(ErrMode::Cut(e)); @@ -3917,7 +3917,7 @@ z(-[["#, assert_err( r#"zz({{{{{{{{)iegAng{{{{{{{##"#, "Object is missing a closing brace(`}`)", - [2, 3], + [3, 4], ); } @@ -4491,10 +4491,20 @@ sketch001 = startSketchOn('XZ') |> startProfileAt([90.45, 119.09, %)"#; sketch001 = startSketchOn('XZ') |> startProfileAt([90.45 119.09], %)"#; assert_err( some_program_string, - "Array is missing a comma in between elements", + "Unexpected character encountered. You might be missing a comma in between elements.", [52, 65], ); } + #[test] + fn test_parse_array_random_brace() { + let some_program_string = r#" +sketch001 = startSketchOn('XZ') |> startProfileAt([}], %)"#; + assert_err( + some_program_string, + "Unexpected character encountered. You might be missing a comma in between elements.", + [52, 54], + ); + } #[test] fn test_parse_object_missing_closing_brace() { @@ -4514,11 +4524,22 @@ sketch001 = startSketchOn('XZ') |> startProfileAt([90.45 119.09], %)"#; assert_err( some_program_string, - "Object is missing a comma in between properties", + "Unexpected character encountered. You might be missing a comma in between properties.", [37, 78], ); } + #[test] + fn test_parse_object_random_bracket() { + let some_program_string = r#"{]}"#; + + assert_err( + some_program_string, + "Unexpected character encountered. You might be missing a comma in between properties.", + [1, 3], + ); + } + #[test] fn test_parse_object_shorthand_missing_comma() { let some_program_string = r#" @@ -4531,7 +4552,7 @@ bar = 1 assert_err( some_program_string, - "Object is missing a comma in between properties", + "Unexpected character encountered. You might be missing a comma in between properties.", [54, 89], ); }