From 0c2dde6d3c688dc8eec9c33f656d60039e0b2845 Mon Sep 17 00:00:00 2001 From: "Tab Atkins Jr." Date: Fri, 17 Jan 2025 16:28:52 -0800 Subject: [PATCH] Support empty multiline strings (#483) * Support empty multiline strings Per , the grammar doesn't actually allow the first and last newline in a multiline string to be the same (indicating an empty string). This looks like the minimal fix for it. * Add tests for empty multilines * remove accidental newline --- SPEC.md | 4 ++-- tests/test_cases/expected_kdl/multiline_raw_string_empty.kdl | 1 + .../expected_kdl/multiline_raw_string_empty_indented.kdl | 1 + tests/test_cases/expected_kdl/multiline_string_empty.kdl | 1 + .../expected_kdl/multiline_string_empty_indented.kdl | 1 + tests/test_cases/input/multiline_raw_string_empty.kdl | 2 ++ .../test_cases/input/multiline_raw_string_empty_indented.kdl | 2 ++ tests/test_cases/input/multiline_string_empty.kdl | 2 ++ tests/test_cases/input/multiline_string_empty_indented.kdl | 2 ++ 9 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 tests/test_cases/expected_kdl/multiline_raw_string_empty.kdl create mode 100644 tests/test_cases/expected_kdl/multiline_raw_string_empty_indented.kdl create mode 100644 tests/test_cases/expected_kdl/multiline_string_empty.kdl create mode 100644 tests/test_cases/expected_kdl/multiline_string_empty_indented.kdl create mode 100644 tests/test_cases/input/multiline_raw_string_empty.kdl create mode 100644 tests/test_cases/input/multiline_raw_string_empty_indented.kdl create mode 100644 tests/test_cases/input/multiline_string_empty.kdl create mode 100644 tests/test_cases/input/multiline_string_empty_indented.kdl diff --git a/SPEC.md b/SPEC.md index 8f73c55..333349d 100644 --- a/SPEC.md +++ b/SPEC.md @@ -889,7 +889,7 @@ disallowed-keyword-identifiers := quoted-string := '"' single-line-string-body '"' | '"""' newline - multi-line-string-body newline + (multi-line-string-body newline)? (unicode-space | ws-escape)* '"""' single-line-string-body := (string-character - newline)* multi-line-string-body := (('"' | '""')? string-character)* @@ -909,7 +909,7 @@ raw-string := '#' raw-string-quotes '#' | '#' raw-string '#' raw-string-quotes := '"' single-line-raw-string-body '"' | '"""' newline - multi-line-raw-string-body newline + (multi-line-raw-string-body newline)? unicode-space* '"""' single-line-raw-string-body := '' | diff --git a/tests/test_cases/expected_kdl/multiline_raw_string_empty.kdl b/tests/test_cases/expected_kdl/multiline_raw_string_empty.kdl new file mode 100644 index 0000000..8ade134 --- /dev/null +++ b/tests/test_cases/expected_kdl/multiline_raw_string_empty.kdl @@ -0,0 +1 @@ +node "" diff --git a/tests/test_cases/expected_kdl/multiline_raw_string_empty_indented.kdl b/tests/test_cases/expected_kdl/multiline_raw_string_empty_indented.kdl new file mode 100644 index 0000000..8ade134 --- /dev/null +++ b/tests/test_cases/expected_kdl/multiline_raw_string_empty_indented.kdl @@ -0,0 +1 @@ +node "" diff --git a/tests/test_cases/expected_kdl/multiline_string_empty.kdl b/tests/test_cases/expected_kdl/multiline_string_empty.kdl new file mode 100644 index 0000000..8ade134 --- /dev/null +++ b/tests/test_cases/expected_kdl/multiline_string_empty.kdl @@ -0,0 +1 @@ +node "" diff --git a/tests/test_cases/expected_kdl/multiline_string_empty_indented.kdl b/tests/test_cases/expected_kdl/multiline_string_empty_indented.kdl new file mode 100644 index 0000000..8ade134 --- /dev/null +++ b/tests/test_cases/expected_kdl/multiline_string_empty_indented.kdl @@ -0,0 +1 @@ +node "" diff --git a/tests/test_cases/input/multiline_raw_string_empty.kdl b/tests/test_cases/input/multiline_raw_string_empty.kdl new file mode 100644 index 0000000..419c2ba --- /dev/null +++ b/tests/test_cases/input/multiline_raw_string_empty.kdl @@ -0,0 +1,2 @@ +node #""" +"""# \ No newline at end of file diff --git a/tests/test_cases/input/multiline_raw_string_empty_indented.kdl b/tests/test_cases/input/multiline_raw_string_empty_indented.kdl new file mode 100644 index 0000000..540d463 --- /dev/null +++ b/tests/test_cases/input/multiline_raw_string_empty_indented.kdl @@ -0,0 +1,2 @@ +node #""" + """# \ No newline at end of file diff --git a/tests/test_cases/input/multiline_string_empty.kdl b/tests/test_cases/input/multiline_string_empty.kdl new file mode 100644 index 0000000..cb70b98 --- /dev/null +++ b/tests/test_cases/input/multiline_string_empty.kdl @@ -0,0 +1,2 @@ +node """ +""" \ No newline at end of file diff --git a/tests/test_cases/input/multiline_string_empty_indented.kdl b/tests/test_cases/input/multiline_string_empty_indented.kdl new file mode 100644 index 0000000..c2bc8a3 --- /dev/null +++ b/tests/test_cases/input/multiline_string_empty_indented.kdl @@ -0,0 +1,2 @@ +node """ + """ \ No newline at end of file