├── .cargo └── config ├── .github └── workflows │ └── ci.yml ├── .gitignore ├── .vscode ├── launch.json └── tasks.json ├── Cargo.lock ├── Cargo.toml ├── LICENSE-APACHE ├── LICENSE-MIT ├── README.md ├── bors.toml ├── crates ├── tom │ ├── Cargo.toml │ └── src │ │ ├── caps.rs │ │ ├── line_index.rs │ │ ├── main.rs │ │ └── req.rs └── tom_syntax │ ├── Cargo.toml │ ├── examples │ ├── api-walkthrough.rs │ └── cargo-ed │ │ ├── cargo_toml.rs │ │ ├── main.rs │ │ └── tests.rs │ ├── src │ ├── ast │ │ ├── generated.rs │ │ └── mod.rs │ ├── chunked_text.rs │ ├── edit.rs │ ├── lib.rs │ ├── model.rs │ ├── parser │ │ ├── grammar.rs │ │ ├── lexer.rs │ │ └── mod.rs │ ├── rtree.rs │ ├── symbol │ │ ├── generated.rs │ │ └── mod.rs │ ├── validator.rs │ ├── visitor.rs │ └── walk.rs │ └── tests │ ├── data │ ├── err │ │ ├── datetime-malformed-no-leads.toml │ │ ├── datetime-malformed-no-leads.txt │ │ ├── datetime-malformed-no-secs.toml │ │ ├── datetime-malformed-no-secs.txt │ │ ├── datetime-malformed-no-t.toml │ │ ├── datetime-malformed-no-t.txt │ │ ├── datetime-malformed-with-milli.toml │ │ ├── datetime-malformed-with-milli.txt │ │ ├── empty-implicit-table.toml │ │ ├── empty-implicit-table.txt │ │ ├── float-leading-zero-neg.toml │ │ ├── float-leading-zero-neg.txt │ │ ├── float-leading-zero-pos.json │ │ ├── float-leading-zero-pos.toml │ │ ├── float-leading-zero-pos.txt │ │ ├── float-leading-zero.toml │ │ ├── float-leading-zero.txt │ │ ├── float-no-leading-zero.toml │ │ ├── float-no-leading-zero.txt │ │ ├── float-no-trailing-digits.json │ │ ├── float-no-trailing-digits.toml │ │ ├── float-no-trailing-digits.txt │ │ ├── float-underscore-after-point.toml │ │ ├── float-underscore-after-point.txt │ │ ├── float-underscore-after.toml │ │ ├── float-underscore-after.txt │ │ ├── float-underscore-before-point.toml │ │ ├── float-underscore-before-point.txt │ │ ├── float-underscore-before.toml │ │ ├── float-underscore-before.txt │ │ ├── ignored │ │ │ ├── empty-table.toml │ │ │ ├── integer-leading-zero.toml │ │ │ ├── key-no-eol.toml │ │ │ ├── llbrace.toml │ │ │ ├── rrbrace.toml │ │ │ ├── string-bad-byte-escape.toml │ │ │ ├── string-bad-escape.toml │ │ │ ├── string-bad-uni-esc.toml │ │ │ ├── string-byte-escapes.toml │ │ │ ├── table-array-malformed-empty.toml │ │ │ └── table-empty.toml │ │ ├── inline-table-linebreak.json │ │ ├── inline-table-linebreak.toml │ │ ├── inline-table-linebreak.txt │ │ ├── integer-leading-zero-neg.toml │ │ ├── integer-leading-zero-neg.txt │ │ ├── integer-leading-zero-pos.toml │ │ ├── integer-leading-zero-pos.txt │ │ ├── integer-underscore-after.toml │ │ ├── integer-underscore-after.txt │ │ ├── integer-underscore-before.toml │ │ ├── integer-underscore-before.txt │ │ ├── integer-underscore-double.toml │ │ ├── integer-underscore-double.txt │ │ ├── key-after-array.json │ │ ├── key-after-array.toml │ │ ├── key-after-array.txt │ │ ├── key-after-table.json │ │ ├── key-after-table.toml │ │ ├── key-after-table.txt │ │ ├── key-empty.toml │ │ ├── key-empty.txt │ │ ├── key-hash.toml │ │ ├── key-hash.txt │ │ ├── key-newline.json │ │ ├── key-newline.toml │ │ ├── key-newline.txt │ │ ├── key-open-bracket.toml │ │ ├── key-open-bracket.txt │ │ ├── key-single-open-bracket.json │ │ ├── key-single-open-bracket.toml │ │ ├── key-single-open-bracket.txt │ │ ├── key-space.toml │ │ ├── key-space.txt │ │ ├── key-start-bracket.toml │ │ ├── key-start-bracket.txt │ │ ├── key-two-equals.toml │ │ ├── key-two-equals.txt │ │ ├── smiley.json │ │ ├── smiley.toml │ │ ├── smiley.txt │ │ ├── string-no-close.toml │ │ ├── string-no-close.txt │ │ ├── table-array-malformed-bracket.toml │ │ ├── table-array-malformed-bracket.txt │ │ ├── table-nested-brackets-close.toml │ │ ├── table-nested-brackets-close.txt │ │ ├── table-nested-brackets-open.json │ │ ├── table-nested-brackets-open.toml │ │ ├── table-nested-brackets-open.txt │ │ ├── table-whitespace.toml │ │ ├── table-whitespace.txt │ │ ├── table-with-pound.toml │ │ ├── table-with-pound.txt │ │ ├── text-after-array-entries.toml │ │ ├── text-after-array-entries.txt │ │ ├── text-after-integer.toml │ │ ├── text-after-integer.txt │ │ ├── text-after-string.toml │ │ ├── text-after-string.txt │ │ ├── text-after-table.toml │ │ ├── text-after-table.txt │ │ ├── text-before-array-separator.toml │ │ ├── text-before-array-separator.txt │ │ ├── text-in-array.toml │ │ └── text-in-array.txt │ ├── inline │ │ ├── test-array-table.json │ │ ├── test-array-table.toml │ │ ├── test-array-table.txt │ │ ├── test-array.json │ │ ├── test-array.toml │ │ ├── test-array.txt │ │ ├── test-doc.json │ │ ├── test-doc.toml │ │ ├── test-doc.txt │ │ ├── test-entries.json │ │ ├── test-entries.toml │ │ ├── test-entries.txt │ │ ├── test-inline-key.json │ │ ├── test-inline-key.toml │ │ ├── test-inline-key.txt │ │ ├── test-inline.json │ │ ├── test-inline.toml │ │ ├── test-inline.txt │ │ ├── test-key-str.json │ │ ├── test-key-str.toml │ │ ├── test-key-str.txt │ │ ├── test-key.json │ │ ├── test-key.toml │ │ ├── test-key.txt │ │ ├── test-keys.json │ │ ├── test-keys.toml │ │ ├── test-keys.txt │ │ ├── test-table-header.json │ │ ├── test-table-header.toml │ │ ├── test-table-header.txt │ │ ├── test-table.json │ │ ├── test-table.toml │ │ ├── test-table.txt │ │ ├── test-val-array.json │ │ ├── test-val-array.toml │ │ ├── test-val-array.txt │ │ ├── test-val-bool.json │ │ ├── test-val-bool.toml │ │ ├── test-val-bool.txt │ │ ├── test-val-inline.json │ │ ├── test-val-inline.toml │ │ ├── test-val-inline.txt │ │ ├── test-val-lit.json │ │ ├── test-val-lit.toml │ │ ├── test-val-lit.txt │ │ ├── test-val-num.json │ │ ├── test-val-num.toml │ │ ├── test-val-num.txt │ │ ├── test-val-str.json │ │ ├── test-val-str.toml │ │ ├── test-val-str.txt │ │ ├── test-val-unexpected.json │ │ ├── test-val-unexpected.toml │ │ └── test-val-unexpected.txt │ ├── ok │ │ ├── array-empty.json │ │ ├── array-empty.toml │ │ ├── array-empty.txt │ │ ├── array-nospaces.json │ │ ├── array-nospaces.toml │ │ ├── array-nospaces.txt │ │ ├── array-string-quote-comma-2.json │ │ ├── array-string-quote-comma-2.toml │ │ ├── array-string-quote-comma-2.txt │ │ ├── array-string-quote-comma.json │ │ ├── array-string-quote-comma.toml │ │ ├── array-string-quote-comma.txt │ │ ├── array-string-with-comma.json │ │ ├── array-string-with-comma.toml │ │ ├── array-string-with-comma.txt │ │ ├── array-table-array-string-backslash.json │ │ ├── array-table-array-string-backslash.toml │ │ ├── array-table-array-string-backslash.txt │ │ ├── arrayTables.json │ │ ├── arrayTables.toml │ │ ├── arrayTables.txt │ │ ├── arrays-hetergeneous.json │ │ ├── arrays-hetergeneous.toml │ │ ├── arrays-hetergeneous.txt │ │ ├── arrays-nested.json │ │ ├── arrays-nested.toml │ │ ├── arrays-nested.txt │ │ ├── arrays.json │ │ ├── arrays.toml │ │ ├── arrays.txt │ │ ├── arrays2.json │ │ ├── arrays2.toml │ │ ├── arrays2.txt │ │ ├── bool.json │ │ ├── bool.toml │ │ ├── bool.txt │ │ ├── boolean.json │ │ ├── boolean.toml │ │ ├── boolean.txt │ │ ├── comments-at-eof.json │ │ ├── comments-at-eof.toml │ │ ├── comments-at-eof.txt │ │ ├── comments-at-eof2.json │ │ ├── comments-at-eof2.toml │ │ ├── comments-at-eof2.txt │ │ ├── comments.json │ │ ├── comments.toml │ │ ├── comments.txt │ │ ├── complex_config.json │ │ ├── complex_config.toml │ │ ├── complex_config.txt │ │ ├── datetime-timezone.json │ │ ├── datetime-timezone.toml │ │ ├── datetime-timezone.txt │ │ ├── datetime.json │ │ ├── datetime.toml │ │ ├── datetime.txt │ │ ├── dotted-keys.json │ │ ├── dotted-keys.toml │ │ ├── dotted-keys.txt │ │ ├── double-quote-escape.json │ │ ├── double-quote-escape.toml │ │ ├── double-quote-escape.txt │ │ ├── empty.json │ │ ├── empty.toml │ │ ├── empty.txt │ │ ├── escaped-escape.json │ │ ├── escaped-escape.toml │ │ ├── escaped-escape.txt │ │ ├── example.json │ │ ├── example.toml │ │ ├── example.txt │ │ ├── float-underscore.json │ │ ├── float-underscore.toml │ │ ├── float-underscore.txt │ │ ├── float.json │ │ ├── float.toml │ │ ├── float.txt │ │ ├── ignored │ │ │ ├── comments-everywhere.json │ │ │ ├── comments-everywhere.toml │ │ │ ├── float-exponent.json │ │ │ └── float-exponent.toml │ │ ├── implicit-and-explicit-after.json │ │ ├── implicit-and-explicit-after.toml │ │ ├── implicit-and-explicit-after.txt │ │ ├── implicit-and-explicit-before.json │ │ ├── implicit-and-explicit-before.toml │ │ ├── implicit-and-explicit-before.txt │ │ ├── implicit-groups.json │ │ ├── implicit-groups.toml │ │ ├── implicit-groups.txt │ │ ├── inline-table.json │ │ ├── inline-table.toml │ │ ├── inline-table.txt │ │ ├── inlineTables.json │ │ ├── inlineTables.toml │ │ ├── inlineTables.txt │ │ ├── integer-underscore.json │ │ ├── integer-underscore.toml │ │ ├── integer-underscore.txt │ │ ├── integer.json │ │ ├── integer.toml │ │ ├── integer.txt │ │ ├── key-equals-nospace.json │ │ ├── key-equals-nospace.toml │ │ ├── key-equals-nospace.txt │ │ ├── key-numeric.json │ │ ├── key-numeric.toml │ │ ├── key-numeric.txt │ │ ├── key-space.json │ │ ├── key-space.toml │ │ ├── key-space.txt │ │ ├── key-special-chars.json │ │ ├── key-special-chars.toml │ │ ├── key-special-chars.txt │ │ ├── keys-with-dots.json │ │ ├── keys-with-dots.toml │ │ ├── keys-with-dots.txt │ │ ├── keys.json │ │ ├── keys.toml │ │ ├── keys.txt │ │ ├── long-float.json │ │ ├── long-float.toml │ │ ├── long-float.txt │ │ ├── long-integer.json │ │ ├── long-integer.toml │ │ ├── long-integer.txt │ │ ├── multiline-string-accidental-ws.json │ │ ├── multiline-string-accidental-ws.toml │ │ ├── multiline-string-accidental-ws.txt │ │ ├── multiline-string.json │ │ ├── multiline-string.toml │ │ ├── multiline-string.txt │ │ ├── numbers.json │ │ ├── numbers.toml │ │ ├── numbers.txt │ │ ├── raw-multiline-string.json │ │ ├── raw-multiline-string.toml │ │ ├── raw-multiline-string.txt │ │ ├── raw-string.json │ │ ├── raw-string.toml │ │ ├── raw-string.txt │ │ ├── simple.json │ │ ├── simple.toml │ │ ├── simple.txt │ │ ├── string-empty.json │ │ ├── string-empty.toml │ │ ├── string-empty.txt │ │ ├── string-escapes.json │ │ ├── string-escapes.toml │ │ ├── string-escapes.txt │ │ ├── string-nl.json │ │ ├── string-nl.toml │ │ ├── string-nl.txt │ │ ├── string-simple.json │ │ ├── string-simple.toml │ │ ├── string-simple.txt │ │ ├── string-with-pound.json │ │ ├── string-with-pound.toml │ │ ├── string-with-pound.txt │ │ ├── strings.json │ │ ├── strings.toml │ │ ├── strings.txt │ │ ├── table-array-implicit.json │ │ ├── table-array-implicit.toml │ │ ├── table-array-implicit.txt │ │ ├── table-array-many.json │ │ ├── table-array-many.toml │ │ ├── table-array-many.txt │ │ ├── table-array-nest.json │ │ ├── table-array-nest.toml │ │ ├── table-array-nest.txt │ │ ├── table-array-one.json │ │ ├── table-array-one.toml │ │ ├── table-array-one.txt │ │ ├── table-array-table-array.json │ │ ├── table-array-table-array.toml │ │ ├── table-array-table-array.txt │ │ ├── table-empty.json │ │ ├── table-empty.toml │ │ ├── table-empty.txt │ │ ├── table-no-eol.json │ │ ├── table-no-eol.toml │ │ ├── table-no-eol.txt │ │ ├── table-sub-empty.json │ │ ├── table-sub-empty.toml │ │ ├── table-sub-empty.txt │ │ ├── table-whitespace.json │ │ ├── table-whitespace.toml │ │ ├── table-whitespace.txt │ │ ├── table-with-literal-string.json │ │ ├── table-with-literal-string.toml │ │ ├── table-with-literal-string.txt │ │ ├── table-with-pound.json │ │ ├── table-with-pound.toml │ │ ├── table-with-pound.txt │ │ ├── table-with-single-quotes.json │ │ ├── table-with-single-quotes.toml │ │ ├── table-with-single-quotes.txt │ │ ├── tables.json │ │ ├── tables.toml │ │ ├── tables.txt │ │ ├── time.json │ │ ├── time.toml │ │ ├── time.txt │ │ ├── unicode-escape.json │ │ ├── unicode-escape.toml │ │ ├── unicode-escape.txt │ │ ├── unicode-literal.json │ │ ├── unicode-literal.toml │ │ └── unicode-literal.txt │ └── validation │ │ ├── ignored │ │ ├── array-mixed-types-arrays-and-ints.toml │ │ ├── array-mixed-types-ints-and-floats.toml │ │ ├── array-mixed-types-strings-and-ints.toml │ │ ├── duplicate-key-table.toml │ │ ├── duplicate-keys.toml │ │ ├── duplicate-tables.toml │ │ └── table-array-implicit.toml │ │ ├── newlines-after-headre.json │ │ ├── newlines-after-headre.toml │ │ ├── newlines-after-headre.txt │ │ ├── newlines-entries.json │ │ ├── newlines-entries.toml │ │ ├── newlines-entries.txt │ │ ├── newlines-inline-table.json │ │ ├── newlines-inline-table.toml │ │ ├── newlines-inline-table.txt │ │ ├── newlines-keys.json │ │ ├── newlines-keys.toml │ │ └── newlines-keys.txt │ └── suite │ ├── ast.rs │ ├── dir.rs │ ├── edit.rs │ ├── factory.rs │ ├── main.rs │ ├── model.rs │ └── util.rs ├── deny.toml ├── editors └── code │ ├── .eslintrc.js │ ├── .gitignore │ ├── .vscodeignore │ ├── package-lock.json │ ├── package.json │ ├── rollup.config.js │ ├── src │ ├── commands │ │ ├── extend_selection.ts │ │ ├── index.ts │ │ └── syntaxTree.ts │ ├── config.ts │ ├── events │ │ ├── change_active_text_editor.ts │ │ ├── change_text_document.ts │ │ └── index.ts │ ├── highlighting.ts │ ├── main.ts │ ├── notifications │ │ ├── index.ts │ │ └── publish_decorations.ts │ └── server.ts │ └── tsconfig.json ├── rustfmt.toml └── xtask ├── Cargo.toml ├── src ├── codegen.rs ├── codegen │ ├── gen_ast.rs │ ├── gen_parser_tests.rs │ └── gen_symbols.rs ├── lib.rs ├── main.rs ├── not_bash.rs └── pre_commit.rs └── tests └── tidy.rs /.cargo/config: -------------------------------------------------------------------------------- 1 | [alias] 2 | xtask = "run --package xtask --bin xtask --" 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | crates/*/target 3 | **/*.rs.bk 4 | **/*.rs.pending-snap 5 | .idea/* 6 | *.log 7 | .vscode/settings.json 8 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [workspace] 2 | members = ["crates/*", "xtask"] 3 | 4 | [profile.dev] 5 | # disabling debug info speeds up builds a bunch, 6 | # and we don't rely on it for debugging that much. 7 | debug = 0 8 | 9 | [profile.release] 10 | incremental = true 11 | debug = 0 # set this to 1 or 2 to get more useful backtraces in debugger 12 | 13 | # ideally, we would use `build-override` here, but some crates are also 14 | # needed at run-time and we end up compiling them twice 15 | [profile.release.package.proc-macro2] 16 | opt-level = 0 17 | [profile.release.package.quote] 18 | opt-level = 0 19 | [profile.release.package.syn] 20 | opt-level = 0 21 | [profile.release.package.serde_derive] 22 | opt-level = 0 23 | [profile.release.package.xtask] 24 | opt-level = 0 25 | -------------------------------------------------------------------------------- /LICENSE-MIT: -------------------------------------------------------------------------------- 1 | Permission is hereby granted, free of charge, to any 2 | person obtaining a copy of this software and associated 3 | documentation files (the "Software"), to deal in the 4 | Software without restriction, including without 5 | limitation the rights to use, copy, modify, merge, 6 | publish, distribute, sublicense, and/or sell copies of 7 | the Software, and to permit persons to whom the Software 8 | is furnished to do so, subject to the following 9 | conditions: 10 | 11 | The above copyright notice and this permission notice 12 | shall be included in all copies or substantial portions 13 | of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF 16 | ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 17 | TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 18 | PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT 19 | SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 20 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 21 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 22 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 23 | DEALINGS IN THE SOFTWARE. 24 | -------------------------------------------------------------------------------- /bors.toml: -------------------------------------------------------------------------------- 1 | status = [ 2 | "Cargo Deny Check", 3 | "Rust (ubuntu-latest)", 4 | "Rust (windows-latest)", 5 | "Rust (macos-latest)", 6 | "TypeScript (ubuntu-latest)", 7 | "TypeScript (windows-latest)", 8 | "TypeScript (macos-latest)", 9 | ] 10 | delete_merged_branches = true 11 | -------------------------------------------------------------------------------- /crates/tom/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "tom" 3 | version = "0.1.0" 4 | authors = ["Aleksey Kladov "] 5 | edition = "2018" 6 | license = "MIT OR Apache-2.0" 7 | repository = "https://github.com/matklad/tom" 8 | publish = false 9 | 10 | [dependencies] 11 | serde = { version = "1.0", features = ["derive"] } 12 | url_serde = "0.2.0" 13 | crossbeam-channel = "0.2.6" 14 | gen_lsp_server = "0.1.0" 15 | failure = "0.1.2" 16 | languageserver-types = "0.51.0" 17 | superslice = "0.1.0" 18 | flexi_logger = "0.10" 19 | log = "0.4" 20 | tom_syntax = { path = "../tom_syntax" } 21 | -------------------------------------------------------------------------------- /crates/tom/src/caps.rs: -------------------------------------------------------------------------------- 1 | //! FIXME: write short doc here 2 | 3 | use languageserver_types::{ 4 | ServerCapabilities, TextDocumentSyncCapability, TextDocumentSyncOptions, TextDocumentSyncKind, 5 | }; 6 | 7 | pub fn server_capabilities() -> ServerCapabilities { 8 | ServerCapabilities { 9 | text_document_sync: Some(TextDocumentSyncCapability::Options( 10 | TextDocumentSyncOptions { 11 | open_close: Some(true), 12 | change: Some(TextDocumentSyncKind::Full), 13 | will_save: None, 14 | will_save_wait_until: None, 15 | save: None, 16 | }, 17 | )), 18 | ..Default::default() 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /crates/tom/src/req.rs: -------------------------------------------------------------------------------- 1 | //! FIXME: write short doc here 2 | 3 | use serde::{Serialize, Deserialize}; 4 | use languageserver_types::{ 5 | Url, Range, TextDocumentIdentifier, 6 | request::Request, 7 | notification::{Notification}, 8 | }; 9 | 10 | pub enum SyntaxTree {} 11 | 12 | impl Request for SyntaxTree { 13 | type Params = SyntaxTreeParams; 14 | type Result = String; 15 | const METHOD: &'static str = "m/syntaxTree"; 16 | } 17 | 18 | #[derive(Deserialize, Debug)] 19 | #[serde(rename_all = "camelCase")] 20 | pub struct SyntaxTreeParams { 21 | pub text_document: TextDocumentIdentifier, 22 | } 23 | 24 | pub enum ExtendSelection {} 25 | 26 | impl Request for ExtendSelection { 27 | type Params = ExtendSelectionParams; 28 | type Result = ExtendSelectionResult; 29 | const METHOD: &'static str = "m/extendSelection"; 30 | } 31 | 32 | #[derive(Deserialize, Debug)] 33 | #[serde(rename_all = "camelCase")] 34 | pub struct ExtendSelectionParams { 35 | pub text_document: TextDocumentIdentifier, 36 | pub selections: Vec, 37 | } 38 | 39 | #[derive(Serialize, Debug)] 40 | #[serde(rename_all = "camelCase")] 41 | pub struct ExtendSelectionResult { 42 | pub selections: Vec, 43 | } 44 | 45 | pub enum DecorationsRequest {} 46 | 47 | impl Request for DecorationsRequest { 48 | type Params = TextDocumentIdentifier; 49 | type Result = Vec; 50 | const METHOD: &'static str = "m/decorationsRequest"; 51 | } 52 | 53 | pub enum PublishDecorations {} 54 | 55 | impl Notification for PublishDecorations { 56 | type Params = PublishDecorationsParams; 57 | const METHOD: &'static str = "m/publishDecorations"; 58 | } 59 | 60 | #[derive(Serialize, Debug)] 61 | #[serde(rename_all = "camelCase")] 62 | pub struct PublishDecorationsParams { 63 | #[serde(with = "url_serde")] 64 | pub uri: Url, 65 | pub decorations: Vec, 66 | } 67 | 68 | #[derive(Serialize, Debug)] 69 | #[serde(rename_all = "camelCase")] 70 | pub struct Decoration { 71 | pub range: Range, 72 | pub tag: &'static str, 73 | } 74 | -------------------------------------------------------------------------------- /crates/tom_syntax/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "tom_syntax" 3 | version = "0.0.1" 4 | authors = ["Aleksey Kladov "] 5 | edition = "2018" 6 | license = "MIT OR Apache-2.0" 7 | repository = "https://github.com/matklad/tom" 8 | description = """ 9 | Yet another format-preserving TOML parser/manipulator. 10 | """ 11 | 12 | [dependencies] 13 | # public 14 | text_unit = "0.1.5" 15 | 16 | # private 17 | lazy_static = "1" 18 | m_lexer = "0.0.4" 19 | uncover = "0.1" 20 | drop_bomb = "0.1.3" 21 | rowan = "0.1.2" 22 | 23 | [dev-dependencies] 24 | difference = "2" 25 | -------------------------------------------------------------------------------- /crates/tom_syntax/src/chunked_text.rs: -------------------------------------------------------------------------------- 1 | //! FIXME: write short doc here 2 | 3 | pub trait ChunkedText 4 | where 5 | Self: Sized, 6 | { 7 | fn for_each_chunk Result<(), T>, T>(self, f: F) -> Result<(), T>; 8 | 9 | fn contains_char(self, c: char) -> bool { 10 | self.for_each_chunk(|chunk| { 11 | if chunk.contains(c) { 12 | return Err(()); 13 | } 14 | Ok(()) 15 | }) 16 | .is_err() 17 | } 18 | 19 | fn write_to(self, buff: &mut String) { 20 | self.for_each_chunk(|chunk| { 21 | buff.push_str(chunk); 22 | Ok::<(), ()>(()) 23 | }) 24 | .unwrap(); 25 | } 26 | 27 | fn into_string(self) -> String { 28 | let mut buff = String::new(); 29 | self.write_to(&mut buff); 30 | buff 31 | } 32 | } 33 | 34 | impl<'a, I: Iterator> ChunkedText for I { 35 | fn for_each_chunk Result<(), T>, T>(mut self, f: F) -> Result<(), T> { 36 | self.try_for_each(f) 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /crates/tom_syntax/src/symbol/mod.rs: -------------------------------------------------------------------------------- 1 | //! FIXME: write short doc here 2 | 3 | mod generated; 4 | 5 | use std::{fmt, num::NonZeroU8}; 6 | 7 | use crate::Symbol; 8 | 9 | pub use self::generated::*; 10 | 11 | pub(crate) struct SymbolInfo(pub &'static str); 12 | 13 | impl Symbol { 14 | pub(crate) fn new(idx: u16) -> Symbol { 15 | Symbol(NonZeroU8::new(idx as u8).unwrap()) 16 | } 17 | 18 | pub(crate) fn info(&self) -> &SymbolInfo { 19 | let idx = (self.0.get() - 1) as usize; 20 | &generated::SYMBOLS[idx] 21 | } 22 | } 23 | 24 | impl fmt::Debug for Symbol { 25 | fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> { 26 | write!(f, "`{}", self.name()) 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /crates/tom_syntax/src/visitor.rs: -------------------------------------------------------------------------------- 1 | //! FIXME: write short doc here 2 | 3 | use { 4 | AstNode, CstNode, TomlDoc, 5 | walk::preorder, 6 | }; 7 | 8 | pub(crate) struct Visitor<'c, C> { 9 | ctx: C, 10 | callbacks: Vec>, 11 | } 12 | 13 | pub(crate) fn visitor<'c, C>(ctx: C) -> Visitor<'c, C> { 14 | Visitor { 15 | ctx, 16 | callbacks: Vec::new(), 17 | } 18 | } 19 | 20 | pub(crate) fn process<'c, C>(node: CstNode, doc: &TomlDoc, mut v: Visitor<'c, C>) -> C { 21 | preorder(doc, node).for_each(|node| v.do_visit(node, doc)); 22 | return v.ctx; 23 | } 24 | 25 | pub(crate) fn process_children<'c, C>(node: CstNode, doc: &TomlDoc, mut v: Visitor<'c, C>) -> C { 26 | for child in node.children(doc) { 27 | v.do_visit(child, doc); 28 | } 29 | return v.ctx; 30 | } 31 | 32 | impl<'c, C> Visitor<'c, C> { 33 | pub fn visit(mut self, mut f: F) -> Self { 34 | let cb: Box = 35 | Box::new(move |c, node, doc| match A::cast(node, doc) { 36 | None => (), 37 | Some(a) => f(c, a), 38 | }); 39 | self.callbacks.push(cb); 40 | self 41 | } 42 | 43 | fn do_visit(&mut self, node: CstNode, doc: &TomlDoc) { 44 | for cb in self.callbacks.iter_mut() { 45 | cb(&mut self.ctx, node, doc); 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/datetime-malformed-no-leads.toml: -------------------------------------------------------------------------------- 1 | no-leads = 1987-7-05T17:45:00Z 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/datetime-malformed-no-leads.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 31) 2 | ENTRY@[0; 23) 3 | KEY@[0; 8) 4 | BARE_KEY@[0; 8) "no-leads" 5 | WHITESPACE@[8; 9) 6 | EQ@[9; 10) "=" 7 | WHITESPACE@[10; 11) 8 | VALUE@[11; 23) 9 | ERROR@[11; 23) 10 | BARE_KEY@[11; 23) "1987-7-05T17" 11 | ERROR@[23; 24) 12 | ERROR@[23; 24) ":" 13 | ENTRY@[24; 31) 14 | KEY@[24; 26) 15 | BARE_KEY@[24; 26) "45" 16 | ERROR@[26; 27) 17 | ERROR@[26; 27) ":" 18 | KEY@[27; 30) 19 | BARE_KEY@[27; 30) "00Z" 20 | WHITESPACE@[30; 31) 21 | VALUE@[31; 31) 22 | 23 | error@[11; 23) "1987-7-05T17": expected a value 24 | error@[23; 24) ":": expected a key 25 | error@[26; 27) ":": expected `.` 26 | error@[30; 31) "\n": expected `=` 27 | error@[30; 31) "\n": expected a value 28 | error@[24; 31) "45:00Z\n": newlines are forbidden in entries 29 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/datetime-malformed-no-secs.toml: -------------------------------------------------------------------------------- 1 | no-secs = 1987-07-05T17:45Z 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/datetime-malformed-no-secs.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 28) 2 | ENTRY@[0; 23) 3 | KEY@[0; 7) 4 | BARE_KEY@[0; 7) "no-secs" 5 | WHITESPACE@[7; 8) 6 | EQ@[8; 9) "=" 7 | WHITESPACE@[9; 10) 8 | VALUE@[10; 23) 9 | ERROR@[10; 23) 10 | BARE_KEY@[10; 23) "1987-07-05T17" 11 | ERROR@[23; 24) 12 | ERROR@[23; 24) ":" 13 | ENTRY@[24; 28) 14 | KEY@[24; 27) 15 | BARE_KEY@[24; 27) "45Z" 16 | WHITESPACE@[27; 28) 17 | VALUE@[28; 28) 18 | 19 | error@[10; 23) "1987-07-05T17": expected a value 20 | error@[23; 24) ":": expected a key 21 | error@[27; 28) "\n": expected `=` 22 | error@[27; 28) "\n": expected a value 23 | error@[24; 28) "45Z\n": newlines are forbidden in entries 24 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/datetime-malformed-no-t.toml: -------------------------------------------------------------------------------- 1 | no-t = 1987-07-0517:45:00Z 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/datetime-malformed-no-t.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 27) 2 | ENTRY@[0; 19) 3 | KEY@[0; 4) 4 | BARE_KEY@[0; 4) "no-t" 5 | WHITESPACE@[4; 5) 6 | EQ@[5; 6) "=" 7 | WHITESPACE@[6; 7) 8 | VALUE@[7; 19) 9 | ERROR@[7; 19) 10 | BARE_KEY@[7; 19) "1987-07-0517" 11 | ERROR@[19; 20) 12 | ERROR@[19; 20) ":" 13 | ENTRY@[20; 27) 14 | KEY@[20; 22) 15 | BARE_KEY@[20; 22) "45" 16 | ERROR@[22; 23) 17 | ERROR@[22; 23) ":" 18 | KEY@[23; 26) 19 | BARE_KEY@[23; 26) "00Z" 20 | WHITESPACE@[26; 27) 21 | VALUE@[27; 27) 22 | 23 | error@[7; 19) "1987-07-0517": expected a value 24 | error@[19; 20) ":": expected a key 25 | error@[22; 23) ":": expected `.` 26 | error@[26; 27) "\n": expected `=` 27 | error@[26; 27) "\n": expected a value 28 | error@[20; 27) "45:00Z\n": newlines are forbidden in entries 29 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/datetime-malformed-with-milli.toml: -------------------------------------------------------------------------------- 1 | with-milli = 1987-07-5T17:45:00.12Z 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/datetime-malformed-with-milli.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 36) 2 | ENTRY@[0; 25) 3 | KEY@[0; 10) 4 | BARE_KEY@[0; 10) "with-milli" 5 | WHITESPACE@[10; 11) 6 | EQ@[11; 12) "=" 7 | WHITESPACE@[12; 13) 8 | VALUE@[13; 25) 9 | ERROR@[13; 25) 10 | BARE_KEY@[13; 25) "1987-07-5T17" 11 | ERROR@[25; 26) 12 | ERROR@[25; 26) ":" 13 | ENTRY@[26; 36) 14 | KEY@[26; 28) 15 | BARE_KEY@[26; 28) "45" 16 | ERROR@[28; 29) 17 | ERROR@[28; 29) ":" 18 | KEY@[29; 31) 19 | BARE_KEY@[29; 31) "00" 20 | DOT@[31; 32) "." 21 | KEY@[32; 35) 22 | BARE_KEY@[32; 35) "12Z" 23 | WHITESPACE@[35; 36) 24 | VALUE@[36; 36) 25 | 26 | error@[13; 25) "1987-07-5T17": expected a value 27 | error@[25; 26) ":": expected a key 28 | error@[28; 29) ":": expected `.` 29 | error@[35; 36) "\n": expected `=` 30 | error@[35; 36) "\n": expected a value 31 | error@[26; 36) "45:00.12Z\n": newlines are forbidden in entries 32 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/empty-implicit-table.toml: -------------------------------------------------------------------------------- 1 | [naughty..naughty] 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/empty-implicit-table.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 19) 2 | TABLE@[0; 18) 3 | TABLE_HEADER@[0; 18) 4 | L_BRACK@[0; 1) "[" 5 | KEY@[1; 8) 6 | BARE_KEY@[1; 8) "naughty" 7 | DOT@[8; 9) "." 8 | KEY@[9; 10) 9 | ERROR@[9; 10) 10 | DOT@[9; 10) "." 11 | ERROR@[10; 17) 12 | BARE_KEY@[10; 17) "naughty" 13 | KEY@[17; 18) 14 | ERROR@[17; 18) 15 | R_BRACK@[17; 18) "]" 16 | WHITESPACE@[18; 19) 17 | 18 | error@[9; 10) ".": expected a key 19 | error@[10; 17) "naughty": expected `.` 20 | error@[17; 18) "]": expected a key 21 | error@[18; 19) "\n": expected `]` 22 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/float-leading-zero-neg.toml: -------------------------------------------------------------------------------- 1 | leading-zero = -03.14 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/float-leading-zero-neg.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 22) 2 | ENTRY@[0; 18) 3 | KEY@[0; 12) 4 | BARE_KEY@[0; 12) "leading-zero" 5 | WHITESPACE@[12; 13) 6 | EQ@[13; 14) "=" 7 | WHITESPACE@[14; 15) 8 | VALUE@[15; 18) 9 | ERROR@[15; 18) 10 | BARE_KEY@[15; 18) "-03" 11 | ERROR@[18; 19) 12 | DOT@[18; 19) "." 13 | ENTRY@[19; 22) 14 | KEY@[19; 21) 15 | BARE_KEY@[19; 21) "14" 16 | WHITESPACE@[21; 22) 17 | VALUE@[22; 22) 18 | 19 | error@[15; 18) "-03": expected a value 20 | error@[18; 19) ".": expected a key 21 | error@[21; 22) "\n": expected `=` 22 | error@[21; 22) "\n": expected a value 23 | error@[19; 22) "14\n": newlines are forbidden in entries 24 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/float-leading-zero-pos.json: -------------------------------------------------------------------------------- 1 | { 2 | "leading-zero": { 3 | "type": "float", 4 | "value": "3.14" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/float-leading-zero-pos.toml: -------------------------------------------------------------------------------- 1 | leading-zero = +03.14 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/float-leading-zero-pos.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 22) 2 | ENTRY@[0; 17) 3 | KEY@[0; 12) 4 | BARE_KEY@[0; 12) "leading-zero" 5 | WHITESPACE@[12; 13) 6 | EQ@[13; 14) "=" 7 | WHITESPACE@[14; 15) 8 | VALUE@[15; 17) 9 | NUMBER@[15; 17) "+0" 10 | ERROR@[17; 21) 11 | NUMBER@[17; 21) "3.14" 12 | WHITESPACE@[21; 22) 13 | 14 | error@[17; 21) "3.14": expected a key 15 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/float-leading-zero.toml: -------------------------------------------------------------------------------- 1 | leading-zero = 03.14 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/float-leading-zero.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 21) 2 | ENTRY@[0; 17) 3 | KEY@[0; 12) 4 | BARE_KEY@[0; 12) "leading-zero" 5 | WHITESPACE@[12; 13) 6 | EQ@[13; 14) "=" 7 | WHITESPACE@[14; 15) 8 | VALUE@[15; 17) 9 | NUMBER@[15; 17) "03" 10 | ERROR@[17; 18) 11 | DOT@[17; 18) "." 12 | ENTRY@[18; 21) 13 | KEY@[18; 20) 14 | BARE_KEY@[18; 20) "14" 15 | WHITESPACE@[20; 21) 16 | VALUE@[21; 21) 17 | 18 | error@[17; 18) ".": expected a key 19 | error@[20; 21) "\n": expected `=` 20 | error@[20; 21) "\n": expected a value 21 | error@[18; 21) "14\n": newlines are forbidden in entries 22 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/float-no-leading-zero.toml: -------------------------------------------------------------------------------- 1 | answer = .12345 2 | neganswer = -.12345 3 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/float-no-leading-zero.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 36) 2 | ENTRY@[0; 10) 3 | KEY@[0; 6) 4 | BARE_KEY@[0; 6) "answer" 5 | WHITESPACE@[6; 7) 6 | EQ@[7; 8) "=" 7 | WHITESPACE@[8; 9) 8 | VALUE@[9; 10) 9 | ERROR@[9; 10) 10 | DOT@[9; 10) "." 11 | ENTRY@[10; 36) 12 | KEY@[10; 15) 13 | BARE_KEY@[10; 15) "12345" 14 | WHITESPACE@[15; 16) 15 | ERROR@[16; 25) 16 | BARE_KEY@[16; 25) "neganswer" 17 | WHITESPACE@[25; 26) 18 | KEY@[26; 27) 19 | ERROR@[26; 27) 20 | EQ@[26; 27) "=" 21 | WHITESPACE@[27; 28) 22 | ERROR@[28; 29) 23 | BARE_KEY@[28; 29) "-" 24 | KEY@[29; 30) 25 | ERROR@[29; 30) 26 | DOT@[29; 30) "." 27 | ERROR@[30; 35) 28 | BARE_KEY_OR_NUMBER@[30; 35) "12345" 29 | WHITESPACE@[35; 36) 30 | KEY@[36; 36) 31 | VALUE@[36; 36) 32 | 33 | error@[9; 10) ".": expected a value 34 | error@[16; 25) "neganswer": expected `.` 35 | error@[26; 27) "=": expected a key 36 | error@[28; 29) "-": expected `.` 37 | error@[29; 30) ".": expected a key 38 | error@[30; 35) "12345": expected `.` 39 | error@[35; 36) "\n": expected a key 40 | error@[35; 36) "\n": expected `=` 41 | error@[35; 36) "\n": expected a value 42 | error@[10; 36) "12345\nneganswer = -.12345\n": newlines are forbidden in entries 43 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/float-no-trailing-digits.json: -------------------------------------------------------------------------------- 1 | { 2 | "answer": { 3 | "type": "float", 4 | "value": "1.0" 5 | }, 6 | "neganswer": { 7 | "type": "float", 8 | "value": "-1.0" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/float-no-trailing-digits.toml: -------------------------------------------------------------------------------- 1 | answer = 1. 2 | neganswer = -1. 3 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/float-no-trailing-digits.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 28) 2 | ENTRY@[0; 10) 3 | KEY@[0; 6) 4 | BARE_KEY@[0; 6) "answer" 5 | WHITESPACE@[6; 7) 6 | EQ@[7; 8) "=" 7 | WHITESPACE@[8; 9) 8 | VALUE@[9; 10) 9 | NUMBER@[9; 10) "1" 10 | ERROR@[10; 11) 11 | DOT@[10; 11) "." 12 | WHITESPACE@[11; 12) 13 | ENTRY@[12; 26) 14 | KEY@[12; 21) 15 | BARE_KEY@[12; 21) "neganswer" 16 | WHITESPACE@[21; 22) 17 | EQ@[22; 23) "=" 18 | WHITESPACE@[23; 24) 19 | VALUE@[24; 26) 20 | NUMBER@[24; 26) "-1" 21 | ERROR@[26; 27) 22 | DOT@[26; 27) "." 23 | WHITESPACE@[27; 28) 24 | 25 | error@[10; 11) ".": expected a key 26 | error@[26; 27) ".": expected a key 27 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/float-underscore-after-point.toml: -------------------------------------------------------------------------------- 1 | bad = 1._2 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/float-underscore-after-point.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 11) 2 | ENTRY@[0; 7) 3 | KEY@[0; 3) 4 | BARE_KEY@[0; 3) "bad" 5 | WHITESPACE@[3; 4) 6 | EQ@[4; 5) "=" 7 | WHITESPACE@[5; 6) 8 | VALUE@[6; 7) 9 | NUMBER@[6; 7) "1" 10 | ERROR@[7; 8) 11 | DOT@[7; 8) "." 12 | ENTRY@[8; 11) 13 | KEY@[8; 10) 14 | BARE_KEY@[8; 10) "_2" 15 | WHITESPACE@[10; 11) 16 | VALUE@[11; 11) 17 | 18 | error@[7; 8) ".": expected a key 19 | error@[10; 11) "\n": expected `=` 20 | error@[10; 11) "\n": expected a value 21 | error@[8; 11) "_2\n": newlines are forbidden in entries 22 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/float-underscore-after.toml: -------------------------------------------------------------------------------- 1 | bad = 1.2_ 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/float-underscore-after.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 11) 2 | ENTRY@[0; 9) 3 | KEY@[0; 3) 4 | BARE_KEY@[0; 3) "bad" 5 | WHITESPACE@[3; 4) 6 | EQ@[4; 5) "=" 7 | WHITESPACE@[5; 6) 8 | VALUE@[6; 9) 9 | NUMBER@[6; 9) "1.2" 10 | ENTRY@[9; 11) 11 | KEY@[9; 10) 12 | BARE_KEY@[9; 10) "_" 13 | WHITESPACE@[10; 11) 14 | VALUE@[11; 11) 15 | 16 | error@[10; 11) "\n": expected `=` 17 | error@[10; 11) "\n": expected a value 18 | error@[9; 11) "_\n": newlines are forbidden in entries 19 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/float-underscore-before-point.toml: -------------------------------------------------------------------------------- 1 | bad = 1_.2 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/float-underscore-before-point.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 11) 2 | ENTRY@[0; 8) 3 | KEY@[0; 3) 4 | BARE_KEY@[0; 3) "bad" 5 | WHITESPACE@[3; 4) 6 | EQ@[4; 5) "=" 7 | WHITESPACE@[5; 6) 8 | VALUE@[6; 8) 9 | ERROR@[6; 8) 10 | BARE_KEY@[6; 8) "1_" 11 | ERROR@[8; 9) 12 | DOT@[8; 9) "." 13 | ENTRY@[9; 11) 14 | KEY@[9; 10) 15 | BARE_KEY@[9; 10) "2" 16 | WHITESPACE@[10; 11) 17 | VALUE@[11; 11) 18 | 19 | error@[6; 8) "1_": expected a value 20 | error@[8; 9) ".": expected a key 21 | error@[10; 11) "\n": expected `=` 22 | error@[10; 11) "\n": expected a value 23 | error@[9; 11) "2\n": newlines are forbidden in entries 24 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/float-underscore-before.toml: -------------------------------------------------------------------------------- 1 | bad = _1.2 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/float-underscore-before.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 11) 2 | ENTRY@[0; 8) 3 | KEY@[0; 3) 4 | BARE_KEY@[0; 3) "bad" 5 | WHITESPACE@[3; 4) 6 | EQ@[4; 5) "=" 7 | WHITESPACE@[5; 6) 8 | VALUE@[6; 8) 9 | ERROR@[6; 8) 10 | BARE_KEY@[6; 8) "_1" 11 | ERROR@[8; 9) 12 | DOT@[8; 9) "." 13 | ENTRY@[9; 11) 14 | KEY@[9; 10) 15 | BARE_KEY@[9; 10) "2" 16 | WHITESPACE@[10; 11) 17 | VALUE@[11; 11) 18 | 19 | error@[6; 8) "_1": expected a value 20 | error@[8; 9) ".": expected a key 21 | error@[10; 11) "\n": expected `=` 22 | error@[10; 11) "\n": expected a value 23 | error@[9; 11) "2\n": newlines are forbidden in entries 24 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/ignored/empty-table.toml: -------------------------------------------------------------------------------- 1 | [] 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/ignored/integer-leading-zero.toml: -------------------------------------------------------------------------------- 1 | leading-zero = 012 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/ignored/key-no-eol.toml: -------------------------------------------------------------------------------- 1 | a = 1 b = 2 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/ignored/llbrace.toml: -------------------------------------------------------------------------------- 1 | [ [table]] 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/ignored/rrbrace.toml: -------------------------------------------------------------------------------- 1 | [[table] ] 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/ignored/string-bad-byte-escape.toml: -------------------------------------------------------------------------------- 1 | naughty = "\xAg" 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/ignored/string-bad-escape.toml: -------------------------------------------------------------------------------- 1 | invalid-escape = "This string has a bad \a escape character." 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/ignored/string-bad-uni-esc.toml: -------------------------------------------------------------------------------- 1 | str = "val\ue" 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/ignored/string-byte-escapes.toml: -------------------------------------------------------------------------------- 1 | answer = "\x33" 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/ignored/table-array-malformed-empty.toml: -------------------------------------------------------------------------------- 1 | [[]] 2 | name = "Born to Run" 3 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/ignored/table-empty.toml: -------------------------------------------------------------------------------- 1 | [] 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/inline-table-linebreak.json: -------------------------------------------------------------------------------- 1 | { 2 | "simple": { 3 | "a": { 4 | "type": "integer", 5 | "value": "1" 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/inline-table-linebreak.toml: -------------------------------------------------------------------------------- 1 | simple = { a = 1 2 | } 3 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/inline-table-linebreak.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 20) 2 | ENTRY@[0; 19) 3 | KEY@[0; 6) 4 | BARE_KEY@[0; 6) "simple" 5 | WHITESPACE@[6; 7) 6 | EQ@[7; 8) "=" 7 | WHITESPACE@[8; 9) 8 | VALUE@[9; 19) 9 | DICT@[9; 19) 10 | L_CURLY@[9; 10) "{" 11 | WHITESPACE@[10; 11) 12 | ENTRY@[11; 16) 13 | KEY@[11; 12) 14 | BARE_KEY@[11; 12) "a" 15 | WHITESPACE@[12; 13) 16 | EQ@[13; 14) "=" 17 | WHITESPACE@[14; 15) 18 | VALUE@[15; 16) 19 | NUMBER@[15; 16) "1" 20 | WHITESPACE@[16; 18) 21 | R_CURLY@[18; 19) "}" 22 | WHITESPACE@[19; 20) 23 | 24 | error@[9; 18) "{ a = 1 \n": newlines are forbidden in inline tables 25 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/integer-leading-zero-neg.toml: -------------------------------------------------------------------------------- 1 | leading-zero = -012 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/integer-leading-zero-neg.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 20) 2 | ENTRY@[0; 19) 3 | KEY@[0; 12) 4 | BARE_KEY@[0; 12) "leading-zero" 5 | WHITESPACE@[12; 13) 6 | EQ@[13; 14) "=" 7 | WHITESPACE@[14; 15) 8 | VALUE@[15; 19) 9 | ERROR@[15; 19) 10 | BARE_KEY@[15; 19) "-012" 11 | WHITESPACE@[19; 20) 12 | 13 | error@[15; 19) "-012": expected a value 14 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/integer-leading-zero-pos.toml: -------------------------------------------------------------------------------- 1 | leading-zero = +012 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/integer-leading-zero-pos.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 20) 2 | ENTRY@[0; 17) 3 | KEY@[0; 12) 4 | BARE_KEY@[0; 12) "leading-zero" 5 | WHITESPACE@[12; 13) 6 | EQ@[13; 14) "=" 7 | WHITESPACE@[14; 15) 8 | VALUE@[15; 17) 9 | NUMBER@[15; 17) "+0" 10 | ENTRY@[17; 20) 11 | KEY@[17; 19) 12 | BARE_KEY@[17; 19) "12" 13 | WHITESPACE@[19; 20) 14 | VALUE@[20; 20) 15 | 16 | error@[19; 20) "\n": expected `=` 17 | error@[19; 20) "\n": expected a value 18 | error@[17; 20) "12\n": newlines are forbidden in entries 19 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/integer-underscore-after.toml: -------------------------------------------------------------------------------- 1 | bad = 123_ 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/integer-underscore-after.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 11) 2 | ENTRY@[0; 10) 3 | KEY@[0; 3) 4 | BARE_KEY@[0; 3) "bad" 5 | WHITESPACE@[3; 4) 6 | EQ@[4; 5) "=" 7 | WHITESPACE@[5; 6) 8 | VALUE@[6; 10) 9 | ERROR@[6; 10) 10 | BARE_KEY@[6; 10) "123_" 11 | WHITESPACE@[10; 11) 12 | 13 | error@[6; 10) "123_": expected a value 14 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/integer-underscore-before.toml: -------------------------------------------------------------------------------- 1 | bad = _123 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/integer-underscore-before.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 11) 2 | ENTRY@[0; 10) 3 | KEY@[0; 3) 4 | BARE_KEY@[0; 3) "bad" 5 | WHITESPACE@[3; 4) 6 | EQ@[4; 5) "=" 7 | WHITESPACE@[5; 6) 8 | VALUE@[6; 10) 9 | ERROR@[6; 10) 10 | BARE_KEY@[6; 10) "_123" 11 | WHITESPACE@[10; 11) 12 | 13 | error@[6; 10) "_123": expected a value 14 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/integer-underscore-double.toml: -------------------------------------------------------------------------------- 1 | bad = 1__23 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/integer-underscore-double.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 12) 2 | ENTRY@[0; 11) 3 | KEY@[0; 3) 4 | BARE_KEY@[0; 3) "bad" 5 | WHITESPACE@[3; 4) 6 | EQ@[4; 5) "=" 7 | WHITESPACE@[5; 6) 8 | VALUE@[6; 11) 9 | ERROR@[6; 11) 10 | BARE_KEY@[6; 11) "1__23" 11 | WHITESPACE@[11; 12) 12 | 13 | error@[6; 11) "1__23": expected a value 14 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/key-after-array.json: -------------------------------------------------------------------------------- 1 | { 2 | "agencies": { 3 | "type": "array", 4 | "value": [ 5 | { 6 | "owner": { 7 | "type": "string", 8 | "value": "S Cjelli" 9 | } 10 | } 11 | ] 12 | } 13 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/key-after-array.toml: -------------------------------------------------------------------------------- 1 | [[agencies]] owner = "S Cjelli" 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/key-after-array.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 32) 2 | ARRAY_TABLE@[0; 31) 3 | TABLE_HEADER@[0; 12) 4 | L_BRACK@[0; 1) "[" 5 | L_BRACK@[1; 2) "[" 6 | KEY@[2; 10) 7 | BARE_KEY@[2; 10) "agencies" 8 | R_BRACK@[10; 11) "]" 9 | R_BRACK@[11; 12) "]" 10 | WHITESPACE@[12; 13) 11 | ENTRY@[13; 31) 12 | KEY@[13; 18) 13 | BARE_KEY@[13; 18) "owner" 14 | WHITESPACE@[18; 19) 15 | EQ@[19; 20) "=" 16 | WHITESPACE@[20; 21) 17 | VALUE@[21; 31) 18 | BASIC_STRING@[21; 31) "\"S Cjelli\"" 19 | WHITESPACE@[31; 32) 20 | 21 | error@[0; 13) "[[agencies]] ": newline is mandatory after table header 22 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/key-after-table.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "this": { 4 | "type": "string", 5 | "value": "should not be here" 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/key-after-table.toml: -------------------------------------------------------------------------------- 1 | [error] this = "should not be here" 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/key-after-table.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 36) 2 | TABLE@[0; 35) 3 | TABLE_HEADER@[0; 7) 4 | L_BRACK@[0; 1) "[" 5 | KEY@[1; 6) 6 | BARE_KEY@[1; 6) "error" 7 | R_BRACK@[6; 7) "]" 8 | WHITESPACE@[7; 8) 9 | ENTRY@[8; 35) 10 | KEY@[8; 12) 11 | BARE_KEY@[8; 12) "this" 12 | WHITESPACE@[12; 13) 13 | EQ@[13; 14) "=" 14 | WHITESPACE@[14; 15) 15 | VALUE@[15; 35) 16 | BASIC_STRING@[15; 35) "\"should not be here\"" 17 | WHITESPACE@[35; 36) 18 | 19 | error@[0; 8) "[error] ": newline is mandatory after table header 20 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/key-empty.toml: -------------------------------------------------------------------------------- 1 | = 1 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/key-empty.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 5) 2 | WHITESPACE@[0; 1) 3 | ERROR@[1; 2) 4 | EQ@[1; 2) "=" 5 | WHITESPACE@[2; 3) 6 | ENTRY@[3; 5) 7 | KEY@[3; 4) 8 | BARE_KEY@[3; 4) "1" 9 | WHITESPACE@[4; 5) 10 | VALUE@[5; 5) 11 | 12 | error@[1; 2) "=": expected a key 13 | error@[4; 5) "\n": expected `=` 14 | error@[4; 5) "\n": expected a value 15 | error@[3; 5) "1\n": newlines are forbidden in entries 16 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/key-hash.toml: -------------------------------------------------------------------------------- 1 | a# = 1 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/key-hash.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 7) 2 | ENTRY@[0; 7) 3 | KEY@[0; 1) 4 | BARE_KEY@[0; 1) "a" 5 | COMMENT@[1; 6) "# = 1" 6 | WHITESPACE@[6; 7) 7 | VALUE@[7; 7) 8 | 9 | error@[6; 7) "\n": expected `=` 10 | error@[6; 7) "\n": expected a value 11 | error@[0; 7) "a# = 1\n": newlines are forbidden in entries 12 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/key-newline.json: -------------------------------------------------------------------------------- 1 | { 2 | "a": { 3 | "type": "integer", 4 | "value": "1" 5 | } 6 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/key-newline.toml: -------------------------------------------------------------------------------- 1 | a 2 | = 1 3 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/key-newline.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 6) 2 | ENTRY@[0; 5) 3 | KEY@[0; 1) 4 | BARE_KEY@[0; 1) "a" 5 | WHITESPACE@[1; 2) 6 | EQ@[2; 3) "=" 7 | WHITESPACE@[3; 4) 8 | VALUE@[4; 5) 9 | NUMBER@[4; 5) "1" 10 | WHITESPACE@[5; 6) 11 | 12 | error@[0; 4) "a\n= ": newlines are forbidden in entries 13 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/key-open-bracket.toml: -------------------------------------------------------------------------------- 1 | [abc = 1 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/key-open-bracket.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 9) 2 | TABLE@[0; 9) 3 | TABLE_HEADER@[0; 6) 4 | L_BRACK@[0; 1) "[" 5 | KEY@[1; 4) 6 | BARE_KEY@[1; 4) "abc" 7 | WHITESPACE@[4; 5) 8 | ERROR@[5; 6) 9 | EQ@[5; 6) "=" 10 | WHITESPACE@[6; 7) 11 | ENTRY@[7; 9) 12 | KEY@[7; 8) 13 | BARE_KEY@[7; 8) "1" 14 | WHITESPACE@[8; 9) 15 | VALUE@[9; 9) 16 | 17 | error@[5; 6) "=": expected `]` 18 | error@[8; 9) "\n": expected `=` 19 | error@[8; 9) "\n": expected a value 20 | error@[0; 7) "[abc = ": newline is mandatory after table header 21 | error@[7; 9) "1\n": newlines are forbidden in entries 22 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/key-single-open-bracket.json: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/key-single-open-bracket.toml: -------------------------------------------------------------------------------- 1 | [ -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/key-single-open-bracket.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 1) 2 | TABLE@[0; 1) 3 | TABLE_HEADER@[0; 1) 4 | L_BRACK@[0; 1) "[" 5 | 6 | error@[0; 1) "[": expected `]` 7 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/key-space.toml: -------------------------------------------------------------------------------- 1 | a b = 1 -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/key-space.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 7) 2 | ENTRY@[0; 7) 3 | KEY@[0; 1) 4 | BARE_KEY@[0; 1) "a" 5 | WHITESPACE@[1; 2) 6 | ERROR@[2; 3) 7 | BARE_KEY@[2; 3) "b" 8 | WHITESPACE@[3; 4) 9 | KEY@[4; 5) 10 | ERROR@[4; 5) 11 | EQ@[4; 5) "=" 12 | WHITESPACE@[5; 6) 13 | ERROR@[6; 7) 14 | BARE_KEY_OR_NUMBER@[6; 7) "1" 15 | KEY@[7; 7) 16 | VALUE@[7; 7) 17 | 18 | error@[2; 3) "b": expected `.` 19 | error@[4; 5) "=": expected a key 20 | error@[6; 7) "1": expected `.` 21 | error@[6; 7) "1": expected a key 22 | error@[6; 7) "1": expected `=` 23 | error@[6; 7) "1": expected a value 24 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/key-start-bracket.toml: -------------------------------------------------------------------------------- 1 | [a] 2 | [xyz = 5 3 | [b] 4 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/key-start-bracket.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 17) 2 | TABLE@[0; 3) 3 | TABLE_HEADER@[0; 3) 4 | L_BRACK@[0; 1) "[" 5 | KEY@[1; 2) 6 | BARE_KEY@[1; 2) "a" 7 | R_BRACK@[2; 3) "]" 8 | WHITESPACE@[3; 4) 9 | TABLE@[4; 17) 10 | TABLE_HEADER@[4; 10) 11 | L_BRACK@[4; 5) "[" 12 | KEY@[5; 8) 13 | BARE_KEY@[5; 8) "xyz" 14 | WHITESPACE@[8; 9) 15 | ERROR@[9; 10) 16 | EQ@[9; 10) "=" 17 | WHITESPACE@[10; 11) 18 | ENTRY@[11; 17) 19 | KEY@[11; 12) 20 | BARE_KEY@[11; 12) "5" 21 | WHITESPACE@[12; 13) 22 | ERROR@[13; 14) 23 | L_BRACK@[13; 14) "[" 24 | KEY@[14; 15) 25 | BARE_KEY@[14; 15) "b" 26 | ERROR@[15; 16) 27 | R_BRACK@[15; 16) "]" 28 | WHITESPACE@[16; 17) 29 | VALUE@[17; 17) 30 | 31 | error@[9; 10) "=": expected `]` 32 | error@[13; 14) "[": expected `.` 33 | error@[15; 16) "]": expected `=` 34 | error@[16; 17) "\n": expected a value 35 | error@[4; 11) "[xyz = ": newline is mandatory after table header 36 | error@[11; 17) "5\n[b]\n": newlines are forbidden in entries 37 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/key-two-equals.toml: -------------------------------------------------------------------------------- 1 | key= = 1 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/key-two-equals.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 9) 2 | ENTRY@[0; 6) 3 | KEY@[0; 3) 4 | BARE_KEY@[0; 3) "key" 5 | EQ@[3; 4) "=" 6 | WHITESPACE@[4; 5) 7 | VALUE@[5; 6) 8 | ERROR@[5; 6) 9 | EQ@[5; 6) "=" 10 | WHITESPACE@[6; 7) 11 | ENTRY@[7; 9) 12 | KEY@[7; 8) 13 | BARE_KEY@[7; 8) "1" 14 | WHITESPACE@[8; 9) 15 | VALUE@[9; 9) 16 | 17 | error@[5; 6) "=": expected a value 18 | error@[8; 9) "\n": expected `=` 19 | error@[8; 9) "\n": expected a value 20 | error@[7; 9) "1\n": newlines are forbidden in entries 21 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/smiley.json: -------------------------------------------------------------------------------- 1 | { 2 | "-": { 3 | "foo": { 4 | "type": "integer", 5 | "value": "1" 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/smiley.toml: -------------------------------------------------------------------------------- 1 | :-) 2 | foo=1 3 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/smiley.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 10) 2 | ERROR@[0; 1) 3 | ERROR@[0; 1) ":" 4 | ENTRY@[1; 9) 5 | KEY@[1; 2) 6 | BARE_KEY@[1; 2) "-" 7 | ERROR@[2; 3) 8 | ERROR@[2; 3) ")" 9 | WHITESPACE@[3; 4) 10 | KEY@[4; 7) 11 | BARE_KEY@[4; 7) "foo" 12 | EQ@[7; 8) "=" 13 | VALUE@[8; 9) 14 | NUMBER@[8; 9) "1" 15 | WHITESPACE@[9; 10) 16 | 17 | error@[0; 1) ":": expected a key 18 | error@[2; 3) ")": expected `.` 19 | error@[1; 8) "-)\nfoo=": newlines are forbidden in entries 20 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/string-no-close.toml: -------------------------------------------------------------------------------- 1 | no-ending-quote = "One time, at band camp 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/string-no-close.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 42) 2 | ENTRY@[0; 19) 3 | KEY@[0; 15) 4 | BARE_KEY@[0; 15) "no-ending-quote" 5 | WHITESPACE@[15; 16) 6 | EQ@[16; 17) "=" 7 | WHITESPACE@[17; 18) 8 | VALUE@[18; 19) 9 | ERROR@[18; 19) 10 | ERROR@[18; 19) "\"" 11 | ENTRY@[19; 42) 12 | KEY@[19; 22) 13 | BARE_KEY@[19; 22) "One" 14 | WHITESPACE@[22; 23) 15 | ERROR@[23; 27) 16 | BARE_KEY@[23; 27) "time" 17 | KEY@[27; 28) 18 | ERROR@[27; 28) 19 | COMMA@[27; 28) "," 20 | WHITESPACE@[28; 29) 21 | ERROR@[29; 31) 22 | BARE_KEY@[29; 31) "at" 23 | WHITESPACE@[31; 32) 24 | KEY@[32; 36) 25 | BARE_KEY@[32; 36) "band" 26 | WHITESPACE@[36; 37) 27 | ERROR@[37; 41) 28 | BARE_KEY@[37; 41) "camp" 29 | WHITESPACE@[41; 42) 30 | KEY@[42; 42) 31 | VALUE@[42; 42) 32 | 33 | error@[18; 19) "\"": expected a value 34 | error@[23; 27) "time": expected `.` 35 | error@[27; 28) ",": expected a key 36 | error@[29; 31) "at": expected `.` 37 | error@[37; 41) "camp": expected `.` 38 | error@[41; 42) "\n": expected a key 39 | error@[41; 42) "\n": expected `=` 40 | error@[41; 42) "\n": expected a value 41 | error@[19; 42) "One time, at band camp\n": newlines are forbidden in entries 42 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/table-array-malformed-bracket.toml: -------------------------------------------------------------------------------- 1 | [[albums] 2 | name = "Born to Run" 3 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/table-array-malformed-bracket.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 31) 2 | ARRAY_TABLE@[0; 31) 3 | TABLE_HEADER@[0; 14) 4 | L_BRACK@[0; 1) "[" 5 | L_BRACK@[1; 2) "[" 6 | KEY@[2; 8) 7 | BARE_KEY@[2; 8) "albums" 8 | R_BRACK@[8; 9) "]" 9 | WHITESPACE@[9; 10) 10 | ERROR@[10; 14) 11 | BARE_KEY@[10; 14) "name" 12 | WHITESPACE@[14; 15) 13 | ERROR@[15; 16) 14 | EQ@[15; 16) "=" 15 | WHITESPACE@[16; 17) 16 | ENTRY@[17; 31) 17 | KEY@[17; 30) 18 | BASIC_STRING@[17; 30) "\"Born to Run\"" 19 | WHITESPACE@[30; 31) 20 | VALUE@[31; 31) 21 | 22 | error@[10; 14) "name": expected `]` 23 | error@[15; 16) "=": expected a key 24 | error@[30; 31) "\n": expected `=` 25 | error@[30; 31) "\n": expected a value 26 | error@[0; 10) "[[albums]\n": table header must fit into a single line 27 | error@[17; 31) "\"Born to Run\"\n": newlines are forbidden in entries 28 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/table-nested-brackets-close.toml: -------------------------------------------------------------------------------- 1 | [a]b] 2 | zyx = 42 3 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/table-nested-brackets-close.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 15) 2 | TABLE@[0; 15) 3 | TABLE_HEADER@[0; 3) 4 | L_BRACK@[0; 1) "[" 5 | KEY@[1; 2) 6 | BARE_KEY@[1; 2) "a" 7 | R_BRACK@[2; 3) "]" 8 | ENTRY@[3; 9) 9 | KEY@[3; 4) 10 | BARE_KEY@[3; 4) "b" 11 | ERROR@[4; 5) 12 | R_BRACK@[4; 5) "]" 13 | WHITESPACE@[5; 6) 14 | VALUE@[6; 9) 15 | ERROR@[6; 9) 16 | BARE_KEY@[6; 9) "zyx" 17 | WHITESPACE@[9; 10) 18 | ERROR@[10; 11) 19 | EQ@[10; 11) "=" 20 | WHITESPACE@[11; 12) 21 | ENTRY@[12; 15) 22 | KEY@[12; 14) 23 | BARE_KEY@[12; 14) "42" 24 | WHITESPACE@[14; 15) 25 | VALUE@[15; 15) 26 | 27 | error@[4; 5) "]": expected `=` 28 | error@[6; 9) "zyx": expected a value 29 | error@[10; 11) "=": expected a key 30 | error@[14; 15) "\n": expected `=` 31 | error@[14; 15) "\n": expected a value 32 | error@[0; 3) "[a]": newline is mandatory after table header 33 | error@[3; 6) "b]\n": newlines are forbidden in entries 34 | error@[12; 15) "42\n": newlines are forbidden in entries 35 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/table-nested-brackets-open.json: -------------------------------------------------------------------------------- 1 | { 2 | "a": { 3 | "b": { 4 | "zyx": { 5 | "type": "integer", 6 | "value": "42" 7 | } 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/table-nested-brackets-open.toml: -------------------------------------------------------------------------------- 1 | [a[b] 2 | zyx = 42 3 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/table-nested-brackets-open.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 15) 2 | TABLE@[0; 14) 3 | TABLE_HEADER@[0; 5) 4 | L_BRACK@[0; 1) "[" 5 | KEY@[1; 2) 6 | BARE_KEY@[1; 2) "a" 7 | ERROR@[2; 3) 8 | L_BRACK@[2; 3) "[" 9 | KEY@[3; 4) 10 | BARE_KEY@[3; 4) "b" 11 | R_BRACK@[4; 5) "]" 12 | WHITESPACE@[5; 6) 13 | ENTRY@[6; 14) 14 | KEY@[6; 9) 15 | BARE_KEY@[6; 9) "zyx" 16 | WHITESPACE@[9; 10) 17 | EQ@[10; 11) "=" 18 | WHITESPACE@[11; 12) 19 | VALUE@[12; 14) 20 | NUMBER@[12; 14) "42" 21 | WHITESPACE@[14; 15) 22 | 23 | error@[2; 3) "[": expected `.` 24 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/table-whitespace.toml: -------------------------------------------------------------------------------- 1 | [invalid key] -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/table-whitespace.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 13) 2 | TABLE@[0; 13) 3 | TABLE_HEADER@[0; 13) 4 | L_BRACK@[0; 1) "[" 5 | KEY@[1; 8) 6 | BARE_KEY@[1; 8) "invalid" 7 | WHITESPACE@[8; 9) 8 | ERROR@[9; 12) 9 | BARE_KEY@[9; 12) "key" 10 | KEY@[12; 13) 11 | ERROR@[12; 13) 12 | R_BRACK@[12; 13) "]" 13 | 14 | error@[9; 12) "key": expected `.` 15 | error@[12; 13) "]": expected a key 16 | error@[12; 13) "]": expected `]` 17 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/table-with-pound.toml: -------------------------------------------------------------------------------- 1 | [key#group] 2 | answer = 42 -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/table-with-pound.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 23) 2 | TABLE@[0; 23) 3 | TABLE_HEADER@[0; 23) 4 | L_BRACK@[0; 1) "[" 5 | KEY@[1; 4) 6 | BARE_KEY@[1; 4) "key" 7 | COMMENT@[4; 11) "#group]" 8 | WHITESPACE@[11; 12) 9 | ERROR@[12; 18) 10 | BARE_KEY@[12; 18) "answer" 11 | WHITESPACE@[18; 19) 12 | KEY@[19; 20) 13 | ERROR@[19; 20) 14 | EQ@[19; 20) "=" 15 | WHITESPACE@[20; 21) 16 | ERROR@[21; 23) 17 | BARE_KEY_OR_NUMBER@[21; 23) "42" 18 | KEY@[23; 23) 19 | 20 | error@[12; 18) "answer": expected `.` 21 | error@[19; 20) "=": expected a key 22 | error@[21; 23) "42": expected `.` 23 | error@[21; 23) "42": expected a key 24 | error@[21; 23) "42": expected `]` 25 | error@[0; 23) "[key#group]\nanswer = 42": table header must fit into a single line 26 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/text-after-array-entries.toml: -------------------------------------------------------------------------------- 1 | array = [ 2 | "Is there life after an array separator?", No 3 | "Entry" 4 | ] 5 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/text-after-array-entries.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 70) 2 | ENTRY@[0; 69) 3 | KEY@[0; 5) 4 | BARE_KEY@[0; 5) "array" 5 | WHITESPACE@[5; 6) 6 | EQ@[6; 7) "=" 7 | WHITESPACE@[7; 8) 8 | VALUE@[8; 69) 9 | ARRAY@[8; 69) 10 | L_BRACK@[8; 9) "[" 11 | WHITESPACE@[9; 12) 12 | VALUE@[12; 53) 13 | BASIC_STRING@[12; 53) "\"Is there life after an array separator?\"" 14 | COMMA@[53; 54) "," 15 | WHITESPACE@[54; 55) 16 | VALUE@[55; 57) 17 | ERROR@[55; 57) 18 | BARE_KEY@[55; 57) "No" 19 | WHITESPACE@[57; 60) 20 | ERROR@[60; 67) 21 | BASIC_STRING@[60; 67) "\"Entry\"" 22 | WHITESPACE@[67; 68) 23 | R_BRACK@[68; 69) "]" 24 | WHITESPACE@[69; 70) 25 | 26 | error@[55; 57) "No": expected a value 27 | error@[60; 67) "\"Entry\"": expected `,` 28 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/text-after-integer.toml: -------------------------------------------------------------------------------- 1 | answer = 42 the ultimate answer? 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/text-after-integer.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 33) 2 | ENTRY@[0; 11) 3 | KEY@[0; 6) 4 | BARE_KEY@[0; 6) "answer" 5 | WHITESPACE@[6; 7) 6 | EQ@[7; 8) "=" 7 | WHITESPACE@[8; 9) 8 | VALUE@[9; 11) 9 | NUMBER@[9; 11) "42" 10 | WHITESPACE@[11; 12) 11 | ENTRY@[12; 33) 12 | KEY@[12; 15) 13 | BARE_KEY@[12; 15) "the" 14 | WHITESPACE@[15; 16) 15 | ERROR@[16; 24) 16 | BARE_KEY@[16; 24) "ultimate" 17 | WHITESPACE@[24; 25) 18 | KEY@[25; 31) 19 | BARE_KEY@[25; 31) "answer" 20 | ERROR@[31; 32) 21 | ERROR@[31; 32) "?" 22 | WHITESPACE@[32; 33) 23 | KEY@[33; 33) 24 | VALUE@[33; 33) 25 | 26 | error@[16; 24) "ultimate": expected `.` 27 | error@[31; 32) "?": expected `.` 28 | error@[32; 33) "\n": expected a key 29 | error@[32; 33) "\n": expected `=` 30 | error@[32; 33) "\n": expected a value 31 | error@[12; 33) "the ultimate answer?\n": newlines are forbidden in entries 32 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/text-after-string.toml: -------------------------------------------------------------------------------- 1 | string = "Is there life after strings?" No. 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/text-after-string.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 44) 2 | ENTRY@[0; 39) 3 | KEY@[0; 6) 4 | BARE_KEY@[0; 6) "string" 5 | WHITESPACE@[6; 7) 6 | EQ@[7; 8) "=" 7 | WHITESPACE@[8; 9) 8 | VALUE@[9; 39) 9 | BASIC_STRING@[9; 39) "\"Is there life after strings?\"" 10 | WHITESPACE@[39; 40) 11 | ENTRY@[40; 44) 12 | KEY@[40; 42) 13 | BARE_KEY@[40; 42) "No" 14 | DOT@[42; 43) "." 15 | WHITESPACE@[43; 44) 16 | KEY@[44; 44) 17 | VALUE@[44; 44) 18 | 19 | error@[43; 44) "\n": expected a key 20 | error@[43; 44) "\n": expected `=` 21 | error@[43; 44) "\n": expected a value 22 | error@[40; 44) "No.\n": newlines are forbidden in entries 23 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/text-after-table.toml: -------------------------------------------------------------------------------- 1 | [error] this shouldn't be here 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/text-after-table.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 31) 2 | TABLE@[0; 31) 3 | TABLE_HEADER@[0; 7) 4 | L_BRACK@[0; 1) "[" 5 | KEY@[1; 6) 6 | BARE_KEY@[1; 6) "error" 7 | R_BRACK@[6; 7) "]" 8 | WHITESPACE@[7; 8) 9 | ENTRY@[8; 31) 10 | KEY@[8; 12) 11 | BARE_KEY@[8; 12) "this" 12 | WHITESPACE@[12; 13) 13 | ERROR@[13; 20) 14 | BARE_KEY@[13; 20) "shouldn" 15 | KEY@[20; 21) 16 | ERROR@[20; 21) 17 | ERROR@[20; 21) "\'" 18 | ERROR@[21; 22) 19 | BARE_KEY@[21; 22) "t" 20 | WHITESPACE@[22; 23) 21 | KEY@[23; 25) 22 | BARE_KEY@[23; 25) "be" 23 | WHITESPACE@[25; 26) 24 | ERROR@[26; 30) 25 | BARE_KEY@[26; 30) "here" 26 | WHITESPACE@[30; 31) 27 | KEY@[31; 31) 28 | VALUE@[31; 31) 29 | 30 | error@[13; 20) "shouldn": expected `.` 31 | error@[20; 21) "\'": expected a key 32 | error@[21; 22) "t": expected `.` 33 | error@[26; 30) "here": expected `.` 34 | error@[30; 31) "\n": expected a key 35 | error@[30; 31) "\n": expected `=` 36 | error@[30; 31) "\n": expected a value 37 | error@[0; 8) "[error] ": newline is mandatory after table header 38 | error@[8; 31) "this shouldn\'t be here\n": newlines are forbidden in entries 39 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/text-before-array-separator.toml: -------------------------------------------------------------------------------- 1 | array = [ 2 | "Is there life before an array separator?" No, 3 | "Entry" 4 | ] 5 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/text-before-array-separator.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 71) 2 | ENTRY@[0; 70) 3 | KEY@[0; 5) 4 | BARE_KEY@[0; 5) "array" 5 | WHITESPACE@[5; 6) 6 | EQ@[6; 7) "=" 7 | WHITESPACE@[7; 8) 8 | VALUE@[8; 70) 9 | ARRAY@[8; 70) 10 | L_BRACK@[8; 9) "[" 11 | WHITESPACE@[9; 12) 12 | VALUE@[12; 54) 13 | BASIC_STRING@[12; 54) "\"Is there life before an array separator?\"" 14 | WHITESPACE@[54; 55) 15 | ERROR@[55; 57) 16 | BARE_KEY@[55; 57) "No" 17 | VALUE@[57; 58) 18 | ERROR@[57; 58) 19 | COMMA@[57; 58) "," 20 | WHITESPACE@[58; 61) 21 | ERROR@[61; 68) 22 | BASIC_STRING@[61; 68) "\"Entry\"" 23 | WHITESPACE@[68; 69) 24 | R_BRACK@[69; 70) "]" 25 | WHITESPACE@[70; 71) 26 | 27 | error@[55; 57) "No": expected `,` 28 | error@[57; 58) ",": expected a value 29 | error@[61; 68) "\"Entry\"": expected `,` 30 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/text-in-array.toml: -------------------------------------------------------------------------------- 1 | array = [ 2 | "Entry 1", 3 | I don't belong, 4 | "Entry 2", 5 | ] 6 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/err/text-in-array.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 56) 2 | ENTRY@[0; 55) 3 | KEY@[0; 5) 4 | BARE_KEY@[0; 5) "array" 5 | WHITESPACE@[5; 6) 6 | EQ@[6; 7) "=" 7 | WHITESPACE@[7; 8) 8 | VALUE@[8; 55) 9 | ARRAY@[8; 55) 10 | L_BRACK@[8; 9) "[" 11 | WHITESPACE@[9; 12) 12 | VALUE@[12; 21) 13 | BASIC_STRING@[12; 21) "\"Entry 1\"" 14 | COMMA@[21; 22) "," 15 | WHITESPACE@[22; 25) 16 | VALUE@[25; 26) 17 | ERROR@[25; 26) 18 | BARE_KEY@[25; 26) "I" 19 | WHITESPACE@[26; 27) 20 | ERROR@[27; 30) 21 | BARE_KEY@[27; 30) "don" 22 | VALUE@[30; 31) 23 | ERROR@[30; 31) 24 | ERROR@[30; 31) "\'" 25 | ERROR@[31; 32) 26 | BARE_KEY@[31; 32) "t" 27 | WHITESPACE@[32; 33) 28 | VALUE@[33; 39) 29 | ERROR@[33; 39) 30 | BARE_KEY@[33; 39) "belong" 31 | COMMA@[39; 40) "," 32 | WHITESPACE@[40; 43) 33 | VALUE@[43; 52) 34 | BASIC_STRING@[43; 52) "\"Entry 2\"" 35 | COMMA@[52; 53) "," 36 | WHITESPACE@[53; 54) 37 | R_BRACK@[54; 55) "]" 38 | WHITESPACE@[55; 56) 39 | 40 | error@[25; 26) "I": expected a value 41 | error@[27; 30) "don": expected `,` 42 | error@[30; 31) "\'": expected a value 43 | error@[31; 32) "t": expected `,` 44 | error@[33; 39) "belong": expected a value 45 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-array-table.json: -------------------------------------------------------------------------------- 1 | { 2 | "array-table": { 3 | "type": "array", 4 | "value": [ 5 | { 6 | "a": { 7 | "type": "integer", 8 | "value": "1" 9 | }, 10 | "b": { 11 | "type": "integer", 12 | "value": "2" 13 | } 14 | } 15 | ] 16 | } 17 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-array-table.toml: -------------------------------------------------------------------------------- 1 | [[array-table]] 2 | a = 1 3 | b = 2 4 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-array-table.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 28) 2 | ARRAY_TABLE@[0; 27) 3 | TABLE_HEADER@[0; 15) 4 | L_BRACK@[0; 1) "[" 5 | L_BRACK@[1; 2) "[" 6 | KEY@[2; 13) 7 | BARE_KEY@[2; 13) "array-table" 8 | R_BRACK@[13; 14) "]" 9 | R_BRACK@[14; 15) "]" 10 | WHITESPACE@[15; 16) 11 | ENTRY@[16; 21) 12 | KEY@[16; 17) 13 | BARE_KEY@[16; 17) "a" 14 | WHITESPACE@[17; 18) 15 | EQ@[18; 19) "=" 16 | WHITESPACE@[19; 20) 17 | VALUE@[20; 21) 18 | NUMBER@[20; 21) "1" 19 | WHITESPACE@[21; 22) 20 | ENTRY@[22; 27) 21 | KEY@[22; 23) 22 | BARE_KEY@[22; 23) "b" 23 | WHITESPACE@[23; 24) 24 | EQ@[24; 25) "=" 25 | WHITESPACE@[25; 26) 26 | VALUE@[26; 27) 27 | NUMBER@[26; 27) "2" 28 | WHITESPACE@[27; 28) 29 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-array.json: -------------------------------------------------------------------------------- 1 | { 2 | "a": { 3 | "type": "array", 4 | "value": [] 5 | }, 6 | "b": { 7 | "type": "array", 8 | "value": [ 9 | { 10 | "type": "integer", 11 | "value": "1" 12 | } 13 | ] 14 | }, 15 | "c": { 16 | "type": "array", 17 | "value": [ 18 | { 19 | "type": "integer", 20 | "value": "1" 21 | } 22 | ] 23 | }, 24 | "d": { 25 | "type": "array", 26 | "value": [] 27 | }, 28 | "e": { 29 | "type": "array", 30 | "value": [ 31 | { 32 | "type": "integer", 33 | "value": "1" 34 | } 35 | ] 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-array.toml: -------------------------------------------------------------------------------- 1 | a = [] 2 | b = [1] 3 | c = [1,] 4 | d = [,] 5 | e = [1 1] 6 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-array.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 42) 2 | ENTRY@[0; 6) 3 | KEY@[0; 1) 4 | BARE_KEY@[0; 1) "a" 5 | WHITESPACE@[1; 2) 6 | EQ@[2; 3) "=" 7 | WHITESPACE@[3; 4) 8 | VALUE@[4; 6) 9 | ARRAY@[4; 6) 10 | L_BRACK@[4; 5) "[" 11 | R_BRACK@[5; 6) "]" 12 | WHITESPACE@[6; 7) 13 | ENTRY@[7; 14) 14 | KEY@[7; 8) 15 | BARE_KEY@[7; 8) "b" 16 | WHITESPACE@[8; 9) 17 | EQ@[9; 10) "=" 18 | WHITESPACE@[10; 11) 19 | VALUE@[11; 14) 20 | ARRAY@[11; 14) 21 | L_BRACK@[11; 12) "[" 22 | VALUE@[12; 13) 23 | NUMBER@[12; 13) "1" 24 | R_BRACK@[13; 14) "]" 25 | WHITESPACE@[14; 15) 26 | ENTRY@[15; 23) 27 | KEY@[15; 16) 28 | BARE_KEY@[15; 16) "c" 29 | WHITESPACE@[16; 17) 30 | EQ@[17; 18) "=" 31 | WHITESPACE@[18; 19) 32 | VALUE@[19; 23) 33 | ARRAY@[19; 23) 34 | L_BRACK@[19; 20) "[" 35 | VALUE@[20; 21) 36 | NUMBER@[20; 21) "1" 37 | COMMA@[21; 22) "," 38 | R_BRACK@[22; 23) "]" 39 | WHITESPACE@[23; 24) 40 | ENTRY@[24; 31) 41 | KEY@[24; 25) 42 | BARE_KEY@[24; 25) "d" 43 | WHITESPACE@[25; 26) 44 | EQ@[26; 27) "=" 45 | WHITESPACE@[27; 28) 46 | VALUE@[28; 31) 47 | ARRAY@[28; 31) 48 | L_BRACK@[28; 29) "[" 49 | VALUE@[29; 30) 50 | ERROR@[29; 30) 51 | COMMA@[29; 30) "," 52 | R_BRACK@[30; 31) "]" 53 | WHITESPACE@[31; 32) 54 | ENTRY@[32; 41) 55 | KEY@[32; 33) 56 | BARE_KEY@[32; 33) "e" 57 | WHITESPACE@[33; 34) 58 | EQ@[34; 35) "=" 59 | WHITESPACE@[35; 36) 60 | VALUE@[36; 41) 61 | ARRAY@[36; 41) 62 | L_BRACK@[36; 37) "[" 63 | VALUE@[37; 38) 64 | NUMBER@[37; 38) "1" 65 | WHITESPACE@[38; 39) 66 | ERROR@[39; 40) 67 | BARE_KEY_OR_NUMBER@[39; 40) "1" 68 | R_BRACK@[40; 41) "]" 69 | WHITESPACE@[41; 42) 70 | 71 | error@[29; 30) ",": expected a value 72 | error@[39; 40) "1": expected `,` 73 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-doc.json: -------------------------------------------------------------------------------- 1 | { 2 | "array-table": { 3 | "type": "array", 4 | "value": [ 5 | { 6 | "b": { 7 | "type": "integer", 8 | "value": "3" 9 | } 10 | } 11 | ] 12 | }, 13 | "key": { 14 | "type": "string", 15 | "value": "value" 16 | }, 17 | "table": { 18 | "a": { 19 | "type": "integer", 20 | "value": "2" 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-doc.toml: -------------------------------------------------------------------------------- 1 | key = "value" 2 | 3 | [table] 4 | a = 2 5 | 6 | [[array-table]] 7 | b = 3 8 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-doc.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 52) 2 | ENTRY@[0; 13) 3 | KEY@[0; 3) 4 | BARE_KEY@[0; 3) "key" 5 | WHITESPACE@[3; 4) 6 | EQ@[4; 5) "=" 7 | WHITESPACE@[5; 6) 8 | VALUE@[6; 13) 9 | BASIC_STRING@[6; 13) "\"value\"" 10 | WHITESPACE@[13; 15) 11 | TABLE@[15; 28) 12 | TABLE_HEADER@[15; 22) 13 | L_BRACK@[15; 16) "[" 14 | KEY@[16; 21) 15 | BARE_KEY@[16; 21) "table" 16 | R_BRACK@[21; 22) "]" 17 | WHITESPACE@[22; 23) 18 | ENTRY@[23; 28) 19 | KEY@[23; 24) 20 | BARE_KEY@[23; 24) "a" 21 | WHITESPACE@[24; 25) 22 | EQ@[25; 26) "=" 23 | WHITESPACE@[26; 27) 24 | VALUE@[27; 28) 25 | NUMBER@[27; 28) "2" 26 | WHITESPACE@[28; 30) 27 | ARRAY_TABLE@[30; 51) 28 | TABLE_HEADER@[30; 45) 29 | L_BRACK@[30; 31) "[" 30 | L_BRACK@[31; 32) "[" 31 | KEY@[32; 43) 32 | BARE_KEY@[32; 43) "array-table" 33 | R_BRACK@[43; 44) "]" 34 | R_BRACK@[44; 45) "]" 35 | WHITESPACE@[45; 46) 36 | ENTRY@[46; 51) 37 | KEY@[46; 47) 38 | BARE_KEY@[46; 47) "b" 39 | WHITESPACE@[47; 48) 40 | EQ@[48; 49) "=" 41 | WHITESPACE@[49; 50) 42 | VALUE@[50; 51) 43 | NUMBER@[50; 51) "3" 44 | WHITESPACE@[51; 52) 45 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-entries.json: -------------------------------------------------------------------------------- 1 | { 2 | "bar": { 3 | "type": "integer", 4 | "value": "14" 5 | }, 6 | "foo": { 7 | "type": "integer", 8 | "value": "92" 9 | } 10 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-entries.toml: -------------------------------------------------------------------------------- 1 | foo = 92 2 | 'bar' = 14 3 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-entries.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 20) 2 | ENTRY@[0; 8) 3 | KEY@[0; 3) 4 | BARE_KEY@[0; 3) "foo" 5 | WHITESPACE@[3; 4) 6 | EQ@[4; 5) "=" 7 | WHITESPACE@[5; 6) 8 | VALUE@[6; 8) 9 | NUMBER@[6; 8) "92" 10 | WHITESPACE@[8; 9) 11 | ENTRY@[9; 19) 12 | KEY@[9; 14) 13 | LITERAL_STRING@[9; 14) "\'bar\'" 14 | WHITESPACE@[14; 15) 15 | EQ@[15; 16) "=" 16 | WHITESPACE@[16; 17) 17 | VALUE@[17; 19) 18 | NUMBER@[17; 19) "14" 19 | WHITESPACE@[19; 20) 20 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-inline-key.json: -------------------------------------------------------------------------------- 1 | { 2 | "a": { 3 | "dotted": { 4 | "key": { 5 | "type": "integer", 6 | "value": "92" 7 | } 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-inline-key.toml: -------------------------------------------------------------------------------- 1 | a = { dotted.key = 92 } 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-inline-key.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 24) 2 | ENTRY@[0; 23) 3 | KEY@[0; 1) 4 | BARE_KEY@[0; 1) "a" 5 | WHITESPACE@[1; 2) 6 | EQ@[2; 3) "=" 7 | WHITESPACE@[3; 4) 8 | VALUE@[4; 23) 9 | DICT@[4; 23) 10 | L_CURLY@[4; 5) "{" 11 | WHITESPACE@[5; 6) 12 | ENTRY@[6; 21) 13 | KEY@[6; 12) 14 | BARE_KEY@[6; 12) "dotted" 15 | DOT@[12; 13) "." 16 | KEY@[13; 16) 17 | BARE_KEY@[13; 16) "key" 18 | WHITESPACE@[16; 17) 19 | EQ@[17; 18) "=" 20 | WHITESPACE@[18; 19) 21 | VALUE@[19; 21) 22 | NUMBER@[19; 21) "92" 23 | WHITESPACE@[21; 22) 24 | R_CURLY@[22; 23) "}" 25 | WHITESPACE@[23; 24) 26 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-inline.json: -------------------------------------------------------------------------------- 1 | { 2 | "a": {}, 3 | "b": { 4 | "foo": { 5 | "type": "integer", 6 | "value": 1 7 | } 8 | }, 9 | "c": { 10 | "foo": { 11 | "type": "integer", 12 | "value": 1 13 | } 14 | }, 15 | "d": {} 16 | } 17 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-inline.toml: -------------------------------------------------------------------------------- 1 | a = {} 2 | b = {foo=1} 3 | c = {foo=1,} 4 | d = {,} 5 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-key-str.json: -------------------------------------------------------------------------------- 1 | { 2 | "bar": { 3 | "type": "integer", 4 | "value": "92" 5 | }, 6 | "foo": { 7 | "type": "integer", 8 | "value": "92" 9 | } 10 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-key-str.toml: -------------------------------------------------------------------------------- 1 | "foo" = 92 2 | 'bar' = 92 3 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-key-str.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 22) 2 | ENTRY@[0; 10) 3 | KEY@[0; 5) 4 | BASIC_STRING@[0; 5) "\"foo\"" 5 | WHITESPACE@[5; 6) 6 | EQ@[6; 7) "=" 7 | WHITESPACE@[7; 8) 8 | VALUE@[8; 10) 9 | NUMBER@[8; 10) "92" 10 | WHITESPACE@[10; 11) 11 | ENTRY@[11; 21) 12 | KEY@[11; 16) 13 | LITERAL_STRING@[11; 16) "\'bar\'" 14 | WHITESPACE@[16; 17) 15 | EQ@[17; 18) "=" 16 | WHITESPACE@[18; 19) 17 | VALUE@[19; 21) 18 | NUMBER@[19; 21) "92" 19 | WHITESPACE@[21; 22) 20 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-key.json: -------------------------------------------------------------------------------- 1 | { 2 | "1914-08-26": { 3 | "type": "integer", 4 | "value": "92" 5 | }, 6 | "92": { 7 | "type": "integer", 8 | "value": "92" 9 | }, 10 | "foo": { 11 | "type": "integer", 12 | "value": "92" 13 | } 14 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-key.toml: -------------------------------------------------------------------------------- 1 | foo = 92 2 | 92 = 92 3 | 1914-08-26 = 92 4 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-key.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 33) 2 | ENTRY@[0; 8) 3 | KEY@[0; 3) 4 | BARE_KEY@[0; 3) "foo" 5 | WHITESPACE@[3; 4) 6 | EQ@[4; 5) "=" 7 | WHITESPACE@[5; 6) 8 | VALUE@[6; 8) 9 | NUMBER@[6; 8) "92" 10 | WHITESPACE@[8; 9) 11 | ENTRY@[9; 16) 12 | KEY@[9; 11) 13 | BARE_KEY@[9; 11) "92" 14 | WHITESPACE@[11; 12) 15 | EQ@[12; 13) "=" 16 | WHITESPACE@[13; 14) 17 | VALUE@[14; 16) 18 | NUMBER@[14; 16) "92" 19 | WHITESPACE@[16; 17) 20 | ENTRY@[17; 32) 21 | KEY@[17; 27) 22 | BARE_KEY@[17; 27) "1914-08-26" 23 | WHITESPACE@[27; 28) 24 | EQ@[28; 29) "=" 25 | WHITESPACE@[29; 30) 26 | VALUE@[30; 32) 27 | NUMBER@[30; 32) "92" 28 | WHITESPACE@[32; 33) 29 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-keys.json: -------------------------------------------------------------------------------- 1 | { 2 | "foo": { 3 | "type": "integer", 4 | "value": "1" 5 | } 6 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-keys.toml: -------------------------------------------------------------------------------- 1 | foo = 1 2 | foo.bar = 2 3 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-keys.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 20) 2 | ENTRY@[0; 7) 3 | KEY@[0; 3) 4 | BARE_KEY@[0; 3) "foo" 5 | WHITESPACE@[3; 4) 6 | EQ@[4; 5) "=" 7 | WHITESPACE@[5; 6) 8 | VALUE@[6; 7) 9 | NUMBER@[6; 7) "1" 10 | WHITESPACE@[7; 8) 11 | ENTRY@[8; 19) 12 | KEY@[8; 11) 13 | BARE_KEY@[8; 11) "foo" 14 | DOT@[11; 12) "." 15 | KEY@[12; 15) 16 | BARE_KEY@[12; 15) "bar" 17 | WHITESPACE@[15; 16) 18 | EQ@[16; 17) "=" 19 | WHITESPACE@[17; 18) 20 | VALUE@[18; 19) 21 | NUMBER@[18; 19) "2" 22 | WHITESPACE@[19; 20) 23 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-table-header.json: -------------------------------------------------------------------------------- 1 | { 2 | "table": { 3 | "header": { 4 | "type": "array", 5 | "value": [ 6 | {} 7 | ] 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-table-header.toml: -------------------------------------------------------------------------------- 1 | [[table . 'header']] 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-table-header.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 21) 2 | ARRAY_TABLE@[0; 20) 3 | TABLE_HEADER@[0; 20) 4 | L_BRACK@[0; 1) "[" 5 | L_BRACK@[1; 2) "[" 6 | KEY@[2; 7) 7 | BARE_KEY@[2; 7) "table" 8 | WHITESPACE@[7; 8) 9 | DOT@[8; 9) "." 10 | WHITESPACE@[9; 10) 11 | KEY@[10; 18) 12 | LITERAL_STRING@[10; 18) "\'header\'" 13 | R_BRACK@[18; 19) "]" 14 | R_BRACK@[19; 20) "]" 15 | WHITESPACE@[20; 21) 16 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-table.json: -------------------------------------------------------------------------------- 1 | { 2 | "table": { 3 | "a": { 4 | "type": "integer", 5 | "value": "1" 6 | }, 7 | "b": { 8 | "type": "integer", 9 | "value": "2" 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-table.toml: -------------------------------------------------------------------------------- 1 | [table] 2 | a = 1 3 | b = 2 4 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-table.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 20) 2 | TABLE@[0; 19) 3 | TABLE_HEADER@[0; 7) 4 | L_BRACK@[0; 1) "[" 5 | KEY@[1; 6) 6 | BARE_KEY@[1; 6) "table" 7 | R_BRACK@[6; 7) "]" 8 | WHITESPACE@[7; 8) 9 | ENTRY@[8; 13) 10 | KEY@[8; 9) 11 | BARE_KEY@[8; 9) "a" 12 | WHITESPACE@[9; 10) 13 | EQ@[10; 11) "=" 14 | WHITESPACE@[11; 12) 15 | VALUE@[12; 13) 16 | NUMBER@[12; 13) "1" 17 | WHITESPACE@[13; 14) 18 | ENTRY@[14; 19) 19 | KEY@[14; 15) 20 | BARE_KEY@[14; 15) "b" 21 | WHITESPACE@[15; 16) 22 | EQ@[16; 17) "=" 23 | WHITESPACE@[17; 18) 24 | VALUE@[18; 19) 25 | NUMBER@[18; 19) "2" 26 | WHITESPACE@[19; 20) 27 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-val-array.json: -------------------------------------------------------------------------------- 1 | { 2 | "a": { 3 | "type": "array", 4 | "value": [ 5 | { 6 | "type": "integer", 7 | "value": "1" 8 | }, 9 | { 10 | "type": "string", 11 | "value": "foo" 12 | } 13 | ] 14 | } 15 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-val-array.toml: -------------------------------------------------------------------------------- 1 | a = [1, "foo"] 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-val-array.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 15) 2 | ENTRY@[0; 14) 3 | KEY@[0; 1) 4 | BARE_KEY@[0; 1) "a" 5 | WHITESPACE@[1; 2) 6 | EQ@[2; 3) "=" 7 | WHITESPACE@[3; 4) 8 | VALUE@[4; 14) 9 | ARRAY@[4; 14) 10 | L_BRACK@[4; 5) "[" 11 | VALUE@[5; 6) 12 | NUMBER@[5; 6) "1" 13 | COMMA@[6; 7) "," 14 | WHITESPACE@[7; 8) 15 | VALUE@[8; 13) 16 | BASIC_STRING@[8; 13) "\"foo\"" 17 | R_BRACK@[13; 14) "]" 18 | WHITESPACE@[14; 15) 19 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-val-bool.json: -------------------------------------------------------------------------------- 1 | { 2 | "a": { 3 | "type": "bool", 4 | "value": "true" 5 | }, 6 | "b": { 7 | "type": "bool", 8 | "value": "false" 9 | } 10 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-val-bool.toml: -------------------------------------------------------------------------------- 1 | a = true 2 | b = false 3 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-val-bool.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 19) 2 | ENTRY@[0; 8) 3 | KEY@[0; 1) 4 | BARE_KEY@[0; 1) "a" 5 | WHITESPACE@[1; 2) 6 | EQ@[2; 3) "=" 7 | WHITESPACE@[3; 4) 8 | VALUE@[4; 8) 9 | BOOL@[4; 8) "true" 10 | WHITESPACE@[8; 9) 11 | ENTRY@[9; 18) 12 | KEY@[9; 10) 13 | BARE_KEY@[9; 10) "b" 14 | WHITESPACE@[10; 11) 15 | EQ@[11; 12) "=" 16 | WHITESPACE@[12; 13) 17 | VALUE@[13; 18) 18 | BOOL@[13; 18) "false" 19 | WHITESPACE@[18; 19) 20 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-val-inline.json: -------------------------------------------------------------------------------- 1 | { 2 | "a": { 3 | "bar": { 4 | "type": "integer", 5 | "value": "2" 6 | }, 7 | "foo": { 8 | "type": "integer", 9 | "value": "1" 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-val-inline.toml: -------------------------------------------------------------------------------- 1 | a = { "foo" = 1, bar = 2, } 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-val-inline.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 28) 2 | ENTRY@[0; 27) 3 | KEY@[0; 1) 4 | BARE_KEY@[0; 1) "a" 5 | WHITESPACE@[1; 2) 6 | EQ@[2; 3) "=" 7 | WHITESPACE@[3; 4) 8 | VALUE@[4; 27) 9 | DICT@[4; 27) 10 | L_CURLY@[4; 5) "{" 11 | WHITESPACE@[5; 6) 12 | ENTRY@[6; 15) 13 | KEY@[6; 11) 14 | BASIC_STRING@[6; 11) "\"foo\"" 15 | WHITESPACE@[11; 12) 16 | EQ@[12; 13) "=" 17 | WHITESPACE@[13; 14) 18 | VALUE@[14; 15) 19 | NUMBER@[14; 15) "1" 20 | COMMA@[15; 16) "," 21 | WHITESPACE@[16; 17) 22 | ENTRY@[17; 24) 23 | KEY@[17; 20) 24 | BARE_KEY@[17; 20) "bar" 25 | WHITESPACE@[20; 21) 26 | EQ@[21; 22) "=" 27 | WHITESPACE@[22; 23) 28 | VALUE@[23; 24) 29 | NUMBER@[23; 24) "2" 30 | COMMA@[24; 25) "," 31 | WHITESPACE@[25; 26) 32 | R_CURLY@[26; 27) "}" 33 | WHITESPACE@[27; 28) 34 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-val-lit.json: -------------------------------------------------------------------------------- 1 | { 2 | "a": { 3 | "type": "string", 4 | "value": "hello\nworld" 5 | }, 6 | "b": { 7 | "type": "string", 8 | "value": " hello\n world\n" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-val-lit.toml: -------------------------------------------------------------------------------- 1 | a = 'hello\nworld' 2 | b = ''' 3 | hello 4 | world 5 | ''' 6 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-val-lit.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 47) 2 | ENTRY@[0; 18) 3 | KEY@[0; 1) 4 | BARE_KEY@[0; 1) "a" 5 | WHITESPACE@[1; 2) 6 | EQ@[2; 3) "=" 7 | WHITESPACE@[3; 4) 8 | VALUE@[4; 18) 9 | LITERAL_STRING@[4; 18) "\'hello\\nworld\'" 10 | WHITESPACE@[18; 19) 11 | ENTRY@[19; 46) 12 | KEY@[19; 20) 13 | BARE_KEY@[19; 20) "b" 14 | WHITESPACE@[20; 21) 15 | EQ@[21; 22) "=" 16 | WHITESPACE@[22; 23) 17 | VALUE@[23; 46) 18 | MULTILINE_LITERAL_STRING@[23; 46) "\'\'\'\n hello\n world\n\'\'\'" 19 | WHITESPACE@[46; 47) 20 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-val-num.json: -------------------------------------------------------------------------------- 1 | { 2 | "a": { 3 | "type": "integer", 4 | "value": "92" 5 | }, 6 | "b": { 7 | "type": "float", 8 | "value": "8.5" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-val-num.toml: -------------------------------------------------------------------------------- 1 | a = 92 2 | b = 8.5 3 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-val-num.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 15) 2 | ENTRY@[0; 6) 3 | KEY@[0; 1) 4 | BARE_KEY@[0; 1) "a" 5 | WHITESPACE@[1; 2) 6 | EQ@[2; 3) "=" 7 | WHITESPACE@[3; 4) 8 | VALUE@[4; 6) 9 | NUMBER@[4; 6) "92" 10 | WHITESPACE@[6; 7) 11 | ENTRY@[7; 14) 12 | KEY@[7; 8) 13 | BARE_KEY@[7; 8) "b" 14 | WHITESPACE@[8; 9) 15 | EQ@[9; 10) "=" 16 | WHITESPACE@[10; 11) 17 | VALUE@[11; 14) 18 | NUMBER@[11; 14) "8.5" 19 | WHITESPACE@[14; 15) 20 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-val-str.json: -------------------------------------------------------------------------------- 1 | { 2 | "a": { 3 | "type": "string", 4 | "value": "hello\nworld" 5 | }, 6 | "b": { 7 | "type": "string", 8 | "value": " hello\n world\n" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-val-str.toml: -------------------------------------------------------------------------------- 1 | a = "hello\nworld" 2 | b = """ 3 | hello 4 | world 5 | """ 6 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-val-str.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 47) 2 | ENTRY@[0; 18) 3 | KEY@[0; 1) 4 | BARE_KEY@[0; 1) "a" 5 | WHITESPACE@[1; 2) 6 | EQ@[2; 3) "=" 7 | WHITESPACE@[3; 4) 8 | VALUE@[4; 18) 9 | BASIC_STRING@[4; 18) "\"hello\\nworld\"" 10 | WHITESPACE@[18; 19) 11 | ENTRY@[19; 46) 12 | KEY@[19; 20) 13 | BARE_KEY@[19; 20) "b" 14 | WHITESPACE@[20; 21) 15 | EQ@[21; 22) "=" 16 | WHITESPACE@[22; 23) 17 | VALUE@[23; 46) 18 | MULTILINE_BASIC_STRING@[23; 46) "\"\"\"\n hello\n world\n\"\"\"" 19 | WHITESPACE@[46; 47) 20 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-val-unexpected.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-val-unexpected.toml: -------------------------------------------------------------------------------- 1 | foo = _ 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/inline/test-val-unexpected.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 8) 2 | ENTRY@[0; 7) 3 | KEY@[0; 3) 4 | BARE_KEY@[0; 3) "foo" 5 | WHITESPACE@[3; 4) 6 | EQ@[4; 5) "=" 7 | WHITESPACE@[5; 6) 8 | VALUE@[6; 7) 9 | ERROR@[6; 7) 10 | BARE_KEY@[6; 7) "_" 11 | WHITESPACE@[7; 8) 12 | 13 | error@[6; 7) "_": expected a value 14 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/array-empty.json: -------------------------------------------------------------------------------- 1 | { 2 | "thevoid": { "type": "array", "value": [ 3 | {"type": "array", "value": [ 4 | {"type": "array", "value": [ 5 | {"type": "array", "value": [ 6 | {"type": "array", "value": []} 7 | ]} 8 | ]} 9 | ]} 10 | ]} 11 | } 12 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/array-empty.toml: -------------------------------------------------------------------------------- 1 | thevoid = [[[[[]]]]] 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/array-empty.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 21) 2 | ENTRY@[0; 20) 3 | KEY@[0; 7) 4 | BARE_KEY@[0; 7) "thevoid" 5 | WHITESPACE@[7; 8) 6 | EQ@[8; 9) "=" 7 | WHITESPACE@[9; 10) 8 | VALUE@[10; 20) 9 | ARRAY@[10; 20) 10 | L_BRACK@[10; 11) "[" 11 | VALUE@[11; 19) 12 | ARRAY@[11; 19) 13 | L_BRACK@[11; 12) "[" 14 | VALUE@[12; 18) 15 | ARRAY@[12; 18) 16 | L_BRACK@[12; 13) "[" 17 | VALUE@[13; 17) 18 | ARRAY@[13; 17) 19 | L_BRACK@[13; 14) "[" 20 | VALUE@[14; 16) 21 | ARRAY@[14; 16) 22 | L_BRACK@[14; 15) "[" 23 | R_BRACK@[15; 16) "]" 24 | R_BRACK@[16; 17) "]" 25 | R_BRACK@[17; 18) "]" 26 | R_BRACK@[18; 19) "]" 27 | R_BRACK@[19; 20) "]" 28 | WHITESPACE@[20; 21) 29 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/array-nospaces.json: -------------------------------------------------------------------------------- 1 | { 2 | "ints": { 3 | "type": "array", 4 | "value": [ 5 | {"type": "integer", "value": "1"}, 6 | {"type": "integer", "value": "2"}, 7 | {"type": "integer", "value": "3"} 8 | ] 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/array-nospaces.toml: -------------------------------------------------------------------------------- 1 | ints = [1,2,3] 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/array-nospaces.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 15) 2 | ENTRY@[0; 14) 3 | KEY@[0; 4) 4 | BARE_KEY@[0; 4) "ints" 5 | WHITESPACE@[4; 5) 6 | EQ@[5; 6) "=" 7 | WHITESPACE@[6; 7) 8 | VALUE@[7; 14) 9 | ARRAY@[7; 14) 10 | L_BRACK@[7; 8) "[" 11 | VALUE@[8; 9) 12 | NUMBER@[8; 9) "1" 13 | COMMA@[9; 10) "," 14 | VALUE@[10; 11) 15 | NUMBER@[10; 11) "2" 16 | COMMA@[11; 12) "," 17 | VALUE@[12; 13) 18 | NUMBER@[12; 13) "3" 19 | R_BRACK@[13; 14) "]" 20 | WHITESPACE@[14; 15) 21 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/array-string-quote-comma-2.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": { 3 | "type": "array", 4 | "value": [ 5 | { 6 | "type": "string", 7 | "value": " \\\", " 8 | } 9 | ] 10 | } 11 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/array-string-quote-comma-2.toml: -------------------------------------------------------------------------------- 1 | title = [ " \", ",] 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/array-string-quote-comma-2.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 20) 2 | ENTRY@[0; 19) 3 | KEY@[0; 5) 4 | BARE_KEY@[0; 5) "title" 5 | WHITESPACE@[5; 6) 6 | EQ@[6; 7) "=" 7 | WHITESPACE@[7; 8) 8 | VALUE@[8; 19) 9 | ARRAY@[8; 19) 10 | L_BRACK@[8; 9) "[" 11 | WHITESPACE@[9; 10) 12 | VALUE@[10; 17) 13 | BASIC_STRING@[10; 17) "\" \\\", \"" 14 | COMMA@[17; 18) "," 15 | R_BRACK@[18; 19) "]" 16 | WHITESPACE@[19; 20) 17 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/array-string-quote-comma.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": { 3 | "type": "array", 4 | "value": [ 5 | { 6 | "type": "string", 7 | "value": "Client: \\\"XXXX\\\", Job: XXXX" 8 | }, 9 | { 10 | "type": "string", 11 | "value": "Code: XXXX" 12 | } 13 | ] 14 | } 15 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/array-string-quote-comma.toml: -------------------------------------------------------------------------------- 1 | title = [ 2 | "Client: \"XXXX\", Job: XXXX", 3 | "Code: XXXX" 4 | ] 5 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/array-string-quote-comma.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 56) 2 | ENTRY@[0; 55) 3 | KEY@[0; 5) 4 | BARE_KEY@[0; 5) "title" 5 | WHITESPACE@[5; 6) 6 | EQ@[6; 7) "=" 7 | WHITESPACE@[7; 8) 8 | VALUE@[8; 55) 9 | ARRAY@[8; 55) 10 | L_BRACK@[8; 9) "[" 11 | WHITESPACE@[9; 10) 12 | VALUE@[10; 39) 13 | BASIC_STRING@[10; 39) "\"Client: \\\"XXXX\\\", Job: XXXX\"" 14 | COMMA@[39; 40) "," 15 | WHITESPACE@[40; 41) 16 | VALUE@[41; 53) 17 | BASIC_STRING@[41; 53) "\"Code: XXXX\"" 18 | WHITESPACE@[53; 54) 19 | R_BRACK@[54; 55) "]" 20 | WHITESPACE@[55; 56) 21 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/array-string-with-comma.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": { 3 | "type": "array", 4 | "value": [ 5 | {"type": "string", "value": "Client: XXXX, Job: XXXX"}, 6 | {"type": "string", "value": "Code: XXXX"} 7 | ] 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/array-string-with-comma.toml: -------------------------------------------------------------------------------- 1 | title = [ 2 | "Client: XXXX, Job: XXXX", 3 | "Code: XXXX" 4 | ] 5 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/array-string-with-comma.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 52) 2 | ENTRY@[0; 51) 3 | KEY@[0; 5) 4 | BARE_KEY@[0; 5) "title" 5 | WHITESPACE@[5; 6) 6 | EQ@[6; 7) "=" 7 | WHITESPACE@[7; 8) 8 | VALUE@[8; 51) 9 | ARRAY@[8; 51) 10 | L_BRACK@[8; 9) "[" 11 | WHITESPACE@[9; 10) 12 | VALUE@[10; 35) 13 | BASIC_STRING@[10; 35) "\"Client: XXXX, Job: XXXX\"" 14 | COMMA@[35; 36) "," 15 | WHITESPACE@[36; 37) 16 | VALUE@[37; 49) 17 | BASIC_STRING@[37; 49) "\"Code: XXXX\"" 18 | WHITESPACE@[49; 50) 19 | R_BRACK@[50; 51) "]" 20 | WHITESPACE@[51; 52) 21 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/array-table-array-string-backslash.json: -------------------------------------------------------------------------------- 1 | { 2 | "foo": { 3 | "type": "array", 4 | "value": [ 5 | { 6 | "bar": { 7 | "type": "string", 8 | "value": "\\\"{{baz}}\\\"" 9 | } 10 | } 11 | ] 12 | } 13 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/array-table-array-string-backslash.toml: -------------------------------------------------------------------------------- 1 | foo = [ { bar="\"{{baz}}\""} ] 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/array-table-array-string-backslash.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 31) 2 | ENTRY@[0; 30) 3 | KEY@[0; 3) 4 | BARE_KEY@[0; 3) "foo" 5 | WHITESPACE@[3; 4) 6 | EQ@[4; 5) "=" 7 | WHITESPACE@[5; 6) 8 | VALUE@[6; 30) 9 | ARRAY@[6; 30) 10 | L_BRACK@[6; 7) "[" 11 | WHITESPACE@[7; 8) 12 | VALUE@[8; 28) 13 | DICT@[8; 28) 14 | L_CURLY@[8; 9) "{" 15 | WHITESPACE@[9; 10) 16 | ENTRY@[10; 27) 17 | KEY@[10; 13) 18 | BARE_KEY@[10; 13) "bar" 19 | EQ@[13; 14) "=" 20 | VALUE@[14; 27) 21 | BASIC_STRING@[14; 27) "\"\\\"{{baz}}\\\"\"" 22 | R_CURLY@[27; 28) "}" 23 | WHITESPACE@[28; 29) 24 | R_BRACK@[29; 30) "]" 25 | WHITESPACE@[30; 31) 26 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/arrayTables.json: -------------------------------------------------------------------------------- 1 | { 2 | "fruit": { 3 | "type": "array", 4 | "value": [ 5 | { 6 | "name": { 7 | "type": "string", 8 | "value": "apple" 9 | } 10 | }, 11 | { 12 | "name": { 13 | "type": "string", 14 | "value": "banana" 15 | } 16 | } 17 | ] 18 | }, 19 | "products": { 20 | "type": "array", 21 | "value": [ 22 | { 23 | "name": { 24 | "type": "string", 25 | "value": "Hammer" 26 | }, 27 | "sku": { 28 | "type": "integer", 29 | "value": "738594937" 30 | } 31 | }, 32 | {}, 33 | { 34 | "color": { 35 | "type": "string", 36 | "value": "gray" 37 | }, 38 | "name": { 39 | "type": "string", 40 | "value": "Nail" 41 | }, 42 | "sku": { 43 | "type": "integer", 44 | "value": "284758393" 45 | } 46 | } 47 | ] 48 | } 49 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/arrayTables.toml: -------------------------------------------------------------------------------- 1 | [[products]] 2 | name = "Hammer" 3 | sku = 738594937 4 | 5 | [[products]] 6 | 7 | [[products]] 8 | name = "Nail" 9 | sku = 284758393 10 | color = "gray" 11 | 12 | 13 | [[fruit]] 14 | name = "apple" 15 | 16 | [fruit.physical] 17 | color = "red" 18 | shape = "round" 19 | 20 | [[fruit.variety]] 21 | name = "red delicious" 22 | 23 | [[fruit.variety]] 24 | name = "granny smith" 25 | 26 | [[fruit]] 27 | name = "banana" 28 | 29 | [[fruit.variety]] 30 | name = "plantain" 31 | 32 | 33 | points = [ { x = 1, y = 2, z = 3 }, 34 | { x = 7, y = 8, z = 9 }, 35 | { x = 2, y = 4, z = 8 } ] 36 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/arrays-hetergeneous.json: -------------------------------------------------------------------------------- 1 | { 2 | "mixed": { 3 | "type": "array", 4 | "value": [ 5 | {"type": "array", "value": [ 6 | {"type": "integer", "value": "1"}, 7 | {"type": "integer", "value": "2"} 8 | ]}, 9 | {"type": "array", "value": [ 10 | {"type": "string", "value": "a"}, 11 | {"type": "string", "value": "b"} 12 | ]}, 13 | {"type": "array", "value": [ 14 | {"type": "float", "value": "1.1"}, 15 | {"type": "float", "value": "2.1"} 16 | ]} 17 | ] 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/arrays-hetergeneous.toml: -------------------------------------------------------------------------------- 1 | mixed = [[1, 2], ["a", "b"], [1.1, 2.1]] 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/arrays-hetergeneous.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 41) 2 | ENTRY@[0; 40) 3 | KEY@[0; 5) 4 | BARE_KEY@[0; 5) "mixed" 5 | WHITESPACE@[5; 6) 6 | EQ@[6; 7) "=" 7 | WHITESPACE@[7; 8) 8 | VALUE@[8; 40) 9 | ARRAY@[8; 40) 10 | L_BRACK@[8; 9) "[" 11 | VALUE@[9; 15) 12 | ARRAY@[9; 15) 13 | L_BRACK@[9; 10) "[" 14 | VALUE@[10; 11) 15 | NUMBER@[10; 11) "1" 16 | COMMA@[11; 12) "," 17 | WHITESPACE@[12; 13) 18 | VALUE@[13; 14) 19 | NUMBER@[13; 14) "2" 20 | R_BRACK@[14; 15) "]" 21 | COMMA@[15; 16) "," 22 | WHITESPACE@[16; 17) 23 | VALUE@[17; 27) 24 | ARRAY@[17; 27) 25 | L_BRACK@[17; 18) "[" 26 | VALUE@[18; 21) 27 | BASIC_STRING@[18; 21) "\"a\"" 28 | COMMA@[21; 22) "," 29 | WHITESPACE@[22; 23) 30 | VALUE@[23; 26) 31 | BASIC_STRING@[23; 26) "\"b\"" 32 | R_BRACK@[26; 27) "]" 33 | COMMA@[27; 28) "," 34 | WHITESPACE@[28; 29) 35 | VALUE@[29; 39) 36 | ARRAY@[29; 39) 37 | L_BRACK@[29; 30) "[" 38 | VALUE@[30; 33) 39 | NUMBER@[30; 33) "1.1" 40 | COMMA@[33; 34) "," 41 | WHITESPACE@[34; 35) 42 | VALUE@[35; 38) 43 | NUMBER@[35; 38) "2.1" 44 | R_BRACK@[38; 39) "]" 45 | R_BRACK@[39; 40) "]" 46 | WHITESPACE@[40; 41) 47 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/arrays-nested.json: -------------------------------------------------------------------------------- 1 | { 2 | "nest": { 3 | "type": "array", 4 | "value": [ 5 | {"type": "array", "value": [ 6 | {"type": "string", "value": "a"} 7 | ]}, 8 | {"type": "array", "value": [ 9 | {"type": "string", "value": "b"} 10 | ]} 11 | ] 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/arrays-nested.toml: -------------------------------------------------------------------------------- 1 | nest = [["a"], ["b"]] 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/arrays-nested.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 22) 2 | ENTRY@[0; 21) 3 | KEY@[0; 4) 4 | BARE_KEY@[0; 4) "nest" 5 | WHITESPACE@[4; 5) 6 | EQ@[5; 6) "=" 7 | WHITESPACE@[6; 7) 8 | VALUE@[7; 21) 9 | ARRAY@[7; 21) 10 | L_BRACK@[7; 8) "[" 11 | VALUE@[8; 13) 12 | ARRAY@[8; 13) 13 | L_BRACK@[8; 9) "[" 14 | VALUE@[9; 12) 15 | BASIC_STRING@[9; 12) "\"a\"" 16 | R_BRACK@[12; 13) "]" 17 | COMMA@[13; 14) "," 18 | WHITESPACE@[14; 15) 19 | VALUE@[15; 20) 20 | ARRAY@[15; 20) 21 | L_BRACK@[15; 16) "[" 22 | VALUE@[16; 19) 23 | BASIC_STRING@[16; 19) "\"b\"" 24 | R_BRACK@[19; 20) "]" 25 | R_BRACK@[20; 21) "]" 26 | WHITESPACE@[21; 22) 27 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/arrays.json: -------------------------------------------------------------------------------- 1 | { 2 | "ints": { 3 | "type": "array", 4 | "value": [ 5 | {"type": "integer", "value": "1"}, 6 | {"type": "integer", "value": "2"}, 7 | {"type": "integer", "value": "3"} 8 | ] 9 | }, 10 | "floats": { 11 | "type": "array", 12 | "value": [ 13 | {"type": "float", "value": "1.1"}, 14 | {"type": "float", "value": "2.1"}, 15 | {"type": "float", "value": "3.1"} 16 | ] 17 | }, 18 | "strings": { 19 | "type": "array", 20 | "value": [ 21 | {"type": "string", "value": "a"}, 22 | {"type": "string", "value": "b"}, 23 | {"type": "string", "value": "c"} 24 | ] 25 | }, 26 | "dates": { 27 | "type": "array", 28 | "value": [ 29 | {"type": "datetime", "value": "1987-07-05T17:45:00Z"}, 30 | {"type": "datetime", "value": "1979-05-27T07:32:00Z"}, 31 | {"type": "datetime", "value": "2006-06-01T11:00:00Z"} 32 | ] 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/arrays.toml: -------------------------------------------------------------------------------- 1 | ints = [1, 2, 3] 2 | floats = [1.1, 2.1, 3.1] 3 | strings = ["a", "b", "c"] 4 | dates = [ 5 | 1987-07-05T17:45:00Z, 6 | 1979-05-27T07:32:00Z, 7 | 2006-06-01T11:00:00Z, 8 | ] 9 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/arrays2.toml: -------------------------------------------------------------------------------- 1 | arr1 = [ 1, 2, 3 ] 2 | arr2 = [ "red", "yellow", "green" ] 3 | arr3 = [ [ 1, 2 ], [3, 4, 5] ] 4 | arr4 = [ "all", 'strings', """are the same""", '''type'''] 5 | arr5 = [ [ 1, 2 ], ["a", "b", "c"] ] 6 | 7 | # arr6 = [ 1, 2.0 ] 8 | 9 | arr7 = [ 10 | 1, 2, 3 11 | ] 12 | 13 | arr8 = [ 14 | 1, 15 | 2, 16 | ] 17 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/bool.json: -------------------------------------------------------------------------------- 1 | { 2 | "f": {"type": "bool", "value": "false"}, 3 | "t": {"type": "bool", "value": "true"} 4 | } 5 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/bool.toml: -------------------------------------------------------------------------------- 1 | t = true 2 | f = false 3 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/bool.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 19) 2 | ENTRY@[0; 8) 3 | KEY@[0; 1) 4 | BARE_KEY@[0; 1) "t" 5 | WHITESPACE@[1; 2) 6 | EQ@[2; 3) "=" 7 | WHITESPACE@[3; 4) 8 | VALUE@[4; 8) 9 | BOOL@[4; 8) "true" 10 | WHITESPACE@[8; 9) 11 | ENTRY@[9; 18) 12 | KEY@[9; 10) 13 | BARE_KEY@[9; 10) "f" 14 | WHITESPACE@[10; 11) 15 | EQ@[11; 12) "=" 16 | WHITESPACE@[12; 13) 17 | VALUE@[13; 18) 18 | BOOL@[13; 18) "false" 19 | WHITESPACE@[18; 19) 20 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/boolean.json: -------------------------------------------------------------------------------- 1 | { 2 | "bool1": { 3 | "type": "bool", 4 | "value": "true" 5 | }, 6 | "bool2": { 7 | "type": "bool", 8 | "value": "false" 9 | } 10 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/boolean.toml: -------------------------------------------------------------------------------- 1 | bool1 = true 2 | bool2 = false 3 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/boolean.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 27) 2 | ENTRY@[0; 12) 3 | KEY@[0; 5) 4 | BARE_KEY@[0; 5) "bool1" 5 | WHITESPACE@[5; 6) 6 | EQ@[6; 7) "=" 7 | WHITESPACE@[7; 8) 8 | VALUE@[8; 12) 9 | BOOL@[8; 12) "true" 10 | WHITESPACE@[12; 13) 11 | ENTRY@[13; 26) 12 | KEY@[13; 18) 13 | BARE_KEY@[13; 18) "bool2" 14 | WHITESPACE@[18; 19) 15 | EQ@[19; 20) "=" 16 | WHITESPACE@[20; 21) 17 | VALUE@[21; 26) 18 | BOOL@[21; 26) "false" 19 | WHITESPACE@[26; 27) 20 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/comments-at-eof.json: -------------------------------------------------------------------------------- 1 | { 2 | "key": {"type": "string", "value": "value"} 3 | } 4 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/comments-at-eof.toml: -------------------------------------------------------------------------------- 1 | # This is a full-line comment 2 | key = "value" # This is a comment at the end of a line 3 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/comments-at-eof.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 85) 2 | ENTRY@[0; 84) 3 | COMMENT@[0; 29) "# This is a full-line comment" 4 | WHITESPACE@[29; 30) 5 | KEY@[30; 33) 6 | BARE_KEY@[30; 33) "key" 7 | WHITESPACE@[33; 34) 8 | EQ@[34; 35) "=" 9 | WHITESPACE@[35; 36) 10 | VALUE@[36; 43) 11 | BASIC_STRING@[36; 43) "\"value\"" 12 | WHITESPACE@[43; 44) 13 | COMMENT@[44; 84) "# This is a comment at the end of a line" 14 | WHITESPACE@[84; 85) 15 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/comments-at-eof2.json: -------------------------------------------------------------------------------- 1 | { 2 | "key": {"type": "string", "value": "value"} 3 | } 4 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/comments-at-eof2.toml: -------------------------------------------------------------------------------- 1 | # This is a full-line comment 2 | key = "value" # This is a comment at the end of a line -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/comments-at-eof2.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 84) 2 | ENTRY@[0; 84) 3 | COMMENT@[0; 29) "# This is a full-line comment" 4 | WHITESPACE@[29; 30) 5 | KEY@[30; 33) 6 | BARE_KEY@[30; 33) "key" 7 | WHITESPACE@[33; 34) 8 | EQ@[34; 35) "=" 9 | WHITESPACE@[35; 36) 10 | VALUE@[36; 43) 11 | BASIC_STRING@[36; 43) "\"value\"" 12 | WHITESPACE@[43; 44) 13 | COMMENT@[44; 84) "# This is a comment at the end of a line" 14 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/comments.json: -------------------------------------------------------------------------------- 1 | { 2 | "key": { 3 | "type": "string", 4 | "value": "value" 5 | }, 6 | "table": { 7 | "baz": { 8 | "type": "integer", 9 | "value": "62" 10 | }, 11 | "foo": { 12 | "type": "integer", 13 | "value": "92" 14 | }, 15 | "quux": { 16 | "type": "string", 17 | "value": "" 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/comments.toml: -------------------------------------------------------------------------------- 1 | # file comment 2 | 3 | # comment on key-value 4 | key = "value" 5 | 6 | # table comment 7 | [table] 8 | foo = 92 9 | baz = 62 # inline key-value comment 10 | quux = ''#adj 11 | # trailing file comment 12 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/comments.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 161) 2 | COMMENT@[0; 14) "# file comment" 3 | WHITESPACE@[14; 16) 4 | ENTRY@[16; 52) 5 | COMMENT@[16; 38) "# comment on key-value" 6 | WHITESPACE@[38; 39) 7 | KEY@[39; 42) 8 | BARE_KEY@[39; 42) "key" 9 | WHITESPACE@[42; 43) 10 | EQ@[43; 44) "=" 11 | WHITESPACE@[44; 45) 12 | VALUE@[45; 52) 13 | BASIC_STRING@[45; 52) "\"value\"" 14 | WHITESPACE@[52; 54) 15 | TABLE@[54; 136) 16 | COMMENT@[54; 69) "# table comment" 17 | WHITESPACE@[69; 70) 18 | TABLE_HEADER@[70; 77) 19 | L_BRACK@[70; 71) "[" 20 | KEY@[71; 76) 21 | BARE_KEY@[71; 76) "table" 22 | R_BRACK@[76; 77) "]" 23 | WHITESPACE@[77; 78) 24 | ENTRY@[78; 86) 25 | KEY@[78; 81) 26 | BARE_KEY@[78; 81) "foo" 27 | WHITESPACE@[81; 82) 28 | EQ@[82; 83) "=" 29 | WHITESPACE@[83; 84) 30 | VALUE@[84; 86) 31 | NUMBER@[84; 86) "92" 32 | WHITESPACE@[86; 87) 33 | ENTRY@[87; 122) 34 | KEY@[87; 90) 35 | BARE_KEY@[87; 90) "baz" 36 | WHITESPACE@[90; 91) 37 | EQ@[91; 92) "=" 38 | WHITESPACE@[92; 93) 39 | VALUE@[93; 95) 40 | NUMBER@[93; 95) "62" 41 | WHITESPACE@[95; 96) 42 | COMMENT@[96; 122) "# inline key-value comment" 43 | WHITESPACE@[122; 123) 44 | ENTRY@[123; 136) 45 | KEY@[123; 127) 46 | BARE_KEY@[123; 127) "quux" 47 | WHITESPACE@[127; 128) 48 | EQ@[128; 129) "=" 49 | WHITESPACE@[129; 130) 50 | VALUE@[130; 132) 51 | LITERAL_STRING@[130; 132) "\'\'" 52 | COMMENT@[132; 136) "#adj" 53 | WHITESPACE@[136; 137) 54 | COMMENT@[137; 160) "# trailing file comment" 55 | WHITESPACE@[160; 161) 56 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/datetime-timezone.json: -------------------------------------------------------------------------------- 1 | { 2 | "bestdayever": {"type": "datetime", "value": "2017-06-06T12:34:56-05:00"} 3 | } 4 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/datetime-timezone.toml: -------------------------------------------------------------------------------- 1 | bestdayever = 2017-06-06T12:34:56-05:00 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/datetime-timezone.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 40) 2 | ENTRY@[0; 39) 3 | KEY@[0; 11) 4 | BARE_KEY@[0; 11) "bestdayever" 5 | WHITESPACE@[11; 12) 6 | EQ@[12; 13) "=" 7 | WHITESPACE@[13; 14) 8 | VALUE@[14; 39) 9 | DATE_TIME@[14; 39) "2017-06-06T12:34:56-05:00" 10 | WHITESPACE@[39; 40) 11 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/datetime.json: -------------------------------------------------------------------------------- 1 | { 2 | "bestdayever": {"type": "datetime", "value": "1987-07-05T17:45:00Z"} 3 | } 4 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/datetime.toml: -------------------------------------------------------------------------------- 1 | bestdayever = 1987-07-05T17:45:00Z 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/datetime.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 35) 2 | ENTRY@[0; 34) 3 | KEY@[0; 11) 4 | BARE_KEY@[0; 11) "bestdayever" 5 | WHITESPACE@[11; 12) 6 | EQ@[12; 13) "=" 7 | WHITESPACE@[13; 14) 8 | VALUE@[14; 34) 9 | DATE_TIME@[14; 34) "1987-07-05T17:45:00Z" 10 | WHITESPACE@[34; 35) 11 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/dotted-keys.json: -------------------------------------------------------------------------------- 1 | { 2 | "dog": { 3 | "tater.man": { 4 | "type": { 5 | "name": { 6 | "type": "string", 7 | "value": "pug" 8 | } 9 | } 10 | } 11 | }, 12 | "name": { 13 | "type": "string", 14 | "value": "Orange" 15 | }, 16 | "physical": { 17 | "color": { 18 | "type": "string", 19 | "value": "orange" 20 | }, 21 | "shape": { 22 | "type": "string", 23 | "value": "round" 24 | } 25 | }, 26 | "site": { 27 | "google.com": { 28 | "type": "bool", 29 | "value": "true" 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/dotted-keys.toml: -------------------------------------------------------------------------------- 1 | name = "Orange" 2 | physical.color = "orange" 3 | physical.shape = "round" 4 | site."google.com" = true 5 | 6 | [dog."tater.man"] 7 | type.name = "pug" 8 | 9 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/dotted-keys.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 130) 2 | ENTRY@[0; 15) 3 | KEY@[0; 4) 4 | BARE_KEY@[0; 4) "name" 5 | WHITESPACE@[4; 5) 6 | EQ@[5; 6) "=" 7 | WHITESPACE@[6; 7) 8 | VALUE@[7; 15) 9 | BASIC_STRING@[7; 15) "\"Orange\"" 10 | WHITESPACE@[15; 16) 11 | ENTRY@[16; 41) 12 | KEY@[16; 24) 13 | BARE_KEY@[16; 24) "physical" 14 | DOT@[24; 25) "." 15 | KEY@[25; 30) 16 | BARE_KEY@[25; 30) "color" 17 | WHITESPACE@[30; 31) 18 | EQ@[31; 32) "=" 19 | WHITESPACE@[32; 33) 20 | VALUE@[33; 41) 21 | BASIC_STRING@[33; 41) "\"orange\"" 22 | WHITESPACE@[41; 42) 23 | ENTRY@[42; 66) 24 | KEY@[42; 50) 25 | BARE_KEY@[42; 50) "physical" 26 | DOT@[50; 51) "." 27 | KEY@[51; 56) 28 | BARE_KEY@[51; 56) "shape" 29 | WHITESPACE@[56; 57) 30 | EQ@[57; 58) "=" 31 | WHITESPACE@[58; 59) 32 | VALUE@[59; 66) 33 | BASIC_STRING@[59; 66) "\"round\"" 34 | WHITESPACE@[66; 67) 35 | ENTRY@[67; 91) 36 | KEY@[67; 71) 37 | BARE_KEY@[67; 71) "site" 38 | DOT@[71; 72) "." 39 | KEY@[72; 84) 40 | BASIC_STRING@[72; 84) "\"google.com\"" 41 | WHITESPACE@[84; 85) 42 | EQ@[85; 86) "=" 43 | WHITESPACE@[86; 87) 44 | VALUE@[87; 91) 45 | BOOL@[87; 91) "true" 46 | WHITESPACE@[91; 93) 47 | TABLE@[93; 128) 48 | TABLE_HEADER@[93; 110) 49 | L_BRACK@[93; 94) "[" 50 | KEY@[94; 97) 51 | BARE_KEY@[94; 97) "dog" 52 | DOT@[97; 98) "." 53 | KEY@[98; 109) 54 | BASIC_STRING@[98; 109) "\"tater.man\"" 55 | R_BRACK@[109; 110) "]" 56 | WHITESPACE@[110; 111) 57 | ENTRY@[111; 128) 58 | KEY@[111; 115) 59 | BARE_KEY@[111; 115) "type" 60 | DOT@[115; 116) "." 61 | KEY@[116; 120) 62 | BARE_KEY@[116; 120) "name" 63 | WHITESPACE@[120; 121) 64 | EQ@[121; 122) "=" 65 | WHITESPACE@[122; 123) 66 | VALUE@[123; 128) 67 | BASIC_STRING@[123; 128) "\"pug\"" 68 | WHITESPACE@[128; 130) 69 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/double-quote-escape.json: -------------------------------------------------------------------------------- 1 | { 2 | "test": { 3 | "type": "string", 4 | "value": "\"one\"" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/double-quote-escape.toml: -------------------------------------------------------------------------------- 1 | test = "\"one\"" 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/double-quote-escape.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 17) 2 | ENTRY@[0; 16) 3 | KEY@[0; 4) 4 | BARE_KEY@[0; 4) "test" 5 | WHITESPACE@[4; 5) 6 | EQ@[5; 6) "=" 7 | WHITESPACE@[6; 7) 8 | VALUE@[7; 16) 9 | BASIC_STRING@[7; 16) "\"\\\"one\\\"\"" 10 | WHITESPACE@[16; 17) 11 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/empty.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/empty.toml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/matklad/tom/7753d8aca79bbc166d5a28b81595dda2a5e24713/crates/tom_syntax/tests/data/ok/empty.toml -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/empty.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 0) 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/escaped-escape.json: -------------------------------------------------------------------------------- 1 | { 2 | "answer": {"type": "string", "value": "\\x64"} 3 | } 4 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/escaped-escape.toml: -------------------------------------------------------------------------------- 1 | answer = "\\x64" 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/escaped-escape.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 17) 2 | ENTRY@[0; 16) 3 | KEY@[0; 6) 4 | BARE_KEY@[0; 6) "answer" 5 | WHITESPACE@[6; 7) 6 | EQ@[7; 8) "=" 7 | WHITESPACE@[8; 9) 8 | VALUE@[9; 16) 9 | BASIC_STRING@[9; 16) "\"\\\\x64\"" 10 | WHITESPACE@[16; 17) 11 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "best-day-ever": {"type": "datetime", "value": "1987-07-05T17:45:00Z"}, 3 | "numtheory": { 4 | "boring": {"type": "bool", "value": "false"}, 5 | "perfection": { 6 | "type": "array", 7 | "value": [ 8 | {"type": "integer", "value": "6"}, 9 | {"type": "integer", "value": "28"}, 10 | {"type": "integer", "value": "496"} 11 | ] 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/example.toml: -------------------------------------------------------------------------------- 1 | best-day-ever = 1987-07-05T17:45:00Z 2 | 3 | [numtheory] 4 | boring = false 5 | perfection = [6, 28, 496] 6 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/example.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 91) 2 | ENTRY@[0; 36) 3 | KEY@[0; 13) 4 | BARE_KEY@[0; 13) "best-day-ever" 5 | WHITESPACE@[13; 14) 6 | EQ@[14; 15) "=" 7 | WHITESPACE@[15; 16) 8 | VALUE@[16; 36) 9 | DATE_TIME@[16; 36) "1987-07-05T17:45:00Z" 10 | WHITESPACE@[36; 38) 11 | TABLE@[38; 90) 12 | TABLE_HEADER@[38; 49) 13 | L_BRACK@[38; 39) "[" 14 | KEY@[39; 48) 15 | BARE_KEY@[39; 48) "numtheory" 16 | R_BRACK@[48; 49) "]" 17 | WHITESPACE@[49; 50) 18 | ENTRY@[50; 64) 19 | KEY@[50; 56) 20 | BARE_KEY@[50; 56) "boring" 21 | WHITESPACE@[56; 57) 22 | EQ@[57; 58) "=" 23 | WHITESPACE@[58; 59) 24 | VALUE@[59; 64) 25 | BOOL@[59; 64) "false" 26 | WHITESPACE@[64; 65) 27 | ENTRY@[65; 90) 28 | KEY@[65; 75) 29 | BARE_KEY@[65; 75) "perfection" 30 | WHITESPACE@[75; 76) 31 | EQ@[76; 77) "=" 32 | WHITESPACE@[77; 78) 33 | VALUE@[78; 90) 34 | ARRAY@[78; 90) 35 | L_BRACK@[78; 79) "[" 36 | VALUE@[79; 80) 37 | NUMBER@[79; 80) "6" 38 | COMMA@[80; 81) "," 39 | WHITESPACE@[81; 82) 40 | VALUE@[82; 84) 41 | NUMBER@[82; 84) "28" 42 | COMMA@[84; 85) "," 43 | WHITESPACE@[85; 86) 44 | VALUE@[86; 89) 45 | NUMBER@[86; 89) "496" 46 | R_BRACK@[89; 90) "]" 47 | WHITESPACE@[90; 91) 48 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/float-underscore.json: -------------------------------------------------------------------------------- 1 | { 2 | "before": {"type": "float", "value": "3141.5927"}, 3 | "after": {"type": "float", "value": "3141.5927"}, 4 | "exponent": {"type": "float", "value": "3e14"} 5 | } 6 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/float-underscore.toml: -------------------------------------------------------------------------------- 1 | before = 3_141.5927 2 | after = 3141.592_7 3 | exponent = 3e1_4 4 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/float-underscore.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 56) 2 | ENTRY@[0; 19) 3 | KEY@[0; 6) 4 | BARE_KEY@[0; 6) "before" 5 | WHITESPACE@[6; 7) 6 | EQ@[7; 8) "=" 7 | WHITESPACE@[8; 9) 8 | VALUE@[9; 19) 9 | NUMBER@[9; 19) "3_141.5927" 10 | WHITESPACE@[19; 20) 11 | ENTRY@[20; 38) 12 | KEY@[20; 25) 13 | BARE_KEY@[20; 25) "after" 14 | WHITESPACE@[25; 26) 15 | EQ@[26; 27) "=" 16 | WHITESPACE@[27; 28) 17 | VALUE@[28; 38) 18 | NUMBER@[28; 38) "3141.592_7" 19 | WHITESPACE@[38; 39) 20 | ENTRY@[39; 55) 21 | KEY@[39; 47) 22 | BARE_KEY@[39; 47) "exponent" 23 | WHITESPACE@[47; 48) 24 | EQ@[48; 49) "=" 25 | WHITESPACE@[49; 50) 26 | VALUE@[50; 55) 27 | NUMBER@[50; 55) "3e1_4" 28 | WHITESPACE@[55; 56) 29 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/float.json: -------------------------------------------------------------------------------- 1 | { 2 | "pi": {"type": "float", "value": "3.14"}, 3 | "pospi": {"type": "float", "value": "3.14"}, 4 | "negpi": {"type": "float", "value": "-3.14"}, 5 | "zero-intpart": {"type": "float", "value": "0.123"} 6 | } 7 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/float.toml: -------------------------------------------------------------------------------- 1 | pi = 3.14 2 | pospi = +3.14 3 | negpi = -3.14 4 | zero-intpart = 0.123 5 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/float.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 59) 2 | ENTRY@[0; 9) 3 | KEY@[0; 2) 4 | BARE_KEY@[0; 2) "pi" 5 | WHITESPACE@[2; 3) 6 | EQ@[3; 4) "=" 7 | WHITESPACE@[4; 5) 8 | VALUE@[5; 9) 9 | NUMBER@[5; 9) "3.14" 10 | WHITESPACE@[9; 10) 11 | ENTRY@[10; 23) 12 | KEY@[10; 15) 13 | BARE_KEY@[10; 15) "pospi" 14 | WHITESPACE@[15; 16) 15 | EQ@[16; 17) "=" 16 | WHITESPACE@[17; 18) 17 | VALUE@[18; 23) 18 | NUMBER@[18; 23) "+3.14" 19 | WHITESPACE@[23; 24) 20 | ENTRY@[24; 37) 21 | KEY@[24; 29) 22 | BARE_KEY@[24; 29) "negpi" 23 | WHITESPACE@[29; 30) 24 | EQ@[30; 31) "=" 25 | WHITESPACE@[31; 32) 26 | VALUE@[32; 37) 27 | NUMBER@[32; 37) "-3.14" 28 | WHITESPACE@[37; 38) 29 | ENTRY@[38; 58) 30 | KEY@[38; 50) 31 | BARE_KEY@[38; 50) "zero-intpart" 32 | WHITESPACE@[50; 51) 33 | EQ@[51; 52) "=" 34 | WHITESPACE@[52; 53) 35 | VALUE@[53; 58) 36 | NUMBER@[53; 58) "0.123" 37 | WHITESPACE@[58; 59) 38 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/ignored/comments-everywhere.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "answer": {"type": "integer", "value": "42"}, 4 | "more": { 5 | "type": "array", 6 | "value": [ 7 | {"type": "integer", "value": "42"}, 8 | {"type": "integer", "value": "42"} 9 | ] 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/ignored/comments-everywhere.toml: -------------------------------------------------------------------------------- 1 | # Top comment. 2 | # Top comment. 3 | # Top comment. 4 | 5 | # [no-extraneous-groups-please] 6 | 7 | [group] # Comment 8 | answer = 42 # Comment 9 | # no-extraneous-keys-please = 999 10 | # Inbetween comment. 11 | more = [ # Comment 12 | # What about multiple # comments? 13 | # Can you handle it? 14 | # 15 | # Evil. 16 | # Evil. 17 | 42, 42, # Comments within arrays are fun. 18 | # What about multiple # comments? 19 | # Can you handle it? 20 | # 21 | # Evil. 22 | # Evil. 23 | # ] Did I fool you? 24 | ] # Hopefully not. 25 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/ignored/float-exponent.json: -------------------------------------------------------------------------------- 1 | { 2 | "lower": {"type": "float", "value": "300.0"}, 3 | "upper": {"type": "float", "value": "300.0"}, 4 | "neg": {"type": "float", "value": "0.03"}, 5 | "pos": {"type": "float", "value": "300.0"}, 6 | "zero": {"type": "float", "value": "3.0"}, 7 | "pointlower": {"type": "float", "value": "310.0"}, 8 | "pointupper": {"type": "float", "value": "310.0"} 9 | } 10 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/ignored/float-exponent.toml: -------------------------------------------------------------------------------- 1 | lower = 3e2 2 | upper = 3E2 3 | neg = 3e-2 4 | pos = 3E+2 5 | zero = 3e0 6 | pointlower = 3.1e2 7 | pointupper = 3.1E2 8 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/implicit-and-explicit-after.json: -------------------------------------------------------------------------------- 1 | { 2 | "a": { 3 | "better": {"type": "integer", "value": "43"}, 4 | "b": { 5 | "c": { 6 | "answer": {"type": "integer", "value": "42"} 7 | } 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/implicit-and-explicit-after.toml: -------------------------------------------------------------------------------- 1 | [a.b.c] 2 | answer = 42 3 | 4 | [a] 5 | better = 43 6 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/implicit-and-explicit-after.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 37) 2 | TABLE@[0; 19) 3 | TABLE_HEADER@[0; 7) 4 | L_BRACK@[0; 1) "[" 5 | KEY@[1; 2) 6 | BARE_KEY@[1; 2) "a" 7 | DOT@[2; 3) "." 8 | KEY@[3; 4) 9 | BARE_KEY@[3; 4) "b" 10 | DOT@[4; 5) "." 11 | KEY@[5; 6) 12 | BARE_KEY@[5; 6) "c" 13 | R_BRACK@[6; 7) "]" 14 | WHITESPACE@[7; 8) 15 | ENTRY@[8; 19) 16 | KEY@[8; 14) 17 | BARE_KEY@[8; 14) "answer" 18 | WHITESPACE@[14; 15) 19 | EQ@[15; 16) "=" 20 | WHITESPACE@[16; 17) 21 | VALUE@[17; 19) 22 | NUMBER@[17; 19) "42" 23 | WHITESPACE@[19; 21) 24 | TABLE@[21; 36) 25 | TABLE_HEADER@[21; 24) 26 | L_BRACK@[21; 22) "[" 27 | KEY@[22; 23) 28 | BARE_KEY@[22; 23) "a" 29 | R_BRACK@[23; 24) "]" 30 | WHITESPACE@[24; 25) 31 | ENTRY@[25; 36) 32 | KEY@[25; 31) 33 | BARE_KEY@[25; 31) "better" 34 | WHITESPACE@[31; 32) 35 | EQ@[32; 33) "=" 36 | WHITESPACE@[33; 34) 37 | VALUE@[34; 36) 38 | NUMBER@[34; 36) "43" 39 | WHITESPACE@[36; 37) 40 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/implicit-and-explicit-before.json: -------------------------------------------------------------------------------- 1 | { 2 | "a": { 3 | "better": {"type": "integer", "value": "43"}, 4 | "b": { 5 | "c": { 6 | "answer": {"type": "integer", "value": "42"} 7 | } 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/implicit-and-explicit-before.toml: -------------------------------------------------------------------------------- 1 | [a] 2 | better = 43 3 | 4 | [a.b.c] 5 | answer = 42 6 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/implicit-and-explicit-before.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 37) 2 | TABLE@[0; 15) 3 | TABLE_HEADER@[0; 3) 4 | L_BRACK@[0; 1) "[" 5 | KEY@[1; 2) 6 | BARE_KEY@[1; 2) "a" 7 | R_BRACK@[2; 3) "]" 8 | WHITESPACE@[3; 4) 9 | ENTRY@[4; 15) 10 | KEY@[4; 10) 11 | BARE_KEY@[4; 10) "better" 12 | WHITESPACE@[10; 11) 13 | EQ@[11; 12) "=" 14 | WHITESPACE@[12; 13) 15 | VALUE@[13; 15) 16 | NUMBER@[13; 15) "43" 17 | WHITESPACE@[15; 17) 18 | TABLE@[17; 36) 19 | TABLE_HEADER@[17; 24) 20 | L_BRACK@[17; 18) "[" 21 | KEY@[18; 19) 22 | BARE_KEY@[18; 19) "a" 23 | DOT@[19; 20) "." 24 | KEY@[20; 21) 25 | BARE_KEY@[20; 21) "b" 26 | DOT@[21; 22) "." 27 | KEY@[22; 23) 28 | BARE_KEY@[22; 23) "c" 29 | R_BRACK@[23; 24) "]" 30 | WHITESPACE@[24; 25) 31 | ENTRY@[25; 36) 32 | KEY@[25; 31) 33 | BARE_KEY@[25; 31) "answer" 34 | WHITESPACE@[31; 32) 35 | EQ@[32; 33) "=" 36 | WHITESPACE@[33; 34) 37 | VALUE@[34; 36) 38 | NUMBER@[34; 36) "42" 39 | WHITESPACE@[36; 37) 40 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/implicit-groups.json: -------------------------------------------------------------------------------- 1 | { 2 | "a": { 3 | "b": { 4 | "c": { 5 | "answer": {"type": "integer", "value": "42"} 6 | } 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/implicit-groups.toml: -------------------------------------------------------------------------------- 1 | [a.b.c] 2 | answer = 42 3 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/implicit-groups.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 20) 2 | TABLE@[0; 19) 3 | TABLE_HEADER@[0; 7) 4 | L_BRACK@[0; 1) "[" 5 | KEY@[1; 2) 6 | BARE_KEY@[1; 2) "a" 7 | DOT@[2; 3) "." 8 | KEY@[3; 4) 9 | BARE_KEY@[3; 4) "b" 10 | DOT@[4; 5) "." 11 | KEY@[5; 6) 12 | BARE_KEY@[5; 6) "c" 13 | R_BRACK@[6; 7) "]" 14 | WHITESPACE@[7; 8) 15 | ENTRY@[8; 19) 16 | KEY@[8; 14) 17 | BARE_KEY@[8; 14) "answer" 18 | WHITESPACE@[14; 15) 19 | EQ@[15; 16) "=" 20 | WHITESPACE@[16; 17) 21 | VALUE@[17; 19) 22 | NUMBER@[17; 19) "42" 23 | WHITESPACE@[19; 20) 24 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/inline-table.json: -------------------------------------------------------------------------------- 1 | { 2 | "simple": { "a": {"type": "integer", "value": "1"} }, 3 | "str-key": { "a": {"type": "integer", "value": "1"} }, 4 | "table-array": [ 5 | { "a": {"type": "integer", "value": "1"} }, 6 | { "b": {"type": "integer", "value": "2"} } 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/inline-table.toml: -------------------------------------------------------------------------------- 1 | simple = { a = 1 } 2 | str-key = { "a" = 1 } 3 | table-array = [{ "a" = 1 }, { "b" = 2 }] 4 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/inlineTables.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": { 3 | "first": { 4 | "type": "string", 5 | "value": "Tom" 6 | }, 7 | "last": { 8 | "type": "string", 9 | "value": "Preston-Werner" 10 | } 11 | }, 12 | "point": { 13 | "x": { 14 | "type": "integer", 15 | "value": "1" 16 | }, 17 | "y": { 18 | "type": "integer", 19 | "value": "2" 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/inlineTables.toml: -------------------------------------------------------------------------------- 1 | name = { first = "Tom", last = "Preston-Werner" } 2 | point = { x = 1, y = 2 } 3 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/inlineTables.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 75) 2 | ENTRY@[0; 49) 3 | KEY@[0; 4) 4 | BARE_KEY@[0; 4) "name" 5 | WHITESPACE@[4; 5) 6 | EQ@[5; 6) "=" 7 | WHITESPACE@[6; 7) 8 | VALUE@[7; 49) 9 | DICT@[7; 49) 10 | L_CURLY@[7; 8) "{" 11 | WHITESPACE@[8; 9) 12 | ENTRY@[9; 22) 13 | KEY@[9; 14) 14 | BARE_KEY@[9; 14) "first" 15 | WHITESPACE@[14; 15) 16 | EQ@[15; 16) "=" 17 | WHITESPACE@[16; 17) 18 | VALUE@[17; 22) 19 | BASIC_STRING@[17; 22) "\"Tom\"" 20 | COMMA@[22; 23) "," 21 | WHITESPACE@[23; 24) 22 | ENTRY@[24; 47) 23 | KEY@[24; 28) 24 | BARE_KEY@[24; 28) "last" 25 | WHITESPACE@[28; 29) 26 | EQ@[29; 30) "=" 27 | WHITESPACE@[30; 31) 28 | VALUE@[31; 47) 29 | BASIC_STRING@[31; 47) "\"Preston-Werner\"" 30 | WHITESPACE@[47; 48) 31 | R_CURLY@[48; 49) "}" 32 | WHITESPACE@[49; 50) 33 | ENTRY@[50; 74) 34 | KEY@[50; 55) 35 | BARE_KEY@[50; 55) "point" 36 | WHITESPACE@[55; 56) 37 | EQ@[56; 57) "=" 38 | WHITESPACE@[57; 58) 39 | VALUE@[58; 74) 40 | DICT@[58; 74) 41 | L_CURLY@[58; 59) "{" 42 | WHITESPACE@[59; 60) 43 | ENTRY@[60; 65) 44 | KEY@[60; 61) 45 | BARE_KEY@[60; 61) "x" 46 | WHITESPACE@[61; 62) 47 | EQ@[62; 63) "=" 48 | WHITESPACE@[63; 64) 49 | VALUE@[64; 65) 50 | NUMBER@[64; 65) "1" 51 | COMMA@[65; 66) "," 52 | WHITESPACE@[66; 67) 53 | ENTRY@[67; 72) 54 | KEY@[67; 68) 55 | BARE_KEY@[67; 68) "y" 56 | WHITESPACE@[68; 69) 57 | EQ@[69; 70) "=" 58 | WHITESPACE@[70; 71) 59 | VALUE@[71; 72) 60 | NUMBER@[71; 72) "2" 61 | WHITESPACE@[72; 73) 62 | R_CURLY@[73; 74) "}" 63 | WHITESPACE@[74; 75) 64 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/integer-underscore.json: -------------------------------------------------------------------------------- 1 | { 2 | "kilo": {"type": "integer", "value": "1000"} 3 | } 4 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/integer-underscore.toml: -------------------------------------------------------------------------------- 1 | kilo = 1_000 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/integer-underscore.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 13) 2 | ENTRY@[0; 12) 3 | KEY@[0; 4) 4 | BARE_KEY@[0; 4) "kilo" 5 | WHITESPACE@[4; 5) 6 | EQ@[5; 6) "=" 7 | WHITESPACE@[6; 7) 8 | VALUE@[7; 12) 9 | NUMBER@[7; 12) "1_000" 10 | WHITESPACE@[12; 13) 11 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/integer.json: -------------------------------------------------------------------------------- 1 | { 2 | "answer": {"type": "integer", "value": "42"}, 3 | "posanswer": {"type": "integer", "value": "42"}, 4 | "neganswer": {"type": "integer", "value": "-42"}, 5 | "zero": {"type": "integer", "value": "0"} 6 | } 7 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/integer.toml: -------------------------------------------------------------------------------- 1 | answer = 42 2 | posanswer = +42 3 | neganswer = -42 4 | zero = 0 5 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/integer.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 53) 2 | ENTRY@[0; 11) 3 | KEY@[0; 6) 4 | BARE_KEY@[0; 6) "answer" 5 | WHITESPACE@[6; 7) 6 | EQ@[7; 8) "=" 7 | WHITESPACE@[8; 9) 8 | VALUE@[9; 11) 9 | NUMBER@[9; 11) "42" 10 | WHITESPACE@[11; 12) 11 | ENTRY@[12; 27) 12 | KEY@[12; 21) 13 | BARE_KEY@[12; 21) "posanswer" 14 | WHITESPACE@[21; 22) 15 | EQ@[22; 23) "=" 16 | WHITESPACE@[23; 24) 17 | VALUE@[24; 27) 18 | NUMBER@[24; 27) "+42" 19 | WHITESPACE@[27; 28) 20 | ENTRY@[28; 43) 21 | KEY@[28; 37) 22 | BARE_KEY@[28; 37) "neganswer" 23 | WHITESPACE@[37; 38) 24 | EQ@[38; 39) "=" 25 | WHITESPACE@[39; 40) 26 | VALUE@[40; 43) 27 | NUMBER@[40; 43) "-42" 28 | WHITESPACE@[43; 44) 29 | ENTRY@[44; 52) 30 | KEY@[44; 48) 31 | BARE_KEY@[44; 48) "zero" 32 | WHITESPACE@[48; 49) 33 | EQ@[49; 50) "=" 34 | WHITESPACE@[50; 51) 35 | VALUE@[51; 52) 36 | NUMBER@[51; 52) "0" 37 | WHITESPACE@[52; 53) 38 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/key-equals-nospace.json: -------------------------------------------------------------------------------- 1 | { 2 | "answer": {"type": "integer", "value": "42"} 3 | } 4 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/key-equals-nospace.toml: -------------------------------------------------------------------------------- 1 | answer=42 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/key-equals-nospace.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 10) 2 | ENTRY@[0; 9) 3 | KEY@[0; 6) 4 | BARE_KEY@[0; 6) "answer" 5 | EQ@[6; 7) "=" 6 | VALUE@[7; 9) 7 | NUMBER@[7; 9) "42" 8 | WHITESPACE@[9; 10) 9 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/key-numeric.json: -------------------------------------------------------------------------------- 1 | { 2 | "1": {"type": "integer", "value": "1"} 3 | } 4 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/key-numeric.toml: -------------------------------------------------------------------------------- 1 | 1 = 1 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/key-numeric.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 6) 2 | ENTRY@[0; 5) 3 | KEY@[0; 1) 4 | BARE_KEY@[0; 1) "1" 5 | WHITESPACE@[1; 2) 6 | EQ@[2; 3) "=" 7 | WHITESPACE@[3; 4) 8 | VALUE@[4; 5) 9 | NUMBER@[4; 5) "1" 10 | WHITESPACE@[5; 6) 11 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/key-space.json: -------------------------------------------------------------------------------- 1 | { 2 | "a b": {"type": "integer", "value": "1"} 3 | } 4 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/key-space.toml: -------------------------------------------------------------------------------- 1 | "a b" = 1 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/key-space.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 10) 2 | ENTRY@[0; 9) 3 | KEY@[0; 5) 4 | BASIC_STRING@[0; 5) "\"a b\"" 5 | WHITESPACE@[5; 6) 6 | EQ@[6; 7) "=" 7 | WHITESPACE@[7; 8) 8 | VALUE@[8; 9) 9 | NUMBER@[8; 9) "1" 10 | WHITESPACE@[9; 10) 11 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/key-special-chars.json: -------------------------------------------------------------------------------- 1 | { 2 | "~!@$^&*()_+-`1234567890[]|/?><.,;:'": { 3 | "type": "integer", "value": "1" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/key-special-chars.toml: -------------------------------------------------------------------------------- 1 | "~!@$^&*()_+-`1234567890[]|/?><.,;:'" = 1 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/key-special-chars.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 42) 2 | ENTRY@[0; 41) 3 | KEY@[0; 37) 4 | BASIC_STRING@[0; 37) "\"~!@$^&*()_+-`1234567890[]|/?><.,;:\'\"" 5 | WHITESPACE@[37; 38) 6 | EQ@[38; 39) "=" 7 | WHITESPACE@[39; 40) 8 | VALUE@[40; 41) 9 | NUMBER@[40; 41) "1" 10 | WHITESPACE@[41; 42) 11 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/keys-with-dots.json: -------------------------------------------------------------------------------- 1 | { 2 | "plain": {"type": "integer", "value": "1"}, 3 | "with.dot": {"type": "integer", "value": "2"}, 4 | "plain_table": { 5 | "plain": {"type": "integer", "value": "3"}, 6 | "with.dot": {"type": "integer", "value": "4"} 7 | }, 8 | "table": { 9 | "withdot": { 10 | "plain": {"type": "integer", "value": "5"}, 11 | "key.with.dots": {"type": "integer", "value": "6"} 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/keys-with-dots.toml: -------------------------------------------------------------------------------- 1 | plain = 1 2 | "with.dot" = 2 3 | 4 | [plain_table] 5 | plain = 3 6 | "with.dot" = 4 7 | 8 | [table.withdot] 9 | plain = 5 10 | "key.with.dots" = 6 -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/keys-with-dots.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 111) 2 | ENTRY@[0; 9) 3 | KEY@[0; 5) 4 | BARE_KEY@[0; 5) "plain" 5 | WHITESPACE@[5; 6) 6 | EQ@[6; 7) "=" 7 | WHITESPACE@[7; 8) 8 | VALUE@[8; 9) 9 | NUMBER@[8; 9) "1" 10 | WHITESPACE@[9; 10) 11 | ENTRY@[10; 24) 12 | KEY@[10; 20) 13 | BASIC_STRING@[10; 20) "\"with.dot\"" 14 | WHITESPACE@[20; 21) 15 | EQ@[21; 22) "=" 16 | WHITESPACE@[22; 23) 17 | VALUE@[23; 24) 18 | NUMBER@[23; 24) "2" 19 | WHITESPACE@[24; 26) 20 | TABLE@[26; 64) 21 | TABLE_HEADER@[26; 39) 22 | L_BRACK@[26; 27) "[" 23 | KEY@[27; 38) 24 | BARE_KEY@[27; 38) "plain_table" 25 | R_BRACK@[38; 39) "]" 26 | WHITESPACE@[39; 40) 27 | ENTRY@[40; 49) 28 | KEY@[40; 45) 29 | BARE_KEY@[40; 45) "plain" 30 | WHITESPACE@[45; 46) 31 | EQ@[46; 47) "=" 32 | WHITESPACE@[47; 48) 33 | VALUE@[48; 49) 34 | NUMBER@[48; 49) "3" 35 | WHITESPACE@[49; 50) 36 | ENTRY@[50; 64) 37 | KEY@[50; 60) 38 | BASIC_STRING@[50; 60) "\"with.dot\"" 39 | WHITESPACE@[60; 61) 40 | EQ@[61; 62) "=" 41 | WHITESPACE@[62; 63) 42 | VALUE@[63; 64) 43 | NUMBER@[63; 64) "4" 44 | WHITESPACE@[64; 66) 45 | TABLE@[66; 111) 46 | TABLE_HEADER@[66; 81) 47 | L_BRACK@[66; 67) "[" 48 | KEY@[67; 72) 49 | BARE_KEY@[67; 72) "table" 50 | DOT@[72; 73) "." 51 | KEY@[73; 80) 52 | BARE_KEY@[73; 80) "withdot" 53 | R_BRACK@[80; 81) "]" 54 | WHITESPACE@[81; 82) 55 | ENTRY@[82; 91) 56 | KEY@[82; 87) 57 | BARE_KEY@[82; 87) "plain" 58 | WHITESPACE@[87; 88) 59 | EQ@[88; 89) "=" 60 | WHITESPACE@[89; 90) 61 | VALUE@[90; 91) 62 | NUMBER@[90; 91) "5" 63 | WHITESPACE@[91; 92) 64 | ENTRY@[92; 111) 65 | KEY@[92; 107) 66 | BASIC_STRING@[92; 107) "\"key.with.dots\"" 67 | WHITESPACE@[107; 108) 68 | EQ@[108; 109) "=" 69 | WHITESPACE@[109; 110) 70 | VALUE@[110; 111) 71 | NUMBER@[110; 111) "6" 72 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/keys.json: -------------------------------------------------------------------------------- 1 | { 2 | "": { 3 | "type": "string", 4 | "value": "value" 5 | }, 6 | "1234": { 7 | "type": "string", 8 | "value": "value" 9 | }, 10 | "127.0.0.1": { 11 | "type": "string", 12 | "value": "value" 13 | }, 14 | "bare-key": { 15 | "type": "string", 16 | "value": "value" 17 | }, 18 | "bare_key": { 19 | "type": "string", 20 | "value": "value" 21 | }, 22 | "character encoding": { 23 | "type": "string", 24 | "value": "value" 25 | }, 26 | "key": { 27 | "type": "string", 28 | "value": "value" 29 | }, 30 | "key2": { 31 | "type": "string", 32 | "value": "value" 33 | }, 34 | "quoted \"value\"": { 35 | "type": "string", 36 | "value": "value" 37 | }, 38 | "ʎǝʞ": { 39 | "type": "string", 40 | "value": "value" 41 | } 42 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/keys.toml: -------------------------------------------------------------------------------- 1 | key = "value" 2 | bare_key = "value" 3 | bare-key = "value" 4 | 1234 = "value" 5 | 6 | "127.0.0.1" = "value" 7 | "character encoding" = "value" 8 | "ʎǝʞ" = "value" 9 | 'key2' = "value" 10 | 'quoted "value"' = "value" 11 | 12 | "" = "value" 13 | '' = "value" 14 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/long-float.json: -------------------------------------------------------------------------------- 1 | { 2 | "longpi": {"type": "float", "value": "3.141592653589793"}, 3 | "neglongpi": {"type": "float", "value": "-3.141592653589793"} 4 | } 5 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/long-float.toml: -------------------------------------------------------------------------------- 1 | longpi = 3.141592653589793 2 | neglongpi = -3.141592653589793 3 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/long-float.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 58) 2 | ENTRY@[0; 26) 3 | KEY@[0; 6) 4 | BARE_KEY@[0; 6) "longpi" 5 | WHITESPACE@[6; 7) 6 | EQ@[7; 8) "=" 7 | WHITESPACE@[8; 9) 8 | VALUE@[9; 26) 9 | NUMBER@[9; 26) "3.141592653589793" 10 | WHITESPACE@[26; 27) 11 | ENTRY@[27; 57) 12 | KEY@[27; 36) 13 | BARE_KEY@[27; 36) "neglongpi" 14 | WHITESPACE@[36; 37) 15 | EQ@[37; 38) "=" 16 | WHITESPACE@[38; 39) 17 | VALUE@[39; 57) 18 | NUMBER@[39; 57) "-3.141592653589793" 19 | WHITESPACE@[57; 58) 20 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/long-integer.json: -------------------------------------------------------------------------------- 1 | { 2 | "answer": {"type": "integer", "value": "9223372036854775807"}, 3 | "neganswer": {"type": "integer", "value": "-9223372036854775808"} 4 | } 5 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/long-integer.toml: -------------------------------------------------------------------------------- 1 | answer = 9223372036854775807 2 | neganswer = -9223372036854775808 3 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/long-integer.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 62) 2 | ENTRY@[0; 28) 3 | KEY@[0; 6) 4 | BARE_KEY@[0; 6) "answer" 5 | WHITESPACE@[6; 7) 6 | EQ@[7; 8) "=" 7 | WHITESPACE@[8; 9) 8 | VALUE@[9; 28) 9 | NUMBER@[9; 28) "9223372036854775807" 10 | WHITESPACE@[28; 29) 11 | ENTRY@[29; 61) 12 | KEY@[29; 38) 13 | BARE_KEY@[29; 38) "neganswer" 14 | WHITESPACE@[38; 39) 15 | EQ@[39; 40) "=" 16 | WHITESPACE@[40; 41) 17 | VALUE@[41; 61) 18 | NUMBER@[41; 61) "-9223372036854775808" 19 | WHITESPACE@[61; 62) 20 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/multiline-string-accidental-ws.json: -------------------------------------------------------------------------------- 1 | { 2 | "equivalent_one": { 3 | "type": "string", 4 | "value": "The quick brown fox jumps over the lazy dog." 5 | }, 6 | "equivalent_three": { 7 | "type": "string", 8 | "value": "\"\"\\ \n The quick brown \\ \n fox jumps over \\\n the lazy dog.\\ \n \"\"" 9 | }, 10 | "equivalent_two": { 11 | "type": "string", 12 | "value": "\"\"\nThe quick brown \\ \n\n\n fox jumps over \\ \n the lazy dog.\"\"" 13 | }, 14 | "multiline_empty_four": { 15 | "type": "string", 16 | "value": "\"\"\\ \n \\ \n \\ \n \"\"" 17 | }, 18 | "multiline_empty_one": { 19 | "type": "string", 20 | "value": "\"\"\"\"" 21 | }, 22 | "multiline_empty_three": { 23 | "type": "string", 24 | "value": "\"\"\\ \n \"\"" 25 | }, 26 | "multiline_empty_two": { 27 | "type": "string", 28 | "value": "\"\"\n\"\"" 29 | } 30 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/multiline-string-accidental-ws.toml: -------------------------------------------------------------------------------- 1 | multiline_empty_one = """""" 2 | multiline_empty_two = """ 3 | """ 4 | multiline_empty_three = """\ 5 | """ 6 | multiline_empty_four = """\ 7 | \ 8 | \ 9 | """ 10 | 11 | equivalent_one = "The quick brown fox jumps over the lazy dog." 12 | equivalent_two = """ 13 | The quick brown \ 14 | 15 | 16 | fox jumps over \ 17 | the lazy dog.""" 18 | 19 | equivalent_three = """\ 20 | The quick brown \ 21 | fox jumps over \ 22 | the lazy dog.\ 23 | """ 24 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/multiline-string.json: -------------------------------------------------------------------------------- 1 | { 2 | "multiline_empty_one": { 3 | "type": "string", 4 | "value": "" 5 | }, 6 | "multiline_empty_two": { 7 | "type": "string", 8 | "value": "" 9 | }, 10 | "multiline_empty_three": { 11 | "type": "string", 12 | "value": "" 13 | }, 14 | "multiline_empty_four": { 15 | "type": "string", 16 | "value": "" 17 | }, 18 | "equivalent_one": { 19 | "type": "string", 20 | "value": "The quick brown fox jumps over the lazy dog." 21 | }, 22 | "equivalent_two": { 23 | "type": "string", 24 | "value": "The quick brown fox jumps over the lazy dog." 25 | }, 26 | "equivalent_three": { 27 | "type": "string", 28 | "value": "The quick brown fox jumps over the lazy dog." 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/multiline-string.toml: -------------------------------------------------------------------------------- 1 | multiline_empty_one = """""" 2 | multiline_empty_two = """ 3 | """ 4 | multiline_empty_three = """\ 5 | """ 6 | multiline_empty_four = """\ 7 | \ 8 | \ 9 | """ 10 | 11 | equivalent_one = "The quick brown fox jumps over the lazy dog." 12 | equivalent_two = """ 13 | The quick brown \ 14 | 15 | 16 | fox jumps over \ 17 | the lazy dog.""" 18 | 19 | equivalent_three = """\ 20 | The quick brown \ 21 | fox jumps over \ 22 | the lazy dog.\ 23 | """ 24 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/numbers.json: -------------------------------------------------------------------------------- 1 | { 2 | "int1": { 3 | "type": "integer", 4 | "value": "99" 5 | }, 6 | "int2": { 7 | "type": "integer", 8 | "value": "42" 9 | }, 10 | "int3": { 11 | "type": "integer", 12 | "value": "0" 13 | }, 14 | "int4": { 15 | "type": "integer", 16 | "value": "-17" 17 | }, 18 | "int5": { 19 | "type": "integer", 20 | "value": "1000" 21 | }, 22 | "int6": { 23 | "type": "integer", 24 | "value": "5349221" 25 | }, 26 | "int7": { 27 | "type": "integer", 28 | "value": "12345" 29 | }, 30 | "flt1": { 31 | "type": "float", 32 | "value": "1.0" 33 | }, 34 | "flt2": { 35 | "type": "float", 36 | "value": "3.1415" 37 | }, 38 | "flt3": { 39 | "type": "float", 40 | "value": "-0.01" 41 | }, 42 | "flt4": { 43 | "type": "float", 44 | "value": "5e+22" 45 | }, 46 | "flt5": { 47 | "type": "float", 48 | "value": "1e6" 49 | }, 50 | "flt6": { 51 | "type": "float", 52 | "value": "-2E-2" 53 | }, 54 | "flt7": { 55 | "type": "float", 56 | "value": "6.626e-34" 57 | }, 58 | "flt8": { 59 | "type": "float", 60 | "value": "9224617.445991228313" 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/numbers.toml: -------------------------------------------------------------------------------- 1 | int1 = +99 2 | int2 = 42 3 | int3 = 0 4 | int4 = -17 5 | int5 = 1_000 6 | int6 = 5_349_221 7 | int7 = 1_2_3_4_5 8 | 9 | flt1 = +1.0 10 | flt2 = 3.1415 11 | flt3 = -0.01 12 | flt4 = 5e+22 13 | flt5 = 1e6 14 | flt6 = -2E-2 15 | flt7 = 6.626e-34 16 | flt8 = 9_224_617.445_991_228_313 17 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/raw-multiline-string.json: -------------------------------------------------------------------------------- 1 | { 2 | "oneline": { 3 | "type": "string", 4 | "value": "This string has a ' quote character." 5 | }, 6 | "firstnl": { 7 | "type": "string", 8 | "value": "This string has a ' quote character." 9 | }, 10 | "multiline": { 11 | "type": "string", 12 | "value": "This string\nhas ' a quote character\nand more than\none newline\nin it." 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/raw-multiline-string.toml: -------------------------------------------------------------------------------- 1 | oneline = '''This string has a ' quote character.''' 2 | firstnl = ''' 3 | This string has a ' quote character.''' 4 | multiline = ''' 5 | This string 6 | has ' a quote character 7 | and more than 8 | one newline 9 | in it.''' 10 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/raw-multiline-string.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 195) 2 | ENTRY@[0; 52) 3 | KEY@[0; 7) 4 | BARE_KEY@[0; 7) "oneline" 5 | WHITESPACE@[7; 8) 6 | EQ@[8; 9) "=" 7 | WHITESPACE@[9; 10) 8 | VALUE@[10; 52) 9 | MULTILINE_LITERAL_STRING@[10; 52) "\'\'\'This string has a \' quote character.\'\'\'" 10 | WHITESPACE@[52; 53) 11 | ENTRY@[53; 106) 12 | KEY@[53; 60) 13 | BARE_KEY@[53; 60) "firstnl" 14 | WHITESPACE@[60; 61) 15 | EQ@[61; 62) "=" 16 | WHITESPACE@[62; 63) 17 | VALUE@[63; 106) 18 | MULTILINE_LITERAL_STRING@[63; 106) "\'\'\'\nThis string has a \' quote character.\'\'\'" 19 | WHITESPACE@[106; 107) 20 | ENTRY@[107; 194) 21 | KEY@[107; 116) 22 | BARE_KEY@[107; 116) "multiline" 23 | WHITESPACE@[116; 117) 24 | EQ@[117; 118) "=" 25 | WHITESPACE@[118; 119) 26 | VALUE@[119; 194) 27 | MULTILINE_LITERAL_STRING@[119; 194) "\'\'\'\nThis string\nhas \' a quote character\nand more than\none newline\nin it.\'\'\'" 28 | WHITESPACE@[194; 195) 29 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/raw-string.json: -------------------------------------------------------------------------------- 1 | { 2 | "backspace": { 3 | "type": "string", 4 | "value": "This string has a \\b backspace character." 5 | }, 6 | "tab": { 7 | "type": "string", 8 | "value": "This string has a \\t tab character." 9 | }, 10 | "newline": { 11 | "type": "string", 12 | "value": "This string has a \\n new line character." 13 | }, 14 | "formfeed": { 15 | "type": "string", 16 | "value": "This string has a \\f form feed character." 17 | }, 18 | "carriage": { 19 | "type": "string", 20 | "value": "This string has a \\r carriage return character." 21 | }, 22 | "slash": { 23 | "type": "string", 24 | "value": "This string has a \\/ slash character." 25 | }, 26 | "backslash": { 27 | "type": "string", 28 | "value": "This string has a \\\\ backslash character." 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/raw-string.toml: -------------------------------------------------------------------------------- 1 | backspace = 'This string has a \b backspace character.' 2 | tab = 'This string has a \t tab character.' 3 | newline = 'This string has a \n new line character.' 4 | formfeed = 'This string has a \f form feed character.' 5 | carriage = 'This string has a \r carriage return character.' 6 | slash = 'This string has a \/ slash character.' 7 | backslash = 'This string has a \\ backslash character.' 8 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/simple.json: -------------------------------------------------------------------------------- 1 | { 2 | "bar": { 3 | "type": "bool", 4 | "value": "false" 5 | }, 6 | "foo": { 7 | "type": "integer", 8 | "value": "92" 9 | } 10 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/simple.toml: -------------------------------------------------------------------------------- 1 | foo = 92 2 | bar = false 3 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/simple.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 21) 2 | ENTRY@[0; 8) 3 | KEY@[0; 3) 4 | BARE_KEY@[0; 3) "foo" 5 | WHITESPACE@[3; 4) 6 | EQ@[4; 5) "=" 7 | WHITESPACE@[5; 6) 8 | VALUE@[6; 8) 9 | NUMBER@[6; 8) "92" 10 | WHITESPACE@[8; 9) 11 | ENTRY@[9; 20) 12 | KEY@[9; 12) 13 | BARE_KEY@[9; 12) "bar" 14 | WHITESPACE@[12; 13) 15 | EQ@[13; 14) "=" 16 | WHITESPACE@[14; 15) 17 | VALUE@[15; 20) 18 | BOOL@[15; 20) "false" 19 | WHITESPACE@[20; 21) 20 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/string-empty.json: -------------------------------------------------------------------------------- 1 | { 2 | "answer": { 3 | "type": "string", 4 | "value": "" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/string-empty.toml: -------------------------------------------------------------------------------- 1 | answer = "" 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/string-empty.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 12) 2 | ENTRY@[0; 11) 3 | KEY@[0; 6) 4 | BARE_KEY@[0; 6) "answer" 5 | WHITESPACE@[6; 7) 6 | EQ@[7; 8) "=" 7 | WHITESPACE@[8; 9) 8 | VALUE@[9; 11) 9 | BASIC_STRING@[9; 11) "\"\"" 10 | WHITESPACE@[11; 12) 11 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/string-escapes.json: -------------------------------------------------------------------------------- 1 | { 2 | "backspace": { 3 | "type": "string", 4 | "value": "This string has a \u0008 backspace character." 5 | }, 6 | "tab": { 7 | "type": "string", 8 | "value": "This string has a \u0009 tab character." 9 | }, 10 | "newline": { 11 | "type": "string", 12 | "value": "This string has a \u000A new line character." 13 | }, 14 | "formfeed": { 15 | "type": "string", 16 | "value": "This string has a \u000C form feed character." 17 | }, 18 | "carriage": { 19 | "type": "string", 20 | "value": "This string has a \u000D carriage return character." 21 | }, 22 | "quote": { 23 | "type": "string", 24 | "value": "This string has a \u0022 quote character." 25 | }, 26 | "backslash": { 27 | "type": "string", 28 | "value": "This string has a \u005C backslash character." 29 | }, 30 | "notunicode1": { 31 | "type": "string", 32 | "value": "This string does not have a unicode \\u escape." 33 | }, 34 | "notunicode2": { 35 | "type": "string", 36 | "value": "This string does not have a unicode \u005Cu escape." 37 | }, 38 | "notunicode3": { 39 | "type": "string", 40 | "value": "This string does not have a unicode \\u0075 escape." 41 | }, 42 | "notunicode4": { 43 | "type": "string", 44 | "value": "This string does not have a unicode \\\u0075 escape." 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/string-escapes.toml: -------------------------------------------------------------------------------- 1 | backspace = "This string has a \b backspace character." 2 | tab = "This string has a \t tab character." 3 | newline = "This string has a \n new line character." 4 | formfeed = "This string has a \f form feed character." 5 | carriage = "This string has a \r carriage return character." 6 | quote = "This string has a \" quote character." 7 | backslash = "This string has a \\ backslash character." 8 | notunicode1 = "This string does not have a unicode \\u escape." 9 | notunicode2 = "This string does not have a unicode \u005Cu escape." 10 | notunicode3 = "This string does not have a unicode \\u0075 escape." 11 | notunicode4 = "This string does not have a unicode \\\u0075 escape." 12 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/string-nl.json: -------------------------------------------------------------------------------- 1 | { 2 | "nl_mid": { 3 | "type": "string", 4 | "value": "val\nue" 5 | }, 6 | "nl_end": { 7 | "type": "string", 8 | "value": "value\n" 9 | }, 10 | "lit_nl_end": { 11 | "type": "string", 12 | "value": "value\\n" 13 | }, 14 | "lit_nl_mid": { 15 | "type": "string", 16 | "value": "val\\nue" 17 | }, 18 | "lit_nl_uni": { 19 | "type": "string", 20 | "value": "val\\ue" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/string-nl.toml: -------------------------------------------------------------------------------- 1 | nl_mid = "val\nue" 2 | nl_end = """value\n""" 3 | 4 | lit_nl_end = '''value\n''' 5 | lit_nl_mid = 'val\nue' 6 | lit_nl_uni = 'val\ue' 7 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/string-nl.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 115) 2 | ENTRY@[0; 18) 3 | KEY@[0; 6) 4 | BARE_KEY@[0; 6) "nl_mid" 5 | WHITESPACE@[6; 7) 6 | EQ@[7; 8) "=" 7 | WHITESPACE@[8; 9) 8 | VALUE@[9; 18) 9 | BASIC_STRING@[9; 18) "\"val\\nue\"" 10 | WHITESPACE@[18; 19) 11 | ENTRY@[19; 41) 12 | KEY@[19; 25) 13 | BARE_KEY@[19; 25) "nl_end" 14 | WHITESPACE@[25; 26) 15 | EQ@[26; 27) "=" 16 | WHITESPACE@[27; 28) 17 | VALUE@[28; 41) 18 | MULTILINE_BASIC_STRING@[28; 41) "\"\"\"value\\n\"\"\"" 19 | WHITESPACE@[41; 43) 20 | ENTRY@[43; 69) 21 | KEY@[43; 53) 22 | BARE_KEY@[43; 53) "lit_nl_end" 23 | WHITESPACE@[53; 54) 24 | EQ@[54; 55) "=" 25 | WHITESPACE@[55; 56) 26 | VALUE@[56; 69) 27 | MULTILINE_LITERAL_STRING@[56; 69) "\'\'\'value\\n\'\'\'" 28 | WHITESPACE@[69; 70) 29 | ENTRY@[70; 92) 30 | KEY@[70; 80) 31 | BARE_KEY@[70; 80) "lit_nl_mid" 32 | WHITESPACE@[80; 81) 33 | EQ@[81; 82) "=" 34 | WHITESPACE@[82; 83) 35 | VALUE@[83; 92) 36 | LITERAL_STRING@[83; 92) "\'val\\nue\'" 37 | WHITESPACE@[92; 93) 38 | ENTRY@[93; 114) 39 | KEY@[93; 103) 40 | BARE_KEY@[93; 103) "lit_nl_uni" 41 | WHITESPACE@[103; 104) 42 | EQ@[104; 105) "=" 43 | WHITESPACE@[105; 106) 44 | VALUE@[106; 114) 45 | LITERAL_STRING@[106; 114) "\'val\\ue\'" 46 | WHITESPACE@[114; 115) 47 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/string-simple.json: -------------------------------------------------------------------------------- 1 | { 2 | "answer": { 3 | "type": "string", 4 | "value": "You are not drinking enough whisky." 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/string-simple.toml: -------------------------------------------------------------------------------- 1 | answer = "You are not drinking enough whisky." 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/string-simple.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 47) 2 | ENTRY@[0; 46) 3 | KEY@[0; 6) 4 | BARE_KEY@[0; 6) "answer" 5 | WHITESPACE@[6; 7) 6 | EQ@[7; 8) "=" 7 | WHITESPACE@[8; 9) 8 | VALUE@[9; 46) 9 | BASIC_STRING@[9; 46) "\"You are not drinking enough whisky.\"" 10 | WHITESPACE@[46; 47) 11 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/string-with-pound.json: -------------------------------------------------------------------------------- 1 | { 2 | "pound": {"type": "string", "value": "We see no # comments here."}, 3 | "poundcomment": { 4 | "type": "string", 5 | "value": "But there are # some comments here." 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/string-with-pound.toml: -------------------------------------------------------------------------------- 1 | pound = "We see no # comments here." 2 | poundcomment = "But there are # some comments here." # Did I # mess you up? 3 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/string-with-pound.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 113) 2 | ENTRY@[0; 36) 3 | KEY@[0; 5) 4 | BARE_KEY@[0; 5) "pound" 5 | WHITESPACE@[5; 6) 6 | EQ@[6; 7) "=" 7 | WHITESPACE@[7; 8) 8 | VALUE@[8; 36) 9 | BASIC_STRING@[8; 36) "\"We see no # comments here.\"" 10 | WHITESPACE@[36; 37) 11 | ENTRY@[37; 112) 12 | KEY@[37; 49) 13 | BARE_KEY@[37; 49) "poundcomment" 14 | WHITESPACE@[49; 50) 15 | EQ@[50; 51) "=" 16 | WHITESPACE@[51; 52) 17 | VALUE@[52; 89) 18 | BASIC_STRING@[52; 89) "\"But there are # some comments here.\"" 19 | WHITESPACE@[89; 90) 20 | COMMENT@[90; 112) "# Did I # mess you up?" 21 | WHITESPACE@[112; 113) 22 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/strings.json: -------------------------------------------------------------------------------- 1 | { 2 | "lines": { 3 | "type": "string", 4 | "value": "''\nThe first newline is\ntrimmed in raw strings.\n All other whitespace\n is preserved.\n''" 5 | }, 6 | "quoted": { 7 | "type": "string", 8 | "value": "Tom \"Dubs\" Preston-Werner" 9 | }, 10 | "regex": { 11 | "type": "string", 12 | "value": "<\\i\\c*\\s*>" 13 | }, 14 | "regex2": { 15 | "type": "string", 16 | "value": "''I [dw]on't need \\d{2} apples''" 17 | }, 18 | "str": { 19 | "type": "string", 20 | "value": "I'm a string. \\\"You can quote me\\\". Name\\tJos\\u00E9\\nLocation\\tSF." 21 | }, 22 | "str1": { 23 | "type": "string", 24 | "value": "The quick brown fox jumps over the lazy dog." 25 | }, 26 | "str2": { 27 | "type": "string", 28 | "value": "\"\"\nThe quick brown \\\n\n\n fox jumps over \\\n the lazy dog.\"\"" 29 | }, 30 | "str3": { 31 | "type": "string", 32 | "value": "\"\"\\\n The quick brown \\\n fox jumps over \\\n the lazy dog.\\\n \"\"" 33 | }, 34 | "winpath": { 35 | "type": "string", 36 | "value": "C:\\Users\\nodejs\\templates" 37 | }, 38 | "winpath2": { 39 | "type": "string", 40 | "value": "\\\\ServerX\\admin$\\system32\\" 41 | } 42 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/strings.toml: -------------------------------------------------------------------------------- 1 | str = "I'm a string. \"You can quote me\". Name\tJos\u00E9\nLocation\tSF." 2 | 3 | str1 = """ 4 | Roses are red 5 | Violets are blue""" 6 | str2 = "Roses are red\nViolets are blue" 7 | str3 = "Roses are red\r\nViolets are blue" 8 | 9 | str1 = "The quick brown fox jumps over the lazy dog." 10 | str2 = """ 11 | The quick brown \ 12 | 13 | 14 | fox jumps over \ 15 | the lazy dog.""" 16 | str3 = """\ 17 | The quick brown \ 18 | fox jumps over \ 19 | the lazy dog.\ 20 | """ 21 | 22 | winpath = 'C:\Users\nodejs\templates' 23 | winpath2 = '\\ServerX\admin$\system32\' 24 | quoted = 'Tom "Dubs" Preston-Werner' 25 | regex = '<\i\c*\s*>' 26 | 27 | regex2 = '''I [dw]on't need \d{2} apples''' 28 | lines = ''' 29 | The first newline is 30 | trimmed in raw strings. 31 | All other whitespace 32 | is preserved. 33 | ''' 34 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-array-implicit.json: -------------------------------------------------------------------------------- 1 | { 2 | "albums": { 3 | "songs": [ 4 | {"name": {"type": "string", "value": "Glory Days"}} 5 | ] 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-array-implicit.toml: -------------------------------------------------------------------------------- 1 | [[albums.songs]] 2 | name = "Glory Days" 3 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-array-implicit.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 37) 2 | ARRAY_TABLE@[0; 36) 3 | TABLE_HEADER@[0; 16) 4 | L_BRACK@[0; 1) "[" 5 | L_BRACK@[1; 2) "[" 6 | KEY@[2; 8) 7 | BARE_KEY@[2; 8) "albums" 8 | DOT@[8; 9) "." 9 | KEY@[9; 14) 10 | BARE_KEY@[9; 14) "songs" 11 | R_BRACK@[14; 15) "]" 12 | R_BRACK@[15; 16) "]" 13 | WHITESPACE@[16; 17) 14 | ENTRY@[17; 36) 15 | KEY@[17; 21) 16 | BARE_KEY@[17; 21) "name" 17 | WHITESPACE@[21; 22) 18 | EQ@[22; 23) "=" 19 | WHITESPACE@[23; 24) 20 | VALUE@[24; 36) 21 | BASIC_STRING@[24; 36) "\"Glory Days\"" 22 | WHITESPACE@[36; 37) 23 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-array-many.json: -------------------------------------------------------------------------------- 1 | { 2 | "people": [ 3 | { 4 | "first_name": {"type": "string", "value": "Bruce"}, 5 | "last_name": {"type": "string", "value": "Springsteen"} 6 | }, 7 | { 8 | "first_name": {"type": "string", "value": "Eric"}, 9 | "last_name": {"type": "string", "value": "Clapton"} 10 | }, 11 | { 12 | "first_name": {"type": "string", "value": "Bob"}, 13 | "last_name": {"type": "string", "value": "Seger"} 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-array-many.toml: -------------------------------------------------------------------------------- 1 | [[people]] 2 | first_name = "Bruce" 3 | last_name = "Springsteen" 4 | 5 | [[people]] 6 | first_name = "Eric" 7 | last_name = "Clapton" 8 | 9 | [[people]] 10 | first_name = "Bob" 11 | last_name = "Seger" 12 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-array-nest.json: -------------------------------------------------------------------------------- 1 | { 2 | "albums": [ 3 | { 4 | "name": {"type": "string", "value": "Born to Run"}, 5 | "songs": [ 6 | {"name": {"type": "string", "value": "Jungleland"}}, 7 | {"name": {"type": "string", "value": "Meeting Across the River"}} 8 | ] 9 | }, 10 | { 11 | "name": {"type": "string", "value": "Born in the USA"}, 12 | "songs": [ 13 | {"name": {"type": "string", "value": "Glory Days"}}, 14 | {"name": {"type": "string", "value": "Dancing in the Dark"}} 15 | ] 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-array-nest.toml: -------------------------------------------------------------------------------- 1 | [[albums]] 2 | name = "Born to Run" 3 | 4 | [[albums.songs]] 5 | name = "Jungleland" 6 | 7 | [[albums.songs]] 8 | name = "Meeting Across the River" 9 | 10 | [[albums]] 11 | name = "Born in the USA" 12 | 13 | [[albums.songs]] 14 | name = "Glory Days" 15 | 16 | [[albums.songs]] 17 | name = "Dancing in the Dark" 18 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-array-one.json: -------------------------------------------------------------------------------- 1 | { 2 | "people": [ 3 | { 4 | "first_name": {"type": "string", "value": "Bruce"}, 5 | "last_name": {"type": "string", "value": "Springsteen"} 6 | } 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-array-one.toml: -------------------------------------------------------------------------------- 1 | [[people]] 2 | first_name = "Bruce" 3 | last_name = "Springsteen" 4 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-array-one.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 58) 2 | ARRAY_TABLE@[0; 57) 3 | TABLE_HEADER@[0; 10) 4 | L_BRACK@[0; 1) "[" 5 | L_BRACK@[1; 2) "[" 6 | KEY@[2; 8) 7 | BARE_KEY@[2; 8) "people" 8 | R_BRACK@[8; 9) "]" 9 | R_BRACK@[9; 10) "]" 10 | WHITESPACE@[10; 11) 11 | ENTRY@[11; 31) 12 | KEY@[11; 21) 13 | BARE_KEY@[11; 21) "first_name" 14 | WHITESPACE@[21; 22) 15 | EQ@[22; 23) "=" 16 | WHITESPACE@[23; 24) 17 | VALUE@[24; 31) 18 | BASIC_STRING@[24; 31) "\"Bruce\"" 19 | WHITESPACE@[31; 32) 20 | ENTRY@[32; 57) 21 | KEY@[32; 41) 22 | BARE_KEY@[32; 41) "last_name" 23 | WHITESPACE@[41; 42) 24 | EQ@[42; 43) "=" 25 | WHITESPACE@[43; 44) 26 | VALUE@[44; 57) 27 | BASIC_STRING@[44; 57) "\"Springsteen\"" 28 | WHITESPACE@[57; 58) 29 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-array-table-array.json: -------------------------------------------------------------------------------- 1 | { 2 | "a": [ 3 | { 4 | "b": [ 5 | { "c" : { "d": {"type": "string", "value": "val0" } } }, 6 | { "c" : { "d": {"type": "string", "value": "val1" } } } 7 | ] 8 | } 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-array-table-array.toml: -------------------------------------------------------------------------------- 1 | [[a]] 2 | [[a.b]] 3 | [a.b.c] 4 | d = "val0" 5 | [[a.b]] 6 | [a.b.c] 7 | d = "val1" 8 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-empty.json: -------------------------------------------------------------------------------- 1 | { 2 | "a": {} 3 | } 4 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-empty.toml: -------------------------------------------------------------------------------- 1 | [a] 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-empty.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 4) 2 | TABLE@[0; 3) 3 | TABLE_HEADER@[0; 3) 4 | L_BRACK@[0; 1) "[" 5 | KEY@[1; 2) 6 | BARE_KEY@[1; 2) "a" 7 | R_BRACK@[2; 3) "]" 8 | WHITESPACE@[3; 4) 9 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-no-eol.json: -------------------------------------------------------------------------------- 1 | { "table": {} } 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-no-eol.toml: -------------------------------------------------------------------------------- 1 | [table] -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-no-eol.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 7) 2 | TABLE@[0; 7) 3 | TABLE_HEADER@[0; 7) 4 | L_BRACK@[0; 1) "[" 5 | KEY@[1; 6) 6 | BARE_KEY@[1; 6) "table" 7 | R_BRACK@[6; 7) "]" 8 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-sub-empty.json: -------------------------------------------------------------------------------- 1 | { 2 | "a": { "b": {} } 3 | } 4 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-sub-empty.toml: -------------------------------------------------------------------------------- 1 | [a] 2 | [a.b] 3 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-sub-empty.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 10) 2 | TABLE@[0; 3) 3 | TABLE_HEADER@[0; 3) 4 | L_BRACK@[0; 1) "[" 5 | KEY@[1; 2) 6 | BARE_KEY@[1; 2) "a" 7 | R_BRACK@[2; 3) "]" 8 | WHITESPACE@[3; 4) 9 | TABLE@[4; 9) 10 | TABLE_HEADER@[4; 9) 11 | L_BRACK@[4; 5) "[" 12 | KEY@[5; 6) 13 | BARE_KEY@[5; 6) "a" 14 | DOT@[6; 7) "." 15 | KEY@[7; 8) 16 | BARE_KEY@[7; 8) "b" 17 | R_BRACK@[8; 9) "]" 18 | WHITESPACE@[9; 10) 19 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-whitespace.json: -------------------------------------------------------------------------------- 1 | { 2 | "valid key": {} 3 | } 4 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-whitespace.toml: -------------------------------------------------------------------------------- 1 | ["valid key"] 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-whitespace.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 14) 2 | TABLE@[0; 13) 3 | TABLE_HEADER@[0; 13) 4 | L_BRACK@[0; 1) "[" 5 | KEY@[1; 12) 6 | BASIC_STRING@[1; 12) "\"valid key\"" 7 | R_BRACK@[12; 13) "]" 8 | WHITESPACE@[13; 14) 9 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-with-literal-string.json: -------------------------------------------------------------------------------- 1 | { 2 | "a": { 3 | "\"b\"": { 4 | "c": { 5 | "answer": {"type": "integer", "value": "42"} 6 | } 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-with-literal-string.toml: -------------------------------------------------------------------------------- 1 | ['a'] 2 | [a.'"b"'] 3 | [a.'"b"'.c] 4 | answer = 42 5 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-with-literal-string.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 41) 2 | TABLE@[0; 5) 3 | TABLE_HEADER@[0; 5) 4 | L_BRACK@[0; 1) "[" 5 | KEY@[1; 4) 6 | LITERAL_STRING@[1; 4) "\'a\'" 7 | R_BRACK@[4; 5) "]" 8 | WHITESPACE@[5; 6) 9 | TABLE@[6; 15) 10 | TABLE_HEADER@[6; 15) 11 | L_BRACK@[6; 7) "[" 12 | KEY@[7; 8) 13 | BARE_KEY@[7; 8) "a" 14 | DOT@[8; 9) "." 15 | KEY@[9; 14) 16 | LITERAL_STRING@[9; 14) "\'\"b\"\'" 17 | R_BRACK@[14; 15) "]" 18 | WHITESPACE@[15; 16) 19 | TABLE@[16; 39) 20 | TABLE_HEADER@[16; 27) 21 | L_BRACK@[16; 17) "[" 22 | KEY@[17; 18) 23 | BARE_KEY@[17; 18) "a" 24 | DOT@[18; 19) "." 25 | KEY@[19; 24) 26 | LITERAL_STRING@[19; 24) "\'\"b\"\'" 27 | DOT@[24; 25) "." 28 | KEY@[25; 26) 29 | BARE_KEY@[25; 26) "c" 30 | R_BRACK@[26; 27) "]" 31 | WHITESPACE@[27; 28) 32 | ENTRY@[28; 39) 33 | KEY@[28; 34) 34 | BARE_KEY@[28; 34) "answer" 35 | WHITESPACE@[34; 35) 36 | EQ@[35; 36) "=" 37 | WHITESPACE@[36; 37) 38 | VALUE@[37; 39) 39 | NUMBER@[37; 39) "42" 40 | WHITESPACE@[39; 41) 41 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-with-pound.json: -------------------------------------------------------------------------------- 1 | { 2 | "key#group": { 3 | "answer": {"type": "integer", "value": "42"} 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-with-pound.toml: -------------------------------------------------------------------------------- 1 | ["key#group"] 2 | answer = 42 3 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-with-pound.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 26) 2 | TABLE@[0; 25) 3 | TABLE_HEADER@[0; 13) 4 | L_BRACK@[0; 1) "[" 5 | KEY@[1; 12) 6 | BASIC_STRING@[1; 12) "\"key#group\"" 7 | R_BRACK@[12; 13) "]" 8 | WHITESPACE@[13; 14) 9 | ENTRY@[14; 25) 10 | KEY@[14; 20) 11 | BARE_KEY@[14; 20) "answer" 12 | WHITESPACE@[20; 21) 13 | EQ@[21; 22) "=" 14 | WHITESPACE@[22; 23) 15 | VALUE@[23; 25) 16 | NUMBER@[23; 25) "42" 17 | WHITESPACE@[25; 26) 18 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-with-single-quotes.json: -------------------------------------------------------------------------------- 1 | { 2 | "a": { 3 | "b": { 4 | "c": { 5 | "answer": {"type": "integer", "value": "42"} 6 | } 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-with-single-quotes.toml: -------------------------------------------------------------------------------- 1 | ['a'] 2 | [a.'b'] 3 | [a.'b'.c] 4 | answer = 42 5 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/table-with-single-quotes.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 37) 2 | TABLE@[0; 5) 3 | TABLE_HEADER@[0; 5) 4 | L_BRACK@[0; 1) "[" 5 | KEY@[1; 4) 6 | LITERAL_STRING@[1; 4) "\'a\'" 7 | R_BRACK@[4; 5) "]" 8 | WHITESPACE@[5; 6) 9 | TABLE@[6; 13) 10 | TABLE_HEADER@[6; 13) 11 | L_BRACK@[6; 7) "[" 12 | KEY@[7; 8) 13 | BARE_KEY@[7; 8) "a" 14 | DOT@[8; 9) "." 15 | KEY@[9; 12) 16 | LITERAL_STRING@[9; 12) "\'b\'" 17 | R_BRACK@[12; 13) "]" 18 | WHITESPACE@[13; 14) 19 | TABLE@[14; 35) 20 | TABLE_HEADER@[14; 23) 21 | L_BRACK@[14; 15) "[" 22 | KEY@[15; 16) 23 | BARE_KEY@[15; 16) "a" 24 | DOT@[16; 17) "." 25 | KEY@[17; 20) 26 | LITERAL_STRING@[17; 20) "\'b\'" 27 | DOT@[20; 21) "." 28 | KEY@[21; 22) 29 | BARE_KEY@[21; 22) "c" 30 | R_BRACK@[22; 23) "]" 31 | WHITESPACE@[23; 24) 32 | ENTRY@[24; 35) 33 | KEY@[24; 30) 34 | BARE_KEY@[24; 30) "answer" 35 | WHITESPACE@[30; 31) 36 | EQ@[31; 32) "=" 37 | WHITESPACE@[32; 33) 38 | VALUE@[33; 35) 39 | NUMBER@[33; 35) "42" 40 | WHITESPACE@[35; 37) 41 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/tables.json: -------------------------------------------------------------------------------- 1 | { 2 | "a": { 3 | "b": { 4 | "c": { 5 | "type": "integer", 6 | "value": "1" 7 | } 8 | }, 9 | "d": { 10 | "type": "integer", 11 | "value": "2" 12 | } 13 | }, 14 | "d": { 15 | "e": { 16 | "f": {} 17 | } 18 | }, 19 | "dog": { 20 | "tater.man": { 21 | "type": { 22 | "type": "string", 23 | "value": "pug" 24 | } 25 | } 26 | }, 27 | "g": { 28 | "h": { 29 | "i": {} 30 | } 31 | }, 32 | "j": { 33 | "ʞ": { 34 | "l": {} 35 | } 36 | }, 37 | "table": {}, 38 | "table-1": { 39 | "key1": { 40 | "type": "string", 41 | "value": "some string" 42 | }, 43 | "key2": { 44 | "type": "integer", 45 | "value": "123" 46 | } 47 | }, 48 | "table-2": { 49 | "key1": { 50 | "type": "string", 51 | "value": "another string" 52 | }, 53 | "key2": { 54 | "type": "integer", 55 | "value": "456" 56 | } 57 | }, 58 | "x": { 59 | "y": { 60 | "z": { 61 | "w": {} 62 | } 63 | } 64 | } 65 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/tables.toml: -------------------------------------------------------------------------------- 1 | [table] 2 | 3 | [table-1] 4 | key1 = "some string" 5 | key2 = 123 6 | 7 | [table-2] 8 | key1 = "another string" 9 | key2 = 456 10 | 11 | [dog."tater.man"] 12 | type = "pug" 13 | 14 | [a.b.c] 15 | [ d.e.f ] 16 | [ g . h . i ] 17 | [ j . "ʞ" . 'l' ] 18 | 19 | [x.y.z.w] 20 | 21 | [a.b] 22 | c = 1 23 | 24 | [a] 25 | d = 2 26 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/time.json: -------------------------------------------------------------------------------- 1 | { 2 | "odt1": { 3 | "type": "datetime", 4 | "value": "1979-05-27T07:32:00Z" 5 | }, 6 | "odt2": { 7 | "type": "datetime", 8 | "value": "1979-05-27T00:32:00-07:00" 9 | }, 10 | "odt3": { 11 | "type": "datetime", 12 | "value": "1979-05-27T00:32:00.999999-07:00" 13 | }, 14 | "ldt1": { 15 | "type": "datetime", 16 | "value": "1979-05-27T07:32:00" 17 | }, 18 | "ldt2": { 19 | "type": "datetime", 20 | "value": "1979-05-27T00:32:00.999999" 21 | }, 22 | "ld1": { 23 | "type": "datetime", 24 | "value": "1979-05-27" 25 | }, 26 | "lt1": { 27 | "type": "datetime", 28 | "value": "07:32:00" 29 | }, 30 | "lt2": { 31 | "type": "datetime", 32 | "value": "00:32:00.999999" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/time.toml: -------------------------------------------------------------------------------- 1 | odt1 = 1979-05-27T07:32:00Z 2 | odt2 = 1979-05-27T00:32:00-07:00 3 | odt3 = 1979-05-27T00:32:00.999999-07:00 4 | 5 | ldt1 = 1979-05-27T07:32:00 6 | ldt2 = 1979-05-27T00:32:00.999999 7 | 8 | ld1 = 1979-05-27 9 | 10 | lt1 = 07:32:00 11 | lt2 = 00:32:00.999999 12 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/unicode-escape.json: -------------------------------------------------------------------------------- 1 | { 2 | "answer4": {"type": "string", "value": "\u03B4"}, 3 | "answer8": {"type": "string", "value": "\u03B4"} 4 | } 5 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/unicode-escape.toml: -------------------------------------------------------------------------------- 1 | answer4 = "\u03B4" 2 | answer8 = "\U000003B4" 3 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/unicode-escape.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 42) 2 | ENTRY@[0; 18) 3 | KEY@[0; 7) 4 | BARE_KEY@[0; 7) "answer4" 5 | WHITESPACE@[7; 8) 6 | EQ@[8; 9) "=" 7 | WHITESPACE@[9; 10) 8 | VALUE@[10; 18) 9 | BASIC_STRING@[10; 18) "\"\\u03B4\"" 10 | WHITESPACE@[18; 19) 11 | ENTRY@[19; 41) 12 | KEY@[19; 26) 13 | BARE_KEY@[19; 26) "answer8" 14 | WHITESPACE@[26; 27) 15 | EQ@[27; 28) "=" 16 | WHITESPACE@[28; 29) 17 | VALUE@[29; 41) 18 | BASIC_STRING@[29; 41) "\"\\U000003B4\"" 19 | WHITESPACE@[41; 42) 20 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/unicode-literal.json: -------------------------------------------------------------------------------- 1 | { 2 | "answer": {"type": "string", "value": "δ"} 3 | } 4 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/unicode-literal.toml: -------------------------------------------------------------------------------- 1 | answer = "δ" 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/ok/unicode-literal.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 14) 2 | ENTRY@[0; 13) 3 | KEY@[0; 6) 4 | BARE_KEY@[0; 6) "answer" 5 | WHITESPACE@[6; 7) 6 | EQ@[7; 8) "=" 7 | WHITESPACE@[8; 9) 8 | VALUE@[9; 13) 9 | BASIC_STRING@[9; 13) "\"δ\"" 10 | WHITESPACE@[13; 14) 11 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/validation/ignored/array-mixed-types-arrays-and-ints.toml: -------------------------------------------------------------------------------- 1 | arrays-and-ints = [1, ["Arrays are not integers."]] 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/validation/ignored/array-mixed-types-ints-and-floats.toml: -------------------------------------------------------------------------------- 1 | ints-and-floats = [1, 1.1] 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/validation/ignored/array-mixed-types-strings-and-ints.toml: -------------------------------------------------------------------------------- 1 | strings-and-ints = ["hi", 42] 2 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/validation/ignored/duplicate-key-table.toml: -------------------------------------------------------------------------------- 1 | [fruit] 2 | type = "apple" 3 | 4 | [fruit.type] 5 | apple = "yes" 6 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/validation/ignored/duplicate-keys.toml: -------------------------------------------------------------------------------- 1 | dupe = false 2 | dupe = true 3 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/validation/ignored/duplicate-tables.toml: -------------------------------------------------------------------------------- 1 | [a] 2 | [a] 3 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/validation/ignored/table-array-implicit.toml: -------------------------------------------------------------------------------- 1 | # This test is a bit tricky. It should fail because the first use of 2 | # `[[albums.songs]]` without first declaring `albums` implies that `albums` 3 | # must be a table. The alternative would be quite weird. Namely, it wouldn't 4 | # comply with the TOML spec: "Each double-bracketed sub-table will belong to 5 | # the most *recently* defined table element *above* it." 6 | # 7 | # This is in contrast to the *valid* test, table-array-implicit where 8 | # `[[albums.songs]]` works by itself, so long as `[[albums]]` isn't declared 9 | # later. (Although, `[albums]` could be.) 10 | [[albums.songs]] 11 | name = "Glory Days" 12 | 13 | [[albums]] 14 | name = "Born in the USA" 15 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/validation/newlines-after-headre.json: -------------------------------------------------------------------------------- 1 | { 2 | "array-table": { 3 | "type": "array", 4 | "value": [ 5 | { 6 | "bar": { 7 | "type": "integer", 8 | "value": "92" 9 | } 10 | } 11 | ] 12 | }, 13 | "table": { 14 | "bar": { 15 | "type": "integer", 16 | "value": "92" 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/validation/newlines-after-headre.toml: -------------------------------------------------------------------------------- 1 | [table] bar = 92 2 | 3 | [[array-table]] bar = 92 4 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/validation/newlines-after-headre.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 43) 2 | TABLE@[0; 16) 3 | TABLE_HEADER@[0; 7) 4 | L_BRACK@[0; 1) "[" 5 | KEY@[1; 6) 6 | BARE_KEY@[1; 6) "table" 7 | R_BRACK@[6; 7) "]" 8 | WHITESPACE@[7; 8) 9 | ENTRY@[8; 16) 10 | KEY@[8; 11) 11 | BARE_KEY@[8; 11) "bar" 12 | WHITESPACE@[11; 12) 13 | EQ@[12; 13) "=" 14 | WHITESPACE@[13; 14) 15 | VALUE@[14; 16) 16 | NUMBER@[14; 16) "92" 17 | WHITESPACE@[16; 18) 18 | ARRAY_TABLE@[18; 42) 19 | TABLE_HEADER@[18; 33) 20 | L_BRACK@[18; 19) "[" 21 | L_BRACK@[19; 20) "[" 22 | KEY@[20; 31) 23 | BARE_KEY@[20; 31) "array-table" 24 | R_BRACK@[31; 32) "]" 25 | R_BRACK@[32; 33) "]" 26 | WHITESPACE@[33; 34) 27 | ENTRY@[34; 42) 28 | KEY@[34; 37) 29 | BARE_KEY@[34; 37) "bar" 30 | WHITESPACE@[37; 38) 31 | EQ@[38; 39) "=" 32 | WHITESPACE@[39; 40) 33 | VALUE@[40; 42) 34 | NUMBER@[40; 42) "92" 35 | WHITESPACE@[42; 43) 36 | 37 | error@[0; 8) "[table] ": newline is mandatory after table header 38 | error@[18; 34) "[[array-table]] ": newline is mandatory after table header 39 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/validation/newlines-entries.json: -------------------------------------------------------------------------------- 1 | { 2 | "table": { 3 | "foo": { 4 | "type": "integer", 5 | "value": "92" 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/validation/newlines-entries.toml: -------------------------------------------------------------------------------- 1 | [table] 2 | foo = 3 | 92 4 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/validation/newlines-entries.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 18) 2 | TABLE@[0; 17) 3 | TABLE_HEADER@[0; 7) 4 | L_BRACK@[0; 1) "[" 5 | KEY@[1; 6) 6 | BARE_KEY@[1; 6) "table" 7 | R_BRACK@[6; 7) "]" 8 | WHITESPACE@[7; 8) 9 | ENTRY@[8; 17) 10 | KEY@[8; 11) 11 | BARE_KEY@[8; 11) "foo" 12 | WHITESPACE@[11; 12) 13 | EQ@[12; 13) "=" 14 | WHITESPACE@[13; 15) 15 | VALUE@[15; 17) 16 | NUMBER@[15; 17) "92" 17 | WHITESPACE@[17; 18) 18 | 19 | error@[8; 15) "foo =\n ": newlines are forbidden in entries 20 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/validation/newlines-inline-table.json: -------------------------------------------------------------------------------- 1 | { 2 | "inline-table": { 3 | "foo": { 4 | "type": "integer", 5 | "value": "92" 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/validation/newlines-inline-table.toml: -------------------------------------------------------------------------------- 1 | inline-table = { 2 | foo = 92 3 | } 4 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/validation/newlines-inline-table.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 32) 2 | ENTRY@[0; 31) 3 | KEY@[0; 12) 4 | BARE_KEY@[0; 12) "inline-table" 5 | WHITESPACE@[12; 13) 6 | EQ@[13; 14) "=" 7 | WHITESPACE@[14; 15) 8 | VALUE@[15; 31) 9 | DICT@[15; 31) 10 | L_CURLY@[15; 16) "{" 11 | WHITESPACE@[16; 21) 12 | ENTRY@[21; 29) 13 | KEY@[21; 24) 14 | BARE_KEY@[21; 24) "foo" 15 | WHITESPACE@[24; 25) 16 | EQ@[25; 26) "=" 17 | WHITESPACE@[26; 27) 18 | VALUE@[27; 29) 19 | NUMBER@[27; 29) "92" 20 | WHITESPACE@[29; 30) 21 | R_CURLY@[30; 31) "}" 22 | WHITESPACE@[31; 32) 23 | 24 | error@[15; 30) "{\n foo = 92\n": newlines are forbidden in inline tables 25 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/validation/newlines-keys.json: -------------------------------------------------------------------------------- 1 | { 2 | "foo": { 3 | "bar": { 4 | "foo": { 5 | "bar": { 6 | "type": "integer", 7 | "value": "92" 8 | } 9 | } 10 | } 11 | }, 12 | "table": {} 13 | } -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/validation/newlines-keys.toml: -------------------------------------------------------------------------------- 1 | [ 2 | table 3 | ] 4 | 5 | [foo 6 | .bar] 7 | 8 | foo 9 | .bar = 92 10 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/data/validation/newlines-keys.txt: -------------------------------------------------------------------------------- 1 | DOC@[0; 45) 2 | TABLE@[0; 13) 3 | TABLE_HEADER@[0; 13) 4 | L_BRACK@[0; 1) "[" 5 | WHITESPACE@[1; 6) 6 | KEY@[6; 11) 7 | BARE_KEY@[6; 11) "table" 8 | WHITESPACE@[11; 12) 9 | R_BRACK@[12; 13) "]" 10 | WHITESPACE@[13; 15) 11 | TABLE@[15; 44) 12 | TABLE_HEADER@[15; 27) 13 | L_BRACK@[15; 16) "[" 14 | KEY@[16; 19) 15 | BARE_KEY@[16; 19) "foo" 16 | WHITESPACE@[19; 22) 17 | DOT@[22; 23) "." 18 | KEY@[23; 26) 19 | BARE_KEY@[23; 26) "bar" 20 | R_BRACK@[26; 27) "]" 21 | WHITESPACE@[27; 29) 22 | ENTRY@[29; 44) 23 | KEY@[29; 32) 24 | BARE_KEY@[29; 32) "foo" 25 | WHITESPACE@[32; 35) 26 | DOT@[35; 36) "." 27 | KEY@[36; 39) 28 | BARE_KEY@[36; 39) "bar" 29 | WHITESPACE@[39; 40) 30 | EQ@[40; 41) "=" 31 | WHITESPACE@[41; 42) 32 | VALUE@[42; 44) 33 | NUMBER@[42; 44) "92" 34 | WHITESPACE@[44; 45) 35 | 36 | error@[0; 12) "[\n table\n": table header must fit into a single line 37 | error@[15; 26) "[foo\n .bar": table header must fit into a single line 38 | error@[29; 42) "foo\n .bar = ": newlines are forbidden in entries 39 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/suite/ast.rs: -------------------------------------------------------------------------------- 1 | use tom_syntax::ast; 2 | use crate::{find, toml}; 3 | 4 | #[test] 5 | fn string_escaping_trivial() { 6 | let doc = toml(r#"foo = "hello""#); 7 | let lit: ast::StringLit = find(&doc); 8 | assert_eq!(lit.value(), "hello"); 9 | 10 | let doc = toml(r#"foo = 'hello world'"#); 11 | let lit: ast::StringLit = find(&doc); 12 | assert_eq!(lit.value(), "hello world"); 13 | } 14 | 15 | #[test] 16 | fn bool_value() { 17 | let doc = toml(r"foo = true"); 18 | let lit: ast::Bool = find(&doc); 19 | assert_eq!(lit.value(), true); 20 | 21 | let doc = toml(r"foo = false"); 22 | let lit: ast::Bool = find(&doc); 23 | assert_eq!(lit.value(), false); 24 | } 25 | 26 | #[test] 27 | #[ignore] 28 | fn int_value() { 29 | let doc = toml(r"foo = 92"); 30 | let lit: ast::Number = find(&doc); 31 | assert_eq!(lit.value(), 92); 32 | } 33 | 34 | #[test] 35 | #[ignore] 36 | fn date_time_value() { 37 | let doc = toml(r"foo = 1979-05-27T00:32:00.999999-07:00"); 38 | let lit: ast::DateTime = find(&doc); 39 | assert_eq!(lit.value(), ::std::time::UNIX_EPOCH); 40 | } 41 | 42 | #[test] 43 | #[ignore] 44 | fn string_escaping_escape_sequences() { 45 | let doc = toml(r#"foo = "hello\nworld""#); 46 | let lit: ast::StringLit = find(&doc); 47 | assert_eq!(lit.value(), "hello\nworld"); 48 | } 49 | 50 | #[test] 51 | fn key_name() { 52 | let doc = toml(r#"foo = false"#); 53 | let key: ast::Key = find(&doc); 54 | assert_eq!(key.name(), "foo"); 55 | 56 | let doc = toml(r#"92 = false"#); 57 | let key: ast::Key = find(&doc); 58 | assert_eq!(key.name(), "92"); 59 | 60 | let doc = toml(r#"'hello world' = false"#); 61 | let key: ast::Key = find(&doc); 62 | assert_eq!(key.name(), "hello world"); 63 | } 64 | 65 | #[test] 66 | #[ignore] 67 | fn key_name_with_escape() { 68 | let doc = toml(r#""hello\nworld" = false"#); 69 | let key: ast::Key = find(&doc); 70 | assert_eq!(key.name(), "hello\nworld"); 71 | } 72 | -------------------------------------------------------------------------------- /crates/tom_syntax/tests/suite/model.rs: -------------------------------------------------------------------------------- 1 | use serde_json; 2 | 3 | #[test] 4 | fn top_level_dotted_keys() { 5 | do_test(r#" 6 | name = "Orange" 7 | physical.color = "orange" 8 | physical.shape = "round" 9 | site."google.com" = true 10 | "#, r#" 11 | { 12 | "name": "Orange", 13 | "physical": { 14 | "color": "orange", 15 | "shape": "round" 16 | }, 17 | "site": { 18 | "google.com": true 19 | } 20 | } 21 | "#); 22 | } 23 | 24 | #[test] 25 | fn table_dotted_key() { 26 | do_test(r#" 27 | [dog."tater.man"] 28 | type.name = "pug" 29 | "#, r#" 30 | { "dog": { "tater.man": { "type": { "name": "pug" } } } } 31 | "#); 32 | } 33 | 34 | #[test] 35 | fn array_tables() { 36 | do_test(r#" 37 | [[products]] 38 | name = "Hammer" 39 | sku = 738594937 40 | 41 | [[products]] 42 | 43 | [[products]] 44 | name = "Nail" 45 | sku = 284758393 46 | color = "gray" 47 | "#, r#" 48 | { 49 | "products": [ 50 | { "name": "Hammer", "sku": 738594937 }, 51 | { }, 52 | { "name": "Nail", "sku": 284758393, "color": "gray" } 53 | ] 54 | } 55 | "#) 56 | } 57 | 58 | #[test] 59 | fn test_keys() { 60 | let doc = ::toml(r" 61 | foo.bar = 1 62 | foo.baz = 2 63 | "); 64 | 65 | let keys = doc.model().get_keys("foo"); 66 | assert_eq!(keys.len(), 2); 67 | } 68 | 69 | fn do_test(toml: &str, json: &str) { 70 | let doc = ::toml(toml); 71 | let model = doc.model(); 72 | let actual = model.to_string(); 73 | let actual: serde_json::Value = serde_json::from_str(&actual).unwrap(); 74 | let expected: serde_json::Value = serde_json::from_str(&json).unwrap(); 75 | assert_eq!(actual, expected); 76 | } 77 | -------------------------------------------------------------------------------- /editors/code/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | "env": { 3 | "es6": true, 4 | "node": true 5 | }, 6 | "parser": "@typescript-eslint/parser", 7 | "parserOptions": { 8 | "project": "tsconfig.json", 9 | "sourceType": "module" 10 | }, 11 | "plugins": [ 12 | "@typescript-eslint" 13 | ], 14 | "rules": { 15 | "camelcase": ["error"], 16 | "eqeqeq": ["error", "always", { "null": "ignore" }], 17 | "no-console": ["error"], 18 | "prefer-const": "error", 19 | "@typescript-eslint/member-delimiter-style": [ 20 | "error", 21 | { 22 | "multiline": { 23 | "delimiter": "semi", 24 | "requireLast": true 25 | }, 26 | "singleline": { 27 | "delimiter": "semi", 28 | "requireLast": false 29 | } 30 | } 31 | ], 32 | "@typescript-eslint/semi": [ 33 | "error", 34 | "always" 35 | ], 36 | "@typescript-eslint/no-unnecessary-type-assertion": "error" 37 | } 38 | }; 39 | -------------------------------------------------------------------------------- /editors/code/.gitignore: -------------------------------------------------------------------------------- 1 | out 2 | node_modules 3 | .vscode-test/ 4 | *.vsix 5 | -------------------------------------------------------------------------------- /editors/code/.vscodeignore: -------------------------------------------------------------------------------- 1 | # FIXME: migrate to opt-in unignoring 2 | # ** 3 | # !package.json 4 | # !package-lock.json 5 | # !README.md 6 | .vscode/** 7 | .vscode-test/** 8 | out/test/** 9 | out/**/*.map 10 | src/** 11 | .gitignore 12 | tsconfig.json 13 | vsc-extension-quickstart.md 14 | tslint.json 15 | -------------------------------------------------------------------------------- /editors/code/rollup.config.js: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | 3 | import resolve from '@rollup/plugin-node-resolve'; 4 | import commonjs from '@rollup/plugin-commonjs'; 5 | import nodeBuiltins from 'builtin-modules'; 6 | 7 | /** @type { import('rollup').RollupOptions } */ 8 | export default { 9 | input: 'out/src/main.js', 10 | plugins: [ 11 | resolve({ 12 | preferBuiltins: true 13 | }), 14 | commonjs() 15 | ], 16 | external: [...nodeBuiltins, 'vscode'], 17 | output: { 18 | file: './out/src/main.js', 19 | format: 'cjs', 20 | exports: 'named' 21 | } 22 | }; 23 | -------------------------------------------------------------------------------- /editors/code/src/commands/extend_selection.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from 'vscode'; 2 | 3 | import { Range, TextDocumentIdentifier } from 'vscode-languageclient'; 4 | import { Server } from '../server'; 5 | 6 | interface ExtendSelectionParams { 7 | textDocument: TextDocumentIdentifier; 8 | selections: Range[]; 9 | } 10 | 11 | interface ExtendSelectionResult { 12 | selections: Range[]; 13 | } 14 | 15 | export async function handle() { 16 | const editor = vscode.window.activeTextEditor; 17 | if (editor == null || editor.document.languageId !== 'toml') { 18 | return; 19 | } 20 | const request: ExtendSelectionParams = { 21 | selections: editor.selections.map(s => { 22 | return Server.client.code2ProtocolConverter.asRange(s); 23 | }), 24 | textDocument: { uri: editor.document.uri.toString() } 25 | }; 26 | const response = await Server.client.sendRequest( 27 | 'm/extendSelection', 28 | request 29 | ); 30 | editor.selections = response.selections.map((range: Range) => { 31 | const r = Server.client.protocol2CodeConverter.asRange(range); 32 | return new vscode.Selection(r.start, r.end); 33 | }); 34 | } 35 | -------------------------------------------------------------------------------- /editors/code/src/commands/index.ts: -------------------------------------------------------------------------------- 1 | import * as extendSelection from './extend_selection'; 2 | import * as syntaxTree from './syntaxTree'; 3 | 4 | export { extendSelection, syntaxTree }; 5 | -------------------------------------------------------------------------------- /editors/code/src/commands/syntaxTree.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from 'vscode'; 2 | import { TextDocumentIdentifier } from 'vscode-languageclient'; 3 | 4 | import { Server } from '../server'; 5 | 6 | export const syntaxTreeUri = vscode.Uri.parse('tom-lsp://syntaxtree'); 7 | 8 | export class TextDocumentContentProvider 9 | implements vscode.TextDocumentContentProvider { 10 | public eventEmitter = new vscode.EventEmitter(); 11 | public syntaxTree: string = 'Not available'; 12 | 13 | public provideTextDocumentContent( 14 | _uri: vscode.Uri 15 | ): vscode.ProviderResult { 16 | const editor = vscode.window.activeTextEditor; 17 | if (editor == null) { 18 | return ''; 19 | } 20 | const request: SyntaxTreeParams = { 21 | textDocument: { uri: editor.document.uri.toString() } 22 | }; 23 | return Server.client.sendRequest( 24 | 'm/syntaxTree', 25 | request 26 | ); 27 | } 28 | 29 | get onDidChange(): vscode.Event { 30 | return this.eventEmitter.event; 31 | } 32 | } 33 | 34 | interface SyntaxTreeParams { 35 | textDocument: TextDocumentIdentifier; 36 | } 37 | 38 | type SyntaxTreeResult = string; 39 | 40 | // Opens the virtual file that will show the syntax tree 41 | // 42 | // The contents of the file come from the `TextDocumentContentProvider` 43 | export async function handle() { 44 | const document = await vscode.workspace.openTextDocument(syntaxTreeUri); 45 | return vscode.window.showTextDocument( 46 | document, 47 | vscode.ViewColumn.Two, 48 | true 49 | ); 50 | } 51 | -------------------------------------------------------------------------------- /editors/code/src/config.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from 'vscode'; 2 | 3 | // FIXME: fix circular dependencies 4 | import { Server } from './server'; 5 | 6 | export class Config { 7 | public highlightingOn = true; 8 | 9 | constructor() { 10 | vscode.workspace.onDidChangeConfiguration(_ => 11 | this.userConfigChanged() 12 | ); 13 | this.userConfigChanged(); 14 | } 15 | 16 | public userConfigChanged() { 17 | const config = vscode.workspace.getConfiguration('tom-lsp'); 18 | if (config.has('highlightingOn')) { 19 | this.highlightingOn = config.get('highlightingOn') as boolean; 20 | } 21 | 22 | if (!this.highlightingOn && Server) { 23 | Server.highlighter.removeHighlights(); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /editors/code/src/events/change_active_text_editor.ts: -------------------------------------------------------------------------------- 1 | import { TextEditor } from 'vscode'; 2 | import { TextDocumentIdentifier } from 'vscode-languageclient'; 3 | 4 | import { Decoration } from '../highlighting'; 5 | import { Server } from '../server'; 6 | 7 | export async function handle(editor: TextEditor | undefined) { 8 | if ( 9 | !Server.config.highlightingOn || 10 | !editor || 11 | editor.document.languageId !== 'toml' 12 | ) { 13 | return; 14 | } 15 | const params: TextDocumentIdentifier = { 16 | uri: editor.document.uri.toString() 17 | }; 18 | const decorations = await Server.client.sendRequest( 19 | 'm/decorationsRequest', 20 | params 21 | ); 22 | Server.highlighter.setHighlights(editor, decorations); 23 | } 24 | -------------------------------------------------------------------------------- /editors/code/src/events/change_text_document.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from 'vscode'; 2 | 3 | import { 4 | syntaxTreeUri, 5 | TextDocumentContentProvider 6 | } from '../commands/syntaxTree'; 7 | 8 | export function createHandler( 9 | textDocumentContentProvider: TextDocumentContentProvider 10 | ) { 11 | return (event: vscode.TextDocumentChangeEvent) => { 12 | const doc = event.document; 13 | if (doc.languageId !== 'toml') { 14 | return; 15 | } 16 | afterLs(() => { 17 | textDocumentContentProvider.eventEmitter.fire(syntaxTreeUri); 18 | }); 19 | }; 20 | } 21 | 22 | // We need to order this after LS updates, but there's no API for that. 23 | // Hence, good old setTimeout. 24 | function afterLs(f: () => any) { 25 | setTimeout(f, 10); 26 | } 27 | -------------------------------------------------------------------------------- /editors/code/src/events/index.ts: -------------------------------------------------------------------------------- 1 | import * as changeActiveTextEditor from './change_active_text_editor'; 2 | import * as changeTextDocument from './change_text_document'; 3 | 4 | export { changeActiveTextEditor, changeTextDocument }; 5 | -------------------------------------------------------------------------------- /editors/code/src/notifications/index.ts: -------------------------------------------------------------------------------- 1 | import * as publishDecorations from './publish_decorations'; 2 | 3 | export { publishDecorations }; 4 | -------------------------------------------------------------------------------- /editors/code/src/notifications/publish_decorations.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from 'vscode'; 2 | 3 | import { Decoration } from '../highlighting'; 4 | import { Server } from '../server'; 5 | 6 | export interface PublishDecorationsParams { 7 | uri: string; 8 | decorations: Decoration[]; 9 | } 10 | 11 | export function handle(params: PublishDecorationsParams) { 12 | const targetEditor = vscode.window.visibleTextEditors.find( 13 | editor => editor.document.uri.toString() === params.uri 14 | ); 15 | if (!Server.config.highlightingOn || !targetEditor) { 16 | return; 17 | } 18 | Server.highlighter.setHighlights(targetEditor, params.decorations); 19 | } 20 | -------------------------------------------------------------------------------- /editors/code/src/server.ts: -------------------------------------------------------------------------------- 1 | import * as lc from 'vscode-languageclient'; 2 | 3 | import { Config } from './config'; 4 | import { Highlighter } from './highlighting'; 5 | 6 | export class Server { 7 | public static highlighter = new Highlighter(); 8 | public static config = new Config(); 9 | public static client: lc.LanguageClient; 10 | 11 | public static start( 12 | notificationHandlers: Iterable<[string, lc.GenericNotificationHandler]> 13 | ) { 14 | const run: lc.Executable = { 15 | command: process.env.__TOM_LSP_SERVER_DEBUG ?? 'tom', 16 | options: { cwd: '.' } 17 | }; 18 | const serverOptions: lc.ServerOptions = { 19 | run, 20 | debug: run 21 | }; 22 | const clientOptions: lc.LanguageClientOptions = { 23 | documentSelector: [{ scheme: 'file', language: 'toml' }] 24 | }; 25 | 26 | Server.client = new lc.LanguageClient( 27 | 'tom-lsp', 28 | 'tom language server', 29 | serverOptions, 30 | clientOptions 31 | ); 32 | Server.client.onReady().then(() => { 33 | for (const [type, handler] of notificationHandlers) { 34 | Server.client.onNotification(type, handler); 35 | } 36 | }); 37 | Server.client.start(); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /editors/code/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es2019", 5 | "outDir": "out", 6 | "lib": ["es2019"], 7 | "esModuleInterop": true, 8 | "allowSyntheticDefaultImports": true, 9 | "sourceMap": true, 10 | "rootDir": ".", 11 | "strict": true, 12 | "noUnusedLocals": true, 13 | "noUnusedParameters": true, 14 | "noImplicitReturns": true, 15 | "noFallthroughCasesInSwitch": true, 16 | "newLine": "LF" 17 | }, 18 | "exclude": ["node_modules"], 19 | "include": ["src"] 20 | } 21 | -------------------------------------------------------------------------------- /rustfmt.toml: -------------------------------------------------------------------------------- 1 | reorder_imports = false 2 | reorder_modules = false -------------------------------------------------------------------------------- /xtask/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "xtask" 3 | version = "0.0.0" 4 | authors = ["Aleksey Kladov "] 5 | edition = "2018" 6 | license = "MIT OR Apache-2.0" 7 | repository = "https://github.com/matklad/tom" 8 | publish = false 9 | 10 | [dependencies] 11 | heck = "0.3.1" 12 | pico-args = "0.3.1" 13 | itertools = "0.9.0" 14 | anyhow = "1.0" 15 | 16 | [dev-dependencies] 17 | walkdir = "2.3" 18 | -------------------------------------------------------------------------------- /xtask/src/codegen.rs: -------------------------------------------------------------------------------- 1 | //! We use code generation heavily in tom. 2 | //! 3 | //! Rather then doing it via proc-macros, we use old-school way of just dumping 4 | //! the source code. 5 | //! 6 | //! This module's submodules define specific bits that we generate. 7 | 8 | mod gen_ast; 9 | mod gen_parser_tests; 10 | mod gen_symbols; 11 | 12 | pub use gen_ast::gen_ast; 13 | pub use gen_parser_tests::gen_parser_tests; 14 | pub use gen_symbols::gen_symbols; 15 | use std::path::Path; 16 | use anyhow::{Result, ensure}; 17 | use crate::not_bash::fs2; 18 | 19 | #[derive(Copy, Clone)] 20 | pub enum Mode { 21 | Overwrite, 22 | Verify, 23 | } 24 | 25 | fn verify_or_overwrite(mode: Mode, file_path: &Path, expected: &str) -> Result<()> { 26 | match mode { 27 | Mode::Verify => { 28 | let actual = fs2::read_to_string(file_path)?; 29 | ensure!( 30 | normalize(&actual) == normalize(expected), 31 | "{}: generated code is stale, please run `cargo xtask codegen` \ 32 | or `cargo xtask install-pre-commit-hook [--force]` handle \ 33 | codegen updates automatically", 34 | file_path.display(), 35 | ); 36 | } 37 | Mode::Overwrite => fs2::write(file_path, expected)?, 38 | } 39 | return Ok(()); 40 | 41 | fn normalize(s: &str) -> String { 42 | s.replace("\r\n", "\n") 43 | } 44 | } 45 | 46 | const AST_NODES_OUT_FILE_PATH: &str = "crates/tom_syntax/src/ast/generated.rs"; 47 | const SYMBOLS_OUT_FILE_PATH: &str = "crates/tom_syntax/src/symbol/generated.rs"; 48 | 49 | const GRAMMAR_DIR_PATH: &str = "crates/tom_syntax/src/parser/grammar.rs"; 50 | const INLINE_TESTS_OUT_DIR_PATH: &str = "crates/tom_syntax/tests/data/inline"; 51 | -------------------------------------------------------------------------------- /xtask/src/codegen/gen_symbols.rs: -------------------------------------------------------------------------------- 1 | //! This module generates `Symbol`s used by tom. 2 | 3 | use crate::{project_root_dir, codegen, reformat}; 4 | use anyhow::Result; 5 | 6 | pub fn gen_symbols(mode: codegen::Mode) -> Result<()> { 7 | let out_file = project_root_dir().join(codegen::SYMBOLS_OUT_FILE_PATH); 8 | codegen::verify_or_overwrite(mode, &out_file, &reformat(symbols_source_code())?) 9 | } 10 | 11 | fn symbols_source_code() -> String { 12 | let mut buff = String::new(); 13 | macro_rules! ln { 14 | () => { buff.push_str("\n") }; 15 | ($($tt:tt)*) => {{ 16 | buff.push_str(&format!($($tt)*)); 17 | buff.push_str("\n"); 18 | }}; 19 | } 20 | let symbols = " 21 | ERROR 22 | WHITESPACE 23 | COMMENT 24 | DOC 25 | ENTRY 26 | KEY 27 | VALUE 28 | ARRAY 29 | DICT 30 | TABLE_HEADER 31 | TABLE 32 | ARRAY_TABLE 33 | EQ 34 | DOT 35 | COMMA 36 | L_BRACK 37 | R_BRACK 38 | L_CURLY 39 | R_CURLY 40 | NUMBER 41 | BOOL 42 | BARE_KEY 43 | BASIC_STRING 44 | MULTILINE_BASIC_STRING 45 | LITERAL_STRING 46 | MULTILINE_LITERAL_STRING 47 | DATE_TIME 48 | BARE_KEY_OR_NUMBER 49 | BARE_KEY_OR_DATE 50 | EOF 51 | "; 52 | ln!("use super::{{SymbolInfo, Symbol, NonZeroU8}};"); 53 | ln!(); 54 | ln!("pub(crate) const SYMBOLS: &[SymbolInfo] = &["); 55 | for s in symbols.trim().lines() { 56 | ln!(r#" SymbolInfo("{}"),"#, s) 57 | } 58 | ln!("];"); 59 | ln!(); 60 | for (i, s) in symbols.trim().lines().enumerate() { 61 | let name = format!("{}: Symbol", s); 62 | let vis = if name == "EOF" { "(crate)" } else { "" }; 63 | ln!( 64 | r#"pub{} const {} = Symbol(unsafe {{ NonZeroU8::new_unchecked({}) }});"#, 65 | vis, 66 | name, 67 | i + 1 68 | ) 69 | } 70 | buff 71 | } 72 | -------------------------------------------------------------------------------- /xtask/src/lib.rs: -------------------------------------------------------------------------------- 1 | //! Support library for `cargo xtask` command. 2 | //! 3 | //! See https://github.com/matklad/cargo-xtask/ 4 | 5 | pub mod codegen; 6 | pub mod not_bash; 7 | pub mod pre_commit; 8 | use anyhow::{ensure, Result}; 9 | 10 | use std::{ 11 | env, 12 | path::{Path, PathBuf}, 13 | fmt, 14 | }; 15 | use not_bash::run; 16 | 17 | pub fn project_root_dir() -> PathBuf { 18 | let manifest_dir = 19 | env::var("CARGO_MANIFEST_DIR").unwrap_or_else(|_| env!("CARGO_MANIFEST_DIR").to_owned()); 20 | 21 | Path::new(&manifest_dir).parent().unwrap().to_owned() 22 | } 23 | 24 | fn reformat(text: impl fmt::Display) -> Result { 25 | let stdout = run!( 26 | "rustfmt --config-path {}", project_root_dir().join("rustfmt.toml").display(); 27 | Result<()> { 34 | ensure!( 35 | run!("cargo clippy --version").is_ok(), 36 | "Failed run cargo clippy. \ 37 | Please run `rustup component add clippy` to install it." 38 | ); 39 | 40 | let allowed_lints = ["clippy::cognitive_complexity"]; 41 | run!( 42 | "cargo clippy --all-features --all-targets -- -A {}", 43 | allowed_lints.join(" -A ") 44 | )?; 45 | Ok(()) 46 | } 47 | -------------------------------------------------------------------------------- /xtask/src/main.rs: -------------------------------------------------------------------------------- 1 | //! See https://github.com/matklad/cargo-xtask/. 2 | //! 3 | //! This binary defines various auxiliary build commands, which are not 4 | //! expressible with just `cargo`. Notably, it provides `cargo xtask codegen` 5 | //! for code generation. 6 | //! 7 | //! This binary is integrated into the `cargo` command line by using an alias in 8 | //! `.cargo/config`. 9 | 10 | use anyhow::Result; 11 | use xtask::{pre_commit, codegen, lint}; 12 | use std::env; 13 | 14 | const USAGE: &str = "\ 15 | xtask 16 | 17 | USAGE: 18 | xtask 19 | 20 | FLAGS: 21 | -h, --help Prints help information 22 | -V, --version Prints version information 23 | 24 | SUBCOMMANDS: 25 | codegen Run code generation 26 | lint Run the linter against the project, it enforces best practices 27 | install-pre-commit-hook Install git hook to automatically format code before each commit"; 28 | 29 | fn main() -> Result<()> { 30 | if let Some(true) = env::args().next().map(|it| it.contains("pre-commit")) { 31 | return pre_commit::run_hook(); 32 | } 33 | 34 | let mut args = pico_args::Arguments::from_env(); 35 | 36 | let subcommand = args.subcommand()?.unwrap_or_default(); 37 | 38 | match subcommand.as_str() { 39 | "codegen" => { 40 | codegen::gen_ast(codegen::Mode::Overwrite)?; 41 | codegen::gen_symbols(codegen::Mode::Overwrite)?; 42 | codegen::gen_parser_tests(codegen::Mode::Overwrite)?; 43 | } 44 | "lint" => { 45 | lint()?; 46 | } 47 | "install-pre-commit-hook" => { 48 | let force = args.contains("--force"); 49 | args.finish()?; 50 | pre_commit::install_hook(force)?; 51 | eprintln!("Git pre-commit hook is installed. Have a nice day :D") 52 | } 53 | _ => eprintln!("{}", USAGE), 54 | } 55 | Ok(()) 56 | } 57 | --------------------------------------------------------------------------------