diff --git a/crates/toml/tests/fixtures/invalid/ext/string/no-close-recovery-03.toml b/crates/toml/tests/fixtures/invalid/ext/string/no-close-recovery-03.toml new file mode 100644 index 000000000..36e60af9c --- /dev/null +++ b/crates/toml/tests/fixtures/invalid/ext/string/no-close-recovery-03.toml @@ -0,0 +1,20 @@ +[package] +name = "a_name" +version = "0.1.0" +edition = "2024" + +[dependencies] +crate1 = { version = "0.1.0" } +crate2 = { version = "1.0.0", features=[] } + +[patch.crates-io] +crate3."path = "../somewhere" +crate4."path = "/somewhere" +crate5 = { "path = "../somewhere" } +crate6 = { "path = "/somewhere" } + +[patch.crates-io.crate7] +"path = "../somewhere" + +[patch.crates-io.crate8] +"path = "/somewhere" diff --git a/crates/toml/tests/snapshots/invalid/ext/string/no-close-recovery-03.stderr b/crates/toml/tests/snapshots/invalid/ext/string/no-close-recovery-03.stderr new file mode 100644 index 000000000..be80ef3fa --- /dev/null +++ b/crates/toml/tests/snapshots/invalid/ext/string/no-close-recovery-03.stderr @@ -0,0 +1,47 @@ +TOML parse error at line 11, column 30 + | +11 | crate3."path = "../somewhere" + | ^ +key with no value, expected `=` + +--- +TOML parse error at line 12, column 17 + | +12 | crate4."path = "/somewhere" + | ^ +key with no value, expected `=` + +--- +TOML parse error at line 14, column 21 + | +14 | crate6 = { "path = "/somewhere" } + | ^ +missing assignment between key-value pairs, expected `=` + +--- +TOML parse error at line 17, column 23 + | +17 | "path = "../somewhere" + | ^ +key with no value, expected `=` + +--- +TOML parse error at line 20, column 10 + | +20 | "path = "/somewhere" + | ^ +key with no value, expected `=` + +--- +TOML parse error at line 11, column 18 + | +11 | crate3."path = "../somewhere" + | ^ +unquoted keys cannot be empty, expected letters, numbers, `-`, `_` + +--- +TOML parse error at line 11, column 19 + | +11 | crate3."path = "../somewhere" + | ^ +invalid basic string, expected `"` diff --git a/crates/toml/tests/snapshots/invalid/key/partial-quoted.stderr b/crates/toml/tests/snapshots/invalid/key/partial-quoted.stderr index c6650f089..ab30dfc50 100644 --- a/crates/toml/tests/snapshots/invalid/key/partial-quoted.stderr +++ b/crates/toml/tests/snapshots/invalid/key/partial-quoted.stderr @@ -1,12 +1,12 @@ -TOML parse error at line 1, column 8 +TOML parse error at line 1, column 1 | 1 | partial"quoted" = 5 - | ^ -invalid unquoted key, expected letters, numbers, `-`, `_` + | ^ +invalid basic string, expected `"` --- -TOML parse error at line 1, column 15 +TOML parse error at line 1, column 8 | 1 | partial"quoted" = 5 - | ^ -invalid unquoted key, expected letters, numbers, `-`, `_` + | ^ +invalid basic string, expected non-double-quote visible characters, `\` diff --git a/crates/toml_edit/tests/fixtures/invalid/ext/string/no-close-recovery-03.toml b/crates/toml_edit/tests/fixtures/invalid/ext/string/no-close-recovery-03.toml new file mode 100644 index 000000000..36e60af9c --- /dev/null +++ b/crates/toml_edit/tests/fixtures/invalid/ext/string/no-close-recovery-03.toml @@ -0,0 +1,20 @@ +[package] +name = "a_name" +version = "0.1.0" +edition = "2024" + +[dependencies] +crate1 = { version = "0.1.0" } +crate2 = { version = "1.0.0", features=[] } + +[patch.crates-io] +crate3."path = "../somewhere" +crate4."path = "/somewhere" +crate5 = { "path = "../somewhere" } +crate6 = { "path = "/somewhere" } + +[patch.crates-io.crate7] +"path = "../somewhere" + +[patch.crates-io.crate8] +"path = "/somewhere" diff --git a/crates/toml_edit/tests/snapshots/invalid/ext/string/no-close-recovery-03.stderr b/crates/toml_edit/tests/snapshots/invalid/ext/string/no-close-recovery-03.stderr new file mode 100644 index 000000000..2c8e460da --- /dev/null +++ b/crates/toml_edit/tests/snapshots/invalid/ext/string/no-close-recovery-03.stderr @@ -0,0 +1,5 @@ +TOML parse error at line 11, column 30 + | +11 | crate3."path = "../somewhere" + | ^ +key with no value, expected `=` diff --git a/crates/toml_edit/tests/snapshots/invalid/key/partial-quoted.stderr b/crates/toml_edit/tests/snapshots/invalid/key/partial-quoted.stderr index 16761ca20..62fa43c10 100644 --- a/crates/toml_edit/tests/snapshots/invalid/key/partial-quoted.stderr +++ b/crates/toml_edit/tests/snapshots/invalid/key/partial-quoted.stderr @@ -1,5 +1,5 @@ -TOML parse error at line 1, column 8 +TOML parse error at line 1, column 1 | 1 | partial"quoted" = 5 - | ^ -invalid unquoted key, expected letters, numbers, `-`, `_` + | ^ +invalid basic string, expected `"` diff --git a/crates/toml_parser/src/decoder/string.rs b/crates/toml_parser/src/decoder/string.rs index ba0319e9d..67a78dfd9 100644 --- a/crates/toml_parser/src/decoder/string.rs +++ b/crates/toml_parser/src/decoder/string.rs @@ -688,6 +688,16 @@ pub(crate) fn decode_unquoted_key<'i>( ) { let s = raw.as_str(); + if s.ends_with("'''") { + return decode_ml_literal_string(raw, output, error); + } else if s.ends_with("\"\"\"") { + return decode_ml_basic_string(raw, output, error); + } else if s.ends_with("'") { + return decode_literal_string(raw, output, error); + } else if s.ends_with("\"") { + return decode_basic_string(raw, output, error); + } + if s.is_empty() { error.report_error( ParseError::new("unquoted keys cannot be empty") diff --git a/crates/toml_parser/tests/snapshots/testsuite__parse_document__document_unclosed_dotted_key_abspath.txt b/crates/toml_parser/tests/snapshots/testsuite__parse_document__document_unclosed_dotted_key_abspath.txt new file mode 100644 index 000000000..1f2332a00 --- /dev/null +++ b/crates/toml_parser/tests/snapshots/testsuite__parse_document__document_unclosed_dotted_key_abspath.txt @@ -0,0 +1,405 @@ +EventResults { + input: "\n[package]\nname = \"a_name\"\nversion = \"0.1.0\"\nedition = \"2024\"\n\n[dependencies]\ncrate1 = { version = \"0.1.0\" }\ncrate2 = { version = \"1.0.0\", features=[] }\n\n[patch.crates-io]\ncrate4.\"path = \"/somewhere\"\n", + events: [ + Event { + kind: Newline, + encoding: None, + span: 0..1, + }, + Event { + kind: StdTableOpen, + encoding: None, + span: 1..2, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 2..9, + }, + Event { + kind: StdTableClose, + encoding: None, + span: 9..10, + }, + Event { + kind: Newline, + encoding: None, + span: 10..11, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 11..15, + }, + Event { + kind: Whitespace, + encoding: None, + span: 15..16, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 16..17, + }, + Event { + kind: Whitespace, + encoding: None, + span: 17..18, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 18..26, + }, + Event { + kind: Newline, + encoding: None, + span: 26..27, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 27..34, + }, + Event { + kind: Whitespace, + encoding: None, + span: 34..35, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 35..36, + }, + Event { + kind: Whitespace, + encoding: None, + span: 36..37, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 37..44, + }, + Event { + kind: Newline, + encoding: None, + span: 44..45, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 45..52, + }, + Event { + kind: Whitespace, + encoding: None, + span: 52..53, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 53..54, + }, + Event { + kind: Whitespace, + encoding: None, + span: 54..55, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 55..61, + }, + Event { + kind: Newline, + encoding: None, + span: 61..62, + }, + Event { + kind: Newline, + encoding: None, + span: 62..63, + }, + Event { + kind: StdTableOpen, + encoding: None, + span: 63..64, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 64..76, + }, + Event { + kind: StdTableClose, + encoding: None, + span: 76..77, + }, + Event { + kind: Newline, + encoding: None, + span: 77..78, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 78..84, + }, + Event { + kind: Whitespace, + encoding: None, + span: 84..85, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 85..86, + }, + Event { + kind: Whitespace, + encoding: None, + span: 86..87, + }, + Event { + kind: InlineTableOpen, + encoding: None, + span: 87..88, + }, + Event { + kind: Whitespace, + encoding: None, + span: 88..89, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 89..96, + }, + Event { + kind: Whitespace, + encoding: None, + span: 96..97, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 97..98, + }, + Event { + kind: Whitespace, + encoding: None, + span: 98..99, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 99..106, + }, + Event { + kind: Whitespace, + encoding: None, + span: 106..107, + }, + Event { + kind: InlineTableClose, + encoding: None, + span: 107..108, + }, + Event { + kind: Newline, + encoding: None, + span: 108..109, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 109..115, + }, + Event { + kind: Whitespace, + encoding: None, + span: 115..116, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 116..117, + }, + Event { + kind: Whitespace, + encoding: None, + span: 117..118, + }, + Event { + kind: InlineTableOpen, + encoding: None, + span: 118..119, + }, + Event { + kind: Whitespace, + encoding: None, + span: 119..120, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 120..127, + }, + Event { + kind: Whitespace, + encoding: None, + span: 127..128, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 128..129, + }, + Event { + kind: Whitespace, + encoding: None, + span: 129..130, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 130..137, + }, + Event { + kind: ValueSep, + encoding: None, + span: 137..138, + }, + Event { + kind: Whitespace, + encoding: None, + span: 138..139, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 139..147, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 147..148, + }, + Event { + kind: ArrayOpen, + encoding: None, + span: 148..149, + }, + Event { + kind: ArrayClose, + encoding: None, + span: 149..150, + }, + Event { + kind: Whitespace, + encoding: None, + span: 150..151, + }, + Event { + kind: InlineTableClose, + encoding: None, + span: 151..152, + }, + Event { + kind: Newline, + encoding: None, + span: 152..153, + }, + Event { + kind: Newline, + encoding: None, + span: 153..154, + }, + Event { + kind: StdTableOpen, + encoding: None, + span: 154..155, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 155..160, + }, + Event { + kind: KeySep, + encoding: None, + span: 160..161, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 161..170, + }, + Event { + kind: StdTableClose, + encoding: None, + span: 170..171, + }, + Event { + kind: Newline, + encoding: None, + span: 171..172, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 172..178, + }, + Event { + kind: KeySep, + encoding: None, + span: 178..179, + }, + Event { + kind: SimpleKey, + encoding: Some( + BasicString, + ), + span: 179..188, + }, + Event { + kind: Error, + encoding: None, + span: 188..199, + }, + Event { + kind: Newline, + encoding: None, + span: 199..200, + }, + ], + errors: [ + ParseError { + context: Some( + 188..188, + ), + description: "key with no value", + expected: Some( + [ + Literal( + "=", + ), + ], + ), + unexpected: Some( + 188..188, + ), + }, + ], +} diff --git a/crates/toml_parser/tests/snapshots/testsuite__parse_document__document_unclosed_dotted_key_relpath.txt b/crates/toml_parser/tests/snapshots/testsuite__parse_document__document_unclosed_dotted_key_relpath.txt new file mode 100644 index 000000000..c441872dc --- /dev/null +++ b/crates/toml_parser/tests/snapshots/testsuite__parse_document__document_unclosed_dotted_key_relpath.txt @@ -0,0 +1,461 @@ +EventResults { + input: "\n[package]\nname = \"a_name\"\nversion = \"0.1.0\"\nedition = \"2024\"\n\n[dependencies]\ncrate1 = { version = \"0.1.0\" }\ncrate2 = { version = \"1.0.0\", features=[] }\n\n[patch.crates-io]\ncrate3.\"path = \"../somewhere\"\n", + events: [ + Event { + kind: Newline, + encoding: None, + span: 0..1, + }, + Event { + kind: StdTableOpen, + encoding: None, + span: 1..2, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 2..9, + }, + Event { + kind: StdTableClose, + encoding: None, + span: 9..10, + }, + Event { + kind: Newline, + encoding: None, + span: 10..11, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 11..15, + }, + Event { + kind: Whitespace, + encoding: None, + span: 15..16, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 16..17, + }, + Event { + kind: Whitespace, + encoding: None, + span: 17..18, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 18..26, + }, + Event { + kind: Newline, + encoding: None, + span: 26..27, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 27..34, + }, + Event { + kind: Whitespace, + encoding: None, + span: 34..35, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 35..36, + }, + Event { + kind: Whitespace, + encoding: None, + span: 36..37, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 37..44, + }, + Event { + kind: Newline, + encoding: None, + span: 44..45, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 45..52, + }, + Event { + kind: Whitespace, + encoding: None, + span: 52..53, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 53..54, + }, + Event { + kind: Whitespace, + encoding: None, + span: 54..55, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 55..61, + }, + Event { + kind: Newline, + encoding: None, + span: 61..62, + }, + Event { + kind: Newline, + encoding: None, + span: 62..63, + }, + Event { + kind: StdTableOpen, + encoding: None, + span: 63..64, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 64..76, + }, + Event { + kind: StdTableClose, + encoding: None, + span: 76..77, + }, + Event { + kind: Newline, + encoding: None, + span: 77..78, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 78..84, + }, + Event { + kind: Whitespace, + encoding: None, + span: 84..85, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 85..86, + }, + Event { + kind: Whitespace, + encoding: None, + span: 86..87, + }, + Event { + kind: InlineTableOpen, + encoding: None, + span: 87..88, + }, + Event { + kind: Whitespace, + encoding: None, + span: 88..89, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 89..96, + }, + Event { + kind: Whitespace, + encoding: None, + span: 96..97, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 97..98, + }, + Event { + kind: Whitespace, + encoding: None, + span: 98..99, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 99..106, + }, + Event { + kind: Whitespace, + encoding: None, + span: 106..107, + }, + Event { + kind: InlineTableClose, + encoding: None, + span: 107..108, + }, + Event { + kind: Newline, + encoding: None, + span: 108..109, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 109..115, + }, + Event { + kind: Whitespace, + encoding: None, + span: 115..116, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 116..117, + }, + Event { + kind: Whitespace, + encoding: None, + span: 117..118, + }, + Event { + kind: InlineTableOpen, + encoding: None, + span: 118..119, + }, + Event { + kind: Whitespace, + encoding: None, + span: 119..120, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 120..127, + }, + Event { + kind: Whitespace, + encoding: None, + span: 127..128, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 128..129, + }, + Event { + kind: Whitespace, + encoding: None, + span: 129..130, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 130..137, + }, + Event { + kind: ValueSep, + encoding: None, + span: 137..138, + }, + Event { + kind: Whitespace, + encoding: None, + span: 138..139, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 139..147, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 147..148, + }, + Event { + kind: ArrayOpen, + encoding: None, + span: 148..149, + }, + Event { + kind: ArrayClose, + encoding: None, + span: 149..150, + }, + Event { + kind: Whitespace, + encoding: None, + span: 150..151, + }, + Event { + kind: InlineTableClose, + encoding: None, + span: 151..152, + }, + Event { + kind: Newline, + encoding: None, + span: 152..153, + }, + Event { + kind: Newline, + encoding: None, + span: 153..154, + }, + Event { + kind: StdTableOpen, + encoding: None, + span: 154..155, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 155..160, + }, + Event { + kind: KeySep, + encoding: None, + span: 160..161, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 161..170, + }, + Event { + kind: StdTableClose, + encoding: None, + span: 170..171, + }, + Event { + kind: Newline, + encoding: None, + span: 171..172, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 172..178, + }, + Event { + kind: KeySep, + encoding: None, + span: 178..179, + }, + Event { + kind: SimpleKey, + encoding: Some( + BasicString, + ), + span: 179..188, + }, + Event { + kind: KeySep, + encoding: None, + span: 188..189, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 189..189, + }, + Event { + kind: KeySep, + encoding: None, + span: 189..190, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 190..201, + }, + Event { + kind: Newline, + encoding: None, + span: 201..202, + }, + ], + errors: [ + ParseError { + context: Some( + 201..201, + ), + description: "key with no value", + expected: Some( + [ + Literal( + "=", + ), + ], + ), + unexpected: Some( + 201..201, + ), + }, + ParseError { + context: Some( + 189..189, + ), + description: "unquoted keys cannot be empty", + expected: Some( + [ + Description( + "letters", + ), + Description( + "numbers", + ), + Literal( + "-", + ), + Literal( + "_", + ), + ], + ), + unexpected: Some( + 189..189, + ), + }, + ParseError { + context: Some( + 190..201, + ), + description: "invalid basic string", + expected: Some( + [ + Literal( + "\"", + ), + ], + ), + unexpected: Some( + 190..190, + ), + }, + ], +} diff --git a/crates/toml_parser/tests/snapshots/testsuite__parse_document__document_unclosed_inline_table_key_abspath.txt b/crates/toml_parser/tests/snapshots/testsuite__parse_document__document_unclosed_inline_table_key_abspath.txt new file mode 100644 index 000000000..7c73d7c50 --- /dev/null +++ b/crates/toml_parser/tests/snapshots/testsuite__parse_document__document_unclosed_inline_table_key_abspath.txt @@ -0,0 +1,451 @@ +EventResults { + input: "\n[package]\nname = \"a_name\"\nversion = \"0.1.0\"\nedition = \"2024\"\n\n[dependencies]\ncrate1 = { version = \"0.1.0\" }\ncrate2 = { version = \"1.0.0\", features=[] }\n\n[patch.crates-io]\ncrate6 = { \"path = \"/somewhere\" }\n", + events: [ + Event { + kind: Newline, + encoding: None, + span: 0..1, + }, + Event { + kind: StdTableOpen, + encoding: None, + span: 1..2, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 2..9, + }, + Event { + kind: StdTableClose, + encoding: None, + span: 9..10, + }, + Event { + kind: Newline, + encoding: None, + span: 10..11, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 11..15, + }, + Event { + kind: Whitespace, + encoding: None, + span: 15..16, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 16..17, + }, + Event { + kind: Whitespace, + encoding: None, + span: 17..18, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 18..26, + }, + Event { + kind: Newline, + encoding: None, + span: 26..27, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 27..34, + }, + Event { + kind: Whitespace, + encoding: None, + span: 34..35, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 35..36, + }, + Event { + kind: Whitespace, + encoding: None, + span: 36..37, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 37..44, + }, + Event { + kind: Newline, + encoding: None, + span: 44..45, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 45..52, + }, + Event { + kind: Whitespace, + encoding: None, + span: 52..53, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 53..54, + }, + Event { + kind: Whitespace, + encoding: None, + span: 54..55, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 55..61, + }, + Event { + kind: Newline, + encoding: None, + span: 61..62, + }, + Event { + kind: Newline, + encoding: None, + span: 62..63, + }, + Event { + kind: StdTableOpen, + encoding: None, + span: 63..64, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 64..76, + }, + Event { + kind: StdTableClose, + encoding: None, + span: 76..77, + }, + Event { + kind: Newline, + encoding: None, + span: 77..78, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 78..84, + }, + Event { + kind: Whitespace, + encoding: None, + span: 84..85, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 85..86, + }, + Event { + kind: Whitespace, + encoding: None, + span: 86..87, + }, + Event { + kind: InlineTableOpen, + encoding: None, + span: 87..88, + }, + Event { + kind: Whitespace, + encoding: None, + span: 88..89, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 89..96, + }, + Event { + kind: Whitespace, + encoding: None, + span: 96..97, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 97..98, + }, + Event { + kind: Whitespace, + encoding: None, + span: 98..99, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 99..106, + }, + Event { + kind: Whitespace, + encoding: None, + span: 106..107, + }, + Event { + kind: InlineTableClose, + encoding: None, + span: 107..108, + }, + Event { + kind: Newline, + encoding: None, + span: 108..109, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 109..115, + }, + Event { + kind: Whitespace, + encoding: None, + span: 115..116, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 116..117, + }, + Event { + kind: Whitespace, + encoding: None, + span: 117..118, + }, + Event { + kind: InlineTableOpen, + encoding: None, + span: 118..119, + }, + Event { + kind: Whitespace, + encoding: None, + span: 119..120, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 120..127, + }, + Event { + kind: Whitespace, + encoding: None, + span: 127..128, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 128..129, + }, + Event { + kind: Whitespace, + encoding: None, + span: 129..130, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 130..137, + }, + Event { + kind: ValueSep, + encoding: None, + span: 137..138, + }, + Event { + kind: Whitespace, + encoding: None, + span: 138..139, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 139..147, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 147..148, + }, + Event { + kind: ArrayOpen, + encoding: None, + span: 148..149, + }, + Event { + kind: ArrayClose, + encoding: None, + span: 149..150, + }, + Event { + kind: Whitespace, + encoding: None, + span: 150..151, + }, + Event { + kind: InlineTableClose, + encoding: None, + span: 151..152, + }, + Event { + kind: Newline, + encoding: None, + span: 152..153, + }, + Event { + kind: Newline, + encoding: None, + span: 153..154, + }, + Event { + kind: StdTableOpen, + encoding: None, + span: 154..155, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 155..160, + }, + Event { + kind: KeySep, + encoding: None, + span: 160..161, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 161..170, + }, + Event { + kind: StdTableClose, + encoding: None, + span: 170..171, + }, + Event { + kind: Newline, + encoding: None, + span: 171..172, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 172..178, + }, + Event { + kind: Whitespace, + encoding: None, + span: 178..179, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 179..180, + }, + Event { + kind: Whitespace, + encoding: None, + span: 180..181, + }, + Event { + kind: InlineTableOpen, + encoding: None, + span: 181..182, + }, + Event { + kind: Whitespace, + encoding: None, + span: 182..183, + }, + Event { + kind: SimpleKey, + encoding: Some( + BasicString, + ), + span: 183..192, + }, + Event { + kind: Scalar, + encoding: None, + span: 192..203, + }, + Event { + kind: Whitespace, + encoding: None, + span: 203..204, + }, + Event { + kind: InlineTableClose, + encoding: None, + span: 204..205, + }, + Event { + kind: Newline, + encoding: None, + span: 205..206, + }, + ], + errors: [ + ParseError { + context: Some( + 181..182, + ), + description: "missing assignment between key-value pairs", + expected: Some( + [ + Literal( + "=", + ), + ], + ), + unexpected: Some( + 192..192, + ), + }, + ParseError { + context: Some( + 192..203, + ), + description: "missing opening quote", + expected: Some( + [ + Literal( + "\"", + ), + ], + ), + unexpected: Some( + 192..192, + ), + }, + ], +} diff --git a/crates/toml_parser/tests/snapshots/testsuite__parse_document__document_unclosed_inline_table_key_relpath.txt b/crates/toml_parser/tests/snapshots/testsuite__parse_document__document_unclosed_inline_table_key_relpath.txt new file mode 100644 index 000000000..07deb809a --- /dev/null +++ b/crates/toml_parser/tests/snapshots/testsuite__parse_document__document_unclosed_inline_table_key_relpath.txt @@ -0,0 +1,475 @@ +EventResults { + input: "\n[package]\nname = \"a_name\"\nversion = \"0.1.0\"\nedition = \"2024\"\n\n[dependencies]\ncrate1 = { version = \"0.1.0\" }\ncrate2 = { version = \"1.0.0\", features=[] }\n\n[patch.crates-io]\ncrate5 = { \"path = \"../somewhere\" }\n", + events: [ + Event { + kind: Newline, + encoding: None, + span: 0..1, + }, + Event { + kind: StdTableOpen, + encoding: None, + span: 1..2, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 2..9, + }, + Event { + kind: StdTableClose, + encoding: None, + span: 9..10, + }, + Event { + kind: Newline, + encoding: None, + span: 10..11, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 11..15, + }, + Event { + kind: Whitespace, + encoding: None, + span: 15..16, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 16..17, + }, + Event { + kind: Whitespace, + encoding: None, + span: 17..18, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 18..26, + }, + Event { + kind: Newline, + encoding: None, + span: 26..27, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 27..34, + }, + Event { + kind: Whitespace, + encoding: None, + span: 34..35, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 35..36, + }, + Event { + kind: Whitespace, + encoding: None, + span: 36..37, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 37..44, + }, + Event { + kind: Newline, + encoding: None, + span: 44..45, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 45..52, + }, + Event { + kind: Whitespace, + encoding: None, + span: 52..53, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 53..54, + }, + Event { + kind: Whitespace, + encoding: None, + span: 54..55, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 55..61, + }, + Event { + kind: Newline, + encoding: None, + span: 61..62, + }, + Event { + kind: Newline, + encoding: None, + span: 62..63, + }, + Event { + kind: StdTableOpen, + encoding: None, + span: 63..64, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 64..76, + }, + Event { + kind: StdTableClose, + encoding: None, + span: 76..77, + }, + Event { + kind: Newline, + encoding: None, + span: 77..78, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 78..84, + }, + Event { + kind: Whitespace, + encoding: None, + span: 84..85, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 85..86, + }, + Event { + kind: Whitespace, + encoding: None, + span: 86..87, + }, + Event { + kind: InlineTableOpen, + encoding: None, + span: 87..88, + }, + Event { + kind: Whitespace, + encoding: None, + span: 88..89, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 89..96, + }, + Event { + kind: Whitespace, + encoding: None, + span: 96..97, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 97..98, + }, + Event { + kind: Whitespace, + encoding: None, + span: 98..99, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 99..106, + }, + Event { + kind: Whitespace, + encoding: None, + span: 106..107, + }, + Event { + kind: InlineTableClose, + encoding: None, + span: 107..108, + }, + Event { + kind: Newline, + encoding: None, + span: 108..109, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 109..115, + }, + Event { + kind: Whitespace, + encoding: None, + span: 115..116, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 116..117, + }, + Event { + kind: Whitespace, + encoding: None, + span: 117..118, + }, + Event { + kind: InlineTableOpen, + encoding: None, + span: 118..119, + }, + Event { + kind: Whitespace, + encoding: None, + span: 119..120, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 120..127, + }, + Event { + kind: Whitespace, + encoding: None, + span: 127..128, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 128..129, + }, + Event { + kind: Whitespace, + encoding: None, + span: 129..130, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 130..137, + }, + Event { + kind: ValueSep, + encoding: None, + span: 137..138, + }, + Event { + kind: Whitespace, + encoding: None, + span: 138..139, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 139..147, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 147..148, + }, + Event { + kind: ArrayOpen, + encoding: None, + span: 148..149, + }, + Event { + kind: ArrayClose, + encoding: None, + span: 149..150, + }, + Event { + kind: Whitespace, + encoding: None, + span: 150..151, + }, + Event { + kind: InlineTableClose, + encoding: None, + span: 151..152, + }, + Event { + kind: Newline, + encoding: None, + span: 152..153, + }, + Event { + kind: Newline, + encoding: None, + span: 153..154, + }, + Event { + kind: StdTableOpen, + encoding: None, + span: 154..155, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 155..160, + }, + Event { + kind: KeySep, + encoding: None, + span: 160..161, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 161..170, + }, + Event { + kind: StdTableClose, + encoding: None, + span: 170..171, + }, + Event { + kind: Newline, + encoding: None, + span: 171..172, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 172..178, + }, + Event { + kind: Whitespace, + encoding: None, + span: 178..179, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 179..180, + }, + Event { + kind: Whitespace, + encoding: None, + span: 180..181, + }, + Event { + kind: InlineTableOpen, + encoding: None, + span: 181..182, + }, + Event { + kind: Whitespace, + encoding: None, + span: 182..183, + }, + Event { + kind: SimpleKey, + encoding: Some( + BasicString, + ), + span: 183..192, + }, + Event { + kind: KeySep, + encoding: None, + span: 192..193, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 193..193, + }, + Event { + kind: KeySep, + encoding: None, + span: 193..194, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 194..205, + }, + Event { + kind: Whitespace, + encoding: None, + span: 205..206, + }, + Event { + kind: InlineTableClose, + encoding: None, + span: 206..207, + }, + Event { + kind: Newline, + encoding: None, + span: 207..208, + }, + ], + errors: [ + ParseError { + context: Some( + 193..193, + ), + description: "unquoted keys cannot be empty", + expected: Some( + [ + Description( + "letters", + ), + Description( + "numbers", + ), + Literal( + "-", + ), + Literal( + "_", + ), + ], + ), + unexpected: Some( + 193..193, + ), + }, + ParseError { + context: Some( + 194..205, + ), + description: "invalid basic string", + expected: Some( + [ + Literal( + "\"", + ), + ], + ), + unexpected: Some( + 194..194, + ), + }, + ], +} diff --git a/crates/toml_parser/tests/snapshots/testsuite__parse_document__document_unclosed_table_key_abspath.txt b/crates/toml_parser/tests/snapshots/testsuite__parse_document__document_unclosed_table_key_abspath.txt new file mode 100644 index 000000000..10425f795 --- /dev/null +++ b/crates/toml_parser/tests/snapshots/testsuite__parse_document__document_unclosed_table_key_abspath.txt @@ -0,0 +1,405 @@ +EventResults { + input: "\n[package]\nname = \"a_name\"\nversion = \"0.1.0\"\nedition = \"2024\"\n\n[dependencies]\ncrate1 = { version = \"0.1.0\" }\ncrate2 = { version = \"1.0.0\", features=[] }\n\n[patch.crates-io.crate8]\n\"path = \"/somewhere\"\n", + events: [ + Event { + kind: Newline, + encoding: None, + span: 0..1, + }, + Event { + kind: StdTableOpen, + encoding: None, + span: 1..2, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 2..9, + }, + Event { + kind: StdTableClose, + encoding: None, + span: 9..10, + }, + Event { + kind: Newline, + encoding: None, + span: 10..11, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 11..15, + }, + Event { + kind: Whitespace, + encoding: None, + span: 15..16, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 16..17, + }, + Event { + kind: Whitespace, + encoding: None, + span: 17..18, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 18..26, + }, + Event { + kind: Newline, + encoding: None, + span: 26..27, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 27..34, + }, + Event { + kind: Whitespace, + encoding: None, + span: 34..35, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 35..36, + }, + Event { + kind: Whitespace, + encoding: None, + span: 36..37, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 37..44, + }, + Event { + kind: Newline, + encoding: None, + span: 44..45, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 45..52, + }, + Event { + kind: Whitespace, + encoding: None, + span: 52..53, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 53..54, + }, + Event { + kind: Whitespace, + encoding: None, + span: 54..55, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 55..61, + }, + Event { + kind: Newline, + encoding: None, + span: 61..62, + }, + Event { + kind: Newline, + encoding: None, + span: 62..63, + }, + Event { + kind: StdTableOpen, + encoding: None, + span: 63..64, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 64..76, + }, + Event { + kind: StdTableClose, + encoding: None, + span: 76..77, + }, + Event { + kind: Newline, + encoding: None, + span: 77..78, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 78..84, + }, + Event { + kind: Whitespace, + encoding: None, + span: 84..85, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 85..86, + }, + Event { + kind: Whitespace, + encoding: None, + span: 86..87, + }, + Event { + kind: InlineTableOpen, + encoding: None, + span: 87..88, + }, + Event { + kind: Whitespace, + encoding: None, + span: 88..89, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 89..96, + }, + Event { + kind: Whitespace, + encoding: None, + span: 96..97, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 97..98, + }, + Event { + kind: Whitespace, + encoding: None, + span: 98..99, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 99..106, + }, + Event { + kind: Whitespace, + encoding: None, + span: 106..107, + }, + Event { + kind: InlineTableClose, + encoding: None, + span: 107..108, + }, + Event { + kind: Newline, + encoding: None, + span: 108..109, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 109..115, + }, + Event { + kind: Whitespace, + encoding: None, + span: 115..116, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 116..117, + }, + Event { + kind: Whitespace, + encoding: None, + span: 117..118, + }, + Event { + kind: InlineTableOpen, + encoding: None, + span: 118..119, + }, + Event { + kind: Whitespace, + encoding: None, + span: 119..120, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 120..127, + }, + Event { + kind: Whitespace, + encoding: None, + span: 127..128, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 128..129, + }, + Event { + kind: Whitespace, + encoding: None, + span: 129..130, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 130..137, + }, + Event { + kind: ValueSep, + encoding: None, + span: 137..138, + }, + Event { + kind: Whitespace, + encoding: None, + span: 138..139, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 139..147, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 147..148, + }, + Event { + kind: ArrayOpen, + encoding: None, + span: 148..149, + }, + Event { + kind: ArrayClose, + encoding: None, + span: 149..150, + }, + Event { + kind: Whitespace, + encoding: None, + span: 150..151, + }, + Event { + kind: InlineTableClose, + encoding: None, + span: 151..152, + }, + Event { + kind: Newline, + encoding: None, + span: 152..153, + }, + Event { + kind: Newline, + encoding: None, + span: 153..154, + }, + Event { + kind: StdTableOpen, + encoding: None, + span: 154..155, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 155..160, + }, + Event { + kind: KeySep, + encoding: None, + span: 160..161, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 161..170, + }, + Event { + kind: KeySep, + encoding: None, + span: 170..171, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 171..177, + }, + Event { + kind: StdTableClose, + encoding: None, + span: 177..178, + }, + Event { + kind: Newline, + encoding: None, + span: 178..179, + }, + Event { + kind: SimpleKey, + encoding: Some( + BasicString, + ), + span: 179..188, + }, + Event { + kind: Error, + encoding: None, + span: 188..199, + }, + Event { + kind: Newline, + encoding: None, + span: 199..200, + }, + ], + errors: [ + ParseError { + context: Some( + 188..188, + ), + description: "key with no value", + expected: Some( + [ + Literal( + "=", + ), + ], + ), + unexpected: Some( + 188..188, + ), + }, + ], +} diff --git a/crates/toml_parser/tests/snapshots/testsuite__parse_document__document_unclosed_table_key_relpath.txt b/crates/toml_parser/tests/snapshots/testsuite__parse_document__document_unclosed_table_key_relpath.txt new file mode 100644 index 000000000..fc5f5b3a8 --- /dev/null +++ b/crates/toml_parser/tests/snapshots/testsuite__parse_document__document_unclosed_table_key_relpath.txt @@ -0,0 +1,461 @@ +EventResults { + input: "\n[package]\nname = \"a_name\"\nversion = \"0.1.0\"\nedition = \"2024\"\n\n[dependencies]\ncrate1 = { version = \"0.1.0\" }\ncrate2 = { version = \"1.0.0\", features=[] }\n\n[patch.crates-io.crate7]\n\"path = \"../somewhere\"\n", + events: [ + Event { + kind: Newline, + encoding: None, + span: 0..1, + }, + Event { + kind: StdTableOpen, + encoding: None, + span: 1..2, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 2..9, + }, + Event { + kind: StdTableClose, + encoding: None, + span: 9..10, + }, + Event { + kind: Newline, + encoding: None, + span: 10..11, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 11..15, + }, + Event { + kind: Whitespace, + encoding: None, + span: 15..16, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 16..17, + }, + Event { + kind: Whitespace, + encoding: None, + span: 17..18, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 18..26, + }, + Event { + kind: Newline, + encoding: None, + span: 26..27, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 27..34, + }, + Event { + kind: Whitespace, + encoding: None, + span: 34..35, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 35..36, + }, + Event { + kind: Whitespace, + encoding: None, + span: 36..37, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 37..44, + }, + Event { + kind: Newline, + encoding: None, + span: 44..45, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 45..52, + }, + Event { + kind: Whitespace, + encoding: None, + span: 52..53, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 53..54, + }, + Event { + kind: Whitespace, + encoding: None, + span: 54..55, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 55..61, + }, + Event { + kind: Newline, + encoding: None, + span: 61..62, + }, + Event { + kind: Newline, + encoding: None, + span: 62..63, + }, + Event { + kind: StdTableOpen, + encoding: None, + span: 63..64, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 64..76, + }, + Event { + kind: StdTableClose, + encoding: None, + span: 76..77, + }, + Event { + kind: Newline, + encoding: None, + span: 77..78, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 78..84, + }, + Event { + kind: Whitespace, + encoding: None, + span: 84..85, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 85..86, + }, + Event { + kind: Whitespace, + encoding: None, + span: 86..87, + }, + Event { + kind: InlineTableOpen, + encoding: None, + span: 87..88, + }, + Event { + kind: Whitespace, + encoding: None, + span: 88..89, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 89..96, + }, + Event { + kind: Whitespace, + encoding: None, + span: 96..97, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 97..98, + }, + Event { + kind: Whitespace, + encoding: None, + span: 98..99, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 99..106, + }, + Event { + kind: Whitespace, + encoding: None, + span: 106..107, + }, + Event { + kind: InlineTableClose, + encoding: None, + span: 107..108, + }, + Event { + kind: Newline, + encoding: None, + span: 108..109, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 109..115, + }, + Event { + kind: Whitespace, + encoding: None, + span: 115..116, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 116..117, + }, + Event { + kind: Whitespace, + encoding: None, + span: 117..118, + }, + Event { + kind: InlineTableOpen, + encoding: None, + span: 118..119, + }, + Event { + kind: Whitespace, + encoding: None, + span: 119..120, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 120..127, + }, + Event { + kind: Whitespace, + encoding: None, + span: 127..128, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 128..129, + }, + Event { + kind: Whitespace, + encoding: None, + span: 129..130, + }, + Event { + kind: Scalar, + encoding: Some( + BasicString, + ), + span: 130..137, + }, + Event { + kind: ValueSep, + encoding: None, + span: 137..138, + }, + Event { + kind: Whitespace, + encoding: None, + span: 138..139, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 139..147, + }, + Event { + kind: KeyValSep, + encoding: None, + span: 147..148, + }, + Event { + kind: ArrayOpen, + encoding: None, + span: 148..149, + }, + Event { + kind: ArrayClose, + encoding: None, + span: 149..150, + }, + Event { + kind: Whitespace, + encoding: None, + span: 150..151, + }, + Event { + kind: InlineTableClose, + encoding: None, + span: 151..152, + }, + Event { + kind: Newline, + encoding: None, + span: 152..153, + }, + Event { + kind: Newline, + encoding: None, + span: 153..154, + }, + Event { + kind: StdTableOpen, + encoding: None, + span: 154..155, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 155..160, + }, + Event { + kind: KeySep, + encoding: None, + span: 160..161, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 161..170, + }, + Event { + kind: KeySep, + encoding: None, + span: 170..171, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 171..177, + }, + Event { + kind: StdTableClose, + encoding: None, + span: 177..178, + }, + Event { + kind: Newline, + encoding: None, + span: 178..179, + }, + Event { + kind: SimpleKey, + encoding: Some( + BasicString, + ), + span: 179..188, + }, + Event { + kind: KeySep, + encoding: None, + span: 188..189, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 189..189, + }, + Event { + kind: KeySep, + encoding: None, + span: 189..190, + }, + Event { + kind: SimpleKey, + encoding: None, + span: 190..201, + }, + Event { + kind: Newline, + encoding: None, + span: 201..202, + }, + ], + errors: [ + ParseError { + context: Some( + 201..201, + ), + description: "key with no value", + expected: Some( + [ + Literal( + "=", + ), + ], + ), + unexpected: Some( + 201..201, + ), + }, + ParseError { + context: Some( + 189..189, + ), + description: "unquoted keys cannot be empty", + expected: Some( + [ + Description( + "letters", + ), + Description( + "numbers", + ), + Literal( + "-", + ), + Literal( + "_", + ), + ], + ), + unexpected: Some( + 189..189, + ), + }, + ParseError { + context: Some( + 190..201, + ), + description: "invalid basic string", + expected: Some( + [ + Literal( + "\"", + ), + ], + ), + unexpected: Some( + 190..190, + ), + }, + ], +} diff --git a/crates/toml_parser/tests/testsuite/parse_document.rs b/crates/toml_parser/tests/testsuite/parse_document.rs index f7649e084..654bf09ae 100644 --- a/crates/toml_parser/tests/testsuite/parse_document.rs +++ b/crates/toml_parser/tests/testsuite/parse_document.rs @@ -56,6 +56,126 @@ fn document_key_string_comment() { ); } +#[test] +fn document_unclosed_dotted_key_relpath() { + t( + r#" +[package] +name = "a_name" +version = "0.1.0" +edition = "2024" + +[dependencies] +crate1 = { version = "0.1.0" } +crate2 = { version = "1.0.0", features=[] } + +[patch.crates-io] +crate3."path = "../somewhere" +"#, + file![_].raw(), + ); +} + +#[test] +fn document_unclosed_dotted_key_abspath() { + t( + r#" +[package] +name = "a_name" +version = "0.1.0" +edition = "2024" + +[dependencies] +crate1 = { version = "0.1.0" } +crate2 = { version = "1.0.0", features=[] } + +[patch.crates-io] +crate4."path = "/somewhere" +"#, + file![_].raw(), + ); +} + +#[test] +fn document_unclosed_inline_table_key_relpath() { + t( + r#" +[package] +name = "a_name" +version = "0.1.0" +edition = "2024" + +[dependencies] +crate1 = { version = "0.1.0" } +crate2 = { version = "1.0.0", features=[] } + +[patch.crates-io] +crate5 = { "path = "../somewhere" } +"#, + file![_].raw(), + ); +} + +#[test] +fn document_unclosed_inline_table_key_abspath() { + t( + r#" +[package] +name = "a_name" +version = "0.1.0" +edition = "2024" + +[dependencies] +crate1 = { version = "0.1.0" } +crate2 = { version = "1.0.0", features=[] } + +[patch.crates-io] +crate6 = { "path = "/somewhere" } +"#, + file![_].raw(), + ); +} + +#[test] +fn document_unclosed_table_key_relpath() { + t( + r#" +[package] +name = "a_name" +version = "0.1.0" +edition = "2024" + +[dependencies] +crate1 = { version = "0.1.0" } +crate2 = { version = "1.0.0", features=[] } + +[patch.crates-io.crate7] +"path = "../somewhere" +"#, + file![_].raw(), + ); +} + +#[test] +fn document_unclosed_table_key_abspath() { + t( + r#" +[package] +name = "a_name" +version = "0.1.0" +edition = "2024" + +[dependencies] +crate1 = { version = "0.1.0" } +crate2 = { version = "1.0.0", features=[] } + +[patch.crates-io.crate8] +"path = "/somewhere" +"#, + file![_].raw(), + ); +} + #[test] fn document_key_ws() { t(