--- a/Cargo.lock +++ b/Cargo.lock @@ -704,10 +704,12 @@ dependencies = [ "anyhow", "drop_bomb", + "hi-doc", "indoc", "insta", "logos", "rowan", + "strip-ansi-escapes", "thiserror", ] @@ -1318,6 +1320,15 @@ checksum = "2b2231b7c3057d5e4ad0156fb3dc807d900806020c5ffa3ee6ff2c8c76fb8520" [[package]] +name = "strip-ansi-escapes" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a8f8038e7e7969abb3f1b7c2a811225e9296da208539e0f79c5251d6cac0025" +dependencies = [ + "vte", +] + +[[package]] name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1471,6 +1482,15 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] +name = "vte" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "231fdcd7ef3037e8330d8e17e61011a2c244126acc0a982f4040ac3f9f0bc077" +dependencies = [ + "memchr", +] + +[[package]] name = "wasip2" version = "1.0.2+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" --- a/crates/jrsonnet-formatter/src/lib.rs +++ b/crates/jrsonnet-formatter/src/lib.rs @@ -685,7 +685,7 @@ fn print(&self, out: &mut PrintItems) { match self { Self::ExprBinary(b) => { - p!(out, {b.lhs_work()} str(" ") {b.binary_operator()} str(" ") {b.rhs_work()}); + p!(out, {b.lhs()} str(" ") {b.binary_operator()} str(" ") {b.rhs()}); } Self::ExprUnary(u) => p!(out, {u.unary_operator()} {u.rhs()}), // Self::ExprSlice(s) => { --- /dev/null +++ b/crates/jrsonnet-formatter/src/snapshots/jrsonnet_formatter__tests__self_super.snap @@ -0,0 +1,13 @@ +--- +source: crates/jrsonnet-formatter/src/tests.rs +expression: "reformat(indoc!(\"\n\t\t\tlocal base = {\n\t\t\t foo: 'bar',\n\t\t\t method():: self.foo,\n\t\t\t};\n\n\t\t\tbase {\n\t\t\t foo: super.foo + '-extended',\n\t\t\t result: self.method(),\n\t\t\t}\n\t\t\"))" +--- +local base = { + foo: 'bar', + method( + ):: self.foo, +}; +base { + foo: super.foo + '-extended', + result: self.method(), +} --- a/crates/jrsonnet-formatter/src/tests.rs +++ b/crates/jrsonnet-formatter/src/tests.rs @@ -148,3 +148,20 @@ " ))); } + +#[test] +fn self_super() { + insta::assert_snapshot!(reformat(indoc!( + " + local base = { + foo: 'bar', + method():: self.foo, + }; + + base { + foo: super.foo + '-extended', + result: self.method(), + } + " + ))); +} --- a/crates/jrsonnet-rowan-parser/Cargo.toml +++ b/crates/jrsonnet-rowan-parser/Cargo.toml @@ -12,6 +12,7 @@ [dependencies] anyhow.workspace = true drop_bomb.workspace = true +hi-doc.workspace = true indoc.workspace = true logos.workspace = true rowan.workspace = true @@ -21,3 +22,4 @@ indoc.workspace = true insta.workspace = true anyhow.workspace = true +strip-ansi-escapes = "0.2.1" --- a/crates/jrsonnet-rowan-parser/src/lib.rs +++ b/crates/jrsonnet-rowan-parser/src/lib.rs @@ -47,17 +47,6 @@ parse.errors, ) } -impl ExprBinary { - pub fn lhs_work(&self) -> Option { - support::child(self.syntax()) - } - pub fn rhs_work(&self) -> Option { - let mut children = support::children(self.syntax()); - // skip lhs - children.next()?; - children.next() - } -} impl ExprObjExtend { pub fn lhs_work(&self) -> Option { support::child(self.syntax()) --- a/crates/jrsonnet-rowan-parser/src/marker.rs +++ b/crates/jrsonnet-rowan-parser/src/marker.rs @@ -140,8 +140,15 @@ new_m } - /// Create new node around existing marker, not counting anything that comes after it - fn wrap_raw(self, p: &mut Parser, kind: SyntaxKind, error: Option) -> Self { + /// Create new node around existing marker + /// If previous_pos is set - the wrapping node would not include everything that happened between wrapped node end and the current position of the parser + fn wrap_raw( + self, + p: &mut Parser, + kind: SyntaxKind, + error: Option, + previous_pos: bool, + ) -> Self { let new_m = p.start(); match &mut p.events[self.start_event_idx] { Event::Start { forward_parent, .. } => { @@ -154,30 +161,33 @@ let completed = new_m.complete_raw(p, kind, error); - match &mut p.events[self.finish_event_idx] { - Event::Finish { - wrapper, - error: _error, - } => { - *wrapper = Some( - NonZeroUsize::new(completed.finish_event_idx - self.finish_event_idx) - .expect("!= 0"), - ); + if previous_pos { + match &mut p.events[self.finish_event_idx] { + Event::Finish { + wrapper, + error: _error, + } => { + *wrapper = Some( + NonZeroUsize::new(completed.finish_event_idx - self.finish_event_idx) + .expect("!= 0"), + ); + } + _ => unreachable!(), } - _ => unreachable!(), } completed } - pub fn wrap(self, p: &mut Parser, kind: SyntaxKind) -> Self { - self.wrap_raw(p, kind, None) + pub fn wrap(self, p: &mut Parser, kind: SyntaxKind, previous_pos: bool) -> Self { + self.wrap_raw(p, kind, None, previous_pos) } - pub fn wrap_error(self, p: &mut Parser, msg: impl AsRef) -> Self { + pub fn wrap_error(self, p: &mut Parser, msg: impl AsRef, previous_pos: bool) -> Self { self.wrap_raw( p, SyntaxKind::ERROR_CUSTOM, Some(SyntaxError::Custom { error: msg.as_ref().to_owned(), }), + previous_pos, ) } } --- a/crates/jrsonnet-rowan-parser/src/parser.rs +++ b/crates/jrsonnet-rowan-parser/src/parser.rs @@ -45,6 +45,18 @@ error: String, }, } +impl fmt::Display for SyntaxError { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + SyntaxError::Unexpected { expected, found } => { + write!(f, "unexpected {found:?}, expecting {expected}") + } + SyntaxError::Missing { expected } => write!(f, "missing {expected}"), + SyntaxError::Custom { error } => write!(f, "{error}"), + SyntaxError::Hint { error } => write!(f, "{error}"), + } + } +} #[derive(Debug)] pub struct LocatedSyntaxError { @@ -316,12 +328,14 @@ break; } + let m = lhs.wrap(p, EXPR, false); + // Object apply is not a real operator, we dont have something to bump if op != BinaryOperatorKind::MetaObjectApply { p.bump(); } - let m = lhs.wrap(p, EXPR).precede(p); + let m = m.precede(p); let parsed_rhs = expr_binding_power(p, right_binding_power) .map(|v| v.precede(p).complete(p, EXPR)) .is_ok(); @@ -491,12 +505,13 @@ errored.wrap_error( p, "compspec may only be used if there is only one object element", + true, ); } m.complete(p, OBJ_BODY_MEMBER_LIST); } else if !compspecs.is_empty() { for errored in asserts { - errored.wrap_error(p, "asserts can't be used in object comprehensions"); + errored.wrap_error(p, "asserts can't be used in object comprehensions", true); } m.complete(p, OBJ_BODY_COMP); } else { @@ -569,7 +584,7 @@ } for errored in unnamed_after_named { - errored.wrap_error(p, "can't use positional arguments after named"); + errored.wrap_error(p, "can't use positional arguments after named", true); } m.complete(p, ARGS_DESC); @@ -615,6 +630,7 @@ spec.wrap_error( p, "compspec may only be used if there is only one array element", + true, ); } @@ -639,20 +655,20 @@ p.bump(); // End if !p.at(T![']']) { - expr(p).wrap(p, SLICE_DESC_END); + expr(p).wrap(p, SLICE_DESC_END, true); } if p.at(T![:]) { p.bump(); // Step if !p.at(T![']']) { - expr(p).wrap(p, SLICE_DESC_STEP); + expr(p).wrap(p, SLICE_DESC_STEP, true); } } } else if p.at(T![::]) { p.bump(); // End if !p.at(T![']']) { - expr(p).wrap(p, SLICE_DESC_END); + expr(p).wrap(p, SLICE_DESC_END, true); } } else { // It was not a slice @@ -865,10 +881,10 @@ p.bump(); expr(p); p.expect(T![then]); - expr(p).wrap(p, TRUE_EXPR); + expr(p).wrap(p, TRUE_EXPR, true); if p.at(T![else]) { p.bump(); - expr(p).wrap(p, FALSE_EXPR); + expr(p).wrap(p, FALSE_EXPR, true); } m.complete(p, EXPR_IF_THEN_ELSE) } else if p.at(T!['[']) { --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_incompatible_with_multiple_elems.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_incompatible_with_multiple_elems.snap @@ -49,9 +49,5 @@ === LocatedSyntaxError { error: Custom { error: "compspec may only be used if there is only one array element" }, range: 3..21 } === - x syntax error - ,---- - 1 | [a for a in [1, 2, 3], b] - : ^^^^^^^^^|^^^^^^^^ - : `-- compspec may only be used if there is only one array element - `---- + · ╭──────────────────── compspec may only be used if there is only one array element +1 │ [a for a in [1, 2, 3], b] --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_incompatible_with_multiple_elems_w.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_incompatible_with_multiple_elems_w.snap @@ -56,9 +56,5 @@ === LocatedSyntaxError { error: Custom { error: "compspec may only be used if there is only one array element" }, range: 7..25 } === - x syntax error - ,---- - 1 | [a, b, for a in [1, 2, 3], c] - : ^^^^^^^^^|^^^^^^^^ - : `-- compspec may only be used if there is only one array element - `---- + · ╭──────────────────── compspec may only be used if there is only one array element +1 │ [a, b, for a in [1, 2, 3], c] --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_no_elems.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__arr_compspec_no_elems.snap @@ -39,9 +39,5 @@ === LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 1..1 } === - x syntax error - ,---- - 1 | [for a in [1, 2, 3]] - : ^ - : `-- missing expression - `---- + · ╭── missing expression +1 │ [for a in [1, 2, 3]] --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__continue_after_total_failure.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__continue_after_total_failure.snap @@ -64,14 +64,9 @@ LocatedSyntaxError { error: Unexpected { expected: Unnamed(SyntaxKindSet([L_BRACK, L_PAREN, L_BRACE, SEMI, DOT, COMMA, QUESTION_MARK])), found: IDENT }, range: 14..23 } LocatedSyntaxError { error: Custom { error: "unexpected tokens after end" }, range: 29..67 } === - x syntax error - ,-[1:15] - 1 | ,-> local intr = $intrinsic(test); - : | ^^^^|^^^^ - : | `-- expected L_BRACK, L_PAREN, L_BRACE, SEMI, DOT, COMMA or QUESTION_MARK, found IDENT - 2 | | - 3 | | local a = 1, b = 2, c = a + b; - 4 | | - 5 | |-> [c] - : `---- unexpected tokens after end - `---- + · ╭─────────── unexpected IDENT, expecting L_BRACK, L_PAREN, L_BRACE, SEMI, DOT, COMMA or QUESTION_MARK +1 │ ╭─local intr = $intrinsic(test); +2 │ │ +3 │ │ local a = 1, b = 2, c = a + b; +4 │ │ +5 │ ╰─[c] 🢒 unexpected tokens after end --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__empty.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__empty.snap @@ -9,9 +9,5 @@ === LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 1..1 } === - x syntax error - ,---- - 1 | - : ^ - : `-- missing expression - `---- + · ╭── missing expression +1 │ --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_body.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_body.snap @@ -25,9 +25,5 @@ === LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 15..15 } === - x syntax error - ,---- - 1 | function(a, b) - : ^ - : `-- missing expression - `---- + · ╭── missing expression +1 │ function(a, b) --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_no_value.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_no_value.snap @@ -42,9 +42,5 @@ === LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 16..16 } === - x syntax error - ,---- - 1 | function(a, b = ) a + b - : ^ - : `-- missing expression - `---- + · ╭── missing expression +1 │ function(a, b = ) a + b --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_rparen.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__function_error_rparen.snap @@ -26,10 +26,6 @@ LocatedSyntaxError { error: Missing { expected: Unnamed(SyntaxKindSet([R_PAREN, COMMA, ASSIGN])) }, range: 14..14 } LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 14..14 } === - x syntax error - ,---- - 1 | function(a, b - : ^^ - : |`-- missing expression - : `-- missing R_PAREN, COMMA or ASSIGN - `---- + · ╭── missing R_PAREN, COMMA or ASSIGN +1 │ function(a, b + · ╰── missing expression --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_no_value_recovery.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_no_value_recovery.snap @@ -39,11 +39,8 @@ LocatedSyntaxError { error: Missing { expected: Unnamed(SyntaxKindSet([L_BRACK, L_PAREN, L_BRACE, SEMI, DOT, COMMA, QUESTION_MARK])) }, range: 25..25 } LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 25..25 } === - x syntax error - ,-[3:3] - 2 | local b = 3; - 3 | 1 - : ^^ - : |`-- missing expression - : `-- missing L_BRACK, L_PAREN, L_BRACE, SEMI, DOT, COMMA or QUESTION_MARK - `---- +1 │ local a = +2 │ local b = 3; + · ╭── missing L_BRACK, L_PAREN, L_BRACE, SEMI, DOT, COMMA or QUESTION_MARK +3 │ 1 + · ╰── missing expression --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_novalue.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_novalue.snap @@ -23,11 +23,7 @@ LocatedSyntaxError { error: Missing { expected: Unnamed(SyntaxKindSet([SEMI, COMMA])) }, range: 10..10 } LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 10..10 } === - x syntax error - ,---- - 1 | local a = - : ^^^ - : `-- missing expression - : |`-- missing SEMI or COMMA - : `-- missing expression - `---- + · ╭── missing SEMI or COMMA + · ┟── missing expression +1 │ local a = + · ╰── missing expression --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__named_before_positional.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__named_before_positional.snap @@ -68,11 +68,7 @@ LocatedSyntaxError { error: Custom { error: "can't use positional arguments after named" }, range: 16..17 } LocatedSyntaxError { error: Custom { error: "can't use positional arguments after named" }, range: 27..28 } === - x syntax error - ,---- - 1 | a(1, 2, b=4, 3, 5, k = 12, 6) - : | | | - : | | `-- can't use positional arguments after named - : | `-- can't use positional arguments after named - : `-- can't use positional arguments after named - `---- + · ╭────── can't use positional arguments after named + · │ ╭─── can't use positional arguments after named +1 │ a(1, 2, b=4, 3, 5, k = 12, 6) + · ╰─── can't use positional arguments after named --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_lhs.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_lhs.snap @@ -14,10 +14,6 @@ LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 0..0 } LocatedSyntaxError { error: Custom { error: "unexpected tokens after end" }, range: 0..3 } === - x syntax error - ,---- - 1 | + 2 - : ^^| - : | `-- unexpected tokens after end - : `-- missing expression - `---- + · ╭── missing expression +1 │ + 2 + · ╰───── unexpected tokens after end --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_operator.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_operator.snap @@ -13,9 +13,5 @@ === LocatedSyntaxError { error: Custom { error: "unexpected tokens after end" }, range: 2..3 } === - x syntax error - ,---- - 1 | 2 2 - : | - : `-- unexpected tokens after end - `---- + · ╭─── unexpected tokens after end +1 │ 2 2 --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_rhs.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_rhs.snap @@ -16,9 +16,5 @@ === LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 4..4 } === - x syntax error - ,---- - 1 | a + - : ^ - : `-- missing expression - `---- + · ╭── missing expression +1 │ a + --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_asserts.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_asserts.snap @@ -56,9 +56,5 @@ === LocatedSyntaxError { error: Custom { error: "asserts can't be used in object comprehensions" }, range: 1..9 } === - x syntax error - ,---- - 1 | {assert 1, a: 1 for a in [1,2,3]} - : ^^^^|^^^ - : `-- asserts can't be used in object comprehensions - `---- + · ╭────────── asserts can't be used in object comprehensions +1 │ {assert 1, a: 1 for a in [1,2,3]} --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_multiple_elems.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_multiple_elems.snap @@ -58,9 +58,5 @@ === LocatedSyntaxError { error: Custom { error: "compspec may only be used if there is only one object element" }, range: 5..23 } === - x syntax error - ,---- - 1 | {a:1 for a in [1, 2, 3], b:1} - : ^^^^^^^^^|^^^^^^^^ - : `-- compspec may only be used if there is only one object element - `---- + · ╭──────────────────── compspec may only be used if there is only one object element +1 │ {a:1 for a in [1, 2, 3], b:1} --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_multiple_elems_w.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_multiple_elems_w.snap @@ -69,9 +69,5 @@ === LocatedSyntaxError { error: Custom { error: "compspec may only be used if there is only one object element" }, range: 11..29 } === - x syntax error - ,---- - 1 | {a:1, b:1, for a in [1, 2, 3], c:1} - : ^^^^^^^^^|^^^^^^^^ - : `-- compspec may only be used if there is only one object element - `---- + · ╭──────────────────── compspec may only be used if there is only one object element +1 │ {a:1, b:1, for a in [1, 2, 3], c:1} --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_no_elems.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_no_elems.snap @@ -39,9 +39,5 @@ === LocatedSyntaxError { error: Missing { expected: Named("field definition") }, range: 1..1 } === - x syntax error - ,---- - 1 | {for a in [1, 2, 3]} - : ^ - : `-- missing field definition - `---- + · ╭── missing field definition +1 │ {for a in [1, 2, 3]} --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__stdlib.snap +++ /dev/null @@ -1,5686 +0,0 @@ ---- -source: crates/jrsonnet-rowan-parser/src/tests.rs -expression: "{\n local std = self,\n local id = std.id,\n\n thisFile:: error 'std.thisFile is deprecated, to enable its support in jrsonnet - recompile it with \"legacy-this-file\" support.\\nThis will slow down stdlib caching a bit, though',\n\n lstripChars(str, chars)::\n if std.length(str) > 0 && std.member(chars, str[0]) then\n std.lstripChars(str[1:], chars)\n else\n str,\n\n rstripChars(str, chars)::\n local len = std.length(str);\n if len > 0 && std.member(chars, str[len - 1]) then\n std.rstripChars(str[:len - 1], chars)\n else\n str,\n\n stripChars(str, chars)::\n std.lstripChars(std.rstripChars(str, chars), chars),\n\n splitLimitR(str, c, maxsplits)::\n if maxsplits == -1 then\n std.splitLimit(str, c, -1)\n else\n local revStr(str) = std.join('', std.reverse(std.stringChars(str)));\n std.map(function(e) revStr(e), std.reverse(std.splitLimit(revStr(str), revStr(c), maxsplits))),\n\n split(str, c):: std.splitLimit(str, c, -1),\n\n mapWithIndex(func, arr)::\n if !std.isFunction(func) then\n error ('std.mapWithIndex first param must be function, got ' + std.type(func))\n else if !std.isArray(arr) && !std.isString(arr) then\n error ('std.mapWithIndex second param must be array, got ' + std.type(arr))\n else\n std.makeArray(std.length(arr), function(i) func(i, arr[i])),\n\n mapWithKey(func, obj)::\n if !std.isFunction(func) then\n error ('std.mapWithKey first param must be function, got ' + std.type(func))\n else if !std.isObject(obj) then\n error ('std.mapWithKey second param must be object, got ' + std.type(obj))\n else\n { [k]: func(k, obj[k]) for k in std.objectFields(obj) },\n\n lines(arr)::\n std.join('\\n', arr + ['']),\n\n deepJoin(arr)::\n if std.isString(arr) then\n arr\n else if std.isArray(arr) then\n std.join('', [std.deepJoin(x) for x in arr])\n else\n error 'Expected string or array, got %s' % std.type(arr),\n\n assertEqual(a, b)::\n if a == b then\n true\n else\n error 'Assertion failed. ' + a + ' != ' + b,\n\n clamp(x, minVal, maxVal)::\n if x < minVal then minVal\n else if x > maxVal then maxVal\n else x,\n\n manifestIni(ini)::\n local body_lines(body) =\n std.join([], [\n local value_or_values = body[k];\n if std.isArray(value_or_values) then\n ['%s = %s' % [k, value] for value in value_or_values]\n else\n ['%s = %s' % [k, value_or_values]]\n\n for k in std.objectFields(body)\n ]);\n\n local section_lines(sname, sbody) = ['[%s]' % [sname]] + body_lines(sbody),\n main_body = if std.objectHas(ini, 'main') then body_lines(ini.main) else [],\n all_sections = [\n section_lines(k, ini.sections[k])\n for k in std.objectFields(ini.sections)\n ];\n std.join('\\n', main_body + std.flattenArrays(all_sections) + ['']),\n\n manifestToml(value):: std.manifestTomlEx(value, ' '),\n\n escapeStringPython(str)::\n std.escapeStringJson(str),\n\n escapeStringBash(str_)::\n local str = std.toString(str_);\n local trans(ch) =\n if ch == \"'\" then\n \"'\\\"'\\\"'\"\n else\n ch;\n \"'%s'\" % std.join('', [trans(ch) for ch in std.stringChars(str)]),\n\n escapeStringDollars(str_)::\n local str = std.toString(str_);\n local trans(ch) =\n if ch == '$' then\n '$$'\n else\n ch;\n std.foldl(function(a, b) a + trans(b), std.stringChars(str), ''),\n\n local xml_escapes = {\n '<': '<',\n '>': '>',\n '&': '&',\n '\"': '"',\n \"'\": ''',\n },\n\n escapeStringXML(str_)::\n local str = std.toString(str_);\n std.join('', [std.get(xml_escapes, ch, ch) for ch in std.stringChars(str)]),\n\n manifestJson(value):: std.manifestJsonEx(value, ' ') tailstrict,\n\n manifestJsonMinified(value):: std.manifestJsonEx(value, '', '', ':'),\n\n manifestYamlStream(value, indent_array_in_object=false, c_document_end=true, quote_keys=true)::\n if !std.isArray(value) then\n error 'manifestYamlStream only takes arrays, got ' + std.type(value)\n else\n '---\\n' + std.join(\n '\\n---\\n', [std.manifestYamlDoc(e, indent_array_in_object, quote_keys) for e in value]\n ) + if c_document_end then '\\n...\\n' else '\\n',\n\n manifestPython(v)::\n if std.isObject(v) then\n local fields = [\n '%s: %s' % [std.escapeStringPython(k), std.manifestPython(v[k])]\n for k in std.objectFields(v)\n ];\n '{%s}' % [std.join(', ', fields)]\n else if std.isArray(v) then\n '[%s]' % [std.join(', ', [std.manifestPython(v2) for v2 in v])]\n else if std.isString(v) then\n '%s' % [std.escapeStringPython(v)]\n else if std.isFunction(v) then\n error 'cannot manifest function'\n else if std.isNumber(v) then\n std.toString(v)\n else if v == true then\n 'True'\n else if v == false then\n 'False'\n else if v == null then\n 'None',\n\n manifestPythonVars(conf)::\n local vars = ['%s = %s' % [k, std.manifestPython(conf[k])] for k in std.objectFields(conf)];\n std.join('\\n', vars + ['']),\n\n manifestXmlJsonml(value)::\n if !std.isArray(value) then\n error 'Expected a JSONML value (an array), got %s' % std.type(value)\n else\n local aux(v) =\n if std.isString(v) then\n v\n else\n local tag = v[0];\n local has_attrs = std.length(v) > 1 && std.isObject(v[1]);\n local attrs = if has_attrs then v[1] else {};\n local children = if has_attrs then v[2:] else v[1:];\n local attrs_str =\n std.join('', [' %s=\"%s\"' % [k, attrs[k]] for k in std.objectFields(attrs)]);\n std.deepJoin(['<', tag, attrs_str, '>', [aux(x) for x in children], '']);\n\n aux(value),\n\n mergePatch(target, patch)::\n if std.isObject(patch) then\n local target_object =\n if std.isObject(target) then target else {};\n\n local target_fields =\n if std.isObject(target_object) then std.objectFields(target_object) else [];\n\n local null_fields = [k for k in std.objectFields(patch) if patch[k] == null];\n local both_fields = std.setUnion(target_fields, std.objectFields(patch));\n\n {\n [k]:\n if !std.objectHas(patch, k) then\n target_object[k]\n else if !std.objectHas(target_object, k) then\n std.mergePatch(null, patch[k]) tailstrict\n else\n std.mergePatch(target_object[k], patch[k]) tailstrict\n for k in std.setDiff(both_fields, null_fields)\n }\n else\n patch,\n\n get(o, f, default=null, inc_hidden=true)::\n if std.objectHasEx(o, f, inc_hidden) then o[f] else default,\n\n resolvePath(f, r)::\n local arr = std.split(f, '/');\n std.join('/', std.makeArray(std.length(arr) - 1, function(i) arr[i]) + [r]),\n\n prune(a)::\n local isContent(b) =\n if b == null then\n false\n else if std.isArray(b) then\n std.length(b) > 0\n else if std.isObject(b) then\n std.length(b) > 0\n else\n true;\n if std.isArray(a) then\n [std.prune(x) for x in a if isContent($.prune(x))]\n else if std.isObject(a) then {\n [x]: $.prune(a[x])\n for x in std.objectFields(a)\n if isContent(std.prune(a[x]))\n } else\n a,\n\n find(value, arr)::\n if !std.isArray(arr) then\n error 'find second parameter should be an array, got ' + std.type(arr)\n else\n std.filter(function(i) arr[i] == value, std.range(0, std.length(arr) - 1)),\n\n // Compat\n __compare_array(arr1, arr2)::\n assert std.isArray(arr1) && std.isArray(arr2);\n std.__compare(arr1, arr2),\n __array_less(arr1, arr2):: std.__compare_array(arr1, arr2) == -1,\n __array_greater(arr1, arr2):: std.__compare_array(arr1, arr2) == 1,\n __array_less_or_equal(arr1, arr2):: std.__compare_array(arr1, arr2) <= 0,\n __array_greater_or_equal(arr1, arr2):: std.__compare_array(arr1, arr2) >= 0,\n}\n" ---- -SOURCE_FILE@0..7835 - EXPR@0..7834 - EXPR_OBJECT@0..7834 - OBJ_BODY_MEMBER_LIST@0..7834 - L_BRACE@0..1 "{" - WHITESPACE@1..4 "\n " - MEMBER_BIND_STMT@4..20 - OBJ_LOCAL@4..20 - LOCAL_KW@4..9 "local" - WHITESPACE@9..10 " " - BIND_DESTRUCT@10..20 - DESTRUCT_FULL@10..13 - NAME@10..13 - IDENT@10..13 "std" - WHITESPACE@13..14 " " - ASSIGN@14..15 "=" - WHITESPACE@15..16 " " - EXPR@16..20 - EXPR_LITERAL@16..20 - SELF_KW@16..20 "self" - COMMA@20..21 "," - WHITESPACE@21..24 "\n " - MEMBER_BIND_STMT@24..41 - OBJ_LOCAL@24..41 - LOCAL_KW@24..29 "local" - WHITESPACE@29..30 " " - BIND_DESTRUCT@30..41 - DESTRUCT_FULL@30..32 - NAME@30..32 - IDENT@30..32 "id" - WHITESPACE@32..33 " " - ASSIGN@33..34 "=" - WHITESPACE@34..35 " " - EXPR@35..41 - EXPR_VAR@35..38 - NAME@35..38 - IDENT@35..38 "std" - SUFFIX_INDEX@38..41 - DOT@38..39 "." - NAME@39..41 - IDENT@39..41 "id" - COMMA@41..42 "," - WHITESPACE@42..46 "\n\n " - MEMBER_FIELD_NORMAL@46..224 - FIELD_NAME_FIXED@46..54 - NAME@46..54 - IDENT@46..54 "thisFile" - COLONCOLON@54..56 "::" - WHITESPACE@56..57 " " - EXPR@57..224 - EXPR_ERROR@57..224 - ERROR_KW@57..62 "error" - WHITESPACE@62..63 " " - EXPR@63..224 - EXPR_STRING@63..224 - STRING_SINGLE@63..224 "'std.thisFile is depr ..." - COMMA@224..225 "," - WHITESPACE@225..229 "\n\n " - MEMBER_FIELD_METHOD@229..372 - FIELD_NAME_FIXED@229..240 - NAME@229..240 - IDENT@229..240 "lstripChars" - PARAMS_DESC@240..252 - L_PAREN@240..241 "(" - PARAM@241..244 - DESTRUCT_FULL@241..244 - NAME@241..244 - IDENT@241..244 "str" - COMMA@244..245 "," - WHITESPACE@245..246 " " - PARAM@246..251 - DESTRUCT_FULL@246..251 - NAME@246..251 - IDENT@246..251 "chars" - R_PAREN@251..252 ")" - COLONCOLON@252..254 "::" - WHITESPACE@254..259 "\n " - EXPR@259..372 - EXPR_IF_THEN_ELSE@259..372 - IF_KW@259..261 "if" - WHITESPACE@261..262 " " - EXPR@262..310 - EXPR_BINARY@262..310 - EXPR@262..281 - EXPR_BINARY@262..281 - EXPR@262..265 - EXPR_VAR@262..265 - NAME@262..265 - IDENT@262..265 "std" - SUFFIX_INDEX@265..272 - DOT@265..266 "." - NAME@266..272 - IDENT@266..272 "length" - SUFFIX_APPLY@272..277 - ARGS_DESC@272..277 - L_PAREN@272..273 "(" - ARG@273..276 - EXPR@273..276 - EXPR_VAR@273..276 - NAME@273..276 - IDENT@273..276 "str" - R_PAREN@276..277 ")" - WHITESPACE@277..278 " " - GT@278..279 ">" - WHITESPACE@279..280 " " - EXPR@280..281 - EXPR_NUMBER@280..281 - FLOAT@280..281 "0" - WHITESPACE@281..282 " " - AND@282..284 "&&" - WHITESPACE@284..285 " " - EXPR@285..310 - EXPR_VAR@285..288 - NAME@285..288 - IDENT@285..288 "std" - SUFFIX_INDEX@288..295 - DOT@288..289 "." - NAME@289..295 - IDENT@289..295 "member" - SUFFIX_APPLY@295..310 - ARGS_DESC@295..310 - L_PAREN@295..296 "(" - ARG@296..301 - EXPR@296..301 - EXPR_VAR@296..301 - NAME@296..301 - IDENT@296..301 "chars" - COMMA@301..302 "," - WHITESPACE@302..303 " " - ARG@303..309 - EXPR@303..309 - EXPR_VAR@303..306 - NAME@303..306 - IDENT@303..306 "str" - SUFFIX_INDEX_EXPR@306..309 - L_BRACK@306..307 "[" - EXPR@307..308 - EXPR_NUMBER@307..308 - FLOAT@307..308 "0" - R_BRACK@308..309 "]" - R_PAREN@309..310 ")" - WHITESPACE@310..311 " " - THEN_KW@311..315 "then" - WHITESPACE@315..322 "\n " - TRUE_EXPR@322..353 - EXPR@322..353 - EXPR_VAR@322..325 - NAME@322..325 - IDENT@322..325 "std" - SUFFIX_INDEX@325..337 - DOT@325..326 "." - NAME@326..337 - IDENT@326..337 "lstripChars" - SUFFIX_APPLY@337..353 - ARGS_DESC@337..353 - L_PAREN@337..338 "(" - ARG@338..345 - EXPR@338..345 - EXPR_VAR@338..341 - NAME@338..341 - IDENT@338..341 "str" - SUFFIX_SLICE@341..345 - SLICE_DESC@341..345 - L_BRACK@341..342 "[" - EXPR@342..343 - EXPR_NUMBER@342..343 - FLOAT@342..343 "1" - COLON@343..344 ":" - R_BRACK@344..345 "]" - COMMA@345..346 "," - WHITESPACE@346..347 " " - ARG@347..352 - EXPR@347..352 - EXPR_VAR@347..352 - NAME@347..352 - IDENT@347..352 "chars" - R_PAREN@352..353 ")" - WHITESPACE@353..358 "\n " - ELSE_KW@358..362 "else" - WHITESPACE@362..369 "\n " - FALSE_EXPR@369..372 - EXPR@369..372 - EXPR_VAR@369..372 - NAME@369..372 - IDENT@369..372 "str" - COMMA@372..373 "," - WHITESPACE@373..377 "\n\n " - MEMBER_FIELD_METHOD@377..553 - FIELD_NAME_FIXED@377..388 - NAME@377..388 - IDENT@377..388 "rstripChars" - PARAMS_DESC@388..400 - L_PAREN@388..389 "(" - PARAM@389..392 - DESTRUCT_FULL@389..392 - NAME@389..392 - IDENT@389..392 "str" - COMMA@392..393 "," - WHITESPACE@393..394 " " - PARAM@394..399 - DESTRUCT_FULL@394..399 - NAME@394..399 - IDENT@394..399 "chars" - R_PAREN@399..400 ")" - COLONCOLON@400..402 "::" - WHITESPACE@402..407 "\n " - EXPR@407..553 - STMT_LOCAL@407..435 - LOCAL_KW@407..412 "local" - WHITESPACE@412..413 " " - BIND_DESTRUCT@413..434 - DESTRUCT_FULL@413..416 - NAME@413..416 - IDENT@413..416 "len" - WHITESPACE@416..417 " " - ASSIGN@417..418 "=" - WHITESPACE@418..419 " " - EXPR@419..434 - EXPR_VAR@419..422 - NAME@419..422 - IDENT@419..422 "std" - SUFFIX_INDEX@422..429 - DOT@422..423 "." - NAME@423..429 - IDENT@423..429 "length" - SUFFIX_APPLY@429..434 - ARGS_DESC@429..434 - L_PAREN@429..430 "(" - ARG@430..433 - EXPR@430..433 - EXPR_VAR@430..433 - NAME@430..433 - IDENT@430..433 "str" - R_PAREN@433..434 ")" - SEMI@434..435 ";" - WHITESPACE@435..440 "\n " - EXPR_IF_THEN_ELSE@440..553 - IF_KW@440..442 "if" - WHITESPACE@442..443 " " - EXPR@443..485 - EXPR_BINARY@443..485 - EXPR@443..450 - EXPR_BINARY@443..450 - EXPR@443..446 - EXPR_VAR@443..446 - NAME@443..446 - IDENT@443..446 "len" - WHITESPACE@446..447 " " - GT@447..448 ">" - WHITESPACE@448..449 " " - EXPR@449..450 - EXPR_NUMBER@449..450 - FLOAT@449..450 "0" - WHITESPACE@450..451 " " - AND@451..453 "&&" - WHITESPACE@453..454 " " - EXPR@454..485 - EXPR_VAR@454..457 - NAME@454..457 - IDENT@454..457 "std" - SUFFIX_INDEX@457..464 - DOT@457..458 "." - NAME@458..464 - IDENT@458..464 "member" - SUFFIX_APPLY@464..485 - ARGS_DESC@464..485 - L_PAREN@464..465 "(" - ARG@465..470 - EXPR@465..470 - EXPR_VAR@465..470 - NAME@465..470 - IDENT@465..470 "chars" - COMMA@470..471 "," - WHITESPACE@471..472 " " - ARG@472..484 - EXPR@472..484 - EXPR_VAR@472..475 - NAME@472..475 - IDENT@472..475 "str" - SUFFIX_INDEX_EXPR@475..484 - L_BRACK@475..476 "[" - EXPR@476..483 - EXPR_BINARY@476..483 - EXPR@476..479 - EXPR_VAR@476..479 - NAME@476..479 - IDENT@476..479 "len" - WHITESPACE@479..480 " " - MINUS@480..481 "-" - WHITESPACE@481..482 " " - EXPR@482..483 - EXPR_NUMBER@482..483 - FLOAT@482..483 "1" - R_BRACK@483..484 "]" - R_PAREN@484..485 ")" - WHITESPACE@485..486 " " - THEN_KW@486..490 "then" - WHITESPACE@490..497 "\n " - TRUE_EXPR@497..534 - EXPR@497..534 - EXPR_VAR@497..500 - NAME@497..500 - IDENT@497..500 "std" - SUFFIX_INDEX@500..512 - DOT@500..501 "." - NAME@501..512 - IDENT@501..512 "rstripChars" - SUFFIX_APPLY@512..534 - ARGS_DESC@512..534 - L_PAREN@512..513 "(" - ARG@513..526 - EXPR@513..526 - EXPR_VAR@513..516 - NAME@513..516 - IDENT@513..516 "str" - SUFFIX_SLICE@516..526 - SLICE_DESC@516..526 - L_BRACK@516..517 "[" - COLON@517..518 ":" - SLICE_DESC_END@518..525 - EXPR@518..525 - EXPR_BINARY@518..525 - EXPR@518..521 - EXPR_VAR@518..521 - NAME@518..521 - IDENT@518..521 "len" - WHITESPACE@521..522 " " - MINUS@522..523 "-" - WHITESPACE@523..524 " " - EXPR@524..525 - EXPR_NUMBER@524..525 - FLOAT@524..525 "1" - R_BRACK@525..526 "]" - COMMA@526..527 "," - WHITESPACE@527..528 " " - ARG@528..533 - EXPR@528..533 - EXPR_VAR@528..533 - NAME@528..533 - IDENT@528..533 "chars" - R_PAREN@533..534 ")" - WHITESPACE@534..539 "\n " - ELSE_KW@539..543 "else" - WHITESPACE@543..550 "\n " - FALSE_EXPR@550..553 - EXPR@550..553 - EXPR_VAR@550..553 - NAME@550..553 - IDENT@550..553 "str" - COMMA@553..554 "," - WHITESPACE@554..558 "\n\n " - MEMBER_FIELD_METHOD@558..638 - FIELD_NAME_FIXED@558..568 - NAME@558..568 - IDENT@558..568 "stripChars" - PARAMS_DESC@568..580 - L_PAREN@568..569 "(" - PARAM@569..572 - DESTRUCT_FULL@569..572 - NAME@569..572 - IDENT@569..572 "str" - COMMA@572..573 "," - WHITESPACE@573..574 " " - PARAM@574..579 - DESTRUCT_FULL@574..579 - NAME@574..579 - IDENT@574..579 "chars" - R_PAREN@579..580 ")" - COLONCOLON@580..582 "::" - WHITESPACE@582..587 "\n " - EXPR@587..638 - EXPR_VAR@587..590 - NAME@587..590 - IDENT@587..590 "std" - SUFFIX_INDEX@590..602 - DOT@590..591 "." - NAME@591..602 - IDENT@591..602 "lstripChars" - SUFFIX_APPLY@602..638 - ARGS_DESC@602..638 - L_PAREN@602..603 "(" - ARG@603..630 - EXPR@603..630 - EXPR_VAR@603..606 - NAME@603..606 - IDENT@603..606 "std" - SUFFIX_INDEX@606..618 - DOT@606..607 "." - NAME@607..618 - IDENT@607..618 "rstripChars" - SUFFIX_APPLY@618..630 - ARGS_DESC@618..630 - L_PAREN@618..619 "(" - ARG@619..622 - EXPR@619..622 - EXPR_VAR@619..622 - NAME@619..622 - IDENT@619..622 "str" - COMMA@622..623 "," - WHITESPACE@623..624 " " - ARG@624..629 - EXPR@624..629 - EXPR_VAR@624..629 - NAME@624..629 - IDENT@624..629 "chars" - R_PAREN@629..630 ")" - COMMA@630..631 "," - WHITESPACE@631..632 " " - ARG@632..637 - EXPR@632..637 - EXPR_VAR@632..637 - NAME@632..637 - IDENT@632..637 "chars" - R_PAREN@637..638 ")" - COMMA@638..639 "," - WHITESPACE@639..643 "\n\n " - MEMBER_FIELD_METHOD@643..921 - FIELD_NAME_FIXED@643..654 - NAME@643..654 - IDENT@643..654 "splitLimitR" - PARAMS_DESC@654..673 - L_PAREN@654..655 "(" - PARAM@655..658 - DESTRUCT_FULL@655..658 - NAME@655..658 - IDENT@655..658 "str" - COMMA@658..659 "," - WHITESPACE@659..660 " " - PARAM@660..661 - DESTRUCT_FULL@660..661 - NAME@660..661 - IDENT@660..661 "c" - COMMA@661..662 "," - WHITESPACE@662..663 " " - PARAM@663..672 - DESTRUCT_FULL@663..672 - NAME@663..672 - IDENT@663..672 "maxsplits" - R_PAREN@672..673 ")" - COLONCOLON@673..675 "::" - WHITESPACE@675..680 "\n " - EXPR@680..921 - EXPR_IF_THEN_ELSE@680..921 - IF_KW@680..682 "if" - WHITESPACE@682..683 " " - EXPR@683..698 - EXPR_BINARY@683..698 - EXPR@683..692 - EXPR_VAR@683..692 - NAME@683..692 - IDENT@683..692 "maxsplits" - WHITESPACE@692..693 " " - EQ@693..695 "==" - WHITESPACE@695..696 " " - EXPR@696..698 - EXPR_UNARY@696..698 - MINUS@696..697 "-" - EXPR_NUMBER@697..698 - FLOAT@697..698 "1" - WHITESPACE@698..699 " " - THEN_KW@699..703 "then" - WHITESPACE@703..710 "\n " - TRUE_EXPR@710..736 - EXPR@710..736 - EXPR_VAR@710..713 - NAME@710..713 - IDENT@710..713 "std" - SUFFIX_INDEX@713..724 - DOT@713..714 "." - NAME@714..724 - IDENT@714..724 "splitLimit" - SUFFIX_APPLY@724..736 - ARGS_DESC@724..736 - L_PAREN@724..725 "(" - ARG@725..728 - EXPR@725..728 - EXPR_VAR@725..728 - NAME@725..728 - IDENT@725..728 "str" - COMMA@728..729 "," - WHITESPACE@729..730 " " - ARG@730..731 - EXPR@730..731 - EXPR_VAR@730..731 - NAME@730..731 - IDENT@730..731 "c" - COMMA@731..732 "," - WHITESPACE@732..733 " " - ARG@733..735 - EXPR@733..735 - EXPR_UNARY@733..735 - MINUS@733..734 "-" - EXPR_NUMBER@734..735 - FLOAT@734..735 "1" - R_PAREN@735..736 ")" - WHITESPACE@736..741 "\n " - ELSE_KW@741..745 "else" - WHITESPACE@745..752 "\n " - FALSE_EXPR@752..921 - EXPR@752..921 - STMT_LOCAL@752..820 - LOCAL_KW@752..757 "local" - WHITESPACE@757..758 " " - BIND_FUNCTION@758..819 - NAME@758..764 - IDENT@758..764 "revStr" - PARAMS_DESC@764..769 - L_PAREN@764..765 "(" - PARAM@765..768 - DESTRUCT_FULL@765..768 - NAME@765..768 - IDENT@765..768 "str" - R_PAREN@768..769 ")" - WHITESPACE@769..770 " " - ASSIGN@770..771 "=" - WHITESPACE@771..772 " " - EXPR@772..819 - EXPR_VAR@772..775 - NAME@772..775 - IDENT@772..775 "std" - SUFFIX_INDEX@775..780 - DOT@775..776 "." - NAME@776..780 - IDENT@776..780 "join" - SUFFIX_APPLY@780..819 - ARGS_DESC@780..819 - L_PAREN@780..781 "(" - ARG@781..783 - EXPR@781..783 - EXPR_STRING@781..783 - STRING_SINGLE@781..783 "''" - COMMA@783..784 "," - WHITESPACE@784..785 " " - ARG@785..818 - EXPR@785..818 - EXPR_VAR@785..788 - NAME@785..788 - IDENT@785..788 "std" - SUFFIX_INDEX@788..796 - DOT@788..789 "." - NAME@789..796 - IDENT@789..796 "reverse" - SUFFIX_APPLY@796..818 - ARGS_DESC@796..818 - L_PAREN@796..797 "(" - ARG@797..817 - EXPR@797..817 - EXPR_VAR@797..800 - NAME@797..800 - IDENT@797..800 "std" - SUFFIX_INDEX@800..812 - DOT@800..801 "." - NAME@801..812 - IDENT@801..812 "stringChars" - SUFFIX_APPLY@812..817 - ARGS_DESC@812..817 - L_PAREN@812..813 "(" - ARG@813..816 - EXPR@813..816 - EXPR_VAR@813..816 - NAME@813..816 - IDENT@813..816 "str" - R_PAREN@816..817 ")" - R_PAREN@817..818 ")" - R_PAREN@818..819 ")" - SEMI@819..820 ";" - WHITESPACE@820..827 "\n " - EXPR_VAR@827..830 - NAME@827..830 - IDENT@827..830 "std" - SUFFIX_INDEX@830..834 - DOT@830..831 "." - NAME@831..834 - IDENT@831..834 "map" - SUFFIX_APPLY@834..921 - ARGS_DESC@834..921 - L_PAREN@834..835 "(" - ARG@835..856 - EXPR@835..856 - EXPR_FUNCTION@835..856 - FUNCTION_KW@835..843 "function" - PARAMS_DESC@843..846 - L_PAREN@843..844 "(" - PARAM@844..845 - DESTRUCT_FULL@844..845 - NAME@844..845 - IDENT@844..845 "e" - R_PAREN@845..846 ")" - WHITESPACE@846..847 " " - EXPR@847..856 - EXPR_VAR@847..853 - NAME@847..853 - IDENT@847..853 "revStr" - SUFFIX_APPLY@853..856 - ARGS_DESC@853..856 - L_PAREN@853..854 "(" - ARG@854..855 - EXPR@854..855 - EXPR_VAR@854..855 - NAME@854..855 - IDENT@854..855 "e" - R_PAREN@855..856 ")" - COMMA@856..857 "," - WHITESPACE@857..858 " " - ARG@858..920 - EXPR@858..920 - EXPR_VAR@858..861 - NAME@858..861 - IDENT@858..861 "std" - SUFFIX_INDEX@861..869 - DOT@861..862 "." - NAME@862..869 - IDENT@862..869 "reverse" - SUFFIX_APPLY@869..920 - ARGS_DESC@869..920 - L_PAREN@869..870 "(" - ARG@870..919 - EXPR@870..919 - EXPR_VAR@870..873 - NAME@870..873 - IDENT@870..873 "std" - SUFFIX_INDEX@873..884 - DOT@873..874 "." - NAME@874..884 - IDENT@874..884 "splitLimit" - SUFFIX_APPLY@884..919 - ARGS_DESC@884..919 - L_PAREN@884..885 "(" - ARG@885..896 - EXPR@885..896 - EXPR_VAR@885..891 - NAME@885..891 - IDENT@885..891 "revStr" - SUFFIX_APPLY@891..896 - ARGS_DESC@891..896 - L_PAREN@891..892 "(" - ARG@892..895 - EXPR@892..895 - EXPR_VAR@892..895 - NAME@892..895 - IDENT@892..895 "str" - R_PAREN@895..896 ")" - COMMA@896..897 "," - WHITESPACE@897..898 " " - ARG@898..907 - EXPR@898..907 - EXPR_VAR@898..904 - NAME@898..904 - IDENT@898..904 "revStr" - SUFFIX_APPLY@904..907 - ARGS_DESC@904..907 - L_PAREN@904..905 "(" - ARG@905..906 - EXPR@905..906 - EXPR_VAR@905..906 - NAME@905..906 - IDENT@905..906 "c" - R_PAREN@906..907 ")" - COMMA@907..908 "," - WHITESPACE@908..909 " " - ARG@909..918 - EXPR@909..918 - EXPR_VAR@909..918 - NAME@909..918 - IDENT@909..918 "maxsplits" - R_PAREN@918..919 ")" - R_PAREN@919..920 ")" - R_PAREN@920..921 ")" - COMMA@921..922 "," - WHITESPACE@922..926 "\n\n " - MEMBER_FIELD_METHOD@926..968 - FIELD_NAME_FIXED@926..931 - NAME@926..931 - IDENT@926..931 "split" - PARAMS_DESC@931..939 - L_PAREN@931..932 "(" - PARAM@932..935 - DESTRUCT_FULL@932..935 - NAME@932..935 - IDENT@932..935 "str" - COMMA@935..936 "," - WHITESPACE@936..937 " " - PARAM@937..938 - DESTRUCT_FULL@937..938 - NAME@937..938 - IDENT@937..938 "c" - R_PAREN@938..939 ")" - COLONCOLON@939..941 "::" - WHITESPACE@941..942 " " - EXPR@942..968 - EXPR_VAR@942..945 - NAME@942..945 - IDENT@942..945 "std" - SUFFIX_INDEX@945..956 - DOT@945..946 "." - NAME@946..956 - IDENT@946..956 "splitLimit" - SUFFIX_APPLY@956..968 - ARGS_DESC@956..968 - L_PAREN@956..957 "(" - ARG@957..960 - EXPR@957..960 - EXPR_VAR@957..960 - NAME@957..960 - IDENT@957..960 "str" - COMMA@960..961 "," - WHITESPACE@961..962 " " - ARG@962..963 - EXPR@962..963 - EXPR_VAR@962..963 - NAME@962..963 - IDENT@962..963 "c" - COMMA@963..964 "," - WHITESPACE@964..965 " " - ARG@965..967 - EXPR@965..967 - EXPR_UNARY@965..967 - MINUS@965..966 "-" - EXPR_NUMBER@966..967 - FLOAT@966..967 "1" - R_PAREN@967..968 ")" - COMMA@968..969 "," - WHITESPACE@969..973 "\n\n " - MEMBER_FIELD_METHOD@973..1331 - FIELD_NAME_FIXED@973..985 - NAME@973..985 - IDENT@973..985 "mapWithIndex" - PARAMS_DESC@985..996 - L_PAREN@985..986 "(" - PARAM@986..990 - DESTRUCT_FULL@986..990 - NAME@986..990 - IDENT@986..990 "func" - COMMA@990..991 "," - WHITESPACE@991..992 " " - PARAM@992..995 - DESTRUCT_FULL@992..995 - NAME@992..995 - IDENT@992..995 "arr" - R_PAREN@995..996 ")" - COLONCOLON@996..998 "::" - WHITESPACE@998..1003 "\n " - EXPR@1003..1331 - EXPR_IF_THEN_ELSE@1003..1331 - IF_KW@1003..1005 "if" - WHITESPACE@1005..1006 " " - EXPR@1006..1027 - EXPR_UNARY@1006..1027 - NOT@1006..1007 "!" - EXPR_VAR@1007..1010 - NAME@1007..1010 - IDENT@1007..1010 "std" - SUFFIX_INDEX@1010..1021 - DOT@1010..1011 "." - NAME@1011..1021 - IDENT@1011..1021 "isFunction" - SUFFIX_APPLY@1021..1027 - ARGS_DESC@1021..1027 - L_PAREN@1021..1022 "(" - ARG@1022..1026 - EXPR@1022..1026 - EXPR_VAR@1022..1026 - NAME@1022..1026 - IDENT@1022..1026 "func" - R_PAREN@1026..1027 ")" - WHITESPACE@1027..1028 " " - THEN_KW@1028..1032 "then" - WHITESPACE@1032..1039 "\n " - TRUE_EXPR@1039..1117 - EXPR@1039..1117 - EXPR_ERROR@1039..1117 - ERROR_KW@1039..1044 "error" - WHITESPACE@1044..1045 " " - EXPR@1045..1117 - EXPR_PARENED@1045..1117 - L_PAREN@1045..1046 "(" - EXPR@1046..1116 - EXPR_BINARY@1046..1116 - EXPR@1046..1099 - EXPR_STRING@1046..1099 - STRING_SINGLE@1046..1099 "'std.mapWithIndex fir ..." - WHITESPACE@1099..1100 " " - PLUS@1100..1101 "+" - WHITESPACE@1101..1102 " " - EXPR@1102..1116 - EXPR_VAR@1102..1105 - NAME@1102..1105 - IDENT@1102..1105 "std" - SUFFIX_INDEX@1105..1110 - DOT@1105..1106 "." - NAME@1106..1110 - IDENT@1106..1110 "type" - SUFFIX_APPLY@1110..1116 - ARGS_DESC@1110..1116 - L_PAREN@1110..1111 "(" - ARG@1111..1115 - EXPR@1111..1115 - EXPR_VAR@1111..1115 - NAME@1111..1115 - IDENT@1111..1115 "func" - R_PAREN@1115..1116 ")" - R_PAREN@1116..1117 ")" - WHITESPACE@1117..1122 "\n " - ELSE_KW@1122..1126 "else" - WHITESPACE@1126..1127 " " - FALSE_EXPR@1127..1331 - EXPR@1127..1331 - EXPR_IF_THEN_ELSE@1127..1331 - IF_KW@1127..1129 "if" - WHITESPACE@1129..1130 " " - EXPR@1130..1169 - EXPR_BINARY@1130..1169 - EXPR@1130..1147 - EXPR_UNARY@1130..1147 - NOT@1130..1131 "!" - EXPR_VAR@1131..1134 - NAME@1131..1134 - IDENT@1131..1134 "std" - SUFFIX_INDEX@1134..1142 - DOT@1134..1135 "." - NAME@1135..1142 - IDENT@1135..1142 "isArray" - SUFFIX_APPLY@1142..1147 - ARGS_DESC@1142..1147 - L_PAREN@1142..1143 "(" - ARG@1143..1146 - EXPR@1143..1146 - EXPR_VAR@1143..1146 - NAME@1143..1146 - IDENT@1143..1146 "arr" - R_PAREN@1146..1147 ")" - WHITESPACE@1147..1148 " " - AND@1148..1150 "&&" - WHITESPACE@1150..1151 " " - EXPR@1151..1169 - EXPR_UNARY@1151..1169 - NOT@1151..1152 "!" - EXPR_VAR@1152..1155 - NAME@1152..1155 - IDENT@1152..1155 "std" - SUFFIX_INDEX@1155..1164 - DOT@1155..1156 "." - NAME@1156..1164 - IDENT@1156..1164 "isString" - SUFFIX_APPLY@1164..1169 - ARGS_DESC@1164..1169 - L_PAREN@1164..1165 "(" - ARG@1165..1168 - EXPR@1165..1168 - EXPR_VAR@1165..1168 - NAME@1165..1168 - IDENT@1165..1168 "arr" - R_PAREN@1168..1169 ")" - WHITESPACE@1169..1170 " " - THEN_KW@1170..1174 "then" - WHITESPACE@1174..1181 "\n " - TRUE_EXPR@1181..1256 - EXPR@1181..1256 - EXPR_ERROR@1181..1256 - ERROR_KW@1181..1186 "error" - WHITESPACE@1186..1187 " " - EXPR@1187..1256 - EXPR_PARENED@1187..1256 - L_PAREN@1187..1188 "(" - EXPR@1188..1255 - EXPR_BINARY@1188..1255 - EXPR@1188..1239 - EXPR_STRING@1188..1239 - STRING_SINGLE@1188..1239 "'std.mapWithIndex sec ..." - WHITESPACE@1239..1240 " " - PLUS@1240..1241 "+" - WHITESPACE@1241..1242 " " - EXPR@1242..1255 - EXPR_VAR@1242..1245 - NAME@1242..1245 - IDENT@1242..1245 "std" - SUFFIX_INDEX@1245..1250 - DOT@1245..1246 "." - NAME@1246..1250 - IDENT@1246..1250 "type" - SUFFIX_APPLY@1250..1255 - ARGS_DESC@1250..1255 - L_PAREN@1250..1251 "(" - ARG@1251..1254 - EXPR@1251..1254 - EXPR_VAR@1251..1254 - NAME@1251..1254 - IDENT@1251..1254 "arr" - R_PAREN@1254..1255 ")" - R_PAREN@1255..1256 ")" - WHITESPACE@1256..1261 "\n " - ELSE_KW@1261..1265 "else" - WHITESPACE@1265..1272 "\n " - FALSE_EXPR@1272..1331 - EXPR@1272..1331 - EXPR_VAR@1272..1275 - NAME@1272..1275 - IDENT@1272..1275 "std" - SUFFIX_INDEX@1275..1285 - DOT@1275..1276 "." - NAME@1276..1285 - IDENT@1276..1285 "makeArray" - SUFFIX_APPLY@1285..1331 - ARGS_DESC@1285..1331 - L_PAREN@1285..1286 "(" - ARG@1286..1301 - EXPR@1286..1301 - EXPR_VAR@1286..1289 - NAME@1286..1289 - IDENT@1286..1289 "std" - SUFFIX_INDEX@1289..1296 - DOT@1289..1290 "." - NAME@1290..1296 - IDENT@1290..1296 "length" - SUFFIX_APPLY@1296..1301 - ARGS_DESC@1296..1301 - L_PAREN@1296..1297 "(" - ARG@1297..1300 - EXPR@1297..1300 - EXPR_VAR@1297..1300 - NAME@1297..1300 - IDENT@1297..1300 "arr" - R_PAREN@1300..1301 ")" - COMMA@1301..1302 "," - WHITESPACE@1302..1303 " " - ARG@1303..1330 - EXPR@1303..1330 - EXPR_FUNCTION@1303..1330 - FUNCTION_KW@1303..1311 "function" - PARAMS_DESC@1311..1314 - L_PAREN@1311..1312 "(" - PARAM@1312..1313 - DESTRUCT_FULL@1312..1313 - NAME@1312..1313 - IDENT@1312..1313 "i" - R_PAREN@1313..1314 ")" - WHITESPACE@1314..1315 " " - EXPR@1315..1330 - EXPR_VAR@1315..1319 - NAME@1315..1319 - IDENT@1315..1319 "func" - SUFFIX_APPLY@1319..1330 - ARGS_DESC@1319..1330 - L_PAREN@1319..1320 "(" - ARG@1320..1321 - EXPR@1320..1321 - EXPR_VAR@1320..1321 - NAME@1320..1321 - IDENT@1320..1321 "i" - COMMA@1321..1322 "," - WHITESPACE@1322..1323 " " - ARG@1323..1329 - EXPR@1323..1329 - EXPR_VAR@1323..1326 - NAME@1323..1326 - IDENT@1323..1326 "arr" - SUFFIX_INDEX_EXPR@1326..1329 - L_BRACK@1326..1327 "[" - EXPR@1327..1328 - EXPR_VAR@1327..1328 - NAME@1327..1328 - IDENT@1327..1328 "i" - R_BRACK@1328..1329 "]" - R_PAREN@1329..1330 ")" - R_PAREN@1330..1331 ")" - COMMA@1331..1332 "," - WHITESPACE@1332..1336 "\n\n " - MEMBER_FIELD_METHOD@1336..1664 - FIELD_NAME_FIXED@1336..1346 - NAME@1336..1346 - IDENT@1336..1346 "mapWithKey" - PARAMS_DESC@1346..1357 - L_PAREN@1346..1347 "(" - PARAM@1347..1351 - DESTRUCT_FULL@1347..1351 - NAME@1347..1351 - IDENT@1347..1351 "func" - COMMA@1351..1352 "," - WHITESPACE@1352..1353 " " - PARAM@1353..1356 - DESTRUCT_FULL@1353..1356 - NAME@1353..1356 - IDENT@1353..1356 "obj" - R_PAREN@1356..1357 ")" - COLONCOLON@1357..1359 "::" - WHITESPACE@1359..1364 "\n " - EXPR@1364..1664 - EXPR_IF_THEN_ELSE@1364..1664 - IF_KW@1364..1366 "if" - WHITESPACE@1366..1367 " " - EXPR@1367..1388 - EXPR_UNARY@1367..1388 - NOT@1367..1368 "!" - EXPR_VAR@1368..1371 - NAME@1368..1371 - IDENT@1368..1371 "std" - SUFFIX_INDEX@1371..1382 - DOT@1371..1372 "." - NAME@1372..1382 - IDENT@1372..1382 "isFunction" - SUFFIX_APPLY@1382..1388 - ARGS_DESC@1382..1388 - L_PAREN@1382..1383 "(" - ARG@1383..1387 - EXPR@1383..1387 - EXPR_VAR@1383..1387 - NAME@1383..1387 - IDENT@1383..1387 "func" - R_PAREN@1387..1388 ")" - WHITESPACE@1388..1389 " " - THEN_KW@1389..1393 "then" - WHITESPACE@1393..1400 "\n " - TRUE_EXPR@1400..1476 - EXPR@1400..1476 - EXPR_ERROR@1400..1476 - ERROR_KW@1400..1405 "error" - WHITESPACE@1405..1406 " " - EXPR@1406..1476 - EXPR_PARENED@1406..1476 - L_PAREN@1406..1407 "(" - EXPR@1407..1475 - EXPR_BINARY@1407..1475 - EXPR@1407..1458 - EXPR_STRING@1407..1458 - STRING_SINGLE@1407..1458 "'std.mapWithKey first ..." - WHITESPACE@1458..1459 " " - PLUS@1459..1460 "+" - WHITESPACE@1460..1461 " " - EXPR@1461..1475 - EXPR_VAR@1461..1464 - NAME@1461..1464 - IDENT@1461..1464 "std" - SUFFIX_INDEX@1464..1469 - DOT@1464..1465 "." - NAME@1465..1469 - IDENT@1465..1469 "type" - SUFFIX_APPLY@1469..1475 - ARGS_DESC@1469..1475 - L_PAREN@1469..1470 "(" - ARG@1470..1474 - EXPR@1470..1474 - EXPR_VAR@1470..1474 - NAME@1470..1474 - IDENT@1470..1474 "func" - R_PAREN@1474..1475 ")" - R_PAREN@1475..1476 ")" - WHITESPACE@1476..1481 "\n " - ELSE_KW@1481..1485 "else" - WHITESPACE@1485..1486 " " - FALSE_EXPR@1486..1664 - EXPR@1486..1664 - EXPR_IF_THEN_ELSE@1486..1664 - IF_KW@1486..1488 "if" - WHITESPACE@1488..1489 " " - EXPR@1489..1507 - EXPR_UNARY@1489..1507 - NOT@1489..1490 "!" - EXPR_VAR@1490..1493 - NAME@1490..1493 - IDENT@1490..1493 "std" - SUFFIX_INDEX@1493..1502 - DOT@1493..1494 "." - NAME@1494..1502 - IDENT@1494..1502 "isObject" - SUFFIX_APPLY@1502..1507 - ARGS_DESC@1502..1507 - L_PAREN@1502..1503 "(" - ARG@1503..1506 - EXPR@1503..1506 - EXPR_VAR@1503..1506 - NAME@1503..1506 - IDENT@1503..1506 "obj" - R_PAREN@1506..1507 ")" - WHITESPACE@1507..1508 " " - THEN_KW@1508..1512 "then" - WHITESPACE@1512..1519 "\n " - TRUE_EXPR@1519..1593 - EXPR@1519..1593 - EXPR_ERROR@1519..1593 - ERROR_KW@1519..1524 "error" - WHITESPACE@1524..1525 " " - EXPR@1525..1593 - EXPR_PARENED@1525..1593 - L_PAREN@1525..1526 "(" - EXPR@1526..1592 - EXPR_BINARY@1526..1592 - EXPR@1526..1576 - EXPR_STRING@1526..1576 - STRING_SINGLE@1526..1576 "'std.mapWithKey secon ..." - WHITESPACE@1576..1577 " " - PLUS@1577..1578 "+" - WHITESPACE@1578..1579 " " - EXPR@1579..1592 - EXPR_VAR@1579..1582 - NAME@1579..1582 - IDENT@1579..1582 "std" - SUFFIX_INDEX@1582..1587 - DOT@1582..1583 "." - NAME@1583..1587 - IDENT@1583..1587 "type" - SUFFIX_APPLY@1587..1592 - ARGS_DESC@1587..1592 - L_PAREN@1587..1588 "(" - ARG@1588..1591 - EXPR@1588..1591 - EXPR_VAR@1588..1591 - NAME@1588..1591 - IDENT@1588..1591 "obj" - R_PAREN@1591..1592 ")" - R_PAREN@1592..1593 ")" - WHITESPACE@1593..1598 "\n " - ELSE_KW@1598..1602 "else" - WHITESPACE@1602..1609 "\n " - FALSE_EXPR@1609..1664 - EXPR@1609..1664 - EXPR_OBJECT@1609..1664 - OBJ_BODY_COMP@1609..1664 - L_BRACE@1609..1610 "{" - WHITESPACE@1610..1611 " " - MEMBER_FIELD_NORMAL@1611..1631 - FIELD_NAME_DYNAMIC@1611..1614 - L_BRACK@1611..1612 "[" - EXPR@1612..1613 - EXPR_VAR@1612..1613 - NAME@1612..1613 - IDENT@1612..1613 "k" - R_BRACK@1613..1614 "]" - COLON@1614..1615 ":" - WHITESPACE@1615..1616 " " - EXPR@1616..1631 - EXPR_VAR@1616..1620 - NAME@1616..1620 - IDENT@1616..1620 "func" - SUFFIX_APPLY@1620..1631 - ARGS_DESC@1620..1631 - L_PAREN@1620..1621 "(" - ARG@1621..1622 - EXPR@1621..1622 - EXPR_VAR@1621..1622 - NAME@1621..1622 - IDENT@1621..1622 "k" - COMMA@1622..1623 "," - WHITESPACE@1623..1624 " " - ARG@1624..1630 - EXPR@1624..1630 - EXPR_VAR@1624..1627 - NAME@1624..1627 - IDENT@1624..1627 "obj" - SUFFIX_INDEX_EXPR@1627..1630 - L_BRACK@1627..1628 "[" - EXPR@1628..1629 - EXPR_VAR@1628..1629 - NAME@1628..1629 - IDENT@1628..1629 "k" - R_BRACK@1629..1630 "]" - R_PAREN@1630..1631 ")" - WHITESPACE@1631..1632 " " - FOR_SPEC@1632..1662 - FOR_KW@1632..1635 "for" - WHITESPACE@1635..1636 " " - DESTRUCT_FULL@1636..1637 - NAME@1636..1637 - IDENT@1636..1637 "k" - WHITESPACE@1637..1638 " " - IN_KW@1638..1640 "in" - WHITESPACE@1640..1641 " " - EXPR@1641..1662 - EXPR_VAR@1641..1644 - NAME@1641..1644 - IDENT@1641..1644 "std" - SUFFIX_INDEX@1644..1657 - DOT@1644..1645 "." - NAME@1645..1657 - IDENT@1645..1657 "objectFields" - SUFFIX_APPLY@1657..1662 - ARGS_DESC@1657..1662 - L_PAREN@1657..1658 "(" - ARG@1658..1661 - EXPR@1658..1661 - EXPR_VAR@1658..1661 - NAME@1658..1661 - IDENT@1658..1661 "obj" - R_PAREN@1661..1662 ")" - WHITESPACE@1662..1663 " " - R_BRACE@1663..1664 "}" - COMMA@1664..1665 "," - WHITESPACE@1665..1669 "\n\n " - MEMBER_FIELD_METHOD@1669..1712 - FIELD_NAME_FIXED@1669..1674 - NAME@1669..1674 - IDENT@1669..1674 "lines" - PARAMS_DESC@1674..1679 - L_PAREN@1674..1675 "(" - PARAM@1675..1678 - DESTRUCT_FULL@1675..1678 - NAME@1675..1678 - IDENT@1675..1678 "arr" - R_PAREN@1678..1679 ")" - COLONCOLON@1679..1681 "::" - WHITESPACE@1681..1686 "\n " - EXPR@1686..1712 - EXPR_VAR@1686..1689 - NAME@1686..1689 - IDENT@1686..1689 "std" - SUFFIX_INDEX@1689..1694 - DOT@1689..1690 "." - NAME@1690..1694 - IDENT@1690..1694 "join" - SUFFIX_APPLY@1694..1712 - ARGS_DESC@1694..1712 - L_PAREN@1694..1695 "(" - ARG@1695..1699 - EXPR@1695..1699 - EXPR_STRING@1695..1699 - STRING_SINGLE@1695..1699 "'\\n'" - COMMA@1699..1700 "," - WHITESPACE@1700..1701 " " - ARG@1701..1711 - EXPR@1701..1711 - EXPR_BINARY@1701..1711 - EXPR@1701..1704 - EXPR_VAR@1701..1704 - NAME@1701..1704 - IDENT@1701..1704 "arr" - WHITESPACE@1704..1705 " " - PLUS@1705..1706 "+" - WHITESPACE@1706..1707 " " - EXPR@1707..1711 - EXPR_ARRAY@1707..1711 - L_BRACK@1707..1708 "[" - EXPR@1708..1710 - EXPR_STRING@1708..1710 - STRING_SINGLE@1708..1710 "''" - R_BRACK@1710..1711 "]" - R_PAREN@1711..1712 ")" - COMMA@1712..1713 "," - WHITESPACE@1713..1717 "\n\n " - MEMBER_FIELD_METHOD@1717..1929 - FIELD_NAME_FIXED@1717..1725 - NAME@1717..1725 - IDENT@1717..1725 "deepJoin" - PARAMS_DESC@1725..1730 - L_PAREN@1725..1726 "(" - PARAM@1726..1729 - DESTRUCT_FULL@1726..1729 - NAME@1726..1729 - IDENT@1726..1729 "arr" - R_PAREN@1729..1730 ")" - COLONCOLON@1730..1732 "::" - WHITESPACE@1732..1737 "\n " - EXPR@1737..1929 - EXPR_IF_THEN_ELSE@1737..1929 - IF_KW@1737..1739 "if" - WHITESPACE@1739..1740 " " - EXPR@1740..1757 - EXPR_VAR@1740..1743 - NAME@1740..1743 - IDENT@1740..1743 "std" - SUFFIX_INDEX@1743..1752 - DOT@1743..1744 "." - NAME@1744..1752 - IDENT@1744..1752 "isString" - SUFFIX_APPLY@1752..1757 - ARGS_DESC@1752..1757 - L_PAREN@1752..1753 "(" - ARG@1753..1756 - EXPR@1753..1756 - EXPR_VAR@1753..1756 - NAME@1753..1756 - IDENT@1753..1756 "arr" - R_PAREN@1756..1757 ")" - WHITESPACE@1757..1758 " " - THEN_KW@1758..1762 "then" - WHITESPACE@1762..1769 "\n " - TRUE_EXPR@1769..1772 - EXPR@1769..1772 - EXPR_VAR@1769..1772 - NAME@1769..1772 - IDENT@1769..1772 "arr" - WHITESPACE@1772..1777 "\n " - ELSE_KW@1777..1781 "else" - WHITESPACE@1781..1782 " " - FALSE_EXPR@1782..1929 - EXPR@1782..1929 - EXPR_IF_THEN_ELSE@1782..1929 - IF_KW@1782..1784 "if" - WHITESPACE@1784..1785 " " - EXPR@1785..1801 - EXPR_VAR@1785..1788 - NAME@1785..1788 - IDENT@1785..1788 "std" - SUFFIX_INDEX@1788..1796 - DOT@1788..1789 "." - NAME@1789..1796 - IDENT@1789..1796 "isArray" - SUFFIX_APPLY@1796..1801 - ARGS_DESC@1796..1801 - L_PAREN@1796..1797 "(" - ARG@1797..1800 - EXPR@1797..1800 - EXPR_VAR@1797..1800 - NAME@1797..1800 - IDENT@1797..1800 "arr" - R_PAREN@1800..1801 ")" - WHITESPACE@1801..1802 " " - THEN_KW@1802..1806 "then" - WHITESPACE@1806..1813 "\n " - TRUE_EXPR@1813..1857 - EXPR@1813..1857 - EXPR_VAR@1813..1816 - NAME@1813..1816 - IDENT@1813..1816 "std" - SUFFIX_INDEX@1816..1821 - DOT@1816..1817 "." - NAME@1817..1821 - IDENT@1817..1821 "join" - SUFFIX_APPLY@1821..1857 - ARGS_DESC@1821..1857 - L_PAREN@1821..1822 "(" - ARG@1822..1824 - EXPR@1822..1824 - EXPR_STRING@1822..1824 - STRING_SINGLE@1822..1824 "''" - COMMA@1824..1825 "," - WHITESPACE@1825..1826 " " - ARG@1826..1856 - EXPR@1826..1856 - EXPR_ARRAY_COMP@1826..1856 - L_BRACK@1826..1827 "[" - EXPR@1827..1842 - EXPR_VAR@1827..1830 - NAME@1827..1830 - IDENT@1827..1830 "std" - SUFFIX_INDEX@1830..1839 - DOT@1830..1831 "." - NAME@1831..1839 - IDENT@1831..1839 "deepJoin" - SUFFIX_APPLY@1839..1842 - ARGS_DESC@1839..1842 - L_PAREN@1839..1840 "(" - ARG@1840..1841 - EXPR@1840..1841 - EXPR_VAR@1840..1841 - NAME@1840..1841 - IDENT@1840..1841 "x" - R_PAREN@1841..1842 ")" - WHITESPACE@1842..1843 " " - FOR_SPEC@1843..1855 - FOR_KW@1843..1846 "for" - WHITESPACE@1846..1847 " " - DESTRUCT_FULL@1847..1848 - NAME@1847..1848 - IDENT@1847..1848 "x" - WHITESPACE@1848..1849 " " - IN_KW@1849..1851 "in" - WHITESPACE@1851..1852 " " - EXPR@1852..1855 - EXPR_VAR@1852..1855 - NAME@1852..1855 - IDENT@1852..1855 "arr" - R_BRACK@1855..1856 "]" - R_PAREN@1856..1857 ")" - WHITESPACE@1857..1862 "\n " - ELSE_KW@1862..1866 "else" - WHITESPACE@1866..1873 "\n " - FALSE_EXPR@1873..1929 - EXPR@1873..1929 - EXPR_ERROR@1873..1929 - ERROR_KW@1873..1878 "error" - WHITESPACE@1878..1879 " " - EXPR@1879..1929 - EXPR_BINARY@1879..1929 - EXPR@1879..1913 - EXPR_STRING@1879..1913 - STRING_SINGLE@1879..1913 "'Expected string or a ..." - WHITESPACE@1913..1914 " " - MODULO@1914..1915 "%" - WHITESPACE@1915..1916 " " - EXPR@1916..1929 - EXPR_VAR@1916..1919 - NAME@1916..1919 - IDENT@1916..1919 "std" - SUFFIX_INDEX@1919..1924 - DOT@1919..1920 "." - NAME@1920..1924 - IDENT@1920..1924 "type" - SUFFIX_APPLY@1924..1929 - ARGS_DESC@1924..1929 - L_PAREN@1924..1925 "(" - ARG@1925..1928 - EXPR@1925..1928 - EXPR_VAR@1925..1928 - NAME@1925..1928 - IDENT@1925..1928 "arr" - R_PAREN@1928..1929 ")" - COMMA@1929..1930 "," - WHITESPACE@1930..1934 "\n\n " - MEMBER_FIELD_METHOD@1934..2042 - FIELD_NAME_FIXED@1934..1945 - NAME@1934..1945 - IDENT@1934..1945 "assertEqual" - PARAMS_DESC@1945..1951 - L_PAREN@1945..1946 "(" - PARAM@1946..1947 - DESTRUCT_FULL@1946..1947 - NAME@1946..1947 - IDENT@1946..1947 "a" - COMMA@1947..1948 "," - WHITESPACE@1948..1949 " " - PARAM@1949..1950 - DESTRUCT_FULL@1949..1950 - NAME@1949..1950 - IDENT@1949..1950 "b" - R_PAREN@1950..1951 ")" - COLONCOLON@1951..1953 "::" - WHITESPACE@1953..1958 "\n " - EXPR@1958..2042 - EXPR_IF_THEN_ELSE@1958..2042 - IF_KW@1958..1960 "if" - WHITESPACE@1960..1961 " " - EXPR@1961..1967 - EXPR_BINARY@1961..1967 - EXPR@1961..1962 - EXPR_VAR@1961..1962 - NAME@1961..1962 - IDENT@1961..1962 "a" - WHITESPACE@1962..1963 " " - EQ@1963..1965 "==" - WHITESPACE@1965..1966 " " - EXPR@1966..1967 - EXPR_VAR@1966..1967 - NAME@1966..1967 - IDENT@1966..1967 "b" - WHITESPACE@1967..1968 " " - THEN_KW@1968..1972 "then" - WHITESPACE@1972..1979 "\n " - TRUE_EXPR@1979..1983 - EXPR@1979..1983 - EXPR_LITERAL@1979..1983 - TRUE_KW@1979..1983 "true" - WHITESPACE@1983..1988 "\n " - ELSE_KW@1988..1992 "else" - WHITESPACE@1992..1999 "\n " - FALSE_EXPR@1999..2042 - EXPR@1999..2042 - EXPR_ERROR@1999..2042 - ERROR_KW@1999..2004 "error" - WHITESPACE@2004..2005 " " - EXPR@2005..2042 - EXPR_BINARY@2005..2042 - EXPR@2005..2038 - EXPR_BINARY@2005..2038 - EXPR@2005..2029 - EXPR_BINARY@2005..2029 - EXPR@2005..2025 - EXPR_STRING@2005..2025 - STRING_SINGLE@2005..2025 "'Assertion failed. '" - WHITESPACE@2025..2026 " " - PLUS@2026..2027 "+" - WHITESPACE@2027..2028 " " - EXPR@2028..2029 - EXPR_VAR@2028..2029 - NAME@2028..2029 - IDENT@2028..2029 "a" - WHITESPACE@2029..2030 " " - PLUS@2030..2031 "+" - WHITESPACE@2031..2032 " " - EXPR@2032..2038 - EXPR_STRING@2032..2038 - STRING_SINGLE@2032..2038 "' != '" - WHITESPACE@2038..2039 " " - PLUS@2039..2040 "+" - WHITESPACE@2040..2041 " " - EXPR@2041..2042 - EXPR_VAR@2041..2042 - NAME@2041..2042 - IDENT@2041..2042 "b" - COMMA@2042..2043 "," - WHITESPACE@2043..2047 "\n\n " - MEMBER_FIELD_METHOD@2047..2149 - FIELD_NAME_FIXED@2047..2052 - NAME@2047..2052 - IDENT@2047..2052 "clamp" - PARAMS_DESC@2052..2071 - L_PAREN@2052..2053 "(" - PARAM@2053..2054 - DESTRUCT_FULL@2053..2054 - NAME@2053..2054 - IDENT@2053..2054 "x" - COMMA@2054..2055 "," - WHITESPACE@2055..2056 " " - PARAM@2056..2062 - DESTRUCT_FULL@2056..2062 - NAME@2056..2062 - IDENT@2056..2062 "minVal" - COMMA@2062..2063 "," - WHITESPACE@2063..2064 " " - PARAM@2064..2070 - DESTRUCT_FULL@2064..2070 - NAME@2064..2070 - IDENT@2064..2070 "maxVal" - R_PAREN@2070..2071 ")" - COLONCOLON@2071..2073 "::" - WHITESPACE@2073..2078 "\n " - EXPR@2078..2149 - EXPR_IF_THEN_ELSE@2078..2149 - IF_KW@2078..2080 "if" - WHITESPACE@2080..2081 " " - EXPR@2081..2091 - EXPR_BINARY@2081..2091 - EXPR@2081..2082 - EXPR_VAR@2081..2082 - NAME@2081..2082 - IDENT@2081..2082 "x" - WHITESPACE@2082..2083 " " - LT@2083..2084 "<" - WHITESPACE@2084..2085 " " - EXPR@2085..2091 - EXPR_VAR@2085..2091 - NAME@2085..2091 - IDENT@2085..2091 "minVal" - WHITESPACE@2091..2092 " " - THEN_KW@2092..2096 "then" - WHITESPACE@2096..2097 " " - TRUE_EXPR@2097..2103 - EXPR@2097..2103 - EXPR_VAR@2097..2103 - NAME@2097..2103 - IDENT@2097..2103 "minVal" - WHITESPACE@2103..2108 "\n " - ELSE_KW@2108..2112 "else" - WHITESPACE@2112..2113 " " - FALSE_EXPR@2113..2149 - EXPR@2113..2149 - EXPR_IF_THEN_ELSE@2113..2149 - IF_KW@2113..2115 "if" - WHITESPACE@2115..2116 " " - EXPR@2116..2126 - EXPR_BINARY@2116..2126 - EXPR@2116..2117 - EXPR_VAR@2116..2117 - NAME@2116..2117 - IDENT@2116..2117 "x" - WHITESPACE@2117..2118 " " - GT@2118..2119 ">" - WHITESPACE@2119..2120 " " - EXPR@2120..2126 - EXPR_VAR@2120..2126 - NAME@2120..2126 - IDENT@2120..2126 "maxVal" - WHITESPACE@2126..2127 " " - THEN_KW@2127..2131 "then" - WHITESPACE@2131..2132 " " - TRUE_EXPR@2132..2138 - EXPR@2132..2138 - EXPR_VAR@2132..2138 - NAME@2132..2138 - IDENT@2132..2138 "maxVal" - WHITESPACE@2138..2143 "\n " - ELSE_KW@2143..2147 "else" - WHITESPACE@2147..2148 " " - FALSE_EXPR@2148..2149 - EXPR@2148..2149 - EXPR_VAR@2148..2149 - NAME@2148..2149 - IDENT@2148..2149 "x" - COMMA@2149..2150 "," - WHITESPACE@2150..2154 "\n\n " - MEMBER_FIELD_METHOD@2154..2840 - FIELD_NAME_FIXED@2154..2165 - NAME@2154..2165 - IDENT@2154..2165 "manifestIni" - PARAMS_DESC@2165..2170 - L_PAREN@2165..2166 "(" - PARAM@2166..2169 - DESTRUCT_FULL@2166..2169 - NAME@2166..2169 - IDENT@2166..2169 "ini" - R_PAREN@2169..2170 ")" - COLONCOLON@2170..2172 "::" - WHITESPACE@2172..2177 "\n " - EXPR@2177..2840 - STMT_LOCAL@2177..2481 - LOCAL_KW@2177..2182 "local" - WHITESPACE@2182..2183 " " - BIND_FUNCTION@2183..2480 - NAME@2183..2193 - IDENT@2183..2193 "body_lines" - PARAMS_DESC@2193..2199 - L_PAREN@2193..2194 "(" - PARAM@2194..2198 - DESTRUCT_FULL@2194..2198 - NAME@2194..2198 - IDENT@2194..2198 "body" - R_PAREN@2198..2199 ")" - WHITESPACE@2199..2200 " " - ASSIGN@2200..2201 "=" - WHITESPACE@2201..2208 "\n " - EXPR@2208..2480 - EXPR_VAR@2208..2211 - NAME@2208..2211 - IDENT@2208..2211 "std" - SUFFIX_INDEX@2211..2216 - DOT@2211..2212 "." - NAME@2212..2216 - IDENT@2212..2216 "join" - SUFFIX_APPLY@2216..2480 - ARGS_DESC@2216..2480 - L_PAREN@2216..2217 "(" - ARG@2217..2219 - EXPR@2217..2219 - EXPR_ARRAY@2217..2219 - L_BRACK@2217..2218 "[" - R_BRACK@2218..2219 "]" - COMMA@2219..2220 "," - WHITESPACE@2220..2221 " " - ARG@2221..2479 - EXPR@2221..2479 - EXPR_ARRAY_COMP@2221..2479 - L_BRACK@2221..2222 "[" - WHITESPACE@2222..2231 "\n " - EXPR@2231..2430 - STMT_LOCAL@2231..2263 - LOCAL_KW@2231..2236 "local" - WHITESPACE@2236..2237 " " - BIND_DESTRUCT@2237..2262 - DESTRUCT_FULL@2237..2252 - NAME@2237..2252 - IDENT@2237..2252 "value_or_values" - WHITESPACE@2252..2253 " " - ASSIGN@2253..2254 "=" - WHITESPACE@2254..2255 " " - EXPR@2255..2262 - EXPR_VAR@2255..2259 - NAME@2255..2259 - IDENT@2255..2259 "body" - SUFFIX_INDEX_EXPR@2259..2262 - L_BRACK@2259..2260 "[" - EXPR@2260..2261 - EXPR_VAR@2260..2261 - NAME@2260..2261 - IDENT@2260..2261 "k" - R_BRACK@2261..2262 "]" - SEMI@2262..2263 ";" - WHITESPACE@2263..2272 "\n " - EXPR_IF_THEN_ELSE@2272..2430 - IF_KW@2272..2274 "if" - WHITESPACE@2274..2275 " " - EXPR@2275..2303 - EXPR_VAR@2275..2278 - NAME@2275..2278 - IDENT@2275..2278 "std" - SUFFIX_INDEX@2278..2286 - DOT@2278..2279 "." - NAME@2279..2286 - IDENT@2279..2286 "isArray" - SUFFIX_APPLY@2286..2303 - ARGS_DESC@2286..2303 - L_PAREN@2286..2287 "(" - ARG@2287..2302 - EXPR@2287..2302 - EXPR_VAR@2287..2302 - NAME@2287..2302 - IDENT@2287..2302 "value_or_values" - R_PAREN@2302..2303 ")" - WHITESPACE@2303..2304 " " - THEN_KW@2304..2308 "then" - WHITESPACE@2308..2319 "\n " - TRUE_EXPR@2319..2372 - EXPR@2319..2372 - EXPR_ARRAY_COMP@2319..2372 - L_BRACK@2319..2320 "[" - EXPR@2320..2342 - EXPR_BINARY@2320..2342 - EXPR@2320..2329 - EXPR_STRING@2320..2329 - STRING_SINGLE@2320..2329 "'%s = %s'" - WHITESPACE@2329..2330 " " - MODULO@2330..2331 "%" - WHITESPACE@2331..2332 " " - EXPR@2332..2342 - EXPR_ARRAY@2332..2342 - L_BRACK@2332..2333 "[" - EXPR@2333..2334 - EXPR_VAR@2333..2334 - NAME@2333..2334 - IDENT@2333..2334 "k" - COMMA@2334..2335 "," - WHITESPACE@2335..2336 " " - EXPR@2336..2341 - EXPR_VAR@2336..2341 - NAME@2336..2341 - IDENT@2336..2341 "value" - R_BRACK@2341..2342 "]" - WHITESPACE@2342..2343 " " - FOR_SPEC@2343..2371 - FOR_KW@2343..2346 "for" - WHITESPACE@2346..2347 " " - DESTRUCT_FULL@2347..2352 - NAME@2347..2352 - IDENT@2347..2352 "value" - WHITESPACE@2352..2353 " " - IN_KW@2353..2355 "in" - WHITESPACE@2355..2356 " " - EXPR@2356..2371 - EXPR_VAR@2356..2371 - NAME@2356..2371 - IDENT@2356..2371 "value_or_values" - R_BRACK@2371..2372 "]" - WHITESPACE@2372..2381 "\n " - ELSE_KW@2381..2385 "else" - WHITESPACE@2385..2396 "\n " - FALSE_EXPR@2396..2430 - EXPR@2396..2430 - EXPR_ARRAY@2396..2430 - L_BRACK@2396..2397 "[" - EXPR@2397..2429 - EXPR_BINARY@2397..2429 - EXPR@2397..2406 - EXPR_STRING@2397..2406 - STRING_SINGLE@2397..2406 "'%s = %s'" - WHITESPACE@2406..2407 " " - MODULO@2407..2408 "%" - WHITESPACE@2408..2409 " " - EXPR@2409..2429 - EXPR_ARRAY@2409..2429 - L_BRACK@2409..2410 "[" - EXPR@2410..2411 - EXPR_VAR@2410..2411 - NAME@2410..2411 - IDENT@2410..2411 "k" - COMMA@2411..2412 "," - WHITESPACE@2412..2413 " " - EXPR@2413..2428 - EXPR_VAR@2413..2428 - NAME@2413..2428 - IDENT@2413..2428 "value_or_values" - R_BRACK@2428..2429 "]" - R_BRACK@2429..2430 "]" - WHITESPACE@2430..2440 "\n\n " - FOR_SPEC@2440..2471 - FOR_KW@2440..2443 "for" - WHITESPACE@2443..2444 " " - DESTRUCT_FULL@2444..2445 - NAME@2444..2445 - IDENT@2444..2445 "k" - WHITESPACE@2445..2446 " " - IN_KW@2446..2448 "in" - WHITESPACE@2448..2449 " " - EXPR@2449..2471 - EXPR_VAR@2449..2452 - NAME@2449..2452 - IDENT@2449..2452 "std" - SUFFIX_INDEX@2452..2465 - DOT@2452..2453 "." - NAME@2453..2465 - IDENT@2453..2465 "objectFields" - SUFFIX_APPLY@2465..2471 - ARGS_DESC@2465..2471 - L_PAREN@2465..2466 "(" - ARG@2466..2470 - EXPR@2466..2470 - EXPR_VAR@2466..2470 - NAME@2466..2470 - IDENT@2466..2470 "body" - R_PAREN@2470..2471 ")" - WHITESPACE@2471..2478 "\n " - R_BRACK@2478..2479 "]" - R_PAREN@2479..2480 ")" - SEMI@2480..2481 ";" - WHITESPACE@2481..2487 "\n\n " - STMT_LOCAL@2487..2769 - LOCAL_KW@2487..2492 "local" - WHITESPACE@2492..2493 " " - BIND_FUNCTION@2493..2561 - NAME@2493..2506 - IDENT@2493..2506 "section_lines" - PARAMS_DESC@2506..2520 - L_PAREN@2506..2507 "(" - PARAM@2507..2512 - DESTRUCT_FULL@2507..2512 - NAME@2507..2512 - IDENT@2507..2512 "sname" - COMMA@2512..2513 "," - WHITESPACE@2513..2514 " " - PARAM@2514..2519 - DESTRUCT_FULL@2514..2519 - NAME@2514..2519 - IDENT@2514..2519 "sbody" - R_PAREN@2519..2520 ")" - WHITESPACE@2520..2521 " " - ASSIGN@2521..2522 "=" - WHITESPACE@2522..2523 " " - EXPR@2523..2561 - EXPR_BINARY@2523..2561 - EXPR@2523..2541 - EXPR_ARRAY@2523..2541 - L_BRACK@2523..2524 "[" - EXPR@2524..2540 - EXPR_BINARY@2524..2540 - EXPR@2524..2530 - EXPR_STRING@2524..2530 - STRING_SINGLE@2524..2530 "'[%s]'" - WHITESPACE@2530..2531 " " - MODULO@2531..2532 "%" - WHITESPACE@2532..2533 " " - EXPR@2533..2540 - EXPR_ARRAY@2533..2540 - L_BRACK@2533..2534 "[" - EXPR@2534..2539 - EXPR_VAR@2534..2539 - NAME@2534..2539 - IDENT@2534..2539 "sname" - R_BRACK@2539..2540 "]" - R_BRACK@2540..2541 "]" - WHITESPACE@2541..2542 " " - PLUS@2542..2543 "+" - WHITESPACE@2543..2544 " " - EXPR@2544..2561 - EXPR_VAR@2544..2554 - NAME@2544..2554 - IDENT@2544..2554 "body_lines" - SUFFIX_APPLY@2554..2561 - ARGS_DESC@2554..2561 - L_PAREN@2554..2555 "(" - ARG@2555..2560 - EXPR@2555..2560 - EXPR_VAR@2555..2560 - NAME@2555..2560 - IDENT@2555..2560 "sbody" - R_PAREN@2560..2561 ")" - COMMA@2561..2562 "," - WHITESPACE@2562..2573 "\n " - BIND_DESTRUCT@2573..2648 - DESTRUCT_FULL@2573..2582 - NAME@2573..2582 - IDENT@2573..2582 "main_body" - WHITESPACE@2582..2583 " " - ASSIGN@2583..2584 "=" - WHITESPACE@2584..2585 " " - EXPR@2585..2648 - EXPR_IF_THEN_ELSE@2585..2648 - IF_KW@2585..2587 "if" - WHITESPACE@2587..2588 " " - EXPR@2588..2614 - EXPR_VAR@2588..2591 - NAME@2588..2591 - IDENT@2588..2591 "std" - SUFFIX_INDEX@2591..2601 - DOT@2591..2592 "." - NAME@2592..2601 - IDENT@2592..2601 "objectHas" - SUFFIX_APPLY@2601..2614 - ARGS_DESC@2601..2614 - L_PAREN@2601..2602 "(" - ARG@2602..2605 - EXPR@2602..2605 - EXPR_VAR@2602..2605 - NAME@2602..2605 - IDENT@2602..2605 "ini" - COMMA@2605..2606 "," - WHITESPACE@2606..2607 " " - ARG@2607..2613 - EXPR@2607..2613 - EXPR_STRING@2607..2613 - STRING_SINGLE@2607..2613 "'main'" - R_PAREN@2613..2614 ")" - WHITESPACE@2614..2615 " " - THEN_KW@2615..2619 "then" - WHITESPACE@2619..2620 " " - TRUE_EXPR@2620..2640 - EXPR@2620..2640 - EXPR_VAR@2620..2630 - NAME@2620..2630 - IDENT@2620..2630 "body_lines" - SUFFIX_APPLY@2630..2640 - ARGS_DESC@2630..2640 - L_PAREN@2630..2631 "(" - ARG@2631..2639 - EXPR@2631..2639 - EXPR_VAR@2631..2634 - NAME@2631..2634 - IDENT@2631..2634 "ini" - SUFFIX_INDEX@2634..2639 - DOT@2634..2635 "." - NAME@2635..2639 - IDENT@2635..2639 "main" - R_PAREN@2639..2640 ")" - WHITESPACE@2640..2641 " " - ELSE_KW@2641..2645 "else" - WHITESPACE@2645..2646 " " - FALSE_EXPR@2646..2648 - EXPR@2646..2648 - EXPR_ARRAY@2646..2648 - L_BRACK@2646..2647 "[" - R_BRACK@2647..2648 "]" - COMMA@2648..2649 "," - WHITESPACE@2649..2660 "\n " - BIND_DESTRUCT@2660..2768 - DESTRUCT_FULL@2660..2672 - NAME@2660..2672 - IDENT@2660..2672 "all_sections" - WHITESPACE@2672..2673 " " - ASSIGN@2673..2674 "=" - WHITESPACE@2674..2675 " " - EXPR@2675..2768 - EXPR_ARRAY_COMP@2675..2768 - L_BRACK@2675..2676 "[" - WHITESPACE@2676..2683 "\n " - EXPR@2683..2716 - EXPR_VAR@2683..2696 - NAME@2683..2696 - IDENT@2683..2696 "section_lines" - SUFFIX_APPLY@2696..2716 - ARGS_DESC@2696..2716 - L_PAREN@2696..2697 "(" - ARG@2697..2698 - EXPR@2697..2698 - EXPR_VAR@2697..2698 - NAME@2697..2698 - IDENT@2697..2698 "k" - COMMA@2698..2699 "," - WHITESPACE@2699..2700 " " - ARG@2700..2715 - EXPR@2700..2715 - EXPR_VAR@2700..2703 - NAME@2700..2703 - IDENT@2700..2703 "ini" - SUFFIX_INDEX@2703..2712 - DOT@2703..2704 "." - NAME@2704..2712 - IDENT@2704..2712 "sections" - SUFFIX_INDEX_EXPR@2712..2715 - L_BRACK@2712..2713 "[" - EXPR@2713..2714 - EXPR_VAR@2713..2714 - NAME@2713..2714 - IDENT@2713..2714 "k" - R_BRACK@2714..2715 "]" - R_PAREN@2715..2716 ")" - WHITESPACE@2716..2723 "\n " - FOR_SPEC@2723..2762 - FOR_KW@2723..2726 "for" - WHITESPACE@2726..2727 " " - DESTRUCT_FULL@2727..2728 - NAME@2727..2728 - IDENT@2727..2728 "k" - WHITESPACE@2728..2729 " " - IN_KW@2729..2731 "in" - WHITESPACE@2731..2732 " " - EXPR@2732..2762 - EXPR_VAR@2732..2735 - NAME@2732..2735 - IDENT@2732..2735 "std" - SUFFIX_INDEX@2735..2748 - DOT@2735..2736 "." - NAME@2736..2748 - IDENT@2736..2748 "objectFields" - SUFFIX_APPLY@2748..2762 - ARGS_DESC@2748..2762 - L_PAREN@2748..2749 "(" - ARG@2749..2761 - EXPR@2749..2761 - EXPR_VAR@2749..2752 - NAME@2749..2752 - IDENT@2749..2752 "ini" - SUFFIX_INDEX@2752..2761 - DOT@2752..2753 "." - NAME@2753..2761 - IDENT@2753..2761 "sections" - R_PAREN@2761..2762 ")" - WHITESPACE@2762..2767 "\n " - R_BRACK@2767..2768 "]" - SEMI@2768..2769 ";" - WHITESPACE@2769..2774 "\n " - EXPR_VAR@2774..2777 - NAME@2774..2777 - IDENT@2774..2777 "std" - SUFFIX_INDEX@2777..2782 - DOT@2777..2778 "." - NAME@2778..2782 - IDENT@2778..2782 "join" - SUFFIX_APPLY@2782..2840 - ARGS_DESC@2782..2840 - L_PAREN@2782..2783 "(" - ARG@2783..2787 - EXPR@2783..2787 - EXPR_STRING@2783..2787 - STRING_SINGLE@2783..2787 "'\\n'" - COMMA@2787..2788 "," - WHITESPACE@2788..2789 " " - ARG@2789..2839 - EXPR@2789..2839 - EXPR_BINARY@2789..2839 - EXPR@2789..2832 - EXPR_BINARY@2789..2832 - EXPR@2789..2798 - EXPR_VAR@2789..2798 - NAME@2789..2798 - IDENT@2789..2798 "main_body" - WHITESPACE@2798..2799 " " - PLUS@2799..2800 "+" - WHITESPACE@2800..2801 " " - EXPR@2801..2832 - EXPR_VAR@2801..2804 - NAME@2801..2804 - IDENT@2801..2804 "std" - SUFFIX_INDEX@2804..2818 - DOT@2804..2805 "." - NAME@2805..2818 - IDENT@2805..2818 "flattenArrays" - SUFFIX_APPLY@2818..2832 - ARGS_DESC@2818..2832 - L_PAREN@2818..2819 "(" - ARG@2819..2831 - EXPR@2819..2831 - EXPR_VAR@2819..2831 - NAME@2819..2831 - IDENT@2819..2831 "all_sections" - R_PAREN@2831..2832 ")" - WHITESPACE@2832..2833 " " - PLUS@2833..2834 "+" - WHITESPACE@2834..2835 " " - EXPR@2835..2839 - EXPR_ARRAY@2835..2839 - L_BRACK@2835..2836 "[" - EXPR@2836..2838 - EXPR_STRING@2836..2838 - STRING_SINGLE@2836..2838 "''" - R_BRACK@2838..2839 "]" - R_PAREN@2839..2840 ")" - COMMA@2840..2841 "," - WHITESPACE@2841..2845 "\n\n " - MEMBER_FIELD_METHOD@2845..2898 - FIELD_NAME_FIXED@2845..2857 - NAME@2845..2857 - IDENT@2845..2857 "manifestToml" - PARAMS_DESC@2857..2864 - L_PAREN@2857..2858 "(" - PARAM@2858..2863 - DESTRUCT_FULL@2858..2863 - NAME@2858..2863 - IDENT@2858..2863 "value" - R_PAREN@2863..2864 ")" - COLONCOLON@2864..2866 "::" - WHITESPACE@2866..2867 " " - EXPR@2867..2898 - EXPR_VAR@2867..2870 - NAME@2867..2870 - IDENT@2867..2870 "std" - SUFFIX_INDEX@2870..2885 - DOT@2870..2871 "." - NAME@2871..2885 - IDENT@2871..2885 "manifestTomlEx" - SUFFIX_APPLY@2885..2898 - ARGS_DESC@2885..2898 - L_PAREN@2885..2886 "(" - ARG@2886..2891 - EXPR@2886..2891 - EXPR_VAR@2886..2891 - NAME@2886..2891 - IDENT@2886..2891 "value" - COMMA@2891..2892 "," - WHITESPACE@2892..2893 " " - ARG@2893..2897 - EXPR@2893..2897 - EXPR_STRING@2893..2897 - STRING_SINGLE@2893..2897 "' '" - R_PAREN@2897..2898 ")" - COMMA@2898..2899 "," - WHITESPACE@2899..2903 "\n\n " - MEMBER_FIELD_METHOD@2903..2958 - FIELD_NAME_FIXED@2903..2921 - NAME@2903..2921 - IDENT@2903..2921 "escapeStringPython" - PARAMS_DESC@2921..2926 - L_PAREN@2921..2922 "(" - PARAM@2922..2925 - DESTRUCT_FULL@2922..2925 - NAME@2922..2925 - IDENT@2922..2925 "str" - R_PAREN@2925..2926 ")" - COLONCOLON@2926..2928 "::" - WHITESPACE@2928..2933 "\n " - EXPR@2933..2958 - EXPR_VAR@2933..2936 - NAME@2933..2936 - IDENT@2933..2936 "std" - SUFFIX_INDEX@2936..2953 - DOT@2936..2937 "." - NAME@2937..2953 - IDENT@2937..2953 "escapeStringJson" - SUFFIX_APPLY@2953..2958 - ARGS_DESC@2953..2958 - L_PAREN@2953..2954 "(" - ARG@2954..2957 - EXPR@2954..2957 - EXPR_VAR@2954..2957 - NAME@2954..2957 - IDENT@2954..2957 "str" - R_PAREN@2957..2958 ")" - COMMA@2958..2959 "," - WHITESPACE@2959..2963 "\n\n " - MEMBER_FIELD_METHOD@2963..3180 - FIELD_NAME_FIXED@2963..2979 - NAME@2963..2979 - IDENT@2963..2979 "escapeStringBash" - PARAMS_DESC@2979..2985 - L_PAREN@2979..2980 "(" - PARAM@2980..2984 - DESTRUCT_FULL@2980..2984 - NAME@2980..2984 - IDENT@2980..2984 "str_" - R_PAREN@2984..2985 ")" - COLONCOLON@2985..2987 "::" - WHITESPACE@2987..2992 "\n " - EXPR@2992..3180 - STMT_LOCAL@2992..3023 - LOCAL_KW@2992..2997 "local" - WHITESPACE@2997..2998 " " - BIND_DESTRUCT@2998..3022 - DESTRUCT_FULL@2998..3001 - NAME@2998..3001 - IDENT@2998..3001 "str" - WHITESPACE@3001..3002 " " - ASSIGN@3002..3003 "=" - WHITESPACE@3003..3004 " " - EXPR@3004..3022 - EXPR_VAR@3004..3007 - NAME@3004..3007 - IDENT@3004..3007 "std" - SUFFIX_INDEX@3007..3016 - DOT@3007..3008 "." - NAME@3008..3016 - IDENT@3008..3016 "toString" - SUFFIX_APPLY@3016..3022 - ARGS_DESC@3016..3022 - L_PAREN@3016..3017 "(" - ARG@3017..3021 - EXPR@3017..3021 - EXPR_VAR@3017..3021 - NAME@3017..3021 - IDENT@3017..3021 "str_" - R_PAREN@3021..3022 ")" - SEMI@3022..3023 ";" - WHITESPACE@3023..3028 "\n " - STMT_LOCAL@3028..3110 - LOCAL_KW@3028..3033 "local" - WHITESPACE@3033..3034 " " - BIND_FUNCTION@3034..3109 - NAME@3034..3039 - IDENT@3034..3039 "trans" - PARAMS_DESC@3039..3043 - L_PAREN@3039..3040 "(" - PARAM@3040..3042 - DESTRUCT_FULL@3040..3042 - NAME@3040..3042 - IDENT@3040..3042 "ch" - R_PAREN@3042..3043 ")" - WHITESPACE@3043..3044 " " - ASSIGN@3044..3045 "=" - WHITESPACE@3045..3052 "\n " - EXPR@3052..3109 - EXPR_IF_THEN_ELSE@3052..3109 - IF_KW@3052..3054 "if" - WHITESPACE@3054..3055 " " - EXPR@3055..3064 - EXPR_BINARY@3055..3064 - EXPR@3055..3057 - EXPR_VAR@3055..3057 - NAME@3055..3057 - IDENT@3055..3057 "ch" - WHITESPACE@3057..3058 " " - EQ@3058..3060 "==" - WHITESPACE@3060..3061 " " - EXPR@3061..3064 - EXPR_STRING@3061..3064 - STRING_DOUBLE@3061..3064 "\"'\"" - WHITESPACE@3064..3065 " " - THEN_KW@3065..3069 "then" - WHITESPACE@3069..3078 "\n " - TRUE_EXPR@3078..3087 - EXPR@3078..3087 - EXPR_STRING@3078..3087 - STRING_DOUBLE@3078..3087 "\"'\\\"'\\\"'\"" - WHITESPACE@3087..3094 "\n " - ELSE_KW@3094..3098 "else" - WHITESPACE@3098..3107 "\n " - FALSE_EXPR@3107..3109 - EXPR@3107..3109 - EXPR_VAR@3107..3109 - NAME@3107..3109 - IDENT@3107..3109 "ch" - SEMI@3109..3110 ";" - WHITESPACE@3110..3115 "\n " - EXPR_BINARY@3115..3180 - EXPR@3115..3121 - EXPR_STRING@3115..3121 - STRING_DOUBLE@3115..3121 "\"'%s'\"" - WHITESPACE@3121..3122 " " - MODULO@3122..3123 "%" - WHITESPACE@3123..3124 " " - EXPR@3124..3180 - EXPR_VAR@3124..3127 - NAME@3124..3127 - IDENT@3124..3127 "std" - SUFFIX_INDEX@3127..3132 - DOT@3127..3128 "." - NAME@3128..3132 - IDENT@3128..3132 "join" - SUFFIX_APPLY@3132..3180 - ARGS_DESC@3132..3180 - L_PAREN@3132..3133 "(" - ARG@3133..3135 - EXPR@3133..3135 - EXPR_STRING@3133..3135 - STRING_SINGLE@3133..3135 "''" - COMMA@3135..3136 "," - WHITESPACE@3136..3137 " " - ARG@3137..3179 - EXPR@3137..3179 - EXPR_ARRAY_COMP@3137..3179 - L_BRACK@3137..3138 "[" - EXPR@3138..3147 - EXPR_VAR@3138..3143 - NAME@3138..3143 - IDENT@3138..3143 "trans" - SUFFIX_APPLY@3143..3147 - ARGS_DESC@3143..3147 - L_PAREN@3143..3144 "(" - ARG@3144..3146 - EXPR@3144..3146 - EXPR_VAR@3144..3146 - NAME@3144..3146 - IDENT@3144..3146 "ch" - R_PAREN@3146..3147 ")" - WHITESPACE@3147..3148 " " - FOR_SPEC@3148..3178 - FOR_KW@3148..3151 "for" - WHITESPACE@3151..3152 " " - DESTRUCT_FULL@3152..3154 - NAME@3152..3154 - IDENT@3152..3154 "ch" - WHITESPACE@3154..3155 " " - IN_KW@3155..3157 "in" - WHITESPACE@3157..3158 " " - EXPR@3158..3178 - EXPR_VAR@3158..3161 - NAME@3158..3161 - IDENT@3158..3161 "std" - SUFFIX_INDEX@3161..3173 - DOT@3161..3162 "." - NAME@3162..3173 - IDENT@3162..3173 "stringChars" - SUFFIX_APPLY@3173..3178 - ARGS_DESC@3173..3178 - L_PAREN@3173..3174 "(" - ARG@3174..3177 - EXPR@3174..3177 - EXPR_VAR@3174..3177 - NAME@3174..3177 - IDENT@3174..3177 "str" - R_PAREN@3177..3178 ")" - R_BRACK@3178..3179 "]" - R_PAREN@3179..3180 ")" - COMMA@3180..3181 "," - WHITESPACE@3181..3185 "\n\n " - MEMBER_FIELD_METHOD@3185..3399 - FIELD_NAME_FIXED@3185..3204 - NAME@3185..3204 - IDENT@3185..3204 "escapeStringDollars" - PARAMS_DESC@3204..3210 - L_PAREN@3204..3205 "(" - PARAM@3205..3209 - DESTRUCT_FULL@3205..3209 - NAME@3205..3209 - IDENT@3205..3209 "str_" - R_PAREN@3209..3210 ")" - COLONCOLON@3210..3212 "::" - WHITESPACE@3212..3217 "\n " - EXPR@3217..3399 - STMT_LOCAL@3217..3248 - LOCAL_KW@3217..3222 "local" - WHITESPACE@3222..3223 " " - BIND_DESTRUCT@3223..3247 - DESTRUCT_FULL@3223..3226 - NAME@3223..3226 - IDENT@3223..3226 "str" - WHITESPACE@3226..3227 " " - ASSIGN@3227..3228 "=" - WHITESPACE@3228..3229 " " - EXPR@3229..3247 - EXPR_VAR@3229..3232 - NAME@3229..3232 - IDENT@3229..3232 "std" - SUFFIX_INDEX@3232..3241 - DOT@3232..3233 "." - NAME@3233..3241 - IDENT@3233..3241 "toString" - SUFFIX_APPLY@3241..3247 - ARGS_DESC@3241..3247 - L_PAREN@3241..3242 "(" - ARG@3242..3246 - EXPR@3242..3246 - EXPR_VAR@3242..3246 - NAME@3242..3246 - IDENT@3242..3246 "str_" - R_PAREN@3246..3247 ")" - SEMI@3247..3248 ";" - WHITESPACE@3248..3253 "\n " - STMT_LOCAL@3253..3330 - LOCAL_KW@3253..3258 "local" - WHITESPACE@3258..3259 " " - BIND_FUNCTION@3259..3329 - NAME@3259..3264 - IDENT@3259..3264 "trans" - PARAMS_DESC@3264..3268 - L_PAREN@3264..3265 "(" - PARAM@3265..3267 - DESTRUCT_FULL@3265..3267 - NAME@3265..3267 - IDENT@3265..3267 "ch" - R_PAREN@3267..3268 ")" - WHITESPACE@3268..3269 " " - ASSIGN@3269..3270 "=" - WHITESPACE@3270..3277 "\n " - EXPR@3277..3329 - EXPR_IF_THEN_ELSE@3277..3329 - IF_KW@3277..3279 "if" - WHITESPACE@3279..3280 " " - EXPR@3280..3289 - EXPR_BINARY@3280..3289 - EXPR@3280..3282 - EXPR_VAR@3280..3282 - NAME@3280..3282 - IDENT@3280..3282 "ch" - WHITESPACE@3282..3283 " " - EQ@3283..3285 "==" - WHITESPACE@3285..3286 " " - EXPR@3286..3289 - EXPR_STRING@3286..3289 - STRING_SINGLE@3286..3289 "'$'" - WHITESPACE@3289..3290 " " - THEN_KW@3290..3294 "then" - WHITESPACE@3294..3303 "\n " - TRUE_EXPR@3303..3307 - EXPR@3303..3307 - EXPR_STRING@3303..3307 - STRING_SINGLE@3303..3307 "'$$'" - WHITESPACE@3307..3314 "\n " - ELSE_KW@3314..3318 "else" - WHITESPACE@3318..3327 "\n " - FALSE_EXPR@3327..3329 - EXPR@3327..3329 - EXPR_VAR@3327..3329 - NAME@3327..3329 - IDENT@3327..3329 "ch" - SEMI@3329..3330 ";" - WHITESPACE@3330..3335 "\n " - EXPR_VAR@3335..3338 - NAME@3335..3338 - IDENT@3335..3338 "std" - SUFFIX_INDEX@3338..3344 - DOT@3338..3339 "." - NAME@3339..3344 - IDENT@3339..3344 "foldl" - SUFFIX_APPLY@3344..3399 - ARGS_DESC@3344..3399 - L_PAREN@3344..3345 "(" - ARG@3345..3372 - EXPR@3345..3372 - EXPR_FUNCTION@3345..3372 - FUNCTION_KW@3345..3353 "function" - PARAMS_DESC@3353..3359 - L_PAREN@3353..3354 "(" - PARAM@3354..3355 - DESTRUCT_FULL@3354..3355 - NAME@3354..3355 - IDENT@3354..3355 "a" - COMMA@3355..3356 "," - WHITESPACE@3356..3357 " " - PARAM@3357..3358 - DESTRUCT_FULL@3357..3358 - NAME@3357..3358 - IDENT@3357..3358 "b" - R_PAREN@3358..3359 ")" - WHITESPACE@3359..3360 " " - EXPR@3360..3372 - EXPR_BINARY@3360..3372 - EXPR@3360..3361 - EXPR_VAR@3360..3361 - NAME@3360..3361 - IDENT@3360..3361 "a" - WHITESPACE@3361..3362 " " - PLUS@3362..3363 "+" - WHITESPACE@3363..3364 " " - EXPR@3364..3372 - EXPR_VAR@3364..3369 - NAME@3364..3369 - IDENT@3364..3369 "trans" - SUFFIX_APPLY@3369..3372 - ARGS_DESC@3369..3372 - L_PAREN@3369..3370 "(" - ARG@3370..3371 - EXPR@3370..3371 - EXPR_VAR@3370..3371 - NAME@3370..3371 - IDENT@3370..3371 "b" - R_PAREN@3371..3372 ")" - COMMA@3372..3373 "," - WHITESPACE@3373..3374 " " - ARG@3374..3394 - EXPR@3374..3394 - EXPR_VAR@3374..3377 - NAME@3374..3377 - IDENT@3374..3377 "std" - SUFFIX_INDEX@3377..3389 - DOT@3377..3378 "." - NAME@3378..3389 - IDENT@3378..3389 "stringChars" - SUFFIX_APPLY@3389..3394 - ARGS_DESC@3389..3394 - L_PAREN@3389..3390 "(" - ARG@3390..3393 - EXPR@3390..3393 - EXPR_VAR@3390..3393 - NAME@3390..3393 - IDENT@3390..3393 "str" - R_PAREN@3393..3394 ")" - COMMA@3394..3395 "," - WHITESPACE@3395..3396 " " - ARG@3396..3398 - EXPR@3396..3398 - EXPR_STRING@3396..3398 - STRING_SINGLE@3396..3398 "''" - R_PAREN@3398..3399 ")" - COMMA@3399..3400 "," - WHITESPACE@3400..3404 "\n\n " - MEMBER_BIND_STMT@3404..3519 - OBJ_LOCAL@3404..3519 - LOCAL_KW@3404..3409 "local" - WHITESPACE@3409..3410 " " - BIND_DESTRUCT@3410..3519 - DESTRUCT_FULL@3410..3421 - NAME@3410..3421 - IDENT@3410..3421 "xml_escapes" - WHITESPACE@3421..3422 " " - ASSIGN@3422..3423 "=" - WHITESPACE@3423..3424 " " - EXPR@3424..3519 - EXPR_OBJECT@3424..3519 - OBJ_BODY_MEMBER_LIST@3424..3519 - L_BRACE@3424..3425 "{" - WHITESPACE@3425..3430 "\n " - MEMBER_FIELD_NORMAL@3430..3441 - FIELD_NAME_FIXED@3430..3433 - STRING_SINGLE@3430..3433 "'<'" - COLON@3433..3434 ":" - WHITESPACE@3434..3435 " " - EXPR@3435..3441 - EXPR_STRING@3435..3441 - STRING_SINGLE@3435..3441 "'<'" - COMMA@3441..3442 "," - WHITESPACE@3442..3447 "\n " - MEMBER_FIELD_NORMAL@3447..3458 - FIELD_NAME_FIXED@3447..3450 - STRING_SINGLE@3447..3450 "'>'" - COLON@3450..3451 ":" - WHITESPACE@3451..3452 " " - EXPR@3452..3458 - EXPR_STRING@3452..3458 - STRING_SINGLE@3452..3458 "'>'" - COMMA@3458..3459 "," - WHITESPACE@3459..3464 "\n " - MEMBER_FIELD_NORMAL@3464..3476 - FIELD_NAME_FIXED@3464..3467 - STRING_SINGLE@3464..3467 "'&'" - COLON@3467..3468 ":" - WHITESPACE@3468..3469 " " - EXPR@3469..3476 - EXPR_STRING@3469..3476 - STRING_SINGLE@3469..3476 "'&'" - COMMA@3476..3477 "," - WHITESPACE@3477..3482 "\n " - MEMBER_FIELD_NORMAL@3482..3495 - FIELD_NAME_FIXED@3482..3485 - STRING_SINGLE@3482..3485 "'\"'" - COLON@3485..3486 ":" - WHITESPACE@3486..3487 " " - EXPR@3487..3495 - EXPR_STRING@3487..3495 - STRING_SINGLE@3487..3495 "'"'" - COMMA@3495..3496 "," - WHITESPACE@3496..3501 "\n " - MEMBER_FIELD_NORMAL@3501..3514 - FIELD_NAME_FIXED@3501..3504 - STRING_DOUBLE@3501..3504 "\"'\"" - COLON@3504..3505 ":" - WHITESPACE@3505..3506 " " - EXPR@3506..3514 - EXPR_STRING@3506..3514 - STRING_SINGLE@3506..3514 "'''" - COMMA@3514..3515 "," - WHITESPACE@3515..3518 "\n " - R_BRACE@3518..3519 "}" - COMMA@3519..3520 "," - WHITESPACE@3520..3524 "\n\n " - MEMBER_FIELD_METHOD@3524..3663 - FIELD_NAME_FIXED@3524..3539 - NAME@3524..3539 - IDENT@3524..3539 "escapeStringXML" - PARAMS_DESC@3539..3545 - L_PAREN@3539..3540 "(" - PARAM@3540..3544 - DESTRUCT_FULL@3540..3544 - NAME@3540..3544 - IDENT@3540..3544 "str_" - R_PAREN@3544..3545 ")" - COLONCOLON@3545..3547 "::" - WHITESPACE@3547..3552 "\n " - EXPR@3552..3663 - STMT_LOCAL@3552..3583 - LOCAL_KW@3552..3557 "local" - WHITESPACE@3557..3558 " " - BIND_DESTRUCT@3558..3582 - DESTRUCT_FULL@3558..3561 - NAME@3558..3561 - IDENT@3558..3561 "str" - WHITESPACE@3561..3562 " " - ASSIGN@3562..3563 "=" - WHITESPACE@3563..3564 " " - EXPR@3564..3582 - EXPR_VAR@3564..3567 - NAME@3564..3567 - IDENT@3564..3567 "std" - SUFFIX_INDEX@3567..3576 - DOT@3567..3568 "." - NAME@3568..3576 - IDENT@3568..3576 "toString" - SUFFIX_APPLY@3576..3582 - ARGS_DESC@3576..3582 - L_PAREN@3576..3577 "(" - ARG@3577..3581 - EXPR@3577..3581 - EXPR_VAR@3577..3581 - NAME@3577..3581 - IDENT@3577..3581 "str_" - R_PAREN@3581..3582 ")" - SEMI@3582..3583 ";" - WHITESPACE@3583..3588 "\n " - EXPR_VAR@3588..3591 - NAME@3588..3591 - IDENT@3588..3591 "std" - SUFFIX_INDEX@3591..3596 - DOT@3591..3592 "." - NAME@3592..3596 - IDENT@3592..3596 "join" - SUFFIX_APPLY@3596..3663 - ARGS_DESC@3596..3663 - L_PAREN@3596..3597 "(" - ARG@3597..3599 - EXPR@3597..3599 - EXPR_STRING@3597..3599 - STRING_SINGLE@3597..3599 "''" - COMMA@3599..3600 "," - WHITESPACE@3600..3601 " " - ARG@3601..3662 - EXPR@3601..3662 - EXPR_ARRAY_COMP@3601..3662 - L_BRACK@3601..3602 "[" - EXPR@3602..3630 - EXPR_VAR@3602..3605 - NAME@3602..3605 - IDENT@3602..3605 "std" - SUFFIX_INDEX@3605..3609 - DOT@3605..3606 "." - NAME@3606..3609 - IDENT@3606..3609 "get" - SUFFIX_APPLY@3609..3630 - ARGS_DESC@3609..3630 - L_PAREN@3609..3610 "(" - ARG@3610..3621 - EXPR@3610..3621 - EXPR_VAR@3610..3621 - NAME@3610..3621 - IDENT@3610..3621 "xml_escapes" - COMMA@3621..3622 "," - WHITESPACE@3622..3623 " " - ARG@3623..3625 - EXPR@3623..3625 - EXPR_VAR@3623..3625 - NAME@3623..3625 - IDENT@3623..3625 "ch" - COMMA@3625..3626 "," - WHITESPACE@3626..3627 " " - ARG@3627..3629 - EXPR@3627..3629 - EXPR_VAR@3627..3629 - NAME@3627..3629 - IDENT@3627..3629 "ch" - R_PAREN@3629..3630 ")" - WHITESPACE@3630..3631 " " - FOR_SPEC@3631..3661 - FOR_KW@3631..3634 "for" - WHITESPACE@3634..3635 " " - DESTRUCT_FULL@3635..3637 - NAME@3635..3637 - IDENT@3635..3637 "ch" - WHITESPACE@3637..3638 " " - IN_KW@3638..3640 "in" - WHITESPACE@3640..3641 " " - EXPR@3641..3661 - EXPR_VAR@3641..3644 - NAME@3641..3644 - IDENT@3641..3644 "std" - SUFFIX_INDEX@3644..3656 - DOT@3644..3645 "." - NAME@3645..3656 - IDENT@3645..3656 "stringChars" - SUFFIX_APPLY@3656..3661 - ARGS_DESC@3656..3661 - L_PAREN@3656..3657 "(" - ARG@3657..3660 - EXPR@3657..3660 - EXPR_VAR@3657..3660 - NAME@3657..3660 - IDENT@3657..3660 "str" - R_PAREN@3660..3661 ")" - R_BRACK@3661..3662 "]" - R_PAREN@3662..3663 ")" - COMMA@3663..3664 "," - WHITESPACE@3664..3668 "\n\n " - MEMBER_FIELD_METHOD@3668..3734 - FIELD_NAME_FIXED@3668..3680 - NAME@3668..3680 - IDENT@3668..3680 "manifestJson" - PARAMS_DESC@3680..3687 - L_PAREN@3680..3681 "(" - PARAM@3681..3686 - DESTRUCT_FULL@3681..3686 - NAME@3681..3686 - IDENT@3681..3686 "value" - R_PAREN@3686..3687 ")" - COLONCOLON@3687..3689 "::" - WHITESPACE@3689..3690 " " - EXPR@3690..3734 - EXPR_VAR@3690..3693 - NAME@3690..3693 - IDENT@3690..3693 "std" - SUFFIX_INDEX@3693..3708 - DOT@3693..3694 "." - NAME@3694..3708 - IDENT@3694..3708 "manifestJsonEx" - SUFFIX_APPLY@3708..3734 - ARGS_DESC@3708..3734 - L_PAREN@3708..3709 "(" - ARG@3709..3714 - EXPR@3709..3714 - EXPR_VAR@3709..3714 - NAME@3709..3714 - IDENT@3709..3714 "value" - COMMA@3714..3715 "," - WHITESPACE@3715..3716 " " - ARG@3716..3722 - EXPR@3716..3722 - EXPR_STRING@3716..3722 - STRING_SINGLE@3716..3722 "' '" - R_PAREN@3722..3723 ")" - WHITESPACE@3723..3724 " " - TAILSTRICT_KW@3724..3734 "tailstrict" - COMMA@3734..3735 "," - WHITESPACE@3735..3739 "\n\n " - MEMBER_FIELD_METHOD@3739..3807 - FIELD_NAME_FIXED@3739..3759 - NAME@3739..3759 - IDENT@3739..3759 "manifestJsonMinified" - PARAMS_DESC@3759..3766 - L_PAREN@3759..3760 "(" - PARAM@3760..3765 - DESTRUCT_FULL@3760..3765 - NAME@3760..3765 - IDENT@3760..3765 "value" - R_PAREN@3765..3766 ")" - COLONCOLON@3766..3768 "::" - WHITESPACE@3768..3769 " " - EXPR@3769..3807 - EXPR_VAR@3769..3772 - NAME@3769..3772 - IDENT@3769..3772 "std" - SUFFIX_INDEX@3772..3787 - DOT@3772..3773 "." - NAME@3773..3787 - IDENT@3773..3787 "manifestJsonEx" - SUFFIX_APPLY@3787..3807 - ARGS_DESC@3787..3807 - L_PAREN@3787..3788 "(" - ARG@3788..3793 - EXPR@3788..3793 - EXPR_VAR@3788..3793 - NAME@3788..3793 - IDENT@3788..3793 "value" - COMMA@3793..3794 "," - WHITESPACE@3794..3795 " " - ARG@3795..3797 - EXPR@3795..3797 - EXPR_STRING@3795..3797 - STRING_SINGLE@3795..3797 "''" - COMMA@3797..3798 "," - WHITESPACE@3798..3799 " " - ARG@3799..3801 - EXPR@3799..3801 - EXPR_STRING@3799..3801 - STRING_SINGLE@3799..3801 "''" - COMMA@3801..3802 "," - WHITESPACE@3802..3803 " " - ARG@3803..3806 - EXPR@3803..3806 - EXPR_STRING@3803..3806 - STRING_SINGLE@3803..3806 "':'" - R_PAREN@3806..3807 ")" - COMMA@3807..3808 "," - WHITESPACE@3808..3812 "\n\n " - MEMBER_FIELD_METHOD@3812..4197 - FIELD_NAME_FIXED@3812..3830 - NAME@3812..3830 - IDENT@3812..3830 "manifestYamlStream" - PARAMS_DESC@3830..3905 - L_PAREN@3830..3831 "(" - PARAM@3831..3836 - DESTRUCT_FULL@3831..3836 - NAME@3831..3836 - IDENT@3831..3836 "value" - COMMA@3836..3837 "," - WHITESPACE@3837..3838 " " - PARAM@3838..3866 - DESTRUCT_FULL@3838..3860 - NAME@3838..3860 - IDENT@3838..3860 "indent_array_in_object" - ASSIGN@3860..3861 "=" - EXPR@3861..3866 - EXPR_LITERAL@3861..3866 - FALSE_KW@3861..3866 "false" - COMMA@3866..3867 "," - WHITESPACE@3867..3868 " " - PARAM@3868..3887 - DESTRUCT_FULL@3868..3882 - NAME@3868..3882 - IDENT@3868..3882 "c_document_end" - ASSIGN@3882..3883 "=" - EXPR@3883..3887 - EXPR_LITERAL@3883..3887 - TRUE_KW@3883..3887 "true" - COMMA@3887..3888 "," - WHITESPACE@3888..3889 " " - PARAM@3889..3904 - DESTRUCT_FULL@3889..3899 - NAME@3889..3899 - IDENT@3889..3899 "quote_keys" - ASSIGN@3899..3900 "=" - EXPR@3900..3904 - EXPR_LITERAL@3900..3904 - TRUE_KW@3900..3904 "true" - R_PAREN@3904..3905 ")" - COLONCOLON@3905..3907 "::" - WHITESPACE@3907..3912 "\n " - EXPR@3912..4197 - EXPR_IF_THEN_ELSE@3912..4197 - IF_KW@3912..3914 "if" - WHITESPACE@3914..3915 " " - EXPR@3915..3934 - EXPR_UNARY@3915..3934 - NOT@3915..3916 "!" - EXPR_VAR@3916..3919 - NAME@3916..3919 - IDENT@3916..3919 "std" - SUFFIX_INDEX@3919..3927 - DOT@3919..3920 "." - NAME@3920..3927 - IDENT@3920..3927 "isArray" - SUFFIX_APPLY@3927..3934 - ARGS_DESC@3927..3934 - L_PAREN@3927..3928 "(" - ARG@3928..3933 - EXPR@3928..3933 - EXPR_VAR@3928..3933 - NAME@3928..3933 - IDENT@3928..3933 "value" - R_PAREN@3933..3934 ")" - WHITESPACE@3934..3935 " " - THEN_KW@3935..3939 "then" - WHITESPACE@3939..3946 "\n " - TRUE_EXPR@3946..4014 - EXPR@3946..4014 - EXPR_ERROR@3946..4014 - ERROR_KW@3946..3951 "error" - WHITESPACE@3951..3952 " " - EXPR@3952..4014 - EXPR_BINARY@3952..4014 - EXPR@3952..3996 - EXPR_STRING@3952..3996 - STRING_SINGLE@3952..3996 "'manifestYamlStream o ..." - WHITESPACE@3996..3997 " " - PLUS@3997..3998 "+" - WHITESPACE@3998..3999 " " - EXPR@3999..4014 - EXPR_VAR@3999..4002 - NAME@3999..4002 - IDENT@3999..4002 "std" - SUFFIX_INDEX@4002..4007 - DOT@4002..4003 "." - NAME@4003..4007 - IDENT@4003..4007 "type" - SUFFIX_APPLY@4007..4014 - ARGS_DESC@4007..4014 - L_PAREN@4007..4008 "(" - ARG@4008..4013 - EXPR@4008..4013 - EXPR_VAR@4008..4013 - NAME@4008..4013 - IDENT@4008..4013 "value" - R_PAREN@4013..4014 ")" - WHITESPACE@4014..4019 "\n " - ELSE_KW@4019..4023 "else" - WHITESPACE@4023..4030 "\n " - FALSE_EXPR@4030..4197 - EXPR@4030..4197 - EXPR_BINARY@4030..4197 - EXPR@4030..4152 - EXPR_BINARY@4030..4152 - EXPR@4030..4037 - EXPR_STRING@4030..4037 - STRING_SINGLE@4030..4037 "'---\\n'" - WHITESPACE@4037..4038 " " - PLUS@4038..4039 "+" - WHITESPACE@4039..4040 " " - EXPR@4040..4152 - EXPR_VAR@4040..4043 - NAME@4040..4043 - IDENT@4040..4043 "std" - SUFFIX_INDEX@4043..4048 - DOT@4043..4044 "." - NAME@4044..4048 - IDENT@4044..4048 "join" - SUFFIX_APPLY@4048..4152 - ARGS_DESC@4048..4152 - L_PAREN@4048..4049 "(" - WHITESPACE@4049..4058 "\n " - ARG@4058..4067 - EXPR@4058..4067 - EXPR_STRING@4058..4067 - STRING_SINGLE@4058..4067 "'\\n---\\n'" - COMMA@4067..4068 "," - WHITESPACE@4068..4069 " " - ARG@4069..4144 - EXPR@4069..4144 - EXPR_ARRAY_COMP@4069..4144 - L_BRACK@4069..4070 "[" - EXPR@4070..4128 - EXPR_VAR@4070..4073 - NAME@4070..4073 - IDENT@4070..4073 "std" - SUFFIX_INDEX@4073..4089 - DOT@4073..4074 "." - NAME@4074..4089 - IDENT@4074..4089 "manifestYamlDoc" - SUFFIX_APPLY@4089..4128 - ARGS_DESC@4089..4128 - L_PAREN@4089..4090 "(" - ARG@4090..4091 - EXPR@4090..4091 - EXPR_VAR@4090..4091 - NAME@4090..4091 - IDENT@4090..4091 "e" - COMMA@4091..4092 "," - WHITESPACE@4092..4093 " " - ARG@4093..4115 - EXPR@4093..4115 - EXPR_VAR@4093..4115 - NAME@4093..4115 - IDENT@4093..4115 "indent_array_in_object" - COMMA@4115..4116 "," - WHITESPACE@4116..4117 " " - ARG@4117..4127 - EXPR@4117..4127 - EXPR_VAR@4117..4127 - NAME@4117..4127 - IDENT@4117..4127 "quote_keys" - R_PAREN@4127..4128 ")" - WHITESPACE@4128..4129 " " - FOR_SPEC@4129..4143 - FOR_KW@4129..4132 "for" - WHITESPACE@4132..4133 " " - DESTRUCT_FULL@4133..4134 - NAME@4133..4134 - IDENT@4133..4134 "e" - WHITESPACE@4134..4135 " " - IN_KW@4135..4137 "in" - WHITESPACE@4137..4138 " " - EXPR@4138..4143 - EXPR_VAR@4138..4143 - NAME@4138..4143 - IDENT@4138..4143 "value" - R_BRACK@4143..4144 "]" - WHITESPACE@4144..4151 "\n " - R_PAREN@4151..4152 ")" - WHITESPACE@4152..4153 " " - PLUS@4153..4154 "+" - WHITESPACE@4154..4155 " " - EXPR@4155..4197 - EXPR_IF_THEN_ELSE@4155..4197 - IF_KW@4155..4157 "if" - WHITESPACE@4157..4158 " " - EXPR@4158..4172 - EXPR_VAR@4158..4172 - NAME@4158..4172 - IDENT@4158..4172 "c_document_end" - WHITESPACE@4172..4173 " " - THEN_KW@4173..4177 "then" - WHITESPACE@4177..4178 " " - TRUE_EXPR@4178..4187 - EXPR@4178..4187 - EXPR_STRING@4178..4187 - STRING_SINGLE@4178..4187 "'\\n...\\n'" - WHITESPACE@4187..4188 " " - ELSE_KW@4188..4192 "else" - WHITESPACE@4192..4193 " " - FALSE_EXPR@4193..4197 - EXPR@4193..4197 - EXPR_STRING@4193..4197 - STRING_SINGLE@4193..4197 "'\\n'" - COMMA@4197..4198 "," - WHITESPACE@4198..4202 "\n\n " - MEMBER_FIELD_METHOD@4202..4858 - FIELD_NAME_FIXED@4202..4216 - NAME@4202..4216 - IDENT@4202..4216 "manifestPython" - PARAMS_DESC@4216..4219 - L_PAREN@4216..4217 "(" - PARAM@4217..4218 - DESTRUCT_FULL@4217..4218 - NAME@4217..4218 - IDENT@4217..4218 "v" - R_PAREN@4218..4219 ")" - COLONCOLON@4219..4221 "::" - WHITESPACE@4221..4226 "\n " - EXPR@4226..4858 - EXPR_IF_THEN_ELSE@4226..4858 - IF_KW@4226..4228 "if" - WHITESPACE@4228..4229 " " - EXPR@4229..4244 - EXPR_VAR@4229..4232 - NAME@4229..4232 - IDENT@4229..4232 "std" - SUFFIX_INDEX@4232..4241 - DOT@4232..4233 "." - NAME@4233..4241 - IDENT@4233..4241 "isObject" - SUFFIX_APPLY@4241..4244 - ARGS_DESC@4241..4244 - L_PAREN@4241..4242 "(" - ARG@4242..4243 - EXPR@4242..4243 - EXPR_VAR@4242..4243 - NAME@4242..4243 - IDENT@4242..4243 "v" - R_PAREN@4243..4244 ")" - WHITESPACE@4244..4245 " " - THEN_KW@4245..4249 "then" - WHITESPACE@4249..4256 "\n " - TRUE_EXPR@4256..4431 - EXPR@4256..4431 - STMT_LOCAL@4256..4391 - LOCAL_KW@4256..4261 "local" - WHITESPACE@4261..4262 " " - BIND_DESTRUCT@4262..4390 - DESTRUCT_FULL@4262..4268 - NAME@4262..4268 - IDENT@4262..4268 "fields" - WHITESPACE@4268..4269 " " - ASSIGN@4269..4270 "=" - WHITESPACE@4270..4271 " " - EXPR@4271..4390 - EXPR_ARRAY_COMP@4271..4390 - L_BRACK@4271..4272 "[" - WHITESPACE@4272..4281 "\n " - EXPR@4281..4345 - EXPR_BINARY@4281..4345 - EXPR@4281..4289 - EXPR_STRING@4281..4289 - STRING_SINGLE@4281..4289 "'%s: %s'" - WHITESPACE@4289..4290 " " - MODULO@4290..4291 "%" - WHITESPACE@4291..4292 " " - EXPR@4292..4345 - EXPR_ARRAY@4292..4345 - L_BRACK@4292..4293 "[" - EXPR@4293..4318 - EXPR_VAR@4293..4296 - NAME@4293..4296 - IDENT@4293..4296 "std" - SUFFIX_INDEX@4296..4315 - DOT@4296..4297 "." - NAME@4297..4315 - IDENT@4297..4315 "escapeStringPython" - SUFFIX_APPLY@4315..4318 - ARGS_DESC@4315..4318 - L_PAREN@4315..4316 "(" - ARG@4316..4317 - EXPR@4316..4317 - EXPR_VAR@4316..4317 - NAME@4316..4317 - IDENT@4316..4317 "k" - R_PAREN@4317..4318 ")" - COMMA@4318..4319 "," - WHITESPACE@4319..4320 " " - EXPR@4320..4344 - EXPR_VAR@4320..4323 - NAME@4320..4323 - IDENT@4320..4323 "std" - SUFFIX_INDEX@4323..4338 - DOT@4323..4324 "." - NAME@4324..4338 - IDENT@4324..4338 "manifestPython" - SUFFIX_APPLY@4338..4344 - ARGS_DESC@4338..4344 - L_PAREN@4338..4339 "(" - ARG@4339..4343 - EXPR@4339..4343 - EXPR_VAR@4339..4340 - NAME@4339..4340 - IDENT@4339..4340 "v" - SUFFIX_INDEX_EXPR@4340..4343 - L_BRACK@4340..4341 "[" - EXPR@4341..4342 - EXPR_VAR@4341..4342 - NAME@4341..4342 - IDENT@4341..4342 "k" - R_BRACK@4342..4343 "]" - R_PAREN@4343..4344 ")" - R_BRACK@4344..4345 "]" - WHITESPACE@4345..4354 "\n " - FOR_SPEC@4354..4382 - FOR_KW@4354..4357 "for" - WHITESPACE@4357..4358 " " - DESTRUCT_FULL@4358..4359 - NAME@4358..4359 - IDENT@4358..4359 "k" - WHITESPACE@4359..4360 " " - IN_KW@4360..4362 "in" - WHITESPACE@4362..4363 " " - EXPR@4363..4382 - EXPR_VAR@4363..4366 - NAME@4363..4366 - IDENT@4363..4366 "std" - SUFFIX_INDEX@4366..4379 - DOT@4366..4367 "." - NAME@4367..4379 - IDENT@4367..4379 "objectFields" - SUFFIX_APPLY@4379..4382 - ARGS_DESC@4379..4382 - L_PAREN@4379..4380 "(" - ARG@4380..4381 - EXPR@4380..4381 - EXPR_VAR@4380..4381 - NAME@4380..4381 - IDENT@4380..4381 "v" - R_PAREN@4381..4382 ")" - WHITESPACE@4382..4389 "\n " - R_BRACK@4389..4390 "]" - SEMI@4390..4391 ";" - WHITESPACE@4391..4398 "\n " - EXPR_BINARY@4398..4431 - EXPR@4398..4404 - EXPR_STRING@4398..4404 - STRING_SINGLE@4398..4404 "'{%s}'" - WHITESPACE@4404..4405 " " - MODULO@4405..4406 "%" - WHITESPACE@4406..4407 " " - EXPR@4407..4431 - EXPR_ARRAY@4407..4431 - L_BRACK@4407..4408 "[" - EXPR@4408..4430 - EXPR_VAR@4408..4411 - NAME@4408..4411 - IDENT@4408..4411 "std" - SUFFIX_INDEX@4411..4416 - DOT@4411..4412 "." - NAME@4412..4416 - IDENT@4412..4416 "join" - SUFFIX_APPLY@4416..4430 - ARGS_DESC@4416..4430 - L_PAREN@4416..4417 "(" - ARG@4417..4421 - EXPR@4417..4421 - EXPR_STRING@4417..4421 - STRING_SINGLE@4417..4421 "', '" - COMMA@4421..4422 "," - WHITESPACE@4422..4423 " " - ARG@4423..4429 - EXPR@4423..4429 - EXPR_VAR@4423..4429 - NAME@4423..4429 - IDENT@4423..4429 "fields" - R_PAREN@4429..4430 ")" - R_BRACK@4430..4431 "]" - WHITESPACE@4431..4436 "\n " - ELSE_KW@4436..4440 "else" - WHITESPACE@4440..4441 " " - FALSE_EXPR@4441..4858 - EXPR@4441..4858 - EXPR_IF_THEN_ELSE@4441..4858 - IF_KW@4441..4443 "if" - WHITESPACE@4443..4444 " " - EXPR@4444..4458 - EXPR_VAR@4444..4447 - NAME@4444..4447 - IDENT@4444..4447 "std" - SUFFIX_INDEX@4447..4455 - DOT@4447..4448 "." - NAME@4448..4455 - IDENT@4448..4455 "isArray" - SUFFIX_APPLY@4455..4458 - ARGS_DESC@4455..4458 - L_PAREN@4455..4456 "(" - ARG@4456..4457 - EXPR@4456..4457 - EXPR_VAR@4456..4457 - NAME@4456..4457 - IDENT@4456..4457 "v" - R_PAREN@4457..4458 ")" - WHITESPACE@4458..4459 " " - THEN_KW@4459..4463 "then" - WHITESPACE@4463..4470 "\n " - TRUE_EXPR@4470..4533 - EXPR@4470..4533 - EXPR_BINARY@4470..4533 - EXPR@4470..4476 - EXPR_STRING@4470..4476 - STRING_SINGLE@4470..4476 "'[%s]'" - WHITESPACE@4476..4477 " " - MODULO@4477..4478 "%" - WHITESPACE@4478..4479 " " - EXPR@4479..4533 - EXPR_ARRAY@4479..4533 - L_BRACK@4479..4480 "[" - EXPR@4480..4532 - EXPR_VAR@4480..4483 - NAME@4480..4483 - IDENT@4480..4483 "std" - SUFFIX_INDEX@4483..4488 - DOT@4483..4484 "." - NAME@4484..4488 - IDENT@4484..4488 "join" - SUFFIX_APPLY@4488..4532 - ARGS_DESC@4488..4532 - L_PAREN@4488..4489 "(" - ARG@4489..4493 - EXPR@4489..4493 - EXPR_STRING@4489..4493 - STRING_SINGLE@4489..4493 "', '" - COMMA@4493..4494 "," - WHITESPACE@4494..4495 " " - ARG@4495..4531 - EXPR@4495..4531 - EXPR_ARRAY_COMP@4495..4531 - L_BRACK@4495..4496 "[" - EXPR@4496..4518 - EXPR_VAR@4496..4499 - NAME@4496..4499 - IDENT@4496..4499 "std" - SUFFIX_INDEX@4499..4514 - DOT@4499..4500 "." - NAME@4500..4514 - IDENT@4500..4514 "manifestPython" - SUFFIX_APPLY@4514..4518 - ARGS_DESC@4514..4518 - L_PAREN@4514..4515 "(" - ARG@4515..4517 - EXPR@4515..4517 - EXPR_VAR@4515..4517 - NAME@4515..4517 - IDENT@4515..4517 "v2" - R_PAREN@4517..4518 ")" - WHITESPACE@4518..4519 " " - FOR_SPEC@4519..4530 - FOR_KW@4519..4522 "for" - WHITESPACE@4522..4523 " " - DESTRUCT_FULL@4523..4525 - NAME@4523..4525 - IDENT@4523..4525 "v2" - WHITESPACE@4525..4526 " " - IN_KW@4526..4528 "in" - WHITESPACE@4528..4529 " " - EXPR@4529..4530 - EXPR_VAR@4529..4530 - NAME@4529..4530 - IDENT@4529..4530 "v" - R_BRACK@4530..4531 "]" - R_PAREN@4531..4532 ")" - R_BRACK@4532..4533 "]" - WHITESPACE@4533..4538 "\n " - ELSE_KW@4538..4542 "else" - WHITESPACE@4542..4543 " " - FALSE_EXPR@4543..4858 - EXPR@4543..4858 - EXPR_IF_THEN_ELSE@4543..4858 - IF_KW@4543..4545 "if" - WHITESPACE@4545..4546 " " - EXPR@4546..4561 - EXPR_VAR@4546..4549 - NAME@4546..4549 - IDENT@4546..4549 "std" - SUFFIX_INDEX@4549..4558 - DOT@4549..4550 "." - NAME@4550..4558 - IDENT@4550..4558 "isString" - SUFFIX_APPLY@4558..4561 - ARGS_DESC@4558..4561 - L_PAREN@4558..4559 "(" - ARG@4559..4560 - EXPR@4559..4560 - EXPR_VAR@4559..4560 - NAME@4559..4560 - IDENT@4559..4560 "v" - R_PAREN@4560..4561 ")" - WHITESPACE@4561..4562 " " - THEN_KW@4562..4566 "then" - WHITESPACE@4566..4573 "\n " - TRUE_EXPR@4573..4607 - EXPR@4573..4607 - EXPR_BINARY@4573..4607 - EXPR@4573..4577 - EXPR_STRING@4573..4577 - STRING_SINGLE@4573..4577 "'%s'" - WHITESPACE@4577..4578 " " - MODULO@4578..4579 "%" - WHITESPACE@4579..4580 " " - EXPR@4580..4607 - EXPR_ARRAY@4580..4607 - L_BRACK@4580..4581 "[" - EXPR@4581..4606 - EXPR_VAR@4581..4584 - NAME@4581..4584 - IDENT@4581..4584 "std" - SUFFIX_INDEX@4584..4603 - DOT@4584..4585 "." - NAME@4585..4603 - IDENT@4585..4603 "escapeStringPython" - SUFFIX_APPLY@4603..4606 - ARGS_DESC@4603..4606 - L_PAREN@4603..4604 "(" - ARG@4604..4605 - EXPR@4604..4605 - EXPR_VAR@4604..4605 - NAME@4604..4605 - IDENT@4604..4605 "v" - R_PAREN@4605..4606 ")" - R_BRACK@4606..4607 "]" - WHITESPACE@4607..4612 "\n " - ELSE_KW@4612..4616 "else" - WHITESPACE@4616..4617 " " - FALSE_EXPR@4617..4858 - EXPR@4617..4858 - EXPR_IF_THEN_ELSE@4617..4858 - IF_KW@4617..4619 "if" - WHITESPACE@4619..4620 " " - EXPR@4620..4637 - EXPR_VAR@4620..4623 - NAME@4620..4623 - IDENT@4620..4623 "std" - SUFFIX_INDEX@4623..4634 - DOT@4623..4624 "." - NAME@4624..4634 - IDENT@4624..4634 "isFunction" - SUFFIX_APPLY@4634..4637 - ARGS_DESC@4634..4637 - L_PAREN@4634..4635 "(" - ARG@4635..4636 - EXPR@4635..4636 - EXPR_VAR@4635..4636 - NAME@4635..4636 - IDENT@4635..4636 "v" - R_PAREN@4636..4637 ")" - WHITESPACE@4637..4638 " " - THEN_KW@4638..4642 "then" - WHITESPACE@4642..4649 "\n " - TRUE_EXPR@4649..4681 - EXPR@4649..4681 - EXPR_ERROR@4649..4681 - ERROR_KW@4649..4654 "error" - WHITESPACE@4654..4655 " " - EXPR@4655..4681 - EXPR_STRING@4655..4681 - STRING_SINGLE@4655..4681 "'cannot manifest func ..." - WHITESPACE@4681..4686 "\n " - ELSE_KW@4686..4690 "else" - WHITESPACE@4690..4691 " " - FALSE_EXPR@4691..4858 - EXPR@4691..4858 - EXPR_IF_THEN_ELSE@4691..4858 - IF_KW@4691..4693 "if" - WHITESPACE@4693..4694 " " - EXPR@4694..4709 - EXPR_VAR@4694..4697 - NAME@4694..4697 - IDENT@4694..4697 "std" - SUFFIX_INDEX@4697..4706 - DOT@4697..4698 "." - NAME@4698..4706 - IDENT@4698..4706 "isNumber" - SUFFIX_APPLY@4706..4709 - ARGS_DESC@4706..4709 - L_PAREN@4706..4707 "(" - ARG@4707..4708 - EXPR@4707..4708 - EXPR_VAR@4707..4708 - NAME@4707..4708 - IDENT@4707..4708 "v" - R_PAREN@4708..4709 ")" - WHITESPACE@4709..4710 " " - THEN_KW@4710..4714 "then" - WHITESPACE@4714..4721 "\n " - TRUE_EXPR@4721..4736 - EXPR@4721..4736 - EXPR_VAR@4721..4724 - NAME@4721..4724 - IDENT@4721..4724 "std" - SUFFIX_INDEX@4724..4733 - DOT@4724..4725 "." - NAME@4725..4733 - IDENT@4725..4733 "toString" - SUFFIX_APPLY@4733..4736 - ARGS_DESC@4733..4736 - L_PAREN@4733..4734 "(" - ARG@4734..4735 - EXPR@4734..4735 - EXPR_VAR@4734..4735 - NAME@4734..4735 - IDENT@4734..4735 "v" - R_PAREN@4735..4736 ")" - WHITESPACE@4736..4741 "\n " - ELSE_KW@4741..4745 "else" - WHITESPACE@4745..4746 " " - FALSE_EXPR@4746..4858 - EXPR@4746..4858 - EXPR_IF_THEN_ELSE@4746..4858 - IF_KW@4746..4748 "if" - WHITESPACE@4748..4749 " " - EXPR@4749..4758 - EXPR_BINARY@4749..4758 - EXPR@4749..4750 - EXPR_VAR@4749..4750 - NAME@4749..4750 - IDENT@4749..4750 "v" - WHITESPACE@4750..4751 " " - EQ@4751..4753 "==" - WHITESPACE@4753..4754 " " - EXPR@4754..4758 - EXPR_LITERAL@4754..4758 - TRUE_KW@4754..4758 "true" - WHITESPACE@4758..4759 " " - THEN_KW@4759..4763 "then" - WHITESPACE@4763..4770 "\n " - TRUE_EXPR@4770..4776 - EXPR@4770..4776 - EXPR_STRING@4770..4776 - STRING_SINGLE@4770..4776 "'True'" - WHITESPACE@4776..4781 "\n " - ELSE_KW@4781..4785 "else" - WHITESPACE@4785..4786 " " - FALSE_EXPR@4786..4858 - EXPR@4786..4858 - EXPR_IF_THEN_ELSE@4786..4858 - IF_KW@4786..4788 "if" - WHITESPACE@4788..4789 " " - EXPR@4789..4799 - EXPR_BINARY@4789..4799 - EXPR@4789..4790 - EXPR_VAR@4789..4790 - NAME@4789..4790 - IDENT@4789..4790 "v" - WHITESPACE@4790..4791 " " - EQ@4791..4793 "==" - WHITESPACE@4793..4794 " " - EXPR@4794..4799 - EXPR_LITERAL@4794..4799 - FALSE_KW@4794..4799 "false" - WHITESPACE@4799..4800 " " - THEN_KW@4800..4804 "then" - WHITESPACE@4804..4811 "\n " - TRUE_EXPR@4811..4818 - EXPR@4811..4818 - EXPR_STRING@4811..4818 - STRING_SINGLE@4811..4818 "'False'" - WHITESPACE@4818..4823 "\n " - ELSE_KW@4823..4827 "else" - WHITESPACE@4827..4828 " " - FALSE_EXPR@4828..4858 - EXPR@4828..4858 - EXPR_IF_THEN_ELSE@4828..4858 - IF_KW@4828..4830 "if" - WHITESPACE@4830..4831 " " - EXPR@4831..4840 - EXPR_BINARY@4831..4840 - EXPR@4831..4832 - EXPR_VAR@4831..4832 - NAME@4831..4832 - IDENT@4831..4832 "v" - WHITESPACE@4832..4833 " " - EQ@4833..4835 "==" - WHITESPACE@4835..4836 " " - EXPR@4836..4840 - EXPR_LITERAL@4836..4840 - NULL_KW@4836..4840 "null" - WHITESPACE@4840..4841 " " - THEN_KW@4841..4845 "then" - WHITESPACE@4845..4852 "\n " - TRUE_EXPR@4852..4858 - EXPR@4852..4858 - EXPR_STRING@4852..4858 - STRING_SINGLE@4852..4858 "'None'" - COMMA@4858..4859 "," - WHITESPACE@4859..4863 "\n\n " - MEMBER_FIELD_METHOD@4863..5018 - FIELD_NAME_FIXED@4863..4881 - NAME@4863..4881 - IDENT@4863..4881 "manifestPythonVars" - PARAMS_DESC@4881..4887 - L_PAREN@4881..4882 "(" - PARAM@4882..4886 - DESTRUCT_FULL@4882..4886 - NAME@4882..4886 - IDENT@4882..4886 "conf" - R_PAREN@4886..4887 ")" - COLONCOLON@4887..4889 "::" - WHITESPACE@4889..4894 "\n " - EXPR@4894..5018 - STMT_LOCAL@4894..4986 - LOCAL_KW@4894..4899 "local" - WHITESPACE@4899..4900 " " - BIND_DESTRUCT@4900..4985 - DESTRUCT_FULL@4900..4904 - NAME@4900..4904 - IDENT@4900..4904 "vars" - WHITESPACE@4904..4905 " " - ASSIGN@4905..4906 "=" - WHITESPACE@4906..4907 " " - EXPR@4907..4985 - EXPR_ARRAY_COMP@4907..4985 - L_BRACK@4907..4908 "[" - EXPR@4908..4952 - EXPR_BINARY@4908..4952 - EXPR@4908..4917 - EXPR_STRING@4908..4917 - STRING_SINGLE@4908..4917 "'%s = %s'" - WHITESPACE@4917..4918 " " - MODULO@4918..4919 "%" - WHITESPACE@4919..4920 " " - EXPR@4920..4952 - EXPR_ARRAY@4920..4952 - L_BRACK@4920..4921 "[" - EXPR@4921..4922 - EXPR_VAR@4921..4922 - NAME@4921..4922 - IDENT@4921..4922 "k" - COMMA@4922..4923 "," - WHITESPACE@4923..4924 " " - EXPR@4924..4951 - EXPR_VAR@4924..4927 - NAME@4924..4927 - IDENT@4924..4927 "std" - SUFFIX_INDEX@4927..4942 - DOT@4927..4928 "." - NAME@4928..4942 - IDENT@4928..4942 "manifestPython" - SUFFIX_APPLY@4942..4951 - ARGS_DESC@4942..4951 - L_PAREN@4942..4943 "(" - ARG@4943..4950 - EXPR@4943..4950 - EXPR_VAR@4943..4947 - NAME@4943..4947 - IDENT@4943..4947 "conf" - SUFFIX_INDEX_EXPR@4947..4950 - L_BRACK@4947..4948 "[" - EXPR@4948..4949 - EXPR_VAR@4948..4949 - NAME@4948..4949 - IDENT@4948..4949 "k" - R_BRACK@4949..4950 "]" - R_PAREN@4950..4951 ")" - R_BRACK@4951..4952 "]" - WHITESPACE@4952..4953 " " - FOR_SPEC@4953..4984 - FOR_KW@4953..4956 "for" - WHITESPACE@4956..4957 " " - DESTRUCT_FULL@4957..4958 - NAME@4957..4958 - IDENT@4957..4958 "k" - WHITESPACE@4958..4959 " " - IN_KW@4959..4961 "in" - WHITESPACE@4961..4962 " " - EXPR@4962..4984 - EXPR_VAR@4962..4965 - NAME@4962..4965 - IDENT@4962..4965 "std" - SUFFIX_INDEX@4965..4978 - DOT@4965..4966 "." - NAME@4966..4978 - IDENT@4966..4978 "objectFields" - SUFFIX_APPLY@4978..4984 - ARGS_DESC@4978..4984 - L_PAREN@4978..4979 "(" - ARG@4979..4983 - EXPR@4979..4983 - EXPR_VAR@4979..4983 - NAME@4979..4983 - IDENT@4979..4983 "conf" - R_PAREN@4983..4984 ")" - R_BRACK@4984..4985 "]" - SEMI@4985..4986 ";" - WHITESPACE@4986..4991 "\n " - EXPR_VAR@4991..4994 - NAME@4991..4994 - IDENT@4991..4994 "std" - SUFFIX_INDEX@4994..4999 - DOT@4994..4995 "." - NAME@4995..4999 - IDENT@4995..4999 "join" - SUFFIX_APPLY@4999..5018 - ARGS_DESC@4999..5018 - L_PAREN@4999..5000 "(" - ARG@5000..5004 - EXPR@5000..5004 - EXPR_STRING@5000..5004 - STRING_SINGLE@5000..5004 "'\\n'" - COMMA@5004..5005 "," - WHITESPACE@5005..5006 " " - ARG@5006..5017 - EXPR@5006..5017 - EXPR_BINARY@5006..5017 - EXPR@5006..5010 - EXPR_VAR@5006..5010 - NAME@5006..5010 - IDENT@5006..5010 "vars" - WHITESPACE@5010..5011 " " - PLUS@5011..5012 "+" - WHITESPACE@5012..5013 " " - EXPR@5013..5017 - EXPR_ARRAY@5013..5017 - L_BRACK@5013..5014 "[" - EXPR@5014..5016 - EXPR_STRING@5014..5016 - STRING_SINGLE@5014..5016 "''" - R_BRACK@5016..5017 "]" - R_PAREN@5017..5018 ")" - COMMA@5018..5019 "," - WHITESPACE@5019..5023 "\n\n " - MEMBER_FIELD_METHOD@5023..5690 - FIELD_NAME_FIXED@5023..5040 - NAME@5023..5040 - IDENT@5023..5040 "manifestXmlJsonml" - PARAMS_DESC@5040..5047 - L_PAREN@5040..5041 "(" - PARAM@5041..5046 - DESTRUCT_FULL@5041..5046 - NAME@5041..5046 - IDENT@5041..5046 "value" - R_PAREN@5046..5047 ")" - COLONCOLON@5047..5049 "::" - WHITESPACE@5049..5054 "\n " - EXPR@5054..5690 - EXPR_IF_THEN_ELSE@5054..5690 - IF_KW@5054..5056 "if" - WHITESPACE@5056..5057 " " - EXPR@5057..5076 - EXPR_UNARY@5057..5076 - NOT@5057..5058 "!" - EXPR_VAR@5058..5061 - NAME@5058..5061 - IDENT@5058..5061 "std" - SUFFIX_INDEX@5061..5069 - DOT@5061..5062 "." - NAME@5062..5069 - IDENT@5062..5069 "isArray" - SUFFIX_APPLY@5069..5076 - ARGS_DESC@5069..5076 - L_PAREN@5069..5070 "(" - ARG@5070..5075 - EXPR@5070..5075 - EXPR_VAR@5070..5075 - NAME@5070..5075 - IDENT@5070..5075 "value" - R_PAREN@5075..5076 ")" - WHITESPACE@5076..5077 " " - THEN_KW@5077..5081 "then" - WHITESPACE@5081..5088 "\n " - TRUE_EXPR@5088..5156 - EXPR@5088..5156 - EXPR_ERROR@5088..5156 - ERROR_KW@5088..5093 "error" - WHITESPACE@5093..5094 " " - EXPR@5094..5156 - EXPR_BINARY@5094..5156 - EXPR@5094..5138 - EXPR_STRING@5094..5138 - STRING_SINGLE@5094..5138 "'Expected a JSONML va ..." - WHITESPACE@5138..5139 " " - MODULO@5139..5140 "%" - WHITESPACE@5140..5141 " " - EXPR@5141..5156 - EXPR_VAR@5141..5144 - NAME@5141..5144 - IDENT@5141..5144 "std" - SUFFIX_INDEX@5144..5149 - DOT@5144..5145 "." - NAME@5145..5149 - IDENT@5145..5149 "type" - SUFFIX_APPLY@5149..5156 - ARGS_DESC@5149..5156 - L_PAREN@5149..5150 "(" - ARG@5150..5155 - EXPR@5150..5155 - EXPR_VAR@5150..5155 - NAME@5150..5155 - IDENT@5150..5155 "value" - R_PAREN@5155..5156 ")" - WHITESPACE@5156..5161 "\n " - ELSE_KW@5161..5165 "else" - WHITESPACE@5165..5172 "\n " - FALSE_EXPR@5172..5690 - EXPR@5172..5690 - STMT_LOCAL@5172..5672 - LOCAL_KW@5172..5177 "local" - WHITESPACE@5177..5178 " " - BIND_FUNCTION@5178..5671 - NAME@5178..5181 - IDENT@5178..5181 "aux" - PARAMS_DESC@5181..5184 - L_PAREN@5181..5182 "(" - PARAM@5182..5183 - DESTRUCT_FULL@5182..5183 - NAME@5182..5183 - IDENT@5182..5183 "v" - R_PAREN@5183..5184 ")" - WHITESPACE@5184..5185 " " - ASSIGN@5185..5186 "=" - WHITESPACE@5186..5195 "\n " - EXPR@5195..5671 - EXPR_IF_THEN_ELSE@5195..5671 - IF_KW@5195..5197 "if" - WHITESPACE@5197..5198 " " - EXPR@5198..5213 - EXPR_VAR@5198..5201 - NAME@5198..5201 - IDENT@5198..5201 "std" - SUFFIX_INDEX@5201..5210 - DOT@5201..5202 "." - NAME@5202..5210 - IDENT@5202..5210 "isString" - SUFFIX_APPLY@5210..5213 - ARGS_DESC@5210..5213 - L_PAREN@5210..5211 "(" - ARG@5211..5212 - EXPR@5211..5212 - EXPR_VAR@5211..5212 - NAME@5211..5212 - IDENT@5211..5212 "v" - R_PAREN@5212..5213 ")" - WHITESPACE@5213..5214 " " - THEN_KW@5214..5218 "then" - WHITESPACE@5218..5229 "\n " - TRUE_EXPR@5229..5230 - EXPR@5229..5230 - EXPR_VAR@5229..5230 - NAME@5229..5230 - IDENT@5229..5230 "v" - WHITESPACE@5230..5239 "\n " - ELSE_KW@5239..5243 "else" - WHITESPACE@5243..5254 "\n " - FALSE_EXPR@5254..5671 - EXPR@5254..5671 - STMT_LOCAL@5254..5271 - LOCAL_KW@5254..5259 "local" - WHITESPACE@5259..5260 " " - BIND_DESTRUCT@5260..5270 - DESTRUCT_FULL@5260..5263 - NAME@5260..5263 - IDENT@5260..5263 "tag" - WHITESPACE@5263..5264 " " - ASSIGN@5264..5265 "=" - WHITESPACE@5265..5266 " " - EXPR@5266..5270 - EXPR_VAR@5266..5267 - NAME@5266..5267 - IDENT@5266..5267 "v" - SUFFIX_INDEX_EXPR@5267..5270 - L_BRACK@5267..5268 "[" - EXPR@5268..5269 - EXPR_NUMBER@5268..5269 - FLOAT@5268..5269 "0" - R_BRACK@5269..5270 "]" - SEMI@5270..5271 ";" - WHITESPACE@5271..5282 "\n " - STMT_LOCAL@5282..5340 - LOCAL_KW@5282..5287 "local" - WHITESPACE@5287..5288 " " - BIND_DESTRUCT@5288..5339 - DESTRUCT_FULL@5288..5297 - NAME@5288..5297 - IDENT@5288..5297 "has_attrs" - WHITESPACE@5297..5298 " " - ASSIGN@5298..5299 "=" - WHITESPACE@5299..5300 " " - EXPR@5300..5339 - EXPR_BINARY@5300..5339 - EXPR@5300..5317 - EXPR_BINARY@5300..5317 - EXPR@5300..5303 - EXPR_VAR@5300..5303 - NAME@5300..5303 - IDENT@5300..5303 "std" - SUFFIX_INDEX@5303..5310 - DOT@5303..5304 "." - NAME@5304..5310 - IDENT@5304..5310 "length" - SUFFIX_APPLY@5310..5313 - ARGS_DESC@5310..5313 - L_PAREN@5310..5311 "(" - ARG@5311..5312 - EXPR@5311..5312 - EXPR_VAR@5311..5312 - NAME@5311..5312 - IDENT@5311..5312 "v" - R_PAREN@5312..5313 ")" - WHITESPACE@5313..5314 " " - GT@5314..5315 ">" - WHITESPACE@5315..5316 " " - EXPR@5316..5317 - EXPR_NUMBER@5316..5317 - FLOAT@5316..5317 "1" - WHITESPACE@5317..5318 " " - AND@5318..5320 "&&" - WHITESPACE@5320..5321 " " - EXPR@5321..5339 - EXPR_VAR@5321..5324 - NAME@5321..5324 - IDENT@5321..5324 "std" - SUFFIX_INDEX@5324..5333 - DOT@5324..5325 "." - NAME@5325..5333 - IDENT@5325..5333 "isObject" - SUFFIX_APPLY@5333..5339 - ARGS_DESC@5333..5339 - L_PAREN@5333..5334 "(" - ARG@5334..5338 - EXPR@5334..5338 - EXPR_VAR@5334..5335 - NAME@5334..5335 - IDENT@5334..5335 "v" - SUFFIX_INDEX_EXPR@5335..5338 - L_BRACK@5335..5336 "[" - EXPR@5336..5337 - EXPR_NUMBER@5336..5337 - FLOAT@5336..5337 "1" - R_BRACK@5337..5338 "]" - R_PAREN@5338..5339 ")" - SEMI@5339..5340 ";" - WHITESPACE@5340..5351 "\n " - STMT_LOCAL@5351..5396 - LOCAL_KW@5351..5356 "local" - WHITESPACE@5356..5357 " " - BIND_DESTRUCT@5357..5395 - DESTRUCT_FULL@5357..5362 - NAME@5357..5362 - IDENT@5357..5362 "attrs" - WHITESPACE@5362..5363 " " - ASSIGN@5363..5364 "=" - WHITESPACE@5364..5365 " " - EXPR@5365..5395 - EXPR_IF_THEN_ELSE@5365..5395 - IF_KW@5365..5367 "if" - WHITESPACE@5367..5368 " " - EXPR@5368..5377 - EXPR_VAR@5368..5377 - NAME@5368..5377 - IDENT@5368..5377 "has_attrs" - WHITESPACE@5377..5378 " " - THEN_KW@5378..5382 "then" - WHITESPACE@5382..5383 " " - TRUE_EXPR@5383..5387 - EXPR@5383..5387 - EXPR_VAR@5383..5384 - NAME@5383..5384 - IDENT@5383..5384 "v" - SUFFIX_INDEX_EXPR@5384..5387 - L_BRACK@5384..5385 "[" - EXPR@5385..5386 - EXPR_NUMBER@5385..5386 - FLOAT@5385..5386 "1" - R_BRACK@5386..5387 "]" - WHITESPACE@5387..5388 " " - ELSE_KW@5388..5392 "else" - WHITESPACE@5392..5393 " " - FALSE_EXPR@5393..5395 - EXPR@5393..5395 - EXPR_OBJECT@5393..5395 - OBJ_BODY_MEMBER_LIST@5393..5395 - L_BRACE@5393..5394 "{" - R_BRACE@5394..5395 "}" - SEMI@5395..5396 ";" - WHITESPACE@5396..5407 "\n " - STMT_LOCAL@5407..5459 - LOCAL_KW@5407..5412 "local" - WHITESPACE@5412..5413 " " - BIND_DESTRUCT@5413..5458 - DESTRUCT_FULL@5413..5421 - NAME@5413..5421 - IDENT@5413..5421 "children" - WHITESPACE@5421..5422 " " - ASSIGN@5422..5423 "=" - WHITESPACE@5423..5424 " " - EXPR@5424..5458 - EXPR_IF_THEN_ELSE@5424..5458 - IF_KW@5424..5426 "if" - WHITESPACE@5426..5427 " " - EXPR@5427..5436 - EXPR_VAR@5427..5436 - NAME@5427..5436 - IDENT@5427..5436 "has_attrs" - WHITESPACE@5436..5437 " " - THEN_KW@5437..5441 "then" - WHITESPACE@5441..5442 " " - TRUE_EXPR@5442..5447 - EXPR@5442..5447 - EXPR_VAR@5442..5443 - NAME@5442..5443 - IDENT@5442..5443 "v" - SUFFIX_SLICE@5443..5447 - SLICE_DESC@5443..5447 - L_BRACK@5443..5444 "[" - EXPR@5444..5445 - EXPR_NUMBER@5444..5445 - FLOAT@5444..5445 "2" - COLON@5445..5446 ":" - R_BRACK@5446..5447 "]" - WHITESPACE@5447..5448 " " - ELSE_KW@5448..5452 "else" - WHITESPACE@5452..5453 " " - FALSE_EXPR@5453..5458 - EXPR@5453..5458 - EXPR_VAR@5453..5454 - NAME@5453..5454 - IDENT@5453..5454 "v" - SUFFIX_SLICE@5454..5458 - SLICE_DESC@5454..5458 - L_BRACK@5454..5455 "[" - EXPR@5455..5456 - EXPR_NUMBER@5455..5456 - FLOAT@5455..5456 "1" - COLON@5456..5457 ":" - R_BRACK@5457..5458 "]" - SEMI@5458..5459 ";" - WHITESPACE@5459..5470 "\n " - STMT_LOCAL@5470..5576 - LOCAL_KW@5470..5475 "local" - WHITESPACE@5475..5476 " " - BIND_DESTRUCT@5476..5575 - DESTRUCT_FULL@5476..5485 - NAME@5476..5485 - IDENT@5476..5485 "attrs_str" - WHITESPACE@5485..5486 " " - ASSIGN@5486..5487 "=" - WHITESPACE@5487..5500 "\n " - EXPR@5500..5575 - EXPR_VAR@5500..5503 - NAME@5500..5503 - IDENT@5500..5503 "std" - SUFFIX_INDEX@5503..5508 - DOT@5503..5504 "." - NAME@5504..5508 - IDENT@5504..5508 "join" - SUFFIX_APPLY@5508..5575 - ARGS_DESC@5508..5575 - L_PAREN@5508..5509 "(" - ARG@5509..5511 - EXPR@5509..5511 - EXPR_STRING@5509..5511 - STRING_SINGLE@5509..5511 "''" - COMMA@5511..5512 "," - WHITESPACE@5512..5513 " " - ARG@5513..5574 - EXPR@5513..5574 - EXPR_ARRAY_COMP@5513..5574 - L_BRACK@5513..5514 "[" - EXPR@5514..5540 - EXPR_BINARY@5514..5540 - EXPR@5514..5524 - EXPR_STRING@5514..5524 - STRING_SINGLE@5514..5524 "' %s=\"%s\"'" - WHITESPACE@5524..5525 " " - MODULO@5525..5526 "%" - WHITESPACE@5526..5527 " " - EXPR@5527..5540 - EXPR_ARRAY@5527..5540 - L_BRACK@5527..5528 "[" - EXPR@5528..5529 - EXPR_VAR@5528..5529 - NAME@5528..5529 - IDENT@5528..5529 "k" - COMMA@5529..5530 "," - WHITESPACE@5530..5531 " " - EXPR@5531..5539 - EXPR_VAR@5531..5536 - NAME@5531..5536 - IDENT@5531..5536 "attrs" - SUFFIX_INDEX_EXPR@5536..5539 - L_BRACK@5536..5537 "[" - EXPR@5537..5538 - EXPR_VAR@5537..5538 - NAME@5537..5538 - IDENT@5537..5538 "k" - R_BRACK@5538..5539 "]" - R_BRACK@5539..5540 "]" - WHITESPACE@5540..5541 " " - FOR_SPEC@5541..5573 - FOR_KW@5541..5544 "for" - WHITESPACE@5544..5545 " " - DESTRUCT_FULL@5545..5546 - NAME@5545..5546 - IDENT@5545..5546 "k" - WHITESPACE@5546..5547 " " - IN_KW@5547..5549 "in" - WHITESPACE@5549..5550 " " - EXPR@5550..5573 - EXPR_VAR@5550..5553 - NAME@5550..5553 - IDENT@5550..5553 "std" - SUFFIX_INDEX@5553..5566 - DOT@5553..5554 "." - NAME@5554..5566 - IDENT@5554..5566 "objectFields" - SUFFIX_APPLY@5566..5573 - ARGS_DESC@5566..5573 - L_PAREN@5566..5567 "(" - ARG@5567..5572 - EXPR@5567..5572 - EXPR_VAR@5567..5572 - NAME@5567..5572 - IDENT@5567..5572 "attrs" - R_PAREN@5572..5573 ")" - R_BRACK@5573..5574 "]" - R_PAREN@5574..5575 ")" - SEMI@5575..5576 ";" - WHITESPACE@5576..5587 "\n " - EXPR_VAR@5587..5590 - NAME@5587..5590 - IDENT@5587..5590 "std" - SUFFIX_INDEX@5590..5599 - DOT@5590..5591 "." - NAME@5591..5599 - IDENT@5591..5599 "deepJoin" - SUFFIX_APPLY@5599..5671 - ARGS_DESC@5599..5671 - L_PAREN@5599..5600 "(" - ARG@5600..5670 - EXPR@5600..5670 - EXPR_ARRAY@5600..5670 - L_BRACK@5600..5601 "[" - EXPR@5601..5604 - EXPR_STRING@5601..5604 - STRING_SINGLE@5601..5604 "'<'" - COMMA@5604..5605 "," - WHITESPACE@5605..5606 " " - EXPR@5606..5609 - EXPR_VAR@5606..5609 - NAME@5606..5609 - IDENT@5606..5609 "tag" - COMMA@5609..5610 "," - WHITESPACE@5610..5611 " " - EXPR@5611..5620 - EXPR_VAR@5611..5620 - NAME@5611..5620 - IDENT@5611..5620 "attrs_str" - COMMA@5620..5621 "," - WHITESPACE@5621..5622 " " - EXPR@5622..5625 - EXPR_STRING@5622..5625 - STRING_SINGLE@5622..5625 "'>'" - COMMA@5625..5626 "," - WHITESPACE@5626..5627 " " - EXPR@5627..5653 - EXPR_ARRAY_COMP@5627..5653 - L_BRACK@5627..5628 "[" - EXPR@5628..5634 - EXPR_VAR@5628..5631 - NAME@5628..5631 - IDENT@5628..5631 "aux" - SUFFIX_APPLY@5631..5634 - ARGS_DESC@5631..5634 - L_PAREN@5631..5632 "(" - ARG@5632..5633 - EXPR@5632..5633 - EXPR_VAR@5632..5633 - NAME@5632..5633 - IDENT@5632..5633 "x" - R_PAREN@5633..5634 ")" - WHITESPACE@5634..5635 " " - FOR_SPEC@5635..5652 - FOR_KW@5635..5638 "for" - WHITESPACE@5638..5639 " " - DESTRUCT_FULL@5639..5640 - NAME@5639..5640 - IDENT@5639..5640 "x" - WHITESPACE@5640..5641 " " - IN_KW@5641..5643 "in" - WHITESPACE@5643..5644 " " - EXPR@5644..5652 - EXPR_VAR@5644..5652 - NAME@5644..5652 - IDENT@5644..5652 "children" - R_BRACK@5652..5653 "]" - COMMA@5653..5654 "," - WHITESPACE@5654..5655 " " - EXPR@5655..5659 - EXPR_STRING@5655..5659 - STRING_SINGLE@5655..5659 "''" - R_BRACK@5669..5670 "]" - R_PAREN@5670..5671 ")" - SEMI@5671..5672 ";" - WHITESPACE@5672..5680 "\n\n " - EXPR_VAR@5680..5683 - NAME@5680..5683 - IDENT@5680..5683 "aux" - SUFFIX_APPLY@5683..5690 - ARGS_DESC@5683..5690 - L_PAREN@5683..5684 "(" - ARG@5684..5689 - EXPR@5684..5689 - EXPR_VAR@5684..5689 - NAME@5684..5689 - IDENT@5684..5689 "value" - R_PAREN@5689..5690 ")" - COMMA@5690..5691 "," - WHITESPACE@5691..5695 "\n\n " - MEMBER_FIELD_METHOD@5695..6483 - FIELD_NAME_FIXED@5695..5705 - NAME@5695..5705 - IDENT@5695..5705 "mergePatch" - PARAMS_DESC@5705..5720 - L_PAREN@5705..5706 "(" - PARAM@5706..5712 - DESTRUCT_FULL@5706..5712 - NAME@5706..5712 - IDENT@5706..5712 "target" - COMMA@5712..5713 "," - WHITESPACE@5713..5714 " " - PARAM@5714..5719 - DESTRUCT_FULL@5714..5719 - NAME@5714..5719 - IDENT@5714..5719 "patch" - R_PAREN@5719..5720 ")" - COLONCOLON@5720..5722 "::" - WHITESPACE@5722..5727 "\n " - EXPR@5727..6483 - EXPR_IF_THEN_ELSE@5727..6483 - IF_KW@5727..5729 "if" - WHITESPACE@5729..5730 " " - EXPR@5730..5749 - EXPR_VAR@5730..5733 - NAME@5730..5733 - IDENT@5730..5733 "std" - SUFFIX_INDEX@5733..5742 - DOT@5733..5734 "." - NAME@5734..5742 - IDENT@5734..5742 "isObject" - SUFFIX_APPLY@5742..5749 - ARGS_DESC@5742..5749 - L_PAREN@5742..5743 "(" - ARG@5743..5748 - EXPR@5743..5748 - EXPR_VAR@5743..5748 - NAME@5743..5748 - IDENT@5743..5748 "patch" - R_PAREN@5748..5749 ")" - WHITESPACE@5749..5750 " " - THEN_KW@5750..5754 "then" - WHITESPACE@5754..5761 "\n " - TRUE_EXPR@5761..6462 - EXPR@5761..6462 - STMT_LOCAL@5761..5835 - LOCAL_KW@5761..5766 "local" - WHITESPACE@5766..5767 " " - BIND_DESTRUCT@5767..5834 - DESTRUCT_FULL@5767..5780 - NAME@5767..5780 - IDENT@5767..5780 "target_object" - WHITESPACE@5780..5781 " " - ASSIGN@5781..5782 "=" - WHITESPACE@5782..5791 "\n " - EXPR@5791..5834 - EXPR_IF_THEN_ELSE@5791..5834 - IF_KW@5791..5793 "if" - WHITESPACE@5793..5794 " " - EXPR@5794..5814 - EXPR_VAR@5794..5797 - NAME@5794..5797 - IDENT@5794..5797 "std" - SUFFIX_INDEX@5797..5806 - DOT@5797..5798 "." - NAME@5798..5806 - IDENT@5798..5806 "isObject" - SUFFIX_APPLY@5806..5814 - ARGS_DESC@5806..5814 - L_PAREN@5806..5807 "(" - ARG@5807..5813 - EXPR@5807..5813 - EXPR_VAR@5807..5813 - NAME@5807..5813 - IDENT@5807..5813 "target" - R_PAREN@5813..5814 ")" - WHITESPACE@5814..5815 " " - THEN_KW@5815..5819 "then" - WHITESPACE@5819..5820 " " - TRUE_EXPR@5820..5826 - EXPR@5820..5826 - EXPR_VAR@5820..5826 - NAME@5820..5826 - IDENT@5820..5826 "target" - WHITESPACE@5826..5827 " " - ELSE_KW@5827..5831 "else" - WHITESPACE@5831..5832 " " - FALSE_EXPR@5832..5834 - EXPR@5832..5834 - EXPR_OBJECT@5832..5834 - OBJ_BODY_MEMBER_LIST@5832..5834 - L_BRACE@5832..5833 "{" - R_BRACE@5833..5834 "}" - SEMI@5834..5835 ";" - WHITESPACE@5835..5843 "\n\n " - STMT_LOCAL@5843..5949 - LOCAL_KW@5843..5848 "local" - WHITESPACE@5848..5849 " " - BIND_DESTRUCT@5849..5948 - DESTRUCT_FULL@5849..5862 - NAME@5849..5862 - IDENT@5849..5862 "target_fields" - WHITESPACE@5862..5863 " " - ASSIGN@5863..5864 "=" - WHITESPACE@5864..5873 "\n " - EXPR@5873..5948 - EXPR_IF_THEN_ELSE@5873..5948 - IF_KW@5873..5875 "if" - WHITESPACE@5875..5876 " " - EXPR@5876..5903 - EXPR_VAR@5876..5879 - NAME@5876..5879 - IDENT@5876..5879 "std" - SUFFIX_INDEX@5879..5888 - DOT@5879..5880 "." - NAME@5880..5888 - IDENT@5880..5888 "isObject" - SUFFIX_APPLY@5888..5903 - ARGS_DESC@5888..5903 - L_PAREN@5888..5889 "(" - ARG@5889..5902 - EXPR@5889..5902 - EXPR_VAR@5889..5902 - NAME@5889..5902 - IDENT@5889..5902 "target_object" - R_PAREN@5902..5903 ")" - WHITESPACE@5903..5904 " " - THEN_KW@5904..5908 "then" - WHITESPACE@5908..5909 " " - TRUE_EXPR@5909..5940 - EXPR@5909..5940 - EXPR_VAR@5909..5912 - NAME@5909..5912 - IDENT@5909..5912 "std" - SUFFIX_INDEX@5912..5925 - DOT@5912..5913 "." - NAME@5913..5925 - IDENT@5913..5925 "objectFields" - SUFFIX_APPLY@5925..5940 - ARGS_DESC@5925..5940 - L_PAREN@5925..5926 "(" - ARG@5926..5939 - EXPR@5926..5939 - EXPR_VAR@5926..5939 - NAME@5926..5939 - IDENT@5926..5939 "target_object" - R_PAREN@5939..5940 ")" - WHITESPACE@5940..5941 " " - ELSE_KW@5941..5945 "else" - WHITESPACE@5945..5946 " " - FALSE_EXPR@5946..5948 - EXPR@5946..5948 - EXPR_ARRAY@5946..5948 - L_BRACK@5946..5947 "[" - R_BRACK@5947..5948 "]" - SEMI@5948..5949 ";" - WHITESPACE@5949..5957 "\n\n " - STMT_LOCAL@5957..6034 - LOCAL_KW@5957..5962 "local" - WHITESPACE@5962..5963 " " - BIND_DESTRUCT@5963..6033 - DESTRUCT_FULL@5963..5974 - NAME@5963..5974 - IDENT@5963..5974 "null_fields" - WHITESPACE@5974..5975 " " - ASSIGN@5975..5976 "=" - WHITESPACE@5976..5977 " " - EXPR@5977..6033 - EXPR_ARRAY_COMP@5977..6033 - L_BRACK@5977..5978 "[" - EXPR@5978..5979 - EXPR_VAR@5978..5979 - NAME@5978..5979 - IDENT@5978..5979 "k" - WHITESPACE@5979..5980 " " - FOR_SPEC@5980..6012 - FOR_KW@5980..5983 "for" - WHITESPACE@5983..5984 " " - DESTRUCT_FULL@5984..5985 - NAME@5984..5985 - IDENT@5984..5985 "k" - WHITESPACE@5985..5986 " " - IN_KW@5986..5988 "in" - WHITESPACE@5988..5989 " " - EXPR@5989..6012 - EXPR_VAR@5989..5992 - NAME@5989..5992 - IDENT@5989..5992 "std" - SUFFIX_INDEX@5992..6005 - DOT@5992..5993 "." - NAME@5993..6005 - IDENT@5993..6005 "objectFields" - SUFFIX_APPLY@6005..6012 - ARGS_DESC@6005..6012 - L_PAREN@6005..6006 "(" - ARG@6006..6011 - EXPR@6006..6011 - EXPR_VAR@6006..6011 - NAME@6006..6011 - IDENT@6006..6011 "patch" - R_PAREN@6011..6012 ")" - WHITESPACE@6012..6013 " " - IF_SPEC@6013..6032 - IF_KW@6013..6015 "if" - WHITESPACE@6015..6016 " " - EXPR@6016..6032 - EXPR_BINARY@6016..6032 - EXPR@6016..6021 - EXPR_VAR@6016..6021 - NAME@6016..6021 - IDENT@6016..6021 "patch" - SUFFIX_INDEX_EXPR@6021..6024 - L_BRACK@6021..6022 "[" - EXPR@6022..6023 - EXPR_VAR@6022..6023 - NAME@6022..6023 - IDENT@6022..6023 "k" - R_BRACK@6023..6024 "]" - WHITESPACE@6024..6025 " " - EQ@6025..6027 "==" - WHITESPACE@6027..6028 " " - EXPR@6028..6032 - EXPR_LITERAL@6028..6032 - NULL_KW@6028..6032 "null" - R_BRACK@6032..6033 "]" - SEMI@6033..6034 ";" - WHITESPACE@6034..6041 "\n " - STMT_LOCAL@6041..6114 - LOCAL_KW@6041..6046 "local" - WHITESPACE@6046..6047 " " - BIND_DESTRUCT@6047..6113 - DESTRUCT_FULL@6047..6058 - NAME@6047..6058 - IDENT@6047..6058 "both_fields" - WHITESPACE@6058..6059 " " - ASSIGN@6059..6060 "=" - WHITESPACE@6060..6061 " " - EXPR@6061..6113 - EXPR_VAR@6061..6064 - NAME@6061..6064 - IDENT@6061..6064 "std" - SUFFIX_INDEX@6064..6073 - DOT@6064..6065 "." - NAME@6065..6073 - IDENT@6065..6073 "setUnion" - SUFFIX_APPLY@6073..6113 - ARGS_DESC@6073..6113 - L_PAREN@6073..6074 "(" - ARG@6074..6087 - EXPR@6074..6087 - EXPR_VAR@6074..6087 - NAME@6074..6087 - IDENT@6074..6087 "target_fields" - COMMA@6087..6088 "," - WHITESPACE@6088..6089 " " - ARG@6089..6112 - EXPR@6089..6112 - EXPR_VAR@6089..6092 - NAME@6089..6092 - IDENT@6089..6092 "std" - SUFFIX_INDEX@6092..6105 - DOT@6092..6093 "." - NAME@6093..6105 - IDENT@6093..6105 "objectFields" - SUFFIX_APPLY@6105..6112 - ARGS_DESC@6105..6112 - L_PAREN@6105..6106 "(" - ARG@6106..6111 - EXPR@6106..6111 - EXPR_VAR@6106..6111 - NAME@6106..6111 - IDENT@6106..6111 "patch" - R_PAREN@6111..6112 ")" - R_PAREN@6112..6113 ")" - SEMI@6113..6114 ";" - WHITESPACE@6114..6122 "\n\n " - EXPR_OBJECT@6122..6462 - OBJ_BODY_COMP@6122..6462 - L_BRACE@6122..6123 "{" - WHITESPACE@6123..6132 "\n " - MEMBER_FIELD_NORMAL@6132..6399 - FIELD_NAME_DYNAMIC@6132..6135 - L_BRACK@6132..6133 "[" - EXPR@6133..6134 - EXPR_VAR@6133..6134 - NAME@6133..6134 - IDENT@6133..6134 "k" - R_BRACK@6134..6135 "]" - COLON@6135..6136 ":" - WHITESPACE@6136..6147 "\n " - EXPR@6147..6399 - EXPR_IF_THEN_ELSE@6147..6399 - IF_KW@6147..6149 "if" - WHITESPACE@6149..6150 " " - EXPR@6150..6174 - EXPR_UNARY@6150..6174 - NOT@6150..6151 "!" - EXPR_VAR@6151..6154 - NAME@6151..6154 - IDENT@6151..6154 "std" - SUFFIX_INDEX@6154..6164 - DOT@6154..6155 "." - NAME@6155..6164 - IDENT@6155..6164 "objectHas" - SUFFIX_APPLY@6164..6174 - ARGS_DESC@6164..6174 - L_PAREN@6164..6165 "(" - ARG@6165..6170 - EXPR@6165..6170 - EXPR_VAR@6165..6170 - NAME@6165..6170 - IDENT@6165..6170 "patch" - COMMA@6170..6171 "," - WHITESPACE@6171..6172 " " - ARG@6172..6173 - EXPR@6172..6173 - EXPR_VAR@6172..6173 - NAME@6172..6173 - IDENT@6172..6173 "k" - R_PAREN@6173..6174 ")" - WHITESPACE@6174..6175 " " - THEN_KW@6175..6179 "then" - WHITESPACE@6179..6192 "\n " - TRUE_EXPR@6192..6208 - EXPR@6192..6208 - EXPR_VAR@6192..6205 - NAME@6192..6205 - IDENT@6192..6205 "target_object" - SUFFIX_INDEX_EXPR@6205..6208 - L_BRACK@6205..6206 "[" - EXPR@6206..6207 - EXPR_VAR@6206..6207 - NAME@6206..6207 - IDENT@6206..6207 "k" - R_BRACK@6207..6208 "]" - WHITESPACE@6208..6219 "\n " - ELSE_KW@6219..6223 "else" - WHITESPACE@6223..6224 " " - FALSE_EXPR@6224..6399 - EXPR@6224..6399 - EXPR_IF_THEN_ELSE@6224..6399 - IF_KW@6224..6226 "if" - WHITESPACE@6226..6227 " " - EXPR@6227..6259 - EXPR_UNARY@6227..6259 - NOT@6227..6228 "!" - EXPR_VAR@6228..6231 - NAME@6228..6231 - IDENT@6228..6231 "std" - SUFFIX_INDEX@6231..6241 - DOT@6231..6232 "." - NAME@6232..6241 - IDENT@6232..6241 "objectHas" - SUFFIX_APPLY@6241..6259 - ARGS_DESC@6241..6259 - L_PAREN@6241..6242 "(" - ARG@6242..6255 - EXPR@6242..6255 - EXPR_VAR@6242..6255 - NAME@6242..6255 - IDENT@6242..6255 "target_object" - COMMA@6255..6256 "," - WHITESPACE@6256..6257 " " - ARG@6257..6258 - EXPR@6257..6258 - EXPR_VAR@6257..6258 - NAME@6257..6258 - IDENT@6257..6258 "k" - R_PAREN@6258..6259 ")" - WHITESPACE@6259..6260 " " - THEN_KW@6260..6264 "then" - WHITESPACE@6264..6277 "\n " - TRUE_EXPR@6277..6318 - EXPR@6277..6318 - EXPR_VAR@6277..6280 - NAME@6277..6280 - IDENT@6277..6280 "std" - SUFFIX_INDEX@6280..6291 - DOT@6280..6281 "." - NAME@6281..6291 - IDENT@6281..6291 "mergePatch" - SUFFIX_APPLY@6291..6318 - ARGS_DESC@6291..6318 - L_PAREN@6291..6292 "(" - ARG@6292..6296 - EXPR@6292..6296 - EXPR_LITERAL@6292..6296 - NULL_KW@6292..6296 "null" - COMMA@6296..6297 "," - WHITESPACE@6297..6298 " " - ARG@6298..6306 - EXPR@6298..6306 - EXPR_VAR@6298..6303 - NAME@6298..6303 - IDENT@6298..6303 "patch" - SUFFIX_INDEX_EXPR@6303..6306 - L_BRACK@6303..6304 "[" - EXPR@6304..6305 - EXPR_VAR@6304..6305 - NAME@6304..6305 - IDENT@6304..6305 "k" - R_BRACK@6305..6306 "]" - R_PAREN@6306..6307 ")" - WHITESPACE@6307..6308 " " - TAILSTRICT_KW@6308..6318 "tailstrict" - WHITESPACE@6318..6329 "\n " - ELSE_KW@6329..6333 "else" - WHITESPACE@6333..6346 "\n " - FALSE_EXPR@6346..6399 - EXPR@6346..6399 - EXPR_VAR@6346..6349 - NAME@6346..6349 - IDENT@6346..6349 "std" - SUFFIX_INDEX@6349..6360 - DOT@6349..6350 "." - NAME@6350..6360 - IDENT@6350..6360 "mergePatch" - SUFFIX_APPLY@6360..6399 - ARGS_DESC@6360..6399 - L_PAREN@6360..6361 "(" - ARG@6361..6377 - EXPR@6361..6377 - EXPR_VAR@6361..6374 - NAME@6361..6374 - IDENT@6361..6374 "target_object" - SUFFIX_INDEX_EXPR@6374..6377 - L_BRACK@6374..6375 "[" - EXPR@6375..6376 - EXPR_VAR@6375..6376 - NAME@6375..6376 - IDENT@6375..6376 "k" - R_BRACK@6376..6377 "]" - COMMA@6377..6378 "," - WHITESPACE@6378..6379 " " - ARG@6379..6387 - EXPR@6379..6387 - EXPR_VAR@6379..6384 - NAME@6379..6384 - IDENT@6379..6384 "patch" - SUFFIX_INDEX_EXPR@6384..6387 - L_BRACK@6384..6385 "[" - EXPR@6385..6386 - EXPR_VAR@6385..6386 - NAME@6385..6386 - IDENT@6385..6386 "k" - R_BRACK@6386..6387 "]" - R_PAREN@6387..6388 ")" - WHITESPACE@6388..6389 " " - TAILSTRICT_KW@6389..6399 "tailstrict" - WHITESPACE@6399..6408 "\n " - FOR_SPEC@6408..6454 - FOR_KW@6408..6411 "for" - WHITESPACE@6411..6412 " " - DESTRUCT_FULL@6412..6413 - NAME@6412..6413 - IDENT@6412..6413 "k" - WHITESPACE@6413..6414 " " - IN_KW@6414..6416 "in" - WHITESPACE@6416..6417 " " - EXPR@6417..6454 - EXPR_VAR@6417..6420 - NAME@6417..6420 - IDENT@6417..6420 "std" - SUFFIX_INDEX@6420..6428 - DOT@6420..6421 "." - NAME@6421..6428 - IDENT@6421..6428 "setDiff" - SUFFIX_APPLY@6428..6454 - ARGS_DESC@6428..6454 - L_PAREN@6428..6429 "(" - ARG@6429..6440 - EXPR@6429..6440 - EXPR_VAR@6429..6440 - NAME@6429..6440 - IDENT@6429..6440 "both_fields" - COMMA@6440..6441 "," - WHITESPACE@6441..6442 " " - ARG@6442..6453 - EXPR@6442..6453 - EXPR_VAR@6442..6453 - NAME@6442..6453 - IDENT@6442..6453 "null_fields" - R_PAREN@6453..6454 ")" - WHITESPACE@6454..6461 "\n " - R_BRACE@6461..6462 "}" - WHITESPACE@6462..6467 "\n " - ELSE_KW@6467..6471 "else" - WHITESPACE@6471..6478 "\n " - FALSE_EXPR@6478..6483 - EXPR@6478..6483 - EXPR_VAR@6478..6483 - NAME@6478..6483 - IDENT@6478..6483 "patch" - COMMA@6483..6484 "," - WHITESPACE@6484..6488 "\n\n " - MEMBER_FIELD_METHOD@6488..6594 - FIELD_NAME_FIXED@6488..6491 - NAME@6488..6491 - IDENT@6488..6491 "get" - PARAMS_DESC@6491..6528 - L_PAREN@6491..6492 "(" - PARAM@6492..6493 - DESTRUCT_FULL@6492..6493 - NAME@6492..6493 - IDENT@6492..6493 "o" - COMMA@6493..6494 "," - WHITESPACE@6494..6495 " " - PARAM@6495..6496 - DESTRUCT_FULL@6495..6496 - NAME@6495..6496 - IDENT@6495..6496 "f" - COMMA@6496..6497 "," - WHITESPACE@6497..6498 " " - PARAM@6498..6510 - DESTRUCT_FULL@6498..6505 - NAME@6498..6505 - IDENT@6498..6505 "default" - ASSIGN@6505..6506 "=" - EXPR@6506..6510 - EXPR_LITERAL@6506..6510 - NULL_KW@6506..6510 "null" - COMMA@6510..6511 "," - WHITESPACE@6511..6512 " " - PARAM@6512..6527 - DESTRUCT_FULL@6512..6522 - NAME@6512..6522 - IDENT@6512..6522 "inc_hidden" - ASSIGN@6522..6523 "=" - EXPR@6523..6527 - EXPR_LITERAL@6523..6527 - TRUE_KW@6523..6527 "true" - R_PAREN@6527..6528 ")" - COLONCOLON@6528..6530 "::" - WHITESPACE@6530..6535 "\n " - EXPR@6535..6594 - EXPR_IF_THEN_ELSE@6535..6594 - IF_KW@6535..6537 "if" - WHITESPACE@6537..6538 " " - EXPR@6538..6571 - EXPR_VAR@6538..6541 - NAME@6538..6541 - IDENT@6538..6541 "std" - SUFFIX_INDEX@6541..6553 - DOT@6541..6542 "." - NAME@6542..6553 - IDENT@6542..6553 "objectHasEx" - SUFFIX_APPLY@6553..6571 - ARGS_DESC@6553..6571 - L_PAREN@6553..6554 "(" - ARG@6554..6555 - EXPR@6554..6555 - EXPR_VAR@6554..6555 - NAME@6554..6555 - IDENT@6554..6555 "o" - COMMA@6555..6556 "," - WHITESPACE@6556..6557 " " - ARG@6557..6558 - EXPR@6557..6558 - EXPR_VAR@6557..6558 - NAME@6557..6558 - IDENT@6557..6558 "f" - COMMA@6558..6559 "," - WHITESPACE@6559..6560 " " - ARG@6560..6570 - EXPR@6560..6570 - EXPR_VAR@6560..6570 - NAME@6560..6570 - IDENT@6560..6570 "inc_hidden" - R_PAREN@6570..6571 ")" - WHITESPACE@6571..6572 " " - THEN_KW@6572..6576 "then" - WHITESPACE@6576..6577 " " - TRUE_EXPR@6577..6581 - EXPR@6577..6581 - EXPR_VAR@6577..6578 - NAME@6577..6578 - IDENT@6577..6578 "o" - SUFFIX_INDEX_EXPR@6578..6581 - L_BRACK@6578..6579 "[" - EXPR@6579..6580 - EXPR_VAR@6579..6580 - NAME@6579..6580 - IDENT@6579..6580 "f" - R_BRACK@6580..6581 "]" - WHITESPACE@6581..6582 " " - ELSE_KW@6582..6586 "else" - WHITESPACE@6586..6587 " " - FALSE_EXPR@6587..6594 - EXPR@6587..6594 - EXPR_VAR@6587..6594 - NAME@6587..6594 - IDENT@6587..6594 "default" - COMMA@6594..6595 "," - WHITESPACE@6595..6599 "\n\n " - MEMBER_FIELD_METHOD@6599..6733 - FIELD_NAME_FIXED@6599..6610 - NAME@6599..6610 - IDENT@6599..6610 "resolvePath" - PARAMS_DESC@6610..6616 - L_PAREN@6610..6611 "(" - PARAM@6611..6612 - DESTRUCT_FULL@6611..6612 - NAME@6611..6612 - IDENT@6611..6612 "f" - COMMA@6612..6613 "," - WHITESPACE@6613..6614 " " - PARAM@6614..6615 - DESTRUCT_FULL@6614..6615 - NAME@6614..6615 - IDENT@6614..6615 "r" - R_PAREN@6615..6616 ")" - COLONCOLON@6616..6618 "::" - WHITESPACE@6618..6623 "\n " - EXPR@6623..6733 - STMT_LOCAL@6623..6653 - LOCAL_KW@6623..6628 "local" - WHITESPACE@6628..6629 " " - BIND_DESTRUCT@6629..6652 - DESTRUCT_FULL@6629..6632 - NAME@6629..6632 - IDENT@6629..6632 "arr" - WHITESPACE@6632..6633 " " - ASSIGN@6633..6634 "=" - WHITESPACE@6634..6635 " " - EXPR@6635..6652 - EXPR_VAR@6635..6638 - NAME@6635..6638 - IDENT@6635..6638 "std" - SUFFIX_INDEX@6638..6644 - DOT@6638..6639 "." - NAME@6639..6644 - IDENT@6639..6644 "split" - SUFFIX_APPLY@6644..6652 - ARGS_DESC@6644..6652 - L_PAREN@6644..6645 "(" - ARG@6645..6646 - EXPR@6645..6646 - EXPR_VAR@6645..6646 - NAME@6645..6646 - IDENT@6645..6646 "f" - COMMA@6646..6647 "," - WHITESPACE@6647..6648 " " - ARG@6648..6651 - EXPR@6648..6651 - EXPR_STRING@6648..6651 - STRING_SINGLE@6648..6651 "'/'" - R_PAREN@6651..6652 ")" - SEMI@6652..6653 ";" - WHITESPACE@6653..6658 "\n " - EXPR_VAR@6658..6661 - NAME@6658..6661 - IDENT@6658..6661 "std" - SUFFIX_INDEX@6661..6666 - DOT@6661..6662 "." - NAME@6662..6666 - IDENT@6662..6666 "join" - SUFFIX_APPLY@6666..6733 - ARGS_DESC@6666..6733 - L_PAREN@6666..6667 "(" - ARG@6667..6670 - EXPR@6667..6670 - EXPR_STRING@6667..6670 - STRING_SINGLE@6667..6670 "'/'" - COMMA@6670..6671 "," - WHITESPACE@6671..6672 " " - ARG@6672..6732 - EXPR@6672..6732 - EXPR_BINARY@6672..6732 - EXPR@6672..6675 - EXPR_VAR@6672..6675 - NAME@6672..6675 - IDENT@6672..6675 "std" - SUFFIX_INDEX@6675..6685 - DOT@6675..6676 "." - NAME@6676..6685 - IDENT@6676..6685 "makeArray" - SUFFIX_APPLY@6685..6726 - ARGS_DESC@6685..6726 - L_PAREN@6685..6686 "(" - ARG@6686..6705 - EXPR@6686..6705 - EXPR_BINARY@6686..6705 - EXPR@6686..6689 - EXPR_VAR@6686..6689 - NAME@6686..6689 - IDENT@6686..6689 "std" - SUFFIX_INDEX@6689..6696 - DOT@6689..6690 "." - NAME@6690..6696 - IDENT@6690..6696 "length" - SUFFIX_APPLY@6696..6701 - ARGS_DESC@6696..6701 - L_PAREN@6696..6697 "(" - ARG@6697..6700 - EXPR@6697..6700 - EXPR_VAR@6697..6700 - NAME@6697..6700 - IDENT@6697..6700 "arr" - R_PAREN@6700..6701 ")" - WHITESPACE@6701..6702 " " - MINUS@6702..6703 "-" - WHITESPACE@6703..6704 " " - EXPR@6704..6705 - EXPR_NUMBER@6704..6705 - FLOAT@6704..6705 "1" - COMMA@6705..6706 "," - WHITESPACE@6706..6707 " " - ARG@6707..6725 - EXPR@6707..6725 - EXPR_FUNCTION@6707..6725 - FUNCTION_KW@6707..6715 "function" - PARAMS_DESC@6715..6718 - L_PAREN@6715..6716 "(" - PARAM@6716..6717 - DESTRUCT_FULL@6716..6717 - NAME@6716..6717 - IDENT@6716..6717 "i" - R_PAREN@6717..6718 ")" - WHITESPACE@6718..6719 " " - EXPR@6719..6725 - EXPR_VAR@6719..6722 - NAME@6719..6722 - IDENT@6719..6722 "arr" - SUFFIX_INDEX_EXPR@6722..6725 - L_BRACK@6722..6723 "[" - EXPR@6723..6724 - EXPR_VAR@6723..6724 - NAME@6723..6724 - IDENT@6723..6724 "i" - R_BRACK@6724..6725 "]" - R_PAREN@6725..6726 ")" - WHITESPACE@6726..6727 " " - PLUS@6727..6728 "+" - WHITESPACE@6728..6729 " " - EXPR@6729..6732 - EXPR_ARRAY@6729..6732 - L_BRACK@6729..6730 "[" - EXPR@6730..6731 - EXPR_VAR@6730..6731 - NAME@6730..6731 - IDENT@6730..6731 "r" - R_BRACK@6731..6732 "]" - R_PAREN@6732..6733 ")" - COMMA@6733..6734 "," - WHITESPACE@6734..6738 "\n\n " - MEMBER_FIELD_METHOD@6738..7191 - FIELD_NAME_FIXED@6738..6743 - NAME@6738..6743 - IDENT@6738..6743 "prune" - PARAMS_DESC@6743..6746 - L_PAREN@6743..6744 "(" - PARAM@6744..6745 - DESTRUCT_FULL@6744..6745 - NAME@6744..6745 - IDENT@6744..6745 "a" - R_PAREN@6745..6746 ")" - COLONCOLON@6746..6748 "::" - WHITESPACE@6748..6753 "\n " - EXPR@6753..7191 - STMT_LOCAL@6753..6957 - LOCAL_KW@6753..6758 "local" - WHITESPACE@6758..6759 " " - BIND_FUNCTION@6759..6956 - NAME@6759..6768 - IDENT@6759..6768 "isContent" - PARAMS_DESC@6768..6771 - L_PAREN@6768..6769 "(" - PARAM@6769..6770 - DESTRUCT_FULL@6769..6770 - NAME@6769..6770 - IDENT@6769..6770 "b" - R_PAREN@6770..6771 ")" - WHITESPACE@6771..6772 " " - ASSIGN@6772..6773 "=" - WHITESPACE@6773..6780 "\n " - EXPR@6780..6956 - EXPR_IF_THEN_ELSE@6780..6956 - IF_KW@6780..6782 "if" - WHITESPACE@6782..6783 " " - EXPR@6783..6792 - EXPR_BINARY@6783..6792 - EXPR@6783..6784 - EXPR_VAR@6783..6784 - NAME@6783..6784 - IDENT@6783..6784 "b" - WHITESPACE@6784..6785 " " - EQ@6785..6787 "==" - WHITESPACE@6787..6788 " " - EXPR@6788..6792 - EXPR_LITERAL@6788..6792 - NULL_KW@6788..6792 "null" - WHITESPACE@6792..6793 " " - THEN_KW@6793..6797 "then" - WHITESPACE@6797..6806 "\n " - TRUE_EXPR@6806..6811 - EXPR@6806..6811 - EXPR_LITERAL@6806..6811 - FALSE_KW@6806..6811 "false" - WHITESPACE@6811..6818 "\n " - ELSE_KW@6818..6822 "else" - WHITESPACE@6822..6823 " " - FALSE_EXPR@6823..6956 - EXPR@6823..6956 - EXPR_IF_THEN_ELSE@6823..6956 - IF_KW@6823..6825 "if" - WHITESPACE@6825..6826 " " - EXPR@6826..6840 - EXPR_VAR@6826..6829 - NAME@6826..6829 - IDENT@6826..6829 "std" - SUFFIX_INDEX@6829..6837 - DOT@6829..6830 "." - NAME@6830..6837 - IDENT@6830..6837 "isArray" - SUFFIX_APPLY@6837..6840 - ARGS_DESC@6837..6840 - L_PAREN@6837..6838 "(" - ARG@6838..6839 - EXPR@6838..6839 - EXPR_VAR@6838..6839 - NAME@6838..6839 - IDENT@6838..6839 "b" - R_PAREN@6839..6840 ")" - WHITESPACE@6840..6841 " " - THEN_KW@6841..6845 "then" - WHITESPACE@6845..6854 "\n " - TRUE_EXPR@6854..6871 - EXPR@6854..6871 - EXPR_BINARY@6854..6871 - EXPR@6854..6857 - EXPR_VAR@6854..6857 - NAME@6854..6857 - IDENT@6854..6857 "std" - SUFFIX_INDEX@6857..6864 - DOT@6857..6858 "." - NAME@6858..6864 - IDENT@6858..6864 "length" - SUFFIX_APPLY@6864..6867 - ARGS_DESC@6864..6867 - L_PAREN@6864..6865 "(" - ARG@6865..6866 - EXPR@6865..6866 - EXPR_VAR@6865..6866 - NAME@6865..6866 - IDENT@6865..6866 "b" - R_PAREN@6866..6867 ")" - WHITESPACE@6867..6868 " " - GT@6868..6869 ">" - WHITESPACE@6869..6870 " " - EXPR@6870..6871 - EXPR_NUMBER@6870..6871 - FLOAT@6870..6871 "0" - WHITESPACE@6871..6878 "\n " - ELSE_KW@6878..6882 "else" - WHITESPACE@6882..6883 " " - FALSE_EXPR@6883..6956 - EXPR@6883..6956 - EXPR_IF_THEN_ELSE@6883..6956 - IF_KW@6883..6885 "if" - WHITESPACE@6885..6886 " " - EXPR@6886..6901 - EXPR_VAR@6886..6889 - NAME@6886..6889 - IDENT@6886..6889 "std" - SUFFIX_INDEX@6889..6898 - DOT@6889..6890 "." - NAME@6890..6898 - IDENT@6890..6898 "isObject" - SUFFIX_APPLY@6898..6901 - ARGS_DESC@6898..6901 - L_PAREN@6898..6899 "(" - ARG@6899..6900 - EXPR@6899..6900 - EXPR_VAR@6899..6900 - NAME@6899..6900 - IDENT@6899..6900 "b" - R_PAREN@6900..6901 ")" - WHITESPACE@6901..6902 " " - THEN_KW@6902..6906 "then" - WHITESPACE@6906..6915 "\n " - TRUE_EXPR@6915..6932 - EXPR@6915..6932 - EXPR_BINARY@6915..6932 - EXPR@6915..6918 - EXPR_VAR@6915..6918 - NAME@6915..6918 - IDENT@6915..6918 "std" - SUFFIX_INDEX@6918..6925 - DOT@6918..6919 "." - NAME@6919..6925 - IDENT@6919..6925 "length" - SUFFIX_APPLY@6925..6928 - ARGS_DESC@6925..6928 - L_PAREN@6925..6926 "(" - ARG@6926..6927 - EXPR@6926..6927 - EXPR_VAR@6926..6927 - NAME@6926..6927 - IDENT@6926..6927 "b" - R_PAREN@6927..6928 ")" - WHITESPACE@6928..6929 " " - GT@6929..6930 ">" - WHITESPACE@6930..6931 " " - EXPR@6931..6932 - EXPR_NUMBER@6931..6932 - FLOAT@6931..6932 "0" - WHITESPACE@6932..6939 "\n " - ELSE_KW@6939..6943 "else" - WHITESPACE@6943..6952 "\n " - FALSE_EXPR@6952..6956 - EXPR@6952..6956 - EXPR_LITERAL@6952..6956 - TRUE_KW@6952..6956 "true" - SEMI@6956..6957 ";" - WHITESPACE@6957..6962 "\n " - EXPR_IF_THEN_ELSE@6962..7191 - IF_KW@6962..6964 "if" - WHITESPACE@6964..6965 " " - EXPR@6965..6979 - EXPR_VAR@6965..6968 - NAME@6965..6968 - IDENT@6965..6968 "std" - SUFFIX_INDEX@6968..6976 - DOT@6968..6969 "." - NAME@6969..6976 - IDENT@6969..6976 "isArray" - SUFFIX_APPLY@6976..6979 - ARGS_DESC@6976..6979 - L_PAREN@6976..6977 "(" - ARG@6977..6978 - EXPR@6977..6978 - EXPR_VAR@6977..6978 - NAME@6977..6978 - IDENT@6977..6978 "a" - R_PAREN@6978..6979 ")" - WHITESPACE@6979..6980 " " - THEN_KW@6980..6984 "then" - WHITESPACE@6984..6991 "\n " - TRUE_EXPR@6991..7041 - EXPR@6991..7041 - EXPR_ARRAY_COMP@6991..7041 - L_BRACK@6991..6992 "[" - EXPR@6992..7004 - EXPR_VAR@6992..6995 - NAME@6992..6995 - IDENT@6992..6995 "std" - SUFFIX_INDEX@6995..7001 - DOT@6995..6996 "." - NAME@6996..7001 - IDENT@6996..7001 "prune" - SUFFIX_APPLY@7001..7004 - ARGS_DESC@7001..7004 - L_PAREN@7001..7002 "(" - ARG@7002..7003 - EXPR@7002..7003 - EXPR_VAR@7002..7003 - NAME@7002..7003 - IDENT@7002..7003 "x" - R_PAREN@7003..7004 ")" - WHITESPACE@7004..7005 " " - FOR_SPEC@7005..7015 - FOR_KW@7005..7008 "for" - WHITESPACE@7008..7009 " " - DESTRUCT_FULL@7009..7010 - NAME@7009..7010 - IDENT@7009..7010 "x" - WHITESPACE@7010..7011 " " - IN_KW@7011..7013 "in" - WHITESPACE@7013..7014 " " - EXPR@7014..7015 - EXPR_VAR@7014..7015 - NAME@7014..7015 - IDENT@7014..7015 "a" - WHITESPACE@7015..7016 " " - IF_SPEC@7016..7040 - IF_KW@7016..7018 "if" - WHITESPACE@7018..7019 " " - EXPR@7019..7040 - EXPR_VAR@7019..7028 - NAME@7019..7028 - IDENT@7019..7028 "isContent" - SUFFIX_APPLY@7028..7040 - ARGS_DESC@7028..7040 - L_PAREN@7028..7029 "(" - ARG@7029..7039 - EXPR@7029..7039 - EXPR_LITERAL@7029..7030 - DOLLAR@7029..7030 "$" - SUFFIX_INDEX@7030..7036 - DOT@7030..7031 "." - NAME@7031..7036 - IDENT@7031..7036 "prune" - SUFFIX_APPLY@7036..7039 - ARGS_DESC@7036..7039 - L_PAREN@7036..7037 "(" - ARG@7037..7038 - EXPR@7037..7038 - EXPR_VAR@7037..7038 - NAME@7037..7038 - IDENT@7037..7038 "x" - R_PAREN@7038..7039 ")" - R_PAREN@7039..7040 ")" - R_BRACK@7040..7041 "]" - WHITESPACE@7041..7046 "\n " - ELSE_KW@7046..7050 "else" - WHITESPACE@7050..7051 " " - FALSE_EXPR@7051..7191 - EXPR@7051..7191 - EXPR_IF_THEN_ELSE@7051..7191 - IF_KW@7051..7053 "if" - WHITESPACE@7053..7054 " " - EXPR@7054..7069 - EXPR_VAR@7054..7057 - NAME@7054..7057 - IDENT@7054..7057 "std" - SUFFIX_INDEX@7057..7066 - DOT@7057..7058 "." - NAME@7058..7066 - IDENT@7058..7066 "isObject" - SUFFIX_APPLY@7066..7069 - ARGS_DESC@7066..7069 - L_PAREN@7066..7067 "(" - ARG@7067..7068 - EXPR@7067..7068 - EXPR_VAR@7067..7068 - NAME@7067..7068 - IDENT@7067..7068 "a" - R_PAREN@7068..7069 ")" - WHITESPACE@7069..7070 " " - THEN_KW@7070..7074 "then" - WHITESPACE@7074..7075 " " - TRUE_EXPR@7075..7178 - EXPR@7075..7178 - EXPR_OBJECT@7075..7178 - OBJ_BODY_COMP@7075..7178 - L_BRACE@7075..7076 "{" - WHITESPACE@7076..7083 "\n " - MEMBER_FIELD_NORMAL@7083..7101 - FIELD_NAME_DYNAMIC@7083..7086 - L_BRACK@7083..7084 "[" - EXPR@7084..7085 - EXPR_VAR@7084..7085 - NAME@7084..7085 - IDENT@7084..7085 "x" - R_BRACK@7085..7086 "]" - COLON@7086..7087 ":" - WHITESPACE@7087..7088 " " - EXPR@7088..7101 - EXPR_LITERAL@7088..7089 - DOLLAR@7088..7089 "$" - SUFFIX_INDEX@7089..7095 - DOT@7089..7090 "." - NAME@7090..7095 - IDENT@7090..7095 "prune" - SUFFIX_APPLY@7095..7101 - ARGS_DESC@7095..7101 - L_PAREN@7095..7096 "(" - ARG@7096..7100 - EXPR@7096..7100 - EXPR_VAR@7096..7097 - NAME@7096..7097 - IDENT@7096..7097 "a" - SUFFIX_INDEX_EXPR@7097..7100 - L_BRACK@7097..7098 "[" - EXPR@7098..7099 - EXPR_VAR@7098..7099 - NAME@7098..7099 - IDENT@7098..7099 "x" - R_BRACK@7099..7100 "]" - R_PAREN@7100..7101 ")" - WHITESPACE@7101..7108 "\n " - FOR_SPEC@7108..7136 - FOR_KW@7108..7111 "for" - WHITESPACE@7111..7112 " " - DESTRUCT_FULL@7112..7113 - NAME@7112..7113 - IDENT@7112..7113 "x" - WHITESPACE@7113..7114 " " - IN_KW@7114..7116 "in" - WHITESPACE@7116..7117 " " - EXPR@7117..7136 - EXPR_VAR@7117..7120 - NAME@7117..7120 - IDENT@7117..7120 "std" - SUFFIX_INDEX@7120..7133 - DOT@7120..7121 "." - NAME@7121..7133 - IDENT@7121..7133 "objectFields" - SUFFIX_APPLY@7133..7136 - ARGS_DESC@7133..7136 - L_PAREN@7133..7134 "(" - ARG@7134..7135 - EXPR@7134..7135 - EXPR_VAR@7134..7135 - NAME@7134..7135 - IDENT@7134..7135 "a" - R_PAREN@7135..7136 ")" - WHITESPACE@7136..7143 "\n " - IF_SPEC@7143..7172 - IF_KW@7143..7145 "if" - WHITESPACE@7145..7146 " " - EXPR@7146..7172 - EXPR_VAR@7146..7155 - NAME@7146..7155 - IDENT@7146..7155 "isContent" - SUFFIX_APPLY@7155..7172 - ARGS_DESC@7155..7172 - L_PAREN@7155..7156 "(" - ARG@7156..7171 - EXPR@7156..7171 - EXPR_VAR@7156..7159 - NAME@7156..7159 - IDENT@7156..7159 "std" - SUFFIX_INDEX@7159..7165 - DOT@7159..7160 "." - NAME@7160..7165 - IDENT@7160..7165 "prune" - SUFFIX_APPLY@7165..7171 - ARGS_DESC@7165..7171 - L_PAREN@7165..7166 "(" - ARG@7166..7170 - EXPR@7166..7170 - EXPR_VAR@7166..7167 - NAME@7166..7167 - IDENT@7166..7167 "a" - SUFFIX_INDEX_EXPR@7167..7170 - L_BRACK@7167..7168 "[" - EXPR@7168..7169 - EXPR_VAR@7168..7169 - NAME@7168..7169 - IDENT@7168..7169 "x" - R_BRACK@7169..7170 "]" - R_PAREN@7170..7171 ")" - R_PAREN@7171..7172 ")" - WHITESPACE@7172..7177 "\n " - R_BRACE@7177..7178 "}" - WHITESPACE@7178..7179 " " - ELSE_KW@7179..7183 "else" - WHITESPACE@7183..7190 "\n " - FALSE_EXPR@7190..7191 - EXPR@7190..7191 - EXPR_VAR@7190..7191 - NAME@7190..7191 - IDENT@7190..7191 "a" - COMMA@7191..7192 "," - WHITESPACE@7192..7196 "\n\n " - MEMBER_FIELD_METHOD@7196..7411 - FIELD_NAME_FIXED@7196..7200 - NAME@7196..7200 - IDENT@7196..7200 "find" - PARAMS_DESC@7200..7212 - L_PAREN@7200..7201 "(" - PARAM@7201..7206 - DESTRUCT_FULL@7201..7206 - NAME@7201..7206 - IDENT@7201..7206 "value" - COMMA@7206..7207 "," - WHITESPACE@7207..7208 " " - PARAM@7208..7211 - DESTRUCT_FULL@7208..7211 - NAME@7208..7211 - IDENT@7208..7211 "arr" - R_PAREN@7211..7212 ")" - COLONCOLON@7212..7214 "::" - WHITESPACE@7214..7219 "\n " - EXPR@7219..7411 - EXPR_IF_THEN_ELSE@7219..7411 - IF_KW@7219..7221 "if" - WHITESPACE@7221..7222 " " - EXPR@7222..7239 - EXPR_UNARY@7222..7239 - NOT@7222..7223 "!" - EXPR_VAR@7223..7226 - NAME@7223..7226 - IDENT@7223..7226 "std" - SUFFIX_INDEX@7226..7234 - DOT@7226..7227 "." - NAME@7227..7234 - IDENT@7227..7234 "isArray" - SUFFIX_APPLY@7234..7239 - ARGS_DESC@7234..7239 - L_PAREN@7234..7235 "(" - ARG@7235..7238 - EXPR@7235..7238 - EXPR_VAR@7235..7238 - NAME@7235..7238 - IDENT@7235..7238 "arr" - R_PAREN@7238..7239 ")" - WHITESPACE@7239..7240 " " - THEN_KW@7240..7244 "then" - WHITESPACE@7244..7251 "\n " - TRUE_EXPR@7251..7321 - EXPR@7251..7321 - EXPR_ERROR@7251..7321 - ERROR_KW@7251..7256 "error" - WHITESPACE@7256..7257 " " - EXPR@7257..7321 - EXPR_BINARY@7257..7321 - EXPR@7257..7305 - EXPR_STRING@7257..7305 - STRING_SINGLE@7257..7305 "'find second paramete ..." - WHITESPACE@7305..7306 " " - PLUS@7306..7307 "+" - WHITESPACE@7307..7308 " " - EXPR@7308..7321 - EXPR_VAR@7308..7311 - NAME@7308..7311 - IDENT@7308..7311 "std" - SUFFIX_INDEX@7311..7316 - DOT@7311..7312 "." - NAME@7312..7316 - IDENT@7312..7316 "type" - SUFFIX_APPLY@7316..7321 - ARGS_DESC@7316..7321 - L_PAREN@7316..7317 "(" - ARG@7317..7320 - EXPR@7317..7320 - EXPR_VAR@7317..7320 - NAME@7317..7320 - IDENT@7317..7320 "arr" - R_PAREN@7320..7321 ")" - WHITESPACE@7321..7326 "\n " - ELSE_KW@7326..7330 "else" - WHITESPACE@7330..7337 "\n " - FALSE_EXPR@7337..7411 - EXPR@7337..7411 - EXPR_VAR@7337..7340 - NAME@7337..7340 - IDENT@7337..7340 "std" - SUFFIX_INDEX@7340..7347 - DOT@7340..7341 "." - NAME@7341..7347 - IDENT@7341..7347 "filter" - SUFFIX_APPLY@7347..7411 - ARGS_DESC@7347..7411 - L_PAREN@7347..7348 "(" - ARG@7348..7375 - EXPR@7348..7375 - EXPR_FUNCTION@7348..7375 - FUNCTION_KW@7348..7356 "function" - PARAMS_DESC@7356..7359 - L_PAREN@7356..7357 "(" - PARAM@7357..7358 - DESTRUCT_FULL@7357..7358 - NAME@7357..7358 - IDENT@7357..7358 "i" - R_PAREN@7358..7359 ")" - WHITESPACE@7359..7360 " " - EXPR@7360..7375 - EXPR_BINARY@7360..7375 - EXPR@7360..7363 - EXPR_VAR@7360..7363 - NAME@7360..7363 - IDENT@7360..7363 "arr" - SUFFIX_INDEX_EXPR@7363..7366 - L_BRACK@7363..7364 "[" - EXPR@7364..7365 - EXPR_VAR@7364..7365 - NAME@7364..7365 - IDENT@7364..7365 "i" - R_BRACK@7365..7366 "]" - WHITESPACE@7366..7367 " " - EQ@7367..7369 "==" - WHITESPACE@7369..7370 " " - EXPR@7370..7375 - EXPR_VAR@7370..7375 - NAME@7370..7375 - IDENT@7370..7375 "value" - COMMA@7375..7376 "," - WHITESPACE@7376..7377 " " - ARG@7377..7410 - EXPR@7377..7410 - EXPR_VAR@7377..7380 - NAME@7377..7380 - IDENT@7377..7380 "std" - SUFFIX_INDEX@7380..7386 - DOT@7380..7381 "." - NAME@7381..7386 - IDENT@7381..7386 "range" - SUFFIX_APPLY@7386..7410 - ARGS_DESC@7386..7410 - L_PAREN@7386..7387 "(" - ARG@7387..7388 - EXPR@7387..7388 - EXPR_NUMBER@7387..7388 - FLOAT@7387..7388 "0" - COMMA@7388..7389 "," - WHITESPACE@7389..7390 " " - ARG@7390..7409 - EXPR@7390..7409 - EXPR_BINARY@7390..7409 - EXPR@7390..7393 - EXPR_VAR@7390..7393 - NAME@7390..7393 - IDENT@7390..7393 "std" - SUFFIX_INDEX@7393..7400 - DOT@7393..7394 "." - NAME@7394..7400 - IDENT@7394..7400 "length" - SUFFIX_APPLY@7400..7405 - ARGS_DESC@7400..7405 - L_PAREN@7400..7401 "(" - ARG@7401..7404 - EXPR@7401..7404 - EXPR_VAR@7401..7404 - NAME@7401..7404 - IDENT@7401..7404 "arr" - R_PAREN@7404..7405 ")" - WHITESPACE@7405..7406 " " - MINUS@7406..7407 "-" - WHITESPACE@7407..7408 " " - EXPR@7408..7409 - EXPR_NUMBER@7408..7409 - FLOAT@7408..7409 "1" - R_PAREN@7409..7410 ")" - R_PAREN@7410..7411 ")" - COMMA@7411..7412 "," - WHITESPACE@7412..7416 "\n\n " - SINGLE_LINE_SLASH_COMMENT@7416..7426 "// Compat\n" - WHITESPACE@7426..7428 " " - MEMBER_FIELD_METHOD@7428..7538 - FIELD_NAME_FIXED@7428..7443 - NAME@7428..7443 - IDENT@7428..7443 "__compare_array" - PARAMS_DESC@7443..7455 - L_PAREN@7443..7444 "(" - PARAM@7444..7448 - DESTRUCT_FULL@7444..7448 - NAME@7444..7448 - IDENT@7444..7448 "arr1" - COMMA@7448..7449 "," - WHITESPACE@7449..7450 " " - PARAM@7450..7454 - DESTRUCT_FULL@7450..7454 - NAME@7450..7454 - IDENT@7450..7454 "arr2" - R_PAREN@7454..7455 ")" - COLONCOLON@7455..7457 "::" - WHITESPACE@7457..7462 "\n " - EXPR@7462..7538 - STMT_ASSERT@7462..7508 - ASSERTION@7462..7507 - ASSERT_KW@7462..7468 "assert" - WHITESPACE@7468..7469 " " - EXPR@7469..7507 - EXPR_BINARY@7469..7507 - EXPR@7469..7472 - EXPR_VAR@7469..7472 - NAME@7469..7472 - IDENT@7469..7472 "std" - SUFFIX_INDEX@7472..7480 - DOT@7472..7473 "." - NAME@7473..7480 - IDENT@7473..7480 "isArray" - SUFFIX_APPLY@7480..7486 - ARGS_DESC@7480..7486 - L_PAREN@7480..7481 "(" - ARG@7481..7485 - EXPR@7481..7485 - EXPR_VAR@7481..7485 - NAME@7481..7485 - IDENT@7481..7485 "arr1" - R_PAREN@7485..7486 ")" - WHITESPACE@7486..7487 " " - AND@7487..7489 "&&" - WHITESPACE@7489..7490 " " - EXPR@7490..7507 - EXPR_VAR@7490..7493 - NAME@7490..7493 - IDENT@7490..7493 "std" - SUFFIX_INDEX@7493..7501 - DOT@7493..7494 "." - NAME@7494..7501 - IDENT@7494..7501 "isArray" - SUFFIX_APPLY@7501..7507 - ARGS_DESC@7501..7507 - L_PAREN@7501..7502 "(" - ARG@7502..7506 - EXPR@7502..7506 - EXPR_VAR@7502..7506 - NAME@7502..7506 - IDENT@7502..7506 "arr2" - R_PAREN@7506..7507 ")" - SEMI@7507..7508 ";" - WHITESPACE@7508..7513 "\n " - EXPR_VAR@7513..7516 - NAME@7513..7516 - IDENT@7513..7516 "std" - SUFFIX_INDEX@7516..7526 - DOT@7516..7517 "." - NAME@7517..7526 - IDENT@7517..7526 "__compare" - SUFFIX_APPLY@7526..7538 - ARGS_DESC@7526..7538 - L_PAREN@7526..7527 "(" - ARG@7527..7531 - EXPR@7527..7531 - EXPR_VAR@7527..7531 - NAME@7527..7531 - IDENT@7527..7531 "arr1" - COMMA@7531..7532 "," - WHITESPACE@7532..7533 " " - ARG@7533..7537 - EXPR@7533..7537 - EXPR_VAR@7533..7537 - NAME@7533..7537 - IDENT@7533..7537 "arr2" - R_PAREN@7537..7538 ")" - COMMA@7538..7539 "," - WHITESPACE@7539..7542 "\n " - MEMBER_FIELD_METHOD@7542..7606 - FIELD_NAME_FIXED@7542..7554 - NAME@7542..7554 - IDENT@7542..7554 "__array_less" - PARAMS_DESC@7554..7566 - L_PAREN@7554..7555 "(" - PARAM@7555..7559 - DESTRUCT_FULL@7555..7559 - NAME@7555..7559 - IDENT@7555..7559 "arr1" - COMMA@7559..7560 "," - WHITESPACE@7560..7561 " " - PARAM@7561..7565 - DESTRUCT_FULL@7561..7565 - NAME@7561..7565 - IDENT@7561..7565 "arr2" - R_PAREN@7565..7566 ")" - COLONCOLON@7566..7568 "::" - WHITESPACE@7568..7569 " " - EXPR@7569..7606 - EXPR_BINARY@7569..7606 - EXPR@7569..7572 - EXPR_VAR@7569..7572 - NAME@7569..7572 - IDENT@7569..7572 "std" - SUFFIX_INDEX@7572..7588 - DOT@7572..7573 "." - NAME@7573..7588 - IDENT@7573..7588 "__compare_array" - SUFFIX_APPLY@7588..7600 - ARGS_DESC@7588..7600 - L_PAREN@7588..7589 "(" - ARG@7589..7593 - EXPR@7589..7593 - EXPR_VAR@7589..7593 - NAME@7589..7593 - IDENT@7589..7593 "arr1" - COMMA@7593..7594 "," - WHITESPACE@7594..7595 " " - ARG@7595..7599 - EXPR@7595..7599 - EXPR_VAR@7595..7599 - NAME@7595..7599 - IDENT@7595..7599 "arr2" - R_PAREN@7599..7600 ")" - WHITESPACE@7600..7601 " " - EQ@7601..7603 "==" - WHITESPACE@7603..7604 " " - EXPR@7604..7606 - EXPR_UNARY@7604..7606 - MINUS@7604..7605 "-" - EXPR_NUMBER@7605..7606 - FLOAT@7605..7606 "1" - COMMA@7606..7607 "," - WHITESPACE@7607..7610 "\n " - MEMBER_FIELD_METHOD@7610..7676 - FIELD_NAME_FIXED@7610..7625 - NAME@7610..7625 - IDENT@7610..7625 "__array_greater" - PARAMS_DESC@7625..7637 - L_PAREN@7625..7626 "(" - PARAM@7626..7630 - DESTRUCT_FULL@7626..7630 - NAME@7626..7630 - IDENT@7626..7630 "arr1" - COMMA@7630..7631 "," - WHITESPACE@7631..7632 " " - PARAM@7632..7636 - DESTRUCT_FULL@7632..7636 - NAME@7632..7636 - IDENT@7632..7636 "arr2" - R_PAREN@7636..7637 ")" - COLONCOLON@7637..7639 "::" - WHITESPACE@7639..7640 " " - EXPR@7640..7676 - EXPR_BINARY@7640..7676 - EXPR@7640..7643 - EXPR_VAR@7640..7643 - NAME@7640..7643 - IDENT@7640..7643 "std" - SUFFIX_INDEX@7643..7659 - DOT@7643..7644 "." - NAME@7644..7659 - IDENT@7644..7659 "__compare_array" - SUFFIX_APPLY@7659..7671 - ARGS_DESC@7659..7671 - L_PAREN@7659..7660 "(" - ARG@7660..7664 - EXPR@7660..7664 - EXPR_VAR@7660..7664 - NAME@7660..7664 - IDENT@7660..7664 "arr1" - COMMA@7664..7665 "," - WHITESPACE@7665..7666 " " - ARG@7666..7670 - EXPR@7666..7670 - EXPR_VAR@7666..7670 - NAME@7666..7670 - IDENT@7666..7670 "arr2" - R_PAREN@7670..7671 ")" - WHITESPACE@7671..7672 " " - EQ@7672..7674 "==" - WHITESPACE@7674..7675 " " - EXPR@7675..7676 - EXPR_NUMBER@7675..7676 - FLOAT@7675..7676 "1" - COMMA@7676..7677 "," - WHITESPACE@7677..7680 "\n " - MEMBER_FIELD_METHOD@7680..7752 - FIELD_NAME_FIXED@7680..7701 - NAME@7680..7701 - IDENT@7680..7701 "__array_less_or_equal" - PARAMS_DESC@7701..7713 - L_PAREN@7701..7702 "(" - PARAM@7702..7706 - DESTRUCT_FULL@7702..7706 - NAME@7702..7706 - IDENT@7702..7706 "arr1" - COMMA@7706..7707 "," - WHITESPACE@7707..7708 " " - PARAM@7708..7712 - DESTRUCT_FULL@7708..7712 - NAME@7708..7712 - IDENT@7708..7712 "arr2" - R_PAREN@7712..7713 ")" - COLONCOLON@7713..7715 "::" - WHITESPACE@7715..7716 " " - EXPR@7716..7752 - EXPR_BINARY@7716..7752 - EXPR@7716..7719 - EXPR_VAR@7716..7719 - NAME@7716..7719 - IDENT@7716..7719 "std" - SUFFIX_INDEX@7719..7735 - DOT@7719..7720 "." - NAME@7720..7735 - IDENT@7720..7735 "__compare_array" - SUFFIX_APPLY@7735..7747 - ARGS_DESC@7735..7747 - L_PAREN@7735..7736 "(" - ARG@7736..7740 - EXPR@7736..7740 - EXPR_VAR@7736..7740 - NAME@7736..7740 - IDENT@7736..7740 "arr1" - COMMA@7740..7741 "," - WHITESPACE@7741..7742 " " - ARG@7742..7746 - EXPR@7742..7746 - EXPR_VAR@7742..7746 - NAME@7742..7746 - IDENT@7742..7746 "arr2" - R_PAREN@7746..7747 ")" - WHITESPACE@7747..7748 " " - LE@7748..7750 "<=" - WHITESPACE@7750..7751 " " - EXPR@7751..7752 - EXPR_NUMBER@7751..7752 - FLOAT@7751..7752 "0" - COMMA@7752..7753 "," - WHITESPACE@7753..7756 "\n " - MEMBER_FIELD_METHOD@7756..7831 - FIELD_NAME_FIXED@7756..7780 - NAME@7756..7780 - IDENT@7756..7780 "__array_greater_or_equal" - PARAMS_DESC@7780..7792 - L_PAREN@7780..7781 "(" - PARAM@7781..7785 - DESTRUCT_FULL@7781..7785 - NAME@7781..7785 - IDENT@7781..7785 "arr1" - COMMA@7785..7786 "," - WHITESPACE@7786..7787 " " - PARAM@7787..7791 - DESTRUCT_FULL@7787..7791 - NAME@7787..7791 - IDENT@7787..7791 "arr2" - R_PAREN@7791..7792 ")" - COLONCOLON@7792..7794 "::" - WHITESPACE@7794..7795 " " - EXPR@7795..7831 - EXPR_BINARY@7795..7831 - EXPR@7795..7798 - EXPR_VAR@7795..7798 - NAME@7795..7798 - IDENT@7795..7798 "std" - SUFFIX_INDEX@7798..7814 - DOT@7798..7799 "." - NAME@7799..7814 - IDENT@7799..7814 "__compare_array" - SUFFIX_APPLY@7814..7826 - ARGS_DESC@7814..7826 - L_PAREN@7814..7815 "(" - ARG@7815..7819 - EXPR@7815..7819 - EXPR_VAR@7815..7819 - NAME@7815..7819 - IDENT@7815..7819 "arr1" - COMMA@7819..7820 "," - WHITESPACE@7820..7821 " " - ARG@7821..7825 - EXPR@7821..7825 - EXPR_VAR@7821..7825 - NAME@7821..7825 - IDENT@7821..7825 "arr2" - R_PAREN@7825..7826 ")" - WHITESPACE@7826..7827 " " - GE@7827..7829 ">=" - WHITESPACE@7829..7830 " " - EXPR@7830..7831 - EXPR_NUMBER@7830..7831 - FLOAT@7830..7831 "0" - COMMA@7831..7832 "," - WHITESPACE@7832..7833 "\n" - R_BRACE@7833..7834 "}" - WHITESPACE@7834..7835 "\n" --- /dev/null +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__super_nesting.snap @@ -0,0 +1,25 @@ +--- +source: crates/jrsonnet-rowan-parser/src/tests.rs +expression: "super.a + super.b\n" +--- +SOURCE_FILE@0..18 + EXPR@0..17 + EXPR_BINARY@0..17 + EXPR@0..7 + EXPR_LITERAL@0..5 + SUPER_KW@0..5 "super" + SUFFIX_INDEX@5..7 + DOT@5..6 "." + NAME@6..7 + IDENT@6..7 "a" + WHITESPACE@7..8 " " + PLUS@8..9 "+" + WHITESPACE@9..10 " " + EXPR@10..17 + EXPR_LITERAL@10..15 + SUPER_KW@10..15 "super" + SUFFIX_INDEX@15..17 + DOT@15..16 "." + NAME@16..17 + IDENT@16..17 "b" + WHITESPACE@17..18 "\n" --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__unexpected_destruct.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__unexpected_destruct.snap @@ -25,10 +25,6 @@ === LocatedSyntaxError { error: Unexpected { expected: Named("destruction specifier"), found: MUL }, range: 6..7 } === - x syntax error - ,-[1:7] - 1 | local * = 1; - : | - : `-- expected destruction specifier, found MUL - 2 | a - `---- + · ╭─── unexpected MUL, expecting destruction specifier +1 │ local * = 1; +2 │ a --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__wrong_field_end.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__wrong_field_end.snap @@ -38,14 +38,9 @@ LocatedSyntaxError { error: Unexpected { expected: Named("comma"), found: SEMI }, range: 7..8 } LocatedSyntaxError { error: Unexpected { expected: Named("comma"), found: SEMI }, range: 14..15 } === - x syntax error - ,-[2:6] - 1 | { - 2 | a: 1; - : | - : `-- expected comma, found SEMI - 3 | b: 2; - : | - : `-- expected comma, found SEMI - 4 | } - `---- +1 │ { + · ╭─── unexpected SEMI, expecting comma +2 │ a: 1; + · ╭─── unexpected SEMI, expecting comma +3 │ b: 2; +4 │ } --- a/crates/jrsonnet-rowan-parser/src/tests.rs +++ b/crates/jrsonnet-rowan-parser/src/tests.rs @@ -1,49 +1,11 @@ // `never` -#![cfg(any())] +#![cfg(test)] -use miette::{ - Diagnostic, GraphicalReportHandler, GraphicalTheme, LabeledSpan, ThemeCharacters, ThemeStyles, -}; +use hi_doc::{Formatting, SnippetBuilder, Text}; use thiserror::Error; use crate::{parse, AstNode}; - -#[derive(Debug, Error)] -#[error("syntax error")] -struct MyDiagnostic { - code: String, - spans: Vec, -} -impl Diagnostic for MyDiagnostic { - fn code<'a>(&'a self) -> Option> { - None - } - - fn severity(&self) -> Option { - None - } - - fn help<'a>(&'a self) -> Option> { - None - } - - fn url<'a>(&'a self) -> Option> { - None - } - fn source_code(&self) -> Option<&dyn miette::SourceCode> { - Some(&self.code) - } - - fn labels(&self) -> Option + '_>> { - Some(Box::new(self.spans.clone().into_iter())) - } - - fn related<'a>(&'a self) -> Option + 'a>> { - None - } -} - fn process(text: &str) -> String { use std::fmt::Write; let mut out = String::new(); @@ -63,20 +25,21 @@ } code += " "; - let diag = MyDiagnostic { - code, - spans: errors.into_iter().map(|e| e.into()).collect(), - }; + let mut s = SnippetBuilder::new(code); - let handler = GraphicalReportHandler::new_themed(GraphicalTheme { - characters: ThemeCharacters::ascii(), - styles: ThemeStyles::none(), - }); + for error in errors { + s.error(Text::fragment( + format!("{}", error.error), + Formatting::default(), + )) + .range(error.range.start().into()..=error.range.end().into()) + .build(); + } writeln!(out, "===").unwrap(); - handler - .render_report(&mut out, &diag) - .expect("fmt error?.."); + let ansi = hi_doc::source_to_ansi(&s.build()); + let text = strip_ansi_escapes::strip_str(&ansi); + out.push_str(&text); } out.split('\n') .map(|s| s.trim_end().to_string()) @@ -237,14 +200,12 @@ [c] "# + + super_nesting => r#" + super.a + super.b + "# ); -#[test] -fn stdlib() { - let src = include_str!("../../jrsonnet-stdlib/src/std.jsonnet"); - let result = process(src); - insta::assert_snapshot!("stdlib", result, src); -} #[test] fn eval_simple() { let src = "local a = 1, b = 2; a + local c = 1; c";