cache: cargo
before_cache:
- find ./target/debug -maxdepth 1 -type f -delete
- - rm -fr ./target/debug/{deps,.fingerprint}/{*ra_*,*test*,*gen_lsp*,*thread_worker*}
+ - rm -fr ./target/debug/{deps,.fingerprint}/{*ra_*,*heavy_test*,*gen_lsp*,*thread_worker*}
- rm -f ./target/.rustc_info.json
matrix:
mod parsing;
mod validation;
mod ptr;
+#[cfg(test)]
+mod tests;
pub mod algo;
pub mod ast;
--- /dev/null
+use std::{
+ fmt::Write,
+ path::{Component, PathBuf},
+};
+
+use test_utils::{collect_tests, dir_tests, project_dir, read_text};
+
+use crate::{fuzz, SourceFile};
+
+#[test]
+fn lexer_tests() {
+ dir_tests(&test_data_dir(), &["lexer"], |text, _| {
+ let tokens = crate::tokenize(text);
+ dump_tokens(&tokens, text)
+ })
+}
+
+#[test]
+fn parser_tests() {
+ dir_tests(&test_data_dir(), &["parser/inline/ok", "parser/ok"], |text, path| {
+ let parse = SourceFile::parse(text);
+ let errors = parse.errors();
+ assert_eq!(
+ errors,
+ &[] as &[crate::SyntaxError],
+ "There should be no errors in the file {:?}",
+ path.display(),
+ );
+ parse.debug_dump()
+ });
+ dir_tests(&test_data_dir(), &["parser/err", "parser/inline/err"], |text, path| {
+ let parse = SourceFile::parse(text);
+ let errors = parse.errors();
+ assert!(!errors.is_empty(), "There should be errors in the file {:?}", path.display());
+ parse.debug_dump()
+ });
+}
+
+#[test]
+fn parser_fuzz_tests() {
+ for (_, text) in collect_tests(&test_data_dir(), &["parser/fuzz-failures"]) {
+ fuzz::check_parser(&text)
+ }
+}
+
+#[test]
+fn reparse_fuzz_tests() {
+ for (_, text) in collect_tests(&test_data_dir(), &["reparse/fuzz-failures"]) {
+ let check = fuzz::CheckReparse::from_data(text.as_bytes()).unwrap();
+ println!("{:?}", check);
+ check.run();
+ }
+}
+
+/// Test that Rust-analyzer can parse and validate the rust-analyzer
+/// FIXME: Use this as a benchmark
+#[test]
+fn self_hosting_parsing() {
+ use std::ffi::OsStr;
+ let dir = project_dir().join("crates");
+ let mut count = 0;
+ for entry in walkdir::WalkDir::new(dir)
+ .into_iter()
+ .filter_entry(|entry| {
+ !entry.path().components().any(|component| {
+ // Get all files which are not in the crates/ra_syntax/tests/data folder
+ component == Component::Normal(OsStr::new("test_data"))
+ })
+ })
+ .map(|e| e.unwrap())
+ .filter(|entry| {
+ // Get all `.rs ` files
+ !entry.path().is_dir() && (entry.path().extension() == Some(OsStr::new("rs")))
+ })
+ {
+ count += 1;
+ let text = read_text(entry.path());
+ SourceFile::parse(&text).ok().expect("There should be no errors in the file");
+ }
+ assert!(
+ count > 30,
+ "self_hosting_parsing found too few files - is it running in the right directory?"
+ )
+}
+
+fn test_data_dir() -> PathBuf {
+ project_dir().join("crates/ra_syntax/test_data")
+}
+
+fn dump_tokens(tokens: &[crate::Token], text: &str) -> String {
+ let mut acc = String::new();
+ let mut offset = 0;
+ for token in tokens {
+ let len: u32 = token.len.into();
+ let len = len as usize;
+ let token_text = &text[offset..offset + len];
+ offset += len;
+ write!(acc, "{:?} {} {:?}\n", token.kind, token.len, token_text).unwrap()
+ }
+ acc
+}
--- /dev/null
+/* */
+/**/
+/* /* */ */
+/*
--- /dev/null
+COMMENT 5 "/* */"
+WHITESPACE 1 "\n"
+COMMENT 4 "/**/"
+WHITESPACE 1 "\n"
+COMMENT 11 "/* /* */ */"
+WHITESPACE 1 "\n"
+COMMENT 3 "/*\n"
--- /dev/null
+hello world
\ No newline at end of file
--- /dev/null
+IDENT 5 "hello"
+WHITESPACE 1 " "
+IDENT 5 "world"
--- /dev/null
+a b c
+d
+
+e f
--- /dev/null
+IDENT 1 "a"
+WHITESPACE 1 " "
+IDENT 1 "b"
+WHITESPACE 2 " "
+IDENT 1 "c"
+WHITESPACE 1 "\n"
+IDENT 1 "d"
+WHITESPACE 2 "\n\n"
+IDENT 1 "e"
+WHITESPACE 1 "\t"
+IDENT 1 "f"
+WHITESPACE 1 "\n"
--- /dev/null
+foo foo_ _foo _ __ x привет
--- /dev/null
+IDENT 3 "foo"
+WHITESPACE 1 " "
+IDENT 4 "foo_"
+WHITESPACE 1 " "
+IDENT 4 "_foo"
+WHITESPACE 1 " "
+UNDERSCORE 1 "_"
+WHITESPACE 1 " "
+IDENT 2 "__"
+WHITESPACE 1 " "
+IDENT 1 "x"
+WHITESPACE 1 " "
+IDENT 12 "привет"
+WHITESPACE 1 "\n"
--- /dev/null
+0 0b 0o 0x 00 0_ 0. 0e 0E 0z
+01790 0b1790 0o1790 0x1790aAbBcCdDeEfF 001279 0_1279 0.1279 0e1279 0E1279
+0..2
+0.foo()
+0e+1
+0.e+1
+0.0E-2
+0___0.10000____0000e+111__
+1i64 92.0f32 11__s
\ No newline at end of file
--- /dev/null
+INT_NUMBER 1 "0"
+WHITESPACE 1 " "
+INT_NUMBER 2 "0b"
+WHITESPACE 1 " "
+INT_NUMBER 2 "0o"
+WHITESPACE 1 " "
+INT_NUMBER 2 "0x"
+WHITESPACE 1 " "
+INT_NUMBER 2 "00"
+WHITESPACE 1 " "
+INT_NUMBER 2 "0_"
+WHITESPACE 1 " "
+FLOAT_NUMBER 2 "0."
+WHITESPACE 1 " "
+FLOAT_NUMBER 2 "0e"
+WHITESPACE 1 " "
+FLOAT_NUMBER 2 "0E"
+WHITESPACE 1 " "
+INT_NUMBER 2 "0z"
+WHITESPACE 1 "\n"
+INT_NUMBER 5 "01790"
+WHITESPACE 1 " "
+INT_NUMBER 6 "0b1790"
+WHITESPACE 1 " "
+INT_NUMBER 6 "0o1790"
+WHITESPACE 1 " "
+INT_NUMBER 18 "0x1790aAbBcCdDeEfF"
+WHITESPACE 1 " "
+INT_NUMBER 6 "001279"
+WHITESPACE 1 " "
+INT_NUMBER 6 "0_1279"
+WHITESPACE 1 " "
+FLOAT_NUMBER 6 "0.1279"
+WHITESPACE 1 " "
+FLOAT_NUMBER 6 "0e1279"
+WHITESPACE 1 " "
+FLOAT_NUMBER 6 "0E1279"
+WHITESPACE 1 "\n"
+INT_NUMBER 1 "0"
+DOT 1 "."
+DOT 1 "."
+INT_NUMBER 1 "2"
+WHITESPACE 1 "\n"
+INT_NUMBER 1 "0"
+DOT 1 "."
+IDENT 3 "foo"
+L_PAREN 1 "("
+R_PAREN 1 ")"
+WHITESPACE 1 "\n"
+FLOAT_NUMBER 4 "0e+1"
+WHITESPACE 1 "\n"
+INT_NUMBER 1 "0"
+DOT 1 "."
+IDENT 1 "e"
+PLUS 1 "+"
+INT_NUMBER 1 "1"
+WHITESPACE 1 "\n"
+FLOAT_NUMBER 6 "0.0E-2"
+WHITESPACE 1 "\n"
+FLOAT_NUMBER 26 "0___0.10000____0000e+111__"
+WHITESPACE 1 "\n"
+INT_NUMBER 4 "1i64"
+WHITESPACE 1 " "
+FLOAT_NUMBER 7 "92.0f32"
+WHITESPACE 1 " "
+INT_NUMBER 5 "11__s"
--- /dev/null
+; , ( ) { } [ ] < > @ # ~ ? $ & | + * / ^ %
+. .. ... ..=
+: ::
+= =>
+! !=
+- ->
--- /dev/null
+SEMI 1 ";"
+WHITESPACE 1 " "
+COMMA 1 ","
+WHITESPACE 1 " "
+L_PAREN 1 "("
+WHITESPACE 1 " "
+R_PAREN 1 ")"
+WHITESPACE 1 " "
+L_CURLY 1 "{"
+WHITESPACE 1 " "
+R_CURLY 1 "}"
+WHITESPACE 1 " "
+L_BRACK 1 "["
+WHITESPACE 1 " "
+R_BRACK 1 "]"
+WHITESPACE 1 " "
+L_ANGLE 1 "<"
+WHITESPACE 1 " "
+R_ANGLE 1 ">"
+WHITESPACE 1 " "
+AT 1 "@"
+WHITESPACE 1 " "
+POUND 1 "#"
+WHITESPACE 1 " "
+TILDE 1 "~"
+WHITESPACE 1 " "
+QUESTION 1 "?"
+WHITESPACE 1 " "
+DOLLAR 1 "$"
+WHITESPACE 1 " "
+AMP 1 "&"
+WHITESPACE 1 " "
+PIPE 1 "|"
+WHITESPACE 1 " "
+PLUS 1 "+"
+WHITESPACE 1 " "
+STAR 1 "*"
+WHITESPACE 1 " "
+SLASH 1 "/"
+WHITESPACE 1 " "
+CARET 1 "^"
+WHITESPACE 1 " "
+PERCENT 1 "%"
+WHITESPACE 1 "\n"
+DOT 1 "."
+WHITESPACE 1 " "
+DOT 1 "."
+DOT 1 "."
+WHITESPACE 1 " "
+DOT 1 "."
+DOT 1 "."
+DOT 1 "."
+WHITESPACE 1 " "
+DOT 1 "."
+DOT 1 "."
+EQ 1 "="
+WHITESPACE 1 "\n"
+COLON 1 ":"
+WHITESPACE 1 " "
+COLON 1 ":"
+COLON 1 ":"
+WHITESPACE 1 "\n"
+EQ 1 "="
+WHITESPACE 1 " "
+EQ 1 "="
+R_ANGLE 1 ">"
+WHITESPACE 1 "\n"
+EXCL 1 "!"
+WHITESPACE 1 " "
+EXCL 1 "!"
+EQ 1 "="
+WHITESPACE 1 "\n"
+MINUS 1 "-"
+WHITESPACE 1 " "
+MINUS 1 "-"
+R_ANGLE 1 ">"
+WHITESPACE 1 "\n"
--- /dev/null
+'x' ' ' '0' 'hello' '\x7f' '\n' '\\' '\''
--- /dev/null
+CHAR 3 "\'x\'"
+WHITESPACE 1 " "
+CHAR 3 "\' \'"
+WHITESPACE 1 " "
+CHAR 3 "\'0\'"
+WHITESPACE 1 " "
+CHAR 7 "\'hello\'"
+WHITESPACE 1 " "
+CHAR 6 "\'\\x7f\'"
+WHITESPACE 1 " "
+CHAR 4 "\'\\n\'"
+WHITESPACE 1 " "
+CHAR 4 "\'\\\\\'"
+WHITESPACE 1 " "
+CHAR 4 "\'\\\'\'"
+WHITESPACE 1 "\n"
--- /dev/null
+'a 'foo 'foo_bar_baz '_
--- /dev/null
+LIFETIME 2 "\'a"
+WHITESPACE 1 " "
+LIFETIME 4 "\'foo"
+WHITESPACE 1 " "
+LIFETIME 12 "\'foo_bar_baz"
+WHITESPACE 1 " "
+LIFETIME 2 "\'_"
+WHITESPACE 1 "\n"
--- /dev/null
+b'' b'x' b"foo" br""
+b''suf b""ix br""br
+b'\n' b'\\' b'\'' b'hello'
--- /dev/null
+BYTE 3 "b\'\'"
+WHITESPACE 1 " "
+BYTE 4 "b\'x\'"
+WHITESPACE 1 " "
+BYTE_STRING 6 "b\"foo\""
+WHITESPACE 1 " "
+RAW_BYTE_STRING 4 "br\"\""
+WHITESPACE 1 "\n"
+BYTE 6 "b\'\'suf"
+WHITESPACE 1 " "
+BYTE_STRING 5 "b\"\"ix"
+WHITESPACE 1 " "
+RAW_BYTE_STRING 6 "br\"\"br"
+WHITESPACE 1 "\n"
+BYTE 5 "b\'\\n\'"
+WHITESPACE 1 " "
+BYTE 5 "b\'\\\\\'"
+WHITESPACE 1 " "
+BYTE 5 "b\'\\\'\'"
+WHITESPACE 1 " "
+BYTE 8 "b\'hello\'"
+WHITESPACE 1 "\n"
--- /dev/null
+"hello" r"world" "\n\"\\no escape" "multi
+line"
--- /dev/null
+STRING 7 "\"hello\""
+WHITESPACE 1 " "
+RAW_STRING 8 "r\"world\""
+WHITESPACE 1 " "
+STRING 17 "\"\\n\\\"\\\\no escape\""
+WHITESPACE 1 " "
+STRING 12 "\"multi\nline\""
+WHITESPACE 1 "\n"
--- /dev/null
+#!/usr/bin/env bash
+// hello
+//! World
--- /dev/null
+SHEBANG 19 "#!/usr/bin/env bash"
+WHITESPACE 1 "\n"
+COMMENT 8 "// hello"
+WHITESPACE 1 "\n"
+COMMENT 9 "//! World"
+WHITESPACE 1 "\n"
--- /dev/null
+async fn use struct trait enum impl true false as extern crate
+mod pub self super in where for loop while if match const
+static mut type ref let else move return
--- /dev/null
+ASYNC_KW 5 "async"
+WHITESPACE 1 " "
+FN_KW 2 "fn"
+WHITESPACE 1 " "
+USE_KW 3 "use"
+WHITESPACE 1 " "
+STRUCT_KW 6 "struct"
+WHITESPACE 1 " "
+TRAIT_KW 5 "trait"
+WHITESPACE 1 " "
+ENUM_KW 4 "enum"
+WHITESPACE 1 " "
+IMPL_KW 4 "impl"
+WHITESPACE 1 " "
+TRUE_KW 4 "true"
+WHITESPACE 1 " "
+FALSE_KW 5 "false"
+WHITESPACE 1 " "
+AS_KW 2 "as"
+WHITESPACE 1 " "
+EXTERN_KW 6 "extern"
+WHITESPACE 1 " "
+CRATE_KW 5 "crate"
+WHITESPACE 1 "\n"
+MOD_KW 3 "mod"
+WHITESPACE 1 " "
+PUB_KW 3 "pub"
+WHITESPACE 1 " "
+SELF_KW 4 "self"
+WHITESPACE 1 " "
+SUPER_KW 5 "super"
+WHITESPACE 1 " "
+IN_KW 2 "in"
+WHITESPACE 1 " "
+WHERE_KW 5 "where"
+WHITESPACE 1 " "
+FOR_KW 3 "for"
+WHITESPACE 1 " "
+LOOP_KW 4 "loop"
+WHITESPACE 1 " "
+WHILE_KW 5 "while"
+WHITESPACE 1 " "
+IF_KW 2 "if"
+WHITESPACE 1 " "
+MATCH_KW 5 "match"
+WHITESPACE 1 " "
+CONST_KW 5 "const"
+WHITESPACE 1 "\n"
+STATIC_KW 6 "static"
+WHITESPACE 1 " "
+MUT_KW 3 "mut"
+WHITESPACE 1 " "
+TYPE_KW 4 "type"
+WHITESPACE 1 " "
+REF_KW 3 "ref"
+WHITESPACE 1 " "
+LET_KW 3 "let"
+WHITESPACE 1 " "
+ELSE_KW 4 "else"
+WHITESPACE 1 " "
+MOVE_KW 4 "move"
+WHITESPACE 1 " "
+RETURN_KW 6 "return"
+WHITESPACE 1 "\n"
--- /dev/null
+r###"this is a r##"raw"## string"###
--- /dev/null
+RAW_STRING 36 "r###\"this is a r##\"raw\"## string\"###"
+WHITESPACE 1 "\n"
--- /dev/null
+'1
\ No newline at end of file
--- /dev/null
+LIFETIME 2 "\'1"
--- /dev/null
+STRING 7 "\"hello\n"
--- /dev/null
+r#raw_ident
--- /dev/null
+IDENT 11 "r#raw_ident"
+WHITESPACE 1 "\n"
--- /dev/null
+struct S {
+ a: u32
+ b: u32
+}
\ No newline at end of file
--- /dev/null
+SOURCE_FILE@[0; 34)
+ STRUCT_DEF@[0; 34)
+ STRUCT_KW@[0; 6) "struct"
+ WHITESPACE@[6; 7) " "
+ NAME@[7; 8)
+ IDENT@[7; 8) "S"
+ WHITESPACE@[8; 9) " "
+ NAMED_FIELD_DEF_LIST@[9; 34)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ NAMED_FIELD_DEF@[15; 21)
+ NAME@[15; 16)
+ IDENT@[15; 16) "a"
+ COLON@[16; 17) ":"
+ WHITESPACE@[17; 18) " "
+ PATH_TYPE@[18; 21)
+ PATH@[18; 21)
+ PATH_SEGMENT@[18; 21)
+ NAME_REF@[18; 21)
+ IDENT@[18; 21) "u32"
+ WHITESPACE@[21; 26) "\n "
+ NAMED_FIELD_DEF@[26; 32)
+ NAME@[26; 27)
+ IDENT@[26; 27) "b"
+ COLON@[27; 28) ":"
+ WHITESPACE@[28; 29) " "
+ PATH_TYPE@[29; 32)
+ PATH@[29; 32)
+ PATH_SEGMENT@[29; 32)
+ NAME_REF@[29; 32)
+ IDENT@[29; 32) "u32"
+ WHITESPACE@[32; 33) "\n"
+ R_CURLY@[33; 34) "}"
+error 21: expected COMMA
--- /dev/null
+if match
+
+struct S {}
\ No newline at end of file
--- /dev/null
+SOURCE_FILE@[0; 21)
+ ERROR@[0; 2)
+ IF_KW@[0; 2) "if"
+ WHITESPACE@[2; 3) " "
+ ERROR@[3; 8)
+ MATCH_KW@[3; 8) "match"
+ WHITESPACE@[8; 10) "\n\n"
+ STRUCT_DEF@[10; 21)
+ STRUCT_KW@[10; 16) "struct"
+ WHITESPACE@[16; 17) " "
+ NAME@[17; 18)
+ IDENT@[17; 18) "S"
+ WHITESPACE@[18; 19) " "
+ NAMED_FIELD_DEF_LIST@[19; 21)
+ L_CURLY@[19; 20) "{"
+ R_CURLY@[20; 21) "}"
+error 0: expected an item
+error 3: expected an item
--- /dev/null
+#!/use/bin/env rusti
+#!/use/bin/env rusti
--- /dev/null
+SOURCE_FILE@[0; 42)
+ SHEBANG@[0; 20) "#!/use/bin/env rusti"
+ WHITESPACE@[20; 21) "\n"
+ ATTR@[21; 23)
+ POUND@[21; 22) "#"
+ EXCL@[22; 23) "!"
+ ERROR@[23; 24)
+ SLASH@[23; 24) "/"
+ USE_ITEM@[24; 28)
+ USE_KW@[24; 27) "use"
+ ERROR@[27; 28)
+ SLASH@[27; 28) "/"
+ MACRO_CALL@[28; 31)
+ PATH@[28; 31)
+ PATH_SEGMENT@[28; 31)
+ NAME_REF@[28; 31)
+ IDENT@[28; 31) "bin"
+ ERROR@[31; 32)
+ SLASH@[31; 32) "/"
+ MACRO_CALL@[32; 41)
+ PATH@[32; 35)
+ PATH_SEGMENT@[32; 35)
+ NAME_REF@[32; 35)
+ IDENT@[32; 35) "env"
+ WHITESPACE@[35; 36) " "
+ NAME@[36; 41)
+ IDENT@[36; 41) "rusti"
+ WHITESPACE@[41; 42) "\n"
+error 23: expected `[`
+error 23: expected an item
+error 27: expected one of `*`, `::`, `{`, `self`, `super` or an indentifier
+error 28: expected SEMI
+error 31: expected EXCL
+error 31: expected `{`, `[`, `(`
+error 31: expected SEMI
+error 31: expected an item
+error 35: expected EXCL
+error 41: expected `{`, `[`, `(`
+error 41: expected SEMI
--- /dev/null
+struct S {
+ a: i32,
+ b: String,
+};
\ No newline at end of file
--- /dev/null
+SOURCE_FILE@[0; 40)
+ STRUCT_DEF@[0; 39)
+ STRUCT_KW@[0; 6) "struct"
+ WHITESPACE@[6; 7) " "
+ NAME@[7; 8)
+ IDENT@[7; 8) "S"
+ WHITESPACE@[8; 9) " "
+ NAMED_FIELD_DEF_LIST@[9; 39)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ NAMED_FIELD_DEF@[15; 21)
+ NAME@[15; 16)
+ IDENT@[15; 16) "a"
+ COLON@[16; 17) ":"
+ WHITESPACE@[17; 18) " "
+ PATH_TYPE@[18; 21)
+ PATH@[18; 21)
+ PATH_SEGMENT@[18; 21)
+ NAME_REF@[18; 21)
+ IDENT@[18; 21) "i32"
+ COMMA@[21; 22) ","
+ WHITESPACE@[22; 27) "\n "
+ NAMED_FIELD_DEF@[27; 36)
+ NAME@[27; 28)
+ IDENT@[27; 28) "b"
+ COLON@[28; 29) ":"
+ WHITESPACE@[29; 30) " "
+ PATH_TYPE@[30; 36)
+ PATH@[30; 36)
+ PATH_SEGMENT@[30; 36)
+ NAME_REF@[30; 36)
+ IDENT@[30; 36) "String"
+ COMMA@[36; 37) ","
+ WHITESPACE@[37; 38) "\n"
+ R_CURLY@[38; 39) "}"
+ ERROR@[39; 40)
+ SEMI@[39; 40) ";"
+error 39: expected item, found `;`
+consider removing this semicolon
--- /dev/null
+use foo::92;
\ No newline at end of file
--- /dev/null
+SOURCE_FILE@[0; 12)
+ USE_ITEM@[0; 12)
+ USE_KW@[0; 3) "use"
+ WHITESPACE@[3; 4) " "
+ USE_TREE@[4; 11)
+ PATH@[4; 11)
+ PATH@[4; 7)
+ PATH_SEGMENT@[4; 7)
+ NAME_REF@[4; 7)
+ IDENT@[4; 7) "foo"
+ COLONCOLON@[7; 9) "::"
+ PATH_SEGMENT@[9; 11)
+ ERROR@[9; 11)
+ INT_NUMBER@[9; 11) "92"
+ SEMI@[11; 12) ";"
+error 9: expected identifier
--- /dev/null
+#[foo(foo, +, 92)]
+fn foo() {
+}
+
+
+#[foo(
+fn foo() {
+}
--- /dev/null
+SOURCE_FILE@[0; 54)
+ FN_DEF@[0; 31)
+ ATTR@[0; 18)
+ POUND@[0; 1) "#"
+ TOKEN_TREE@[1; 18)
+ L_BRACK@[1; 2) "["
+ IDENT@[2; 5) "foo"
+ TOKEN_TREE@[5; 17)
+ L_PAREN@[5; 6) "("
+ IDENT@[6; 9) "foo"
+ COMMA@[9; 10) ","
+ WHITESPACE@[10; 11) " "
+ PLUS@[11; 12) "+"
+ COMMA@[12; 13) ","
+ WHITESPACE@[13; 14) " "
+ INT_NUMBER@[14; 16) "92"
+ R_PAREN@[16; 17) ")"
+ R_BRACK@[17; 18) "]"
+ WHITESPACE@[18; 19) "\n"
+ FN_KW@[19; 21) "fn"
+ WHITESPACE@[21; 22) " "
+ NAME@[22; 25)
+ IDENT@[22; 25) "foo"
+ PARAM_LIST@[25; 27)
+ L_PAREN@[25; 26) "("
+ R_PAREN@[26; 27) ")"
+ WHITESPACE@[27; 28) " "
+ BLOCK@[28; 31)
+ L_CURLY@[28; 29) "{"
+ WHITESPACE@[29; 30) "\n"
+ R_CURLY@[30; 31) "}"
+ WHITESPACE@[31; 34) "\n\n\n"
+ ATTR@[34; 53)
+ POUND@[34; 35) "#"
+ TOKEN_TREE@[35; 53)
+ L_BRACK@[35; 36) "["
+ IDENT@[36; 39) "foo"
+ TOKEN_TREE@[39; 53)
+ L_PAREN@[39; 40) "("
+ WHITESPACE@[40; 41) "\n"
+ FN_KW@[41; 43) "fn"
+ WHITESPACE@[43; 44) " "
+ IDENT@[44; 47) "foo"
+ TOKEN_TREE@[47; 49)
+ L_PAREN@[47; 48) "("
+ R_PAREN@[48; 49) ")"
+ WHITESPACE@[49; 50) " "
+ TOKEN_TREE@[50; 53)
+ L_CURLY@[50; 51) "{"
+ WHITESPACE@[51; 52) "\n"
+ R_CURLY@[52; 53) "}"
+ WHITESPACE@[53; 54) "\n"
+error 53: expected R_PAREN
+error 53: expected R_BRACK
+error 53: expected an item
--- /dev/null
+struct S {
+ f: u32,
+ pub 92
+ + - *
+ pub x: u32,
+ z: f64,
+}
--- /dev/null
+SOURCE_FILE@[0; 74)
+ STRUCT_DEF@[0; 73)
+ STRUCT_KW@[0; 6) "struct"
+ WHITESPACE@[6; 7) " "
+ NAME@[7; 8)
+ IDENT@[7; 8) "S"
+ WHITESPACE@[8; 9) " "
+ NAMED_FIELD_DEF_LIST@[9; 73)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ NAMED_FIELD_DEF@[15; 21)
+ NAME@[15; 16)
+ IDENT@[15; 16) "f"
+ COLON@[16; 17) ":"
+ WHITESPACE@[17; 18) " "
+ PATH_TYPE@[18; 21)
+ PATH@[18; 21)
+ PATH_SEGMENT@[18; 21)
+ NAME_REF@[18; 21)
+ IDENT@[18; 21) "u32"
+ COMMA@[21; 22) ","
+ WHITESPACE@[22; 27) "\n "
+ VISIBILITY@[27; 30)
+ PUB_KW@[27; 30) "pub"
+ WHITESPACE@[30; 31) " "
+ ERROR@[31; 33)
+ INT_NUMBER@[31; 33) "92"
+ WHITESPACE@[33; 38) "\n "
+ ERROR@[38; 39)
+ PLUS@[38; 39) "+"
+ WHITESPACE@[39; 40) " "
+ ERROR@[40; 41)
+ MINUS@[40; 41) "-"
+ WHITESPACE@[41; 42) " "
+ ERROR@[42; 43)
+ STAR@[42; 43) "*"
+ WHITESPACE@[43; 48) "\n "
+ NAMED_FIELD_DEF@[48; 58)
+ VISIBILITY@[48; 51)
+ PUB_KW@[48; 51) "pub"
+ WHITESPACE@[51; 52) " "
+ NAME@[52; 53)
+ IDENT@[52; 53) "x"
+ COLON@[53; 54) ":"
+ WHITESPACE@[54; 55) " "
+ PATH_TYPE@[55; 58)
+ PATH@[55; 58)
+ PATH_SEGMENT@[55; 58)
+ NAME_REF@[55; 58)
+ IDENT@[55; 58) "u32"
+ COMMA@[58; 59) ","
+ WHITESPACE@[59; 64) "\n "
+ NAMED_FIELD_DEF@[64; 70)
+ NAME@[64; 65)
+ IDENT@[64; 65) "z"
+ COLON@[65; 66) ":"
+ WHITESPACE@[66; 67) " "
+ PATH_TYPE@[67; 70)
+ PATH@[67; 70)
+ PATH_SEGMENT@[67; 70)
+ NAME_REF@[67; 70)
+ IDENT@[67; 70) "f64"
+ COMMA@[70; 71) ","
+ WHITESPACE@[71; 72) "\n"
+ R_CURLY@[72; 73) "}"
+ WHITESPACE@[73; 74) "\n"
+error 31: expected field declaration
+error 33: expected COMMA
+error 38: expected field declaration
+error 39: expected COMMA
+error 40: expected field declaration
+error 41: expected COMMA
+error 42: expected field declaration
+error 43: expected COMMA
--- /dev/null
+}
+
+struct S;
+
+}
+
+fn foo(){}
+
+}
--- /dev/null
+SOURCE_FILE@[0; 31)
+ ERROR@[0; 1)
+ R_CURLY@[0; 1) "}"
+ WHITESPACE@[1; 3) "\n\n"
+ STRUCT_DEF@[3; 12)
+ STRUCT_KW@[3; 9) "struct"
+ WHITESPACE@[9; 10) " "
+ NAME@[10; 11)
+ IDENT@[10; 11) "S"
+ SEMI@[11; 12) ";"
+ WHITESPACE@[12; 14) "\n\n"
+ ERROR@[14; 15)
+ R_CURLY@[14; 15) "}"
+ WHITESPACE@[15; 17) "\n\n"
+ FN_DEF@[17; 27)
+ FN_KW@[17; 19) "fn"
+ WHITESPACE@[19; 20) " "
+ NAME@[20; 23)
+ IDENT@[20; 23) "foo"
+ PARAM_LIST@[23; 25)
+ L_PAREN@[23; 24) "("
+ R_PAREN@[24; 25) ")"
+ BLOCK@[25; 27)
+ L_CURLY@[25; 26) "{"
+ R_CURLY@[26; 27) "}"
+ WHITESPACE@[27; 29) "\n\n"
+ ERROR@[29; 30)
+ R_CURLY@[29; 30) "}"
+ WHITESPACE@[30; 31) "\n"
+error 0: unmatched `}`
+error 14: unmatched `}`
+error 29: unmatched `}`
--- /dev/null
+fn foo() {
+}
+
+bar() {
+ if true {
+ 1
+ } else {
+ 2 + 3
+ }
+}
+
+fn baz() {
+}
--- /dev/null
+SOURCE_FILE@[0; 95)
+ FN_DEF@[0; 12)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 12)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 11) "\n"
+ R_CURLY@[11; 12) "}"
+ WHITESPACE@[12; 14) "\n\n"
+ MACRO_CALL@[14; 19)
+ PATH@[14; 17)
+ PATH_SEGMENT@[14; 17)
+ NAME_REF@[14; 17)
+ IDENT@[14; 17) "bar"
+ TOKEN_TREE@[17; 19)
+ L_PAREN@[17; 18) "("
+ R_PAREN@[18; 19) ")"
+ WHITESPACE@[19; 20) " "
+ ERROR@[20; 80)
+ L_CURLY@[20; 21) "{"
+ WHITESPACE@[21; 26) "\n "
+ IF_EXPR@[26; 78)
+ IF_KW@[26; 28) "if"
+ WHITESPACE@[28; 29) " "
+ CONDITION@[29; 33)
+ LITERAL@[29; 33)
+ TRUE_KW@[29; 33) "true"
+ WHITESPACE@[33; 34) " "
+ BLOCK@[34; 51)
+ L_CURLY@[34; 35) "{"
+ WHITESPACE@[35; 44) "\n "
+ LITERAL@[44; 45)
+ INT_NUMBER@[44; 45) "1"
+ WHITESPACE@[45; 50) "\n "
+ R_CURLY@[50; 51) "}"
+ WHITESPACE@[51; 52) " "
+ ELSE_KW@[52; 56) "else"
+ WHITESPACE@[56; 57) " "
+ BLOCK@[57; 78)
+ L_CURLY@[57; 58) "{"
+ WHITESPACE@[58; 67) "\n "
+ BIN_EXPR@[67; 72)
+ LITERAL@[67; 68)
+ INT_NUMBER@[67; 68) "2"
+ WHITESPACE@[68; 69) " "
+ PLUS@[69; 70) "+"
+ WHITESPACE@[70; 71) " "
+ LITERAL@[71; 72)
+ INT_NUMBER@[71; 72) "3"
+ WHITESPACE@[72; 77) "\n "
+ R_CURLY@[77; 78) "}"
+ WHITESPACE@[78; 79) "\n"
+ R_CURLY@[79; 80) "}"
+ WHITESPACE@[80; 82) "\n\n"
+ FN_DEF@[82; 94)
+ FN_KW@[82; 84) "fn"
+ WHITESPACE@[84; 85) " "
+ NAME@[85; 88)
+ IDENT@[85; 88) "baz"
+ PARAM_LIST@[88; 90)
+ L_PAREN@[88; 89) "("
+ R_PAREN@[89; 90) ")"
+ WHITESPACE@[90; 91) " "
+ BLOCK@[91; 94)
+ L_CURLY@[91; 92) "{"
+ WHITESPACE@[92; 93) "\n"
+ R_CURLY@[93; 94) "}"
+ WHITESPACE@[94; 95) "\n"
+error 17: expected EXCL
+error 19: expected SEMI
+error 20: expected an item
--- /dev/null
+struct S<90 + 2> {
+ f: u32
+}
+
+struct T;
--- /dev/null
+SOURCE_FILE@[0; 43)
+ STRUCT_DEF@[0; 11)
+ STRUCT_KW@[0; 6) "struct"
+ WHITESPACE@[6; 7) " "
+ NAME@[7; 8)
+ IDENT@[7; 8) "S"
+ TYPE_PARAM_LIST@[8; 11)
+ L_ANGLE@[8; 9) "<"
+ ERROR@[9; 11)
+ INT_NUMBER@[9; 11) "90"
+ WHITESPACE@[11; 12) " "
+ ERROR@[12; 13)
+ PLUS@[12; 13) "+"
+ WHITESPACE@[13; 14) " "
+ ERROR@[14; 15)
+ INT_NUMBER@[14; 15) "2"
+ ERROR@[15; 16)
+ R_ANGLE@[15; 16) ">"
+ WHITESPACE@[16; 17) " "
+ ERROR@[17; 31)
+ L_CURLY@[17; 18) "{"
+ WHITESPACE@[18; 23) "\n "
+ EXPR_STMT@[23; 24)
+ PATH_EXPR@[23; 24)
+ PATH@[23; 24)
+ PATH_SEGMENT@[23; 24)
+ NAME_REF@[23; 24)
+ IDENT@[23; 24) "f"
+ EXPR_STMT@[24; 25)
+ ERROR@[24; 25)
+ COLON@[24; 25) ":"
+ WHITESPACE@[25; 26) " "
+ PATH_EXPR@[26; 29)
+ PATH@[26; 29)
+ PATH_SEGMENT@[26; 29)
+ NAME_REF@[26; 29)
+ IDENT@[26; 29) "u32"
+ WHITESPACE@[29; 30) "\n"
+ R_CURLY@[30; 31) "}"
+ WHITESPACE@[31; 33) "\n\n"
+ STRUCT_DEF@[33; 42)
+ STRUCT_KW@[33; 39) "struct"
+ WHITESPACE@[39; 40) " "
+ NAME@[40; 41)
+ IDENT@[40; 41) "T"
+ SEMI@[41; 42) ";"
+ WHITESPACE@[42; 43) "\n"
+error 9: expected type parameter
+error 11: expected COMMA
+error 11: expected R_ANGLE
+error 11: expected `;`, `{`, or `(`
+error 12: expected an item
+error 14: expected an item
+error 15: expected an item
+error 17: expected an item
+error 24: expected SEMI
+error 24: expected expression
+error 25: expected SEMI
--- /dev/null
+fn main() {
+ || -> () unsafe { () };
+}
--- /dev/null
+SOURCE_FILE@[0; 42)
+ FN_DEF@[0; 41)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 7)
+ IDENT@[3; 7) "main"
+ PARAM_LIST@[7; 9)
+ L_PAREN@[7; 8) "("
+ R_PAREN@[8; 9) ")"
+ WHITESPACE@[9; 10) " "
+ BLOCK@[10; 41)
+ L_CURLY@[10; 11) "{"
+ WHITESPACE@[11; 16) "\n "
+ EXPR_STMT@[16; 39)
+ LAMBDA_EXPR@[16; 38)
+ PARAM_LIST@[16; 18)
+ PIPE@[16; 17) "|"
+ PIPE@[17; 18) "|"
+ WHITESPACE@[18; 19) " "
+ RET_TYPE@[19; 24)
+ THIN_ARROW@[19; 21) "->"
+ WHITESPACE@[21; 22) " "
+ TUPLE_TYPE@[22; 24)
+ L_PAREN@[22; 23) "("
+ R_PAREN@[23; 24) ")"
+ WHITESPACE@[24; 25) " "
+ BLOCK_EXPR@[25; 38)
+ UNSAFE_KW@[25; 31) "unsafe"
+ WHITESPACE@[31; 32) " "
+ BLOCK@[32; 38)
+ L_CURLY@[32; 33) "{"
+ WHITESPACE@[33; 34) " "
+ TUPLE_EXPR@[34; 36)
+ L_PAREN@[34; 35) "("
+ R_PAREN@[35; 36) ")"
+ WHITESPACE@[36; 37) " "
+ R_CURLY@[37; 38) "}"
+ SEMI@[38; 39) ";"
+ WHITESPACE@[39; 40) "\n"
+ R_CURLY@[40; 41) "}"
+ WHITESPACE@[41; 42) "\n"
+error 24: expected `{`
--- /dev/null
+extern struct Foo;
--- /dev/null
+SOURCE_FILE@[0; 19)
+ ERROR@[0; 6)
+ ABI@[0; 6)
+ EXTERN_KW@[0; 6) "extern"
+ WHITESPACE@[6; 7) " "
+ STRUCT_DEF@[7; 18)
+ STRUCT_KW@[7; 13) "struct"
+ WHITESPACE@[13; 14) " "
+ NAME@[14; 17)
+ IDENT@[14; 17) "Foo"
+ SEMI@[17; 18) ";"
+ WHITESPACE@[18; 19) "\n"
+error 6: expected existential, fn, trait or impl
--- /dev/null
+SOURCE_FILE@[0; 389)
+ FN_DEF@[0; 389)
+ VISIBILITY@[0; 10)
+ PUB_KW@[0; 3)
+ L_PAREN@[3; 4)
+ SUPER_KW@[4; 9)
+ R_PAREN@[9; 10)
+ WHITESPACE@[10; 11)
+ FN_KW@[11; 13)
+ WHITESPACE@[13; 14)
+ NAME@[14; 21)
+ IDENT@[14; 21) "process"
+ TYPE_PARAM_LIST@[21; 38)
+ L_ANGLE@[21; 22)
+ LIFETIME_PARAM@[22; 24)
+ LIFETIME@[22; 24) "'a"
+ COMMA@[24; 25)
+ WHITESPACE@[25; 26)
+ TYPE_PARAM@[26; 37)
+ NAME@[26; 27)
+ IDENT@[26; 27) "S"
+ COLON@[27; 28)
+ WHITESPACE@[28; 29)
+ PATH@[29; 37)
+ PATH_SEGMENT@[29; 37)
+ NAME_REF@[29; 33)
+ IDENT@[29; 33) "Sink"
+ TYPE_ARG_LIST@[33; 37)
+ L_ANGLE@[33; 34)
+ LIFETIME_ARG@[34; 36)
+ LIFETIME@[34; 36) "'a"
+ R_ANGLE@[36; 37)
+ R_ANGLE@[37; 38)
+ PARAM_LIST@[38; 93)
+ L_PAREN@[38; 39)
+ PARAM@[39; 54)
+ BIND_PAT@[39; 46)
+ NAME@[39; 46)
+ IDENT@[39; 46) "builder"
+ COLON@[46; 47)
+ WHITESPACE@[47; 48)
+ REFERENCE_TYPE@[48; 54)
+ AMP@[48; 49)
+ MUT_KW@[49; 52)
+ WHITESPACE@[52; 53)
+ PATH_TYPE@[53; 54)
+ PATH@[53; 54)
+ PATH_SEGMENT@[53; 54)
+ NAME_REF@[53; 54)
+ IDENT@[53; 54) "S"
+ COMMA@[54; 55)
+ WHITESPACE@[55; 56)
+ PARAM@[56; 72)
+ BIND_PAT@[56; 62)
+ NAME@[56; 62)
+ IDENT@[56; 62) "tokens"
+ COLON@[62; 63)
+ WHITESPACE@[63; 64)
+ REFERENCE_TYPE@[64; 72)
+ AMP@[64; 65)
+ SLICE_TYPE@[65; 72)
+ L_BRACK@[65; 66)
+ PATH_TYPE@[66; 71)
+ PATH@[66; 71)
+ PATH_SEGMENT@[66; 71)
+ NAME_REF@[66; 71)
+ IDENT@[66; 71) "Token"
+ R_BRACK@[71; 72)
+ COMMA@[72; 73)
+ WHITESPACE@[73; 74)
+ PARAM@[74; 92)
+ BIND_PAT@[74; 80)
+ NAME@[74; 80)
+ IDENT@[74; 80) "events"
+ COLON@[80; 81)
+ WHITESPACE@[81; 82)
+ PATH_TYPE@[82; 92)
+ PATH@[82; 92)
+ PATH_SEGMENT@[82; 92)
+ NAME_REF@[82; 85)
+ IDENT@[82; 85) "Vec"
+ TYPE_ARG_LIST@[85; 92)
+ L_ANGLE@[85; 86)
+ TYPE_ARG@[86; 91)
+ PATH_TYPE@[86; 91)
+ PATH@[86; 91)
+ PATH_SEGMENT@[86; 91)
+ NAME_REF@[86; 91)
+ IDENT@[86; 91) "Event"
+ R_ANGLE@[91; 92)
+ R_PAREN@[92; 93)
+ WHITESPACE@[93; 94)
+ BLOCK_EXPR@[94; 389)
+ L_CURLY@[94; 95)
+ WHITESPACE@[95; 100)
+ LET_STMT@[100; 125)
+ LET_KW@[100; 103)
+ WHITESPACE@[103; 104)
+ BIND_PAT@[104; 120)
+ MUT_KW@[104; 107)
+ WHITESPACE@[107; 108)
+ NAME@[108; 120)
+ IDENT@[108; 120) "next_tok_idx"
+ WHITESPACE@[120; 121)
+ EQ@[121; 122)
+ WHITESPACE@[122; 123)
+ LITERAL@[123; 124)
+ INT_NUMBER@[123; 124) "0"
+ SEMI@[124; 125)
+ WHITESPACE@[125; 130)
+ LET_STMT@[130; 389)
+ LET_KW@[130; 133)
+ WHITESPACE@[133; 134)
+ BIND_PAT@[134; 140)
+ NAME@[134; 140)
+ IDENT@[134; 140) "eat_ws"
+ WHITESPACE@[140; 141)
+ EQ@[141; 142)
+ WHITESPACE@[142; 143)
+ LAMBDA_EXPR@[143; 389)
+ PARAM_LIST@[143; 388)
+ PIPE@[143; 144)
+ PARAM@[144; 159)
+ BIND_PAT@[144; 147)
+ NAME@[144; 147)
+ IDENT@[144; 147) "idx"
+ COLON@[147; 148)
+ WHITESPACE@[148; 149)
+ REFERENCE_TYPE@[149; 159)
+ AMP@[149; 150)
+ MUT_KW@[150; 153)
+ WHITESPACE@[153; 154)
+ PATH_TYPE@[154; 159)
+ PATH@[154; 159)
+ PATH_SEGMENT@[154; 159)
+ NAME_REF@[154; 159)
+ IDENT@[154; 159) "usize"
+ COMMA@[159; 160)
+ WHITESPACE@[160; 161)
+ PARAM@[161; 167)
+ REF_PAT@[161; 167)
+ AMP@[161; 162)
+ MUT_KW@[162; 165)
+ WHITESPACE@[165; 166)
+ err: `expected pattern`
+ ERROR@[166; 167)
+ PIPE@[166; 167)
+ err: `expected COMMA`
+ WHITESPACE@[167; 168)
+ err: `expected pattern`
+ PARAM@[168; 169)
+ ERROR@[168; 169)
+ L_CURLY@[168; 169)
+ err: `expected COMMA`
+ WHITESPACE@[169; 178)
+ err: `expected pattern`
+ PARAM@[178; 183)
+ ERROR@[178; 183)
+ WHILE_KW@[178; 183)
+ err: `expected COMMA`
+ WHITESPACE@[183; 184)
+ err: `expected pattern`
+ PARAM@[184; 187)
+ ERROR@[184; 187)
+ LET_KW@[184; 187)
+ err: `expected COMMA`
+ WHITESPACE@[187; 188)
+ PARAM@[188; 199)
+ TUPLE_STRUCT_PAT@[188; 199)
+ PATH@[188; 192)
+ PATH_SEGMENT@[188; 192)
+ NAME_REF@[188; 192)
+ IDENT@[188; 192) "Some"
+ L_PAREN@[192; 193)
+ BIND_PAT@[193; 198)
+ NAME@[193; 198)
+ IDENT@[193; 198) "token"
+ R_PAREN@[198; 199)
+ err: `expected COMMA`
+ WHITESPACE@[199; 200)
+ err: `expected pattern`
+ PARAM@[200; 201)
+ ERROR@[200; 201)
+ EQ@[200; 201)
+ err: `expected COMMA`
+ WHITESPACE@[201; 202)
+ PARAM@[202; 208)
+ BIND_PAT@[202; 208)
+ NAME@[202; 208)
+ IDENT@[202; 208) "tokens"
+ err: `expected COMMA`
+ err: `expected pattern`
+ PARAM@[208; 209)
+ ERROR@[208; 209)
+ DOT@[208; 209)
+ err: `expected COMMA`
+ PARAM@[209; 218)
+ TUPLE_STRUCT_PAT@[209; 218)
+ PATH@[209; 212)
+ PATH_SEGMENT@[209; 212)
+ NAME_REF@[209; 212)
+ IDENT@[209; 212) "get"
+ L_PAREN@[212; 213)
+ err: `expected pattern`
+ ERROR@[213; 214)
+ STAR@[213; 214)
+ err: `expected COMMA`
+ BIND_PAT@[214; 217)
+ NAME@[214; 217)
+ IDENT@[214; 217) "idx"
+ R_PAREN@[217; 218)
+ err: `expected COMMA`
+ WHITESPACE@[218; 219)
+ err: `expected pattern`
+ PARAM@[219; 220)
+ ERROR@[219; 220)
+ L_CURLY@[219; 220)
+ err: `expected COMMA`
+ WHITESPACE@[220; 233)
+ err: `expected pattern`
+ PARAM@[233; 235)
+ ERROR@[233; 235)
+ IF_KW@[233; 235)
+ err: `expected COMMA`
+ WHITESPACE@[235; 236)
+ err: `expected pattern`
+ PARAM@[236; 237)
+ ERROR@[236; 237)
+ EXCL@[236; 237)
+ err: `expected COMMA`
+ PARAM@[237; 242)
+ BIND_PAT@[237; 242)
+ NAME@[237; 242)
+ IDENT@[237; 242) "token"
+ err: `expected COMMA`
+ err: `expected pattern`
+ PARAM@[242; 243)
+ ERROR@[242; 243)
+ DOT@[242; 243)
+ err: `expected COMMA`
+ PARAM@[243; 247)
+ BIND_PAT@[243; 247)
+ NAME@[243; 247)
+ IDENT@[243; 247) "kind"
+ err: `expected COMMA`
+ err: `expected pattern`
+ PARAM@[247; 248)
+ ERROR@[247; 248)
+ DOT@[247; 248)
+ err: `expected COMMA`
+ PARAM@[248; 259)
+ TUPLE_STRUCT_PAT@[248; 259)
+ PATH@[248; 257)
+ PATH_SEGMENT@[248; 257)
+ NAME_REF@[248; 257)
+ IDENT@[248; 257) "is_trivia"
+ L_PAREN@[257; 258)
+ R_PAREN@[258; 259)
+ err: `expected COMMA`
+ WHITESPACE@[259; 260)
+ err: `expected pattern`
+ PARAM@[260; 261)
+ ERROR@[260; 261)
+ L_CURLY@[260; 261)
+ err: `expected COMMA`
+ WHITESPACE@[261; 278)
+ PARAM@[278; 283)
+ BIND_PAT@[278; 283)
+ NAME@[278; 283)
+ IDENT@[278; 283) "break"
+ err: `expected COMMA`
+ err: `expected pattern`
+ PARAM@[283; 284)
+ ERROR@[283; 284)
+ SEMI@[283; 284)
+ err: `expected COMMA`
+ WHITESPACE@[284; 297)
+ err: `expected pattern`
+ PARAM@[297; 298)
+ ERROR@[297; 298)
+ R_CURLY@[297; 298)
+ err: `expected COMMA`
+ WHITESPACE@[298; 311)
+ PARAM@[311; 318)
+ BIND_PAT@[311; 318)
+ NAME@[311; 318)
+ IDENT@[311; 318) "builder"
+ err: `expected COMMA`
+ err: `expected pattern`
+ PARAM@[318; 319)
+ ERROR@[318; 319)
+ DOT@[318; 319)
+ err: `expected COMMA`
+ PARAM@[319; 346)
+ TUPLE_STRUCT_PAT@[319; 346)
+ PATH@[319; 323)
+ PATH_SEGMENT@[319; 323)
+ NAME_REF@[319; 323)
+ IDENT@[319; 323) "leaf"
+ L_PAREN@[323; 324)
+ BIND_PAT@[324; 329)
+ NAME@[324; 329)
+ IDENT@[324; 329) "token"
+ err: `expected COMMA`
+ err: `expected pattern`
+ ERROR@[329; 330)
+ DOT@[329; 330)
+ err: `expected COMMA`
+ BIND_PAT@[330; 334)
+ NAME@[330; 334)
+ IDENT@[330; 334) "kind"
+ COMMA@[334; 335)
+ WHITESPACE@[335; 336)
+ BIND_PAT@[336; 341)
+ NAME@[336; 341)
+ IDENT@[336; 341) "token"
+ err: `expected COMMA`
+ err: `expected pattern`
+ ERROR@[341; 342)
+ DOT@[341; 342)
+ err: `expected COMMA`
+ BIND_PAT@[342; 345)
+ NAME@[342; 345)
+ IDENT@[342; 345) "len"
+ R_PAREN@[345; 346)
+ err: `expected COMMA`
+ err: `expected pattern`
+ PARAM@[346; 347)
+ ERROR@[346; 347)
+ SEMI@[346; 347)
+ err: `expected COMMA`
+ WHITESPACE@[347; 360)
+ err: `expected pattern`
+ PARAM@[360; 361)
+ ERROR@[360; 361)
+ STAR@[360; 361)
+ err: `expected COMMA`
+ PARAM@[361; 364)
+ BIND_PAT@[361; 364)
+ NAME@[361; 364)
+ IDENT@[361; 364) "idx"
+ err: `expected COMMA`
+ WHITESPACE@[364; 365)
+ err: `expected pattern`
+ PARAM@[365; 366)
+ ERROR@[365; 366)
+ PLUS@[365; 366)
+ err: `expected COMMA`
+ err: `expected pattern`
+ PARAM@[366; 367)
+ ERROR@[366; 367)
+ EQ@[366; 367)
+ err: `expected COMMA`
+ WHITESPACE@[367; 368)
+ PARAM@[368; 369)
+ LITERAL@[368; 369)
+ INT_NUMBER@[368; 369) "1"
+ err: `expected COMMA`
+ WHITESPACE@[369; 378)
+ err: `expected pattern`
+ PARAM@[378; 379)
+ ERROR@[378; 379)
+ R_CURLY@[378; 379)
+ err: `expected COMMA`
+ WHITESPACE@[379; 384)
+ err: `expected pattern`
+ PARAM@[384; 385)
+ ERROR@[384; 385)
+ R_CURLY@[384; 385)
+ err: `expected COMMA`
+ err: `expected pattern`
+ PARAM@[385; 386)
+ ERROR@[385; 386)
+ SEMI@[385; 386)
+ err: `expected COMMA`
+ WHITESPACE@[386; 387)
+ err: `expected pattern`
+ PARAM@[387; 388)
+ ERROR@[387; 388)
+ R_CURLY@[387; 388)
+ err: `expected COMMA`
+ err: `expected PIPE`
+ WHITESPACE@[388; 389)
+ err: `expected expression`
+ err: `expected SEMI`
+ err: `expected R_CURLY`
+ ERROR@[389; 389)
--- /dev/null
+pub struct Cache(
+ RefCell<HashMap<
+ TypeId,
+ Box<@ Any>,
+ >>
+);
+
--- /dev/null
+SOURCE_FILE@[0; 86)
+ STRUCT_DEF@[0; 72)
+ VISIBILITY@[0; 3)
+ PUB_KW@[0; 3) "pub"
+ WHITESPACE@[3; 4) " "
+ STRUCT_KW@[4; 10) "struct"
+ WHITESPACE@[10; 11) " "
+ NAME@[11; 16)
+ IDENT@[11; 16) "Cache"
+ POS_FIELD_DEF_LIST@[16; 72)
+ L_PAREN@[16; 17) "("
+ WHITESPACE@[17; 22) "\n "
+ POS_FIELD_DEF@[22; 68)
+ PATH_TYPE@[22; 68)
+ PATH@[22; 68)
+ PATH_SEGMENT@[22; 68)
+ NAME_REF@[22; 29)
+ IDENT@[22; 29) "RefCell"
+ TYPE_ARG_LIST@[29; 68)
+ L_ANGLE@[29; 30) "<"
+ TYPE_ARG@[30; 68)
+ PATH_TYPE@[30; 68)
+ PATH@[30; 68)
+ PATH_SEGMENT@[30; 68)
+ NAME_REF@[30; 37)
+ IDENT@[30; 37) "HashMap"
+ TYPE_ARG_LIST@[37; 68)
+ L_ANGLE@[37; 38) "<"
+ WHITESPACE@[38; 47) "\n "
+ TYPE_ARG@[47; 53)
+ PATH_TYPE@[47; 53)
+ PATH@[47; 53)
+ PATH_SEGMENT@[47; 53)
+ NAME_REF@[47; 53)
+ IDENT@[47; 53) "TypeId"
+ COMMA@[53; 54) ","
+ WHITESPACE@[54; 63) "\n "
+ TYPE_ARG@[63; 68)
+ PATH_TYPE@[63; 68)
+ PATH@[63; 68)
+ PATH_SEGMENT@[63; 68)
+ NAME_REF@[63; 66)
+ IDENT@[63; 66) "Box"
+ TYPE_ARG_LIST@[66; 68)
+ L_ANGLE@[66; 67) "<"
+ TYPE_ARG@[67; 68)
+ ERROR@[67; 68)
+ AT@[67; 68) "@"
+ WHITESPACE@[68; 69) " "
+ POS_FIELD_DEF@[69; 72)
+ PATH_TYPE@[69; 72)
+ PATH@[69; 72)
+ PATH_SEGMENT@[69; 72)
+ NAME_REF@[69; 72)
+ IDENT@[69; 72) "Any"
+ ERROR@[72; 72)
+ ERROR@[72; 73)
+ R_ANGLE@[72; 73) ">"
+ ERROR@[73; 74)
+ COMMA@[73; 74) ","
+ WHITESPACE@[74; 79) "\n "
+ ERROR@[79; 80)
+ R_ANGLE@[79; 80) ">"
+ ERROR@[80; 81)
+ R_ANGLE@[80; 81) ">"
+ WHITESPACE@[81; 82) "\n"
+ ERROR@[82; 83)
+ R_PAREN@[82; 83) ")"
+ ERROR@[83; 84)
+ SEMI@[83; 84) ";"
+ WHITESPACE@[84; 86) "\n\n"
+error 67: expected type
+error 68: expected COMMA
+error 68: expected R_ANGLE
+error 68: expected COMMA
+error 68: expected R_ANGLE
+error 68: expected COMMA
+error 68: expected R_ANGLE
+error 68: expected COMMA
+error 72: expected COMMA
+error 72: expected a type
+error 72: expected R_PAREN
+error 72: expected SEMI
+error 72: expected an item
+error 73: expected an item
+error 79: expected an item
+error 80: expected an item
+error 82: expected an item
+error 83: expected an item
--- /dev/null
+fn foo<T>() where T {}
--- /dev/null
+SOURCE_FILE@[0; 23)
+ FN_DEF@[0; 22)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ TYPE_PARAM_LIST@[6; 9)
+ L_ANGLE@[6; 7) "<"
+ TYPE_PARAM@[7; 8)
+ NAME@[7; 8)
+ IDENT@[7; 8) "T"
+ R_ANGLE@[8; 9) ">"
+ PARAM_LIST@[9; 11)
+ L_PAREN@[9; 10) "("
+ R_PAREN@[10; 11) ")"
+ WHITESPACE@[11; 12) " "
+ WHERE_CLAUSE@[12; 19)
+ WHERE_KW@[12; 17) "where"
+ WHITESPACE@[17; 18) " "
+ WHERE_PRED@[18; 19)
+ PATH_TYPE@[18; 19)
+ PATH@[18; 19)
+ PATH_SEGMENT@[18; 19)
+ NAME_REF@[18; 19)
+ IDENT@[18; 19) "T"
+ WHITESPACE@[19; 20) " "
+ BLOCK@[20; 22)
+ L_CURLY@[20; 21) "{"
+ R_CURLY@[21; 22) "}"
+ WHITESPACE@[22; 23) "\n"
+error 19: expected colon
--- /dev/null
+fn foo(}) {
+}
--- /dev/null
+SOURCE_FILE@[0; 14)
+ FN_DEF@[0; 7)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 7)
+ L_PAREN@[6; 7) "("
+ ERROR@[7; 8)
+ R_CURLY@[7; 8) "}"
+ ERROR@[8; 9)
+ R_PAREN@[8; 9) ")"
+ WHITESPACE@[9; 10) " "
+ ERROR@[10; 13)
+ L_CURLY@[10; 11) "{"
+ WHITESPACE@[11; 12) "\n"
+ R_CURLY@[12; 13) "}"
+ WHITESPACE@[13; 14) "\n"
+error 7: expected value parameter
+error 7: expected R_PAREN
+error 7: expected a block
+error 7: unmatched `}`
+error 8: expected an item
+error 10: expected an item
--- /dev/null
+fn foo() {
+ foo(
+ 1, 2
+ )
+ return 92;
+}
--- /dev/null
+SOURCE_FILE@[0; 56)
+ FN_DEF@[0; 55)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 55)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ EXPR_STMT@[15; 38)
+ CALL_EXPR@[15; 38)
+ PATH_EXPR@[15; 18)
+ PATH@[15; 18)
+ PATH_SEGMENT@[15; 18)
+ NAME_REF@[15; 18)
+ IDENT@[15; 18) "foo"
+ ARG_LIST@[18; 38)
+ L_PAREN@[18; 19) "("
+ WHITESPACE@[19; 28) "\n "
+ LITERAL@[28; 29)
+ INT_NUMBER@[28; 29) "1"
+ COMMA@[29; 30) ","
+ WHITESPACE@[30; 31) " "
+ LITERAL@[31; 32)
+ INT_NUMBER@[31; 32) "2"
+ WHITESPACE@[32; 37) "\n "
+ R_PAREN@[37; 38) ")"
+ WHITESPACE@[38; 43) "\n "
+ EXPR_STMT@[43; 53)
+ RETURN_EXPR@[43; 52)
+ RETURN_KW@[43; 49) "return"
+ WHITESPACE@[49; 50) " "
+ LITERAL@[50; 52)
+ INT_NUMBER@[50; 52) "92"
+ SEMI@[52; 53) ";"
+ WHITESPACE@[53; 54) "\n"
+ R_CURLY@[54; 55) "}"
+ WHITESPACE@[55; 56) "\n"
+error 38: expected SEMI
--- /dev/null
+fn foo(foo: i32) {
+ let bar = 92;
+ 1 +
+}
--- /dev/null
+SOURCE_FILE@[0; 47)
+ FN_DEF@[0; 46)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 16)
+ L_PAREN@[6; 7) "("
+ PARAM@[7; 15)
+ BIND_PAT@[7; 10)
+ NAME@[7; 10)
+ IDENT@[7; 10) "foo"
+ COLON@[10; 11) ":"
+ WHITESPACE@[11; 12) " "
+ PATH_TYPE@[12; 15)
+ PATH@[12; 15)
+ PATH_SEGMENT@[12; 15)
+ NAME_REF@[12; 15)
+ IDENT@[12; 15) "i32"
+ R_PAREN@[15; 16) ")"
+ WHITESPACE@[16; 17) " "
+ BLOCK@[17; 46)
+ L_CURLY@[17; 18) "{"
+ WHITESPACE@[18; 23) "\n "
+ LET_STMT@[23; 36)
+ LET_KW@[23; 26) "let"
+ WHITESPACE@[26; 27) " "
+ BIND_PAT@[27; 30)
+ NAME@[27; 30)
+ IDENT@[27; 30) "bar"
+ WHITESPACE@[30; 31) " "
+ EQ@[31; 32) "="
+ WHITESPACE@[32; 33) " "
+ LITERAL@[33; 35)
+ INT_NUMBER@[33; 35) "92"
+ SEMI@[35; 36) ";"
+ WHITESPACE@[36; 41) "\n "
+ BIN_EXPR@[41; 44)
+ LITERAL@[41; 42)
+ INT_NUMBER@[41; 42) "1"
+ WHITESPACE@[42; 43) " "
+ PLUS@[43; 44) "+"
+ WHITESPACE@[44; 45) "\n"
+ R_CURLY@[45; 46) "}"
+ WHITESPACE@[46; 47) "\n"
+error 44: expected expression
--- /dev/null
+impl FnScopes {
+ fn new_scope(&) -> ScopeId {
+ let res = self.scopes.len();
+ self.scopes.push(ScopeData { parent: None, entries: vec![] })
+ }
+
+ fn set_parent
+}
--- /dev/null
+SOURCE_FILE@[0; 183)
+ IMPL_BLOCK@[0; 182)
+ IMPL_KW@[0; 4) "impl"
+ WHITESPACE@[4; 5) " "
+ PATH_TYPE@[5; 13)
+ PATH@[5; 13)
+ PATH_SEGMENT@[5; 13)
+ NAME_REF@[5; 13)
+ IDENT@[5; 13) "FnScopes"
+ WHITESPACE@[13; 14) " "
+ ITEM_LIST@[14; 182)
+ L_CURLY@[14; 15) "{"
+ WHITESPACE@[15; 20) "\n "
+ FN_DEF@[20; 161)
+ FN_KW@[20; 22) "fn"
+ WHITESPACE@[22; 23) " "
+ NAME@[23; 32)
+ IDENT@[23; 32) "new_scope"
+ PARAM_LIST@[32; 35)
+ L_PAREN@[32; 33) "("
+ PARAM@[33; 34)
+ REF_PAT@[33; 34)
+ AMP@[33; 34) "&"
+ R_PAREN@[34; 35) ")"
+ WHITESPACE@[35; 36) " "
+ RET_TYPE@[36; 46)
+ THIN_ARROW@[36; 38) "->"
+ WHITESPACE@[38; 39) " "
+ PATH_TYPE@[39; 46)
+ PATH@[39; 46)
+ PATH_SEGMENT@[39; 46)
+ NAME_REF@[39; 46)
+ IDENT@[39; 46) "ScopeId"
+ WHITESPACE@[46; 47) " "
+ BLOCK@[47; 161)
+ L_CURLY@[47; 48) "{"
+ WHITESPACE@[48; 57) "\n "
+ LET_STMT@[57; 85)
+ LET_KW@[57; 60) "let"
+ WHITESPACE@[60; 61) " "
+ BIND_PAT@[61; 64)
+ NAME@[61; 64)
+ IDENT@[61; 64) "res"
+ WHITESPACE@[64; 65) " "
+ EQ@[65; 66) "="
+ WHITESPACE@[66; 67) " "
+ METHOD_CALL_EXPR@[67; 84)
+ FIELD_EXPR@[67; 78)
+ PATH_EXPR@[67; 71)
+ PATH@[67; 71)
+ PATH_SEGMENT@[67; 71)
+ SELF_KW@[67; 71) "self"
+ DOT@[71; 72) "."
+ NAME_REF@[72; 78)
+ IDENT@[72; 78) "scopes"
+ DOT@[78; 79) "."
+ NAME_REF@[79; 82)
+ IDENT@[79; 82) "len"
+ ARG_LIST@[82; 84)
+ L_PAREN@[82; 83) "("
+ R_PAREN@[83; 84) ")"
+ SEMI@[84; 85) ";"
+ WHITESPACE@[85; 94) "\n "
+ METHOD_CALL_EXPR@[94; 155)
+ FIELD_EXPR@[94; 105)
+ PATH_EXPR@[94; 98)
+ PATH@[94; 98)
+ PATH_SEGMENT@[94; 98)
+ SELF_KW@[94; 98) "self"
+ DOT@[98; 99) "."
+ NAME_REF@[99; 105)
+ IDENT@[99; 105) "scopes"
+ DOT@[105; 106) "."
+ NAME_REF@[106; 110)
+ IDENT@[106; 110) "push"
+ ARG_LIST@[110; 155)
+ L_PAREN@[110; 111) "("
+ STRUCT_LIT@[111; 154)
+ PATH@[111; 120)
+ PATH_SEGMENT@[111; 120)
+ NAME_REF@[111; 120)
+ IDENT@[111; 120) "ScopeData"
+ WHITESPACE@[120; 121) " "
+ NAMED_FIELD_LIST@[121; 154)
+ L_CURLY@[121; 122) "{"
+ WHITESPACE@[122; 123) " "
+ NAMED_FIELD@[123; 135)
+ NAME_REF@[123; 129)
+ IDENT@[123; 129) "parent"
+ COLON@[129; 130) ":"
+ WHITESPACE@[130; 131) " "
+ PATH_EXPR@[131; 135)
+ PATH@[131; 135)
+ PATH_SEGMENT@[131; 135)
+ NAME_REF@[131; 135)
+ IDENT@[131; 135) "None"
+ COMMA@[135; 136) ","
+ WHITESPACE@[136; 137) " "
+ NAMED_FIELD@[137; 152)
+ NAME_REF@[137; 144)
+ IDENT@[137; 144) "entries"
+ COLON@[144; 145) ":"
+ WHITESPACE@[145; 146) " "
+ MACRO_CALL@[146; 152)
+ PATH@[146; 149)
+ PATH_SEGMENT@[146; 149)
+ NAME_REF@[146; 149)
+ IDENT@[146; 149) "vec"
+ EXCL@[149; 150) "!"
+ TOKEN_TREE@[150; 152)
+ L_BRACK@[150; 151) "["
+ R_BRACK@[151; 152) "]"
+ WHITESPACE@[152; 153) " "
+ R_CURLY@[153; 154) "}"
+ R_PAREN@[154; 155) ")"
+ WHITESPACE@[155; 160) "\n "
+ R_CURLY@[160; 161) "}"
+ WHITESPACE@[161; 167) "\n\n "
+ FN_DEF@[167; 180)
+ FN_KW@[167; 169) "fn"
+ WHITESPACE@[169; 170) " "
+ NAME@[170; 180)
+ IDENT@[170; 180) "set_parent"
+ WHITESPACE@[180; 181) "\n"
+ R_CURLY@[181; 182) "}"
+ WHITESPACE@[182; 183) "\n"
+error 34: expected pattern
+error 34: expected COLON
+error 34: expected type
+error 180: expected function arguments
+error 180: expected a block
--- /dev/null
+fn foo() {
+ let foo =
+ let bar = 1;
+ let
+ let baz = 92;
+ let
+ if true {}
+ let
+ while true {}
+ let
+ loop {}
+}
--- /dev/null
+SOURCE_FILE@[0; 139)
+ FN_DEF@[0; 138)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 138)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ LET_STMT@[15; 24)
+ LET_KW@[15; 18) "let"
+ WHITESPACE@[18; 19) " "
+ BIND_PAT@[19; 22)
+ NAME@[19; 22)
+ IDENT@[19; 22) "foo"
+ WHITESPACE@[22; 23) " "
+ EQ@[23; 24) "="
+ WHITESPACE@[24; 29) "\n "
+ LET_STMT@[29; 41)
+ LET_KW@[29; 32) "let"
+ WHITESPACE@[32; 33) " "
+ BIND_PAT@[33; 36)
+ NAME@[33; 36)
+ IDENT@[33; 36) "bar"
+ WHITESPACE@[36; 37) " "
+ EQ@[37; 38) "="
+ WHITESPACE@[38; 39) " "
+ LITERAL@[39; 40)
+ INT_NUMBER@[39; 40) "1"
+ SEMI@[40; 41) ";"
+ WHITESPACE@[41; 46) "\n "
+ LET_STMT@[46; 49)
+ LET_KW@[46; 49) "let"
+ WHITESPACE@[49; 54) "\n "
+ LET_STMT@[54; 67)
+ LET_KW@[54; 57) "let"
+ WHITESPACE@[57; 58) " "
+ BIND_PAT@[58; 61)
+ NAME@[58; 61)
+ IDENT@[58; 61) "baz"
+ WHITESPACE@[61; 62) " "
+ EQ@[62; 63) "="
+ WHITESPACE@[63; 64) " "
+ LITERAL@[64; 66)
+ INT_NUMBER@[64; 66) "92"
+ SEMI@[66; 67) ";"
+ WHITESPACE@[67; 72) "\n "
+ LET_STMT@[72; 75)
+ LET_KW@[72; 75) "let"
+ WHITESPACE@[75; 80) "\n "
+ EXPR_STMT@[80; 90)
+ IF_EXPR@[80; 90)
+ IF_KW@[80; 82) "if"
+ WHITESPACE@[82; 83) " "
+ CONDITION@[83; 87)
+ LITERAL@[83; 87)
+ TRUE_KW@[83; 87) "true"
+ WHITESPACE@[87; 88) " "
+ BLOCK@[88; 90)
+ L_CURLY@[88; 89) "{"
+ R_CURLY@[89; 90) "}"
+ WHITESPACE@[90; 95) "\n "
+ LET_STMT@[95; 98)
+ LET_KW@[95; 98) "let"
+ WHITESPACE@[98; 103) "\n "
+ EXPR_STMT@[103; 116)
+ WHILE_EXPR@[103; 116)
+ WHILE_KW@[103; 108) "while"
+ WHITESPACE@[108; 109) " "
+ CONDITION@[109; 113)
+ LITERAL@[109; 113)
+ TRUE_KW@[109; 113) "true"
+ WHITESPACE@[113; 114) " "
+ BLOCK@[114; 116)
+ L_CURLY@[114; 115) "{"
+ R_CURLY@[115; 116) "}"
+ WHITESPACE@[116; 121) "\n "
+ LET_STMT@[121; 124)
+ LET_KW@[121; 124) "let"
+ WHITESPACE@[124; 129) "\n "
+ LOOP_EXPR@[129; 136)
+ LOOP_KW@[129; 133) "loop"
+ WHITESPACE@[133; 134) " "
+ BLOCK@[134; 136)
+ L_CURLY@[134; 135) "{"
+ R_CURLY@[135; 136) "}"
+ WHITESPACE@[136; 137) "\n"
+ R_CURLY@[137; 138) "}"
+ WHITESPACE@[138; 139) "\n"
+error 24: expected expression
+error 24: expected SEMI
+error 49: expected pattern
+error 49: expected SEMI
+error 75: expected pattern
+error 75: expected SEMI
+error 98: expected pattern
+error 98: expected SEMI
+error 124: expected pattern
+error 124: expected SEMI
--- /dev/null
+fn
+
+fn foo() {}
--- /dev/null
+SOURCE_FILE@[0; 16)
+ FN_DEF@[0; 2)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 4) "\n\n"
+ FN_DEF@[4; 15)
+ FN_KW@[4; 6) "fn"
+ WHITESPACE@[6; 7) " "
+ NAME@[7; 10)
+ IDENT@[7; 10) "foo"
+ PARAM_LIST@[10; 12)
+ L_PAREN@[10; 11) "("
+ R_PAREN@[11; 12) ")"
+ WHITESPACE@[12; 13) " "
+ BLOCK@[13; 15)
+ L_CURLY@[13; 14) "{"
+ R_CURLY@[14; 15) "}"
+ WHITESPACE@[15; 16) "\n"
+error 2: expected a name
+error 2: expected function arguments
+error 2: expected a block
--- /dev/null
+fn foo(x: i32, y) {
+}
--- /dev/null
+SOURCE_FILE@[0; 22)
+ FN_DEF@[0; 21)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 17)
+ L_PAREN@[6; 7) "("
+ PARAM@[7; 13)
+ BIND_PAT@[7; 8)
+ NAME@[7; 8)
+ IDENT@[7; 8) "x"
+ COLON@[8; 9) ":"
+ WHITESPACE@[9; 10) " "
+ PATH_TYPE@[10; 13)
+ PATH@[10; 13)
+ PATH_SEGMENT@[10; 13)
+ NAME_REF@[10; 13)
+ IDENT@[10; 13) "i32"
+ COMMA@[13; 14) ","
+ WHITESPACE@[14; 15) " "
+ PARAM@[15; 16)
+ BIND_PAT@[15; 16)
+ NAME@[15; 16)
+ IDENT@[15; 16) "y"
+ R_PAREN@[16; 17) ")"
+ WHITESPACE@[17; 18) " "
+ BLOCK@[18; 21)
+ L_CURLY@[18; 19) "{"
+ WHITESPACE@[19; 20) "\n"
+ R_CURLY@[20; 21) "}"
+ WHITESPACE@[21; 22) "\n"
+error 16: expected COLON
+error 16: expected type
--- /dev/null
+fn a() { [1, 2, @, struct, let] }
+fn b() { foo(1, 2, @, impl, let) }
+fn c() { foo.bar(1, 2, @, ], trait, let) }
--- /dev/null
+SOURCE_FILE@[0; 112)
+ FN_DEF@[0; 33)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 4)
+ IDENT@[3; 4) "a"
+ PARAM_LIST@[4; 6)
+ L_PAREN@[4; 5) "("
+ R_PAREN@[5; 6) ")"
+ WHITESPACE@[6; 7) " "
+ BLOCK@[7; 33)
+ L_CURLY@[7; 8) "{"
+ WHITESPACE@[8; 9) " "
+ EXPR_STMT@[9; 15)
+ ARRAY_EXPR@[9; 15)
+ L_BRACK@[9; 10) "["
+ LITERAL@[10; 11)
+ INT_NUMBER@[10; 11) "1"
+ COMMA@[11; 12) ","
+ WHITESPACE@[12; 13) " "
+ LITERAL@[13; 14)
+ INT_NUMBER@[13; 14) "2"
+ COMMA@[14; 15) ","
+ WHITESPACE@[15; 16) " "
+ EXPR_STMT@[16; 17)
+ ERROR@[16; 17)
+ AT@[16; 17) "@"
+ EXPR_STMT@[17; 18)
+ ERROR@[17; 18)
+ COMMA@[17; 18) ","
+ WHITESPACE@[18; 19) " "
+ STRUCT_DEF@[19; 26)
+ STRUCT_KW@[19; 25) "struct"
+ ERROR@[25; 26)
+ COMMA@[25; 26) ","
+ WHITESPACE@[26; 27) " "
+ LET_STMT@[27; 31)
+ LET_KW@[27; 30) "let"
+ ERROR@[30; 31)
+ R_BRACK@[30; 31) "]"
+ WHITESPACE@[31; 32) " "
+ R_CURLY@[32; 33) "}"
+ WHITESPACE@[33; 34) "\n"
+ FN_DEF@[34; 68)
+ FN_KW@[34; 36) "fn"
+ WHITESPACE@[36; 37) " "
+ NAME@[37; 38)
+ IDENT@[37; 38) "b"
+ PARAM_LIST@[38; 40)
+ L_PAREN@[38; 39) "("
+ R_PAREN@[39; 40) ")"
+ WHITESPACE@[40; 41) " "
+ BLOCK@[41; 68)
+ L_CURLY@[41; 42) "{"
+ WHITESPACE@[42; 43) " "
+ EXPR_STMT@[43; 52)
+ CALL_EXPR@[43; 52)
+ PATH_EXPR@[43; 46)
+ PATH@[43; 46)
+ PATH_SEGMENT@[43; 46)
+ NAME_REF@[43; 46)
+ IDENT@[43; 46) "foo"
+ ARG_LIST@[46; 52)
+ L_PAREN@[46; 47) "("
+ LITERAL@[47; 48)
+ INT_NUMBER@[47; 48) "1"
+ COMMA@[48; 49) ","
+ WHITESPACE@[49; 50) " "
+ LITERAL@[50; 51)
+ INT_NUMBER@[50; 51) "2"
+ COMMA@[51; 52) ","
+ WHITESPACE@[52; 53) " "
+ EXPR_STMT@[53; 54)
+ ERROR@[53; 54)
+ AT@[53; 54) "@"
+ EXPR_STMT@[54; 55)
+ ERROR@[54; 55)
+ COMMA@[54; 55) ","
+ WHITESPACE@[55; 56) " "
+ IMPL_BLOCK@[56; 60)
+ IMPL_KW@[56; 60) "impl"
+ EXPR_STMT@[60; 61)
+ ERROR@[60; 61)
+ COMMA@[60; 61) ","
+ WHITESPACE@[61; 62) " "
+ LET_STMT@[62; 65)
+ LET_KW@[62; 65) "let"
+ ERROR@[65; 66)
+ R_PAREN@[65; 66) ")"
+ WHITESPACE@[66; 67) " "
+ R_CURLY@[67; 68) "}"
+ WHITESPACE@[68; 69) "\n"
+ FN_DEF@[69; 111)
+ FN_KW@[69; 71) "fn"
+ WHITESPACE@[71; 72) " "
+ NAME@[72; 73)
+ IDENT@[72; 73) "c"
+ PARAM_LIST@[73; 75)
+ L_PAREN@[73; 74) "("
+ R_PAREN@[74; 75) ")"
+ WHITESPACE@[75; 76) " "
+ BLOCK@[76; 111)
+ L_CURLY@[76; 77) "{"
+ WHITESPACE@[77; 78) " "
+ EXPR_STMT@[78; 91)
+ METHOD_CALL_EXPR@[78; 91)
+ PATH_EXPR@[78; 81)
+ PATH@[78; 81)
+ PATH_SEGMENT@[78; 81)
+ NAME_REF@[78; 81)
+ IDENT@[78; 81) "foo"
+ DOT@[81; 82) "."
+ NAME_REF@[82; 85)
+ IDENT@[82; 85) "bar"
+ ARG_LIST@[85; 91)
+ L_PAREN@[85; 86) "("
+ LITERAL@[86; 87)
+ INT_NUMBER@[86; 87) "1"
+ COMMA@[87; 88) ","
+ WHITESPACE@[88; 89) " "
+ LITERAL@[89; 90)
+ INT_NUMBER@[89; 90) "2"
+ COMMA@[90; 91) ","
+ WHITESPACE@[91; 92) " "
+ EXPR_STMT@[92; 93)
+ ERROR@[92; 93)
+ AT@[92; 93) "@"
+ EXPR_STMT@[93; 94)
+ ERROR@[93; 94)
+ COMMA@[93; 94) ","
+ WHITESPACE@[94; 95) " "
+ EXPR_STMT@[95; 96)
+ ERROR@[95; 96)
+ R_BRACK@[95; 96) "]"
+ EXPR_STMT@[96; 97)
+ ERROR@[96; 97)
+ COMMA@[96; 97) ","
+ WHITESPACE@[97; 98) " "
+ TRAIT_DEF@[98; 104)
+ TRAIT_KW@[98; 103) "trait"
+ ERROR@[103; 104)
+ COMMA@[103; 104) ","
+ WHITESPACE@[104; 105) " "
+ LET_STMT@[105; 108)
+ LET_KW@[105; 108) "let"
+ ERROR@[108; 109)
+ R_PAREN@[108; 109) ")"
+ WHITESPACE@[109; 110) " "
+ R_CURLY@[110; 111) "}"
+ WHITESPACE@[111; 112) "\n"
+error 15: expected expression
+error 15: expected R_BRACK
+error 15: expected SEMI
+error 16: expected expression
+error 17: expected SEMI
+error 17: expected expression
+error 18: expected SEMI
+error 25: expected a name
+error 26: expected `;`, `{`, or `(`
+error 30: expected pattern
+error 31: expected SEMI
+error 52: expected expression
+error 52: expected SEMI
+error 53: expected expression
+error 54: expected SEMI
+error 54: expected expression
+error 55: expected SEMI
+error 60: expected type
+error 60: expected `{`
+error 60: expected expression
+error 61: expected SEMI
+error 65: expected pattern
+error 65: expected SEMI
+error 65: expected expression
+error 91: expected expression
+error 91: expected SEMI
+error 92: expected expression
+error 93: expected SEMI
+error 93: expected expression
+error 94: expected SEMI
+error 95: expected expression
+error 96: expected SEMI
+error 96: expected expression
+error 97: expected SEMI
+error 103: expected a name
+error 104: expected `{`
+error 108: expected pattern
+error 108: expected SEMI
+error 108: expected expression
--- /dev/null
+fn main() {
+ foo! (
+ bar, "baz", 1, 2.0
+ } //~ ERROR incorrect close delimiter
+}
--- /dev/null
+SOURCE_FILE@[0; 94)
+ FN_DEF@[0; 55)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 7)
+ IDENT@[3; 7) "main"
+ PARAM_LIST@[7; 9)
+ L_PAREN@[7; 8) "("
+ R_PAREN@[8; 9) ")"
+ WHITESPACE@[9; 10) " "
+ BLOCK@[10; 55)
+ L_CURLY@[10; 11) "{"
+ WHITESPACE@[11; 16) "\n "
+ MACRO_CALL@[16; 49)
+ PATH@[16; 19)
+ PATH_SEGMENT@[16; 19)
+ NAME_REF@[16; 19)
+ IDENT@[16; 19) "foo"
+ EXCL@[19; 20) "!"
+ WHITESPACE@[20; 21) " "
+ TOKEN_TREE@[21; 49)
+ L_PAREN@[21; 22) "("
+ WHITESPACE@[22; 31) "\n "
+ IDENT@[31; 34) "bar"
+ COMMA@[34; 35) ","
+ WHITESPACE@[35; 36) " "
+ STRING@[36; 41) "\"baz\""
+ COMMA@[41; 42) ","
+ WHITESPACE@[42; 43) " "
+ INT_NUMBER@[43; 44) "1"
+ COMMA@[44; 45) ","
+ WHITESPACE@[45; 46) " "
+ FLOAT_NUMBER@[46; 49) "2.0"
+ WHITESPACE@[49; 54) "\n "
+ R_CURLY@[54; 55) "}"
+ WHITESPACE@[55; 56) " "
+ COMMENT@[56; 91) "//~ ERROR incorrect c ..."
+ WHITESPACE@[91; 92) "\n"
+ ERROR@[92; 93)
+ R_CURLY@[92; 93) "}"
+ WHITESPACE@[93; 94) "\n"
+error 49: unmatched `}`
+error 92: unmatched `}`
--- /dev/null
+fn f<T: (Copy) + (?Sized) + (for<'a> Trait<'a>)>() {}
+
+fn main() {
+ let _: Box<(Copy) + (?Sized) + (for<'a> Trait<'a>)>;
+ let _: Box<(?Sized) + (for<'a> Trait<'a>) + (Copy)>;
+ let _: Box<(for<'a> Trait<'a>) + (Copy) + (?Sized)>;
+}
--- /dev/null
+SOURCE_FILE@[0; 240)
+ FN_DEF@[0; 53)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 4)
+ IDENT@[3; 4) "f"
+ TYPE_PARAM_LIST@[4; 48)
+ L_ANGLE@[4; 5) "<"
+ TYPE_PARAM@[5; 47)
+ NAME@[5; 6)
+ IDENT@[5; 6) "T"
+ COLON@[6; 7) ":"
+ WHITESPACE@[7; 8) " "
+ TYPE_BOUND_LIST@[8; 47)
+ TYPE_BOUND@[8; 14)
+ L_PAREN@[8; 9) "("
+ PATH_TYPE@[9; 13)
+ PATH@[9; 13)
+ PATH_SEGMENT@[9; 13)
+ NAME_REF@[9; 13)
+ IDENT@[9; 13) "Copy"
+ R_PAREN@[13; 14) ")"
+ WHITESPACE@[14; 15) " "
+ PLUS@[15; 16) "+"
+ WHITESPACE@[16; 17) " "
+ TYPE_BOUND@[17; 25)
+ L_PAREN@[17; 18) "("
+ QUESTION@[18; 19) "?"
+ PATH_TYPE@[19; 24)
+ PATH@[19; 24)
+ PATH_SEGMENT@[19; 24)
+ NAME_REF@[19; 24)
+ IDENT@[19; 24) "Sized"
+ R_PAREN@[24; 25) ")"
+ WHITESPACE@[25; 26) " "
+ PLUS@[26; 27) "+"
+ WHITESPACE@[27; 28) " "
+ TYPE_BOUND@[28; 47)
+ L_PAREN@[28; 29) "("
+ FOR_TYPE@[29; 46)
+ FOR_KW@[29; 32) "for"
+ TYPE_PARAM_LIST@[32; 36)
+ L_ANGLE@[32; 33) "<"
+ LIFETIME_PARAM@[33; 35)
+ LIFETIME@[33; 35) "\'a"
+ R_ANGLE@[35; 36) ">"
+ WHITESPACE@[36; 37) " "
+ PATH_TYPE@[37; 46)
+ PATH@[37; 46)
+ PATH_SEGMENT@[37; 46)
+ NAME_REF@[37; 42)
+ IDENT@[37; 42) "Trait"
+ TYPE_ARG_LIST@[42; 46)
+ L_ANGLE@[42; 43) "<"
+ LIFETIME_ARG@[43; 45)
+ LIFETIME@[43; 45) "\'a"
+ R_ANGLE@[45; 46) ">"
+ R_PAREN@[46; 47) ")"
+ R_ANGLE@[47; 48) ">"
+ PARAM_LIST@[48; 50)
+ L_PAREN@[48; 49) "("
+ R_PAREN@[49; 50) ")"
+ WHITESPACE@[50; 51) " "
+ BLOCK@[51; 53)
+ L_CURLY@[51; 52) "{"
+ R_CURLY@[52; 53) "}"
+ WHITESPACE@[53; 55) "\n\n"
+ FN_DEF@[55; 239)
+ FN_KW@[55; 57) "fn"
+ WHITESPACE@[57; 58) " "
+ NAME@[58; 62)
+ IDENT@[58; 62) "main"
+ PARAM_LIST@[62; 64)
+ L_PAREN@[62; 63) "("
+ R_PAREN@[63; 64) ")"
+ WHITESPACE@[64; 65) " "
+ BLOCK@[65; 239)
+ L_CURLY@[65; 66) "{"
+ WHITESPACE@[66; 71) "\n "
+ LET_STMT@[71; 121)
+ LET_KW@[71; 74) "let"
+ WHITESPACE@[74; 75) " "
+ PLACEHOLDER_PAT@[75; 76)
+ UNDERSCORE@[75; 76) "_"
+ COLON@[76; 77) ":"
+ WHITESPACE@[77; 78) " "
+ DYN_TRAIT_TYPE@[78; 121)
+ TYPE_BOUND_LIST@[78; 121)
+ TYPE_BOUND@[78; 88)
+ PATH_TYPE@[78; 88)
+ PATH@[78; 88)
+ PATH_SEGMENT@[78; 88)
+ NAME_REF@[78; 81)
+ IDENT@[78; 81) "Box"
+ TYPE_ARG_LIST@[81; 88)
+ L_ANGLE@[81; 82) "<"
+ TYPE_ARG@[82; 88)
+ PAREN_TYPE@[82; 88)
+ L_PAREN@[82; 83) "("
+ PATH_TYPE@[83; 87)
+ PATH@[83; 87)
+ PATH_SEGMENT@[83; 87)
+ NAME_REF@[83; 87)
+ IDENT@[83; 87) "Copy"
+ R_PAREN@[87; 88) ")"
+ WHITESPACE@[88; 89) " "
+ PLUS@[89; 90) "+"
+ WHITESPACE@[90; 91) " "
+ TYPE_BOUND@[91; 99)
+ L_PAREN@[91; 92) "("
+ QUESTION@[92; 93) "?"
+ PATH_TYPE@[93; 98)
+ PATH@[93; 98)
+ PATH_SEGMENT@[93; 98)
+ NAME_REF@[93; 98)
+ IDENT@[93; 98) "Sized"
+ R_PAREN@[98; 99) ")"
+ WHITESPACE@[99; 100) " "
+ PLUS@[100; 101) "+"
+ WHITESPACE@[101; 102) " "
+ TYPE_BOUND@[102; 121)
+ L_PAREN@[102; 103) "("
+ FOR_TYPE@[103; 120)
+ FOR_KW@[103; 106) "for"
+ TYPE_PARAM_LIST@[106; 110)
+ L_ANGLE@[106; 107) "<"
+ LIFETIME_PARAM@[107; 109)
+ LIFETIME@[107; 109) "\'a"
+ R_ANGLE@[109; 110) ">"
+ WHITESPACE@[110; 111) " "
+ PATH_TYPE@[111; 120)
+ PATH@[111; 120)
+ PATH_SEGMENT@[111; 120)
+ NAME_REF@[111; 116)
+ IDENT@[111; 116) "Trait"
+ TYPE_ARG_LIST@[116; 120)
+ L_ANGLE@[116; 117) "<"
+ LIFETIME_ARG@[117; 119)
+ LIFETIME@[117; 119) "\'a"
+ R_ANGLE@[119; 120) ">"
+ R_PAREN@[120; 121) ")"
+ EXPR_STMT@[121; 123)
+ ERROR@[121; 122)
+ R_ANGLE@[121; 122) ">"
+ SEMI@[122; 123) ";"
+ WHITESPACE@[123; 128) "\n "
+ LET_STMT@[128; 141)
+ LET_KW@[128; 131) "let"
+ WHITESPACE@[131; 132) " "
+ PLACEHOLDER_PAT@[132; 133)
+ UNDERSCORE@[132; 133) "_"
+ COLON@[133; 134) ":"
+ WHITESPACE@[134; 135) " "
+ PATH_TYPE@[135; 141)
+ PATH@[135; 141)
+ PATH_SEGMENT@[135; 141)
+ NAME_REF@[135; 138)
+ IDENT@[135; 138) "Box"
+ TYPE_ARG_LIST@[138; 141)
+ L_ANGLE@[138; 139) "<"
+ TYPE_ARG@[139; 141)
+ PAREN_TYPE@[139; 141)
+ L_PAREN@[139; 140) "("
+ ERROR@[140; 141)
+ QUESTION@[140; 141) "?"
+ EXPR_STMT@[141; 146)
+ PATH_EXPR@[141; 146)
+ PATH@[141; 146)
+ PATH_SEGMENT@[141; 146)
+ NAME_REF@[141; 146)
+ IDENT@[141; 146) "Sized"
+ EXPR_STMT@[146; 147)
+ ERROR@[146; 147)
+ R_PAREN@[146; 147) ")"
+ WHITESPACE@[147; 148) " "
+ EXPR_STMT@[148; 149)
+ ERROR@[148; 149)
+ PLUS@[148; 149) "+"
+ WHITESPACE@[149; 150) " "
+ EXPR_STMT@[150; 151)
+ PAREN_EXPR@[150; 151)
+ L_PAREN@[150; 151) "("
+ EXPR_STMT@[151; 157)
+ FOR_EXPR@[151; 157)
+ FOR_KW@[151; 154) "for"
+ ERROR@[154; 155)
+ L_ANGLE@[154; 155) "<"
+ ERROR@[155; 157)
+ LIFETIME@[155; 157) "\'a"
+ EXPR_STMT@[157; 158)
+ ERROR@[157; 158)
+ R_ANGLE@[157; 158) ">"
+ WHITESPACE@[158; 159) " "
+ EXPR_STMT@[159; 180)
+ BIN_EXPR@[159; 180)
+ BIN_EXPR@[159; 178)
+ BIN_EXPR@[159; 169)
+ BIN_EXPR@[159; 167)
+ PATH_EXPR@[159; 164)
+ PATH@[159; 164)
+ PATH_SEGMENT@[159; 164)
+ NAME_REF@[159; 164)
+ IDENT@[159; 164) "Trait"
+ L_ANGLE@[164; 165) "<"
+ ERROR@[165; 167)
+ LIFETIME@[165; 167) "\'a"
+ R_ANGLE@[167; 168) ">"
+ ERROR@[168; 169)
+ R_PAREN@[168; 169) ")"
+ WHITESPACE@[169; 170) " "
+ PLUS@[170; 171) "+"
+ WHITESPACE@[171; 172) " "
+ PAREN_EXPR@[172; 178)
+ L_PAREN@[172; 173) "("
+ PATH_EXPR@[173; 177)
+ PATH@[173; 177)
+ PATH_SEGMENT@[173; 177)
+ NAME_REF@[173; 177)
+ IDENT@[173; 177) "Copy"
+ R_PAREN@[177; 178) ")"
+ R_ANGLE@[178; 179) ">"
+ ERROR@[179; 180)
+ SEMI@[179; 180) ";"
+ WHITESPACE@[180; 185) "\n "
+ LET_STMT@[185; 235)
+ LET_KW@[185; 188) "let"
+ WHITESPACE@[188; 189) " "
+ PLACEHOLDER_PAT@[189; 190)
+ UNDERSCORE@[189; 190) "_"
+ COLON@[190; 191) ":"
+ WHITESPACE@[191; 192) " "
+ DYN_TRAIT_TYPE@[192; 235)
+ TYPE_BOUND_LIST@[192; 235)
+ TYPE_BOUND@[192; 215)
+ PATH_TYPE@[192; 215)
+ PATH@[192; 215)
+ PATH_SEGMENT@[192; 215)
+ NAME_REF@[192; 195)
+ IDENT@[192; 195) "Box"
+ TYPE_ARG_LIST@[195; 215)
+ L_ANGLE@[195; 196) "<"
+ TYPE_ARG@[196; 215)
+ PAREN_TYPE@[196; 215)
+ L_PAREN@[196; 197) "("
+ FOR_TYPE@[197; 214)
+ FOR_KW@[197; 200) "for"
+ TYPE_PARAM_LIST@[200; 204)
+ L_ANGLE@[200; 201) "<"
+ LIFETIME_PARAM@[201; 203)
+ LIFETIME@[201; 203) "\'a"
+ R_ANGLE@[203; 204) ">"
+ WHITESPACE@[204; 205) " "
+ PATH_TYPE@[205; 214)
+ PATH@[205; 214)
+ PATH_SEGMENT@[205; 214)
+ NAME_REF@[205; 210)
+ IDENT@[205; 210) "Trait"
+ TYPE_ARG_LIST@[210; 214)
+ L_ANGLE@[210; 211) "<"
+ LIFETIME_ARG@[211; 213)
+ LIFETIME@[211; 213) "\'a"
+ R_ANGLE@[213; 214) ">"
+ R_PAREN@[214; 215) ")"
+ WHITESPACE@[215; 216) " "
+ PLUS@[216; 217) "+"
+ WHITESPACE@[217; 218) " "
+ TYPE_BOUND@[218; 224)
+ L_PAREN@[218; 219) "("
+ PATH_TYPE@[219; 223)
+ PATH@[219; 223)
+ PATH_SEGMENT@[219; 223)
+ NAME_REF@[219; 223)
+ IDENT@[219; 223) "Copy"
+ R_PAREN@[223; 224) ")"
+ WHITESPACE@[224; 225) " "
+ PLUS@[225; 226) "+"
+ WHITESPACE@[226; 227) " "
+ TYPE_BOUND@[227; 235)
+ L_PAREN@[227; 228) "("
+ QUESTION@[228; 229) "?"
+ PATH_TYPE@[229; 234)
+ PATH@[229; 234)
+ PATH_SEGMENT@[229; 234)
+ NAME_REF@[229; 234)
+ IDENT@[229; 234) "Sized"
+ R_PAREN@[234; 235) ")"
+ EXPR_STMT@[235; 237)
+ ERROR@[235; 236)
+ R_ANGLE@[235; 236) ">"
+ SEMI@[236; 237) ";"
+ WHITESPACE@[237; 238) "\n"
+ R_CURLY@[238; 239) "}"
+ WHITESPACE@[239; 240) "\n"
+error 88: expected COMMA
+error 88: expected R_ANGLE
+error 121: expected SEMI
+error 121: expected expression
+error 140: expected type
+error 141: expected R_PAREN
+error 141: expected COMMA
+error 141: expected R_ANGLE
+error 141: expected SEMI
+error 146: expected SEMI
+error 146: expected expression
+error 147: expected SEMI
+error 148: expected expression
+error 149: expected SEMI
+error 151: expected expression
+error 151: expected R_PAREN
+error 151: expected SEMI
+error 154: expected pattern
+error 155: expected IN_KW
+error 155: expected expression
+error 157: expected a block
+error 157: expected expression
+error 158: expected SEMI
+error 165: expected expression
+error 168: expected expression
+error 179: expected expression
+error 180: expected SEMI
+error 215: expected COMMA
+error 215: expected R_ANGLE
+error 235: expected SEMI
+error 235: expected expression
--- /dev/null
+fn main() {
+ enum Test {
+ Var1,
+ Var2(String),
+ Var3 {
+ abc: {}, //~ ERROR: expected type, found `{`
+ },
+ }
+
+ // recover...
+ let a = 1;
+ enum Test2 {
+ Fine,
+ }
+
+ enum Test3 {
+ StillFine {
+ def: i32,
+ },
+ }
+
+ {
+ // fail again
+ enum Test4 {
+ Nope(i32 {}) //~ ERROR: found `{`
+ //~^ ERROR: found `{`
+ }
+ }
+ // still recover later
+ let bad_syntax = _; //~ ERROR: expected expression, found reserved identifier `_`
+}
--- /dev/null
+SOURCE_FILE@[0; 575)
+ FN_DEF@[0; 574)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 7)
+ IDENT@[3; 7) "main"
+ PARAM_LIST@[7; 9)
+ L_PAREN@[7; 8) "("
+ R_PAREN@[8; 9) ")"
+ WHITESPACE@[9; 10) " "
+ BLOCK@[10; 574)
+ L_CURLY@[10; 11) "{"
+ WHITESPACE@[11; 16) "\n "
+ ENUM_DEF@[16; 152)
+ ENUM_KW@[16; 20) "enum"
+ WHITESPACE@[20; 21) " "
+ NAME@[21; 25)
+ IDENT@[21; 25) "Test"
+ WHITESPACE@[25; 26) " "
+ ENUM_VARIANT_LIST@[26; 152)
+ L_CURLY@[26; 27) "{"
+ WHITESPACE@[27; 36) "\n "
+ ENUM_VARIANT@[36; 40)
+ NAME@[36; 40)
+ IDENT@[36; 40) "Var1"
+ COMMA@[40; 41) ","
+ WHITESPACE@[41; 50) "\n "
+ ENUM_VARIANT@[50; 62)
+ NAME@[50; 54)
+ IDENT@[50; 54) "Var2"
+ POS_FIELD_DEF_LIST@[54; 62)
+ L_PAREN@[54; 55) "("
+ POS_FIELD_DEF@[55; 61)
+ PATH_TYPE@[55; 61)
+ PATH@[55; 61)
+ PATH_SEGMENT@[55; 61)
+ NAME_REF@[55; 61)
+ IDENT@[55; 61) "String"
+ R_PAREN@[61; 62) ")"
+ COMMA@[62; 63) ","
+ WHITESPACE@[63; 72) "\n "
+ ENUM_VARIANT@[72; 145)
+ NAME@[72; 76)
+ IDENT@[72; 76) "Var3"
+ WHITESPACE@[76; 77) " "
+ NAMED_FIELD_DEF_LIST@[77; 145)
+ L_CURLY@[77; 78) "{"
+ WHITESPACE@[78; 91) "\n "
+ NAMED_FIELD_DEF@[91; 95)
+ NAME@[91; 94)
+ IDENT@[91; 94) "abc"
+ COLON@[94; 95) ":"
+ WHITESPACE@[95; 96) " "
+ ERROR@[96; 98)
+ L_CURLY@[96; 97) "{"
+ R_CURLY@[97; 98) "}"
+ ERROR@[98; 99)
+ COMMA@[98; 99) ","
+ WHITESPACE@[99; 100) " "
+ COMMENT@[100; 135) "//~ ERROR: expected t ..."
+ WHITESPACE@[135; 144) "\n "
+ R_CURLY@[144; 145) "}"
+ COMMA@[145; 146) ","
+ WHITESPACE@[146; 151) "\n "
+ R_CURLY@[151; 152) "}"
+ WHITESPACE@[152; 158) "\n\n "
+ COMMENT@[158; 171) "// recover..."
+ WHITESPACE@[171; 176) "\n "
+ LET_STMT@[176; 186)
+ LET_KW@[176; 179) "let"
+ WHITESPACE@[179; 180) " "
+ BIND_PAT@[180; 181)
+ NAME@[180; 181)
+ IDENT@[180; 181) "a"
+ WHITESPACE@[181; 182) " "
+ EQ@[182; 183) "="
+ WHITESPACE@[183; 184) " "
+ LITERAL@[184; 185)
+ INT_NUMBER@[184; 185) "1"
+ SEMI@[185; 186) ";"
+ WHITESPACE@[186; 191) "\n "
+ ENUM_DEF@[191; 223)
+ ENUM_KW@[191; 195) "enum"
+ WHITESPACE@[195; 196) " "
+ NAME@[196; 201)
+ IDENT@[196; 201) "Test2"
+ WHITESPACE@[201; 202) " "
+ ENUM_VARIANT_LIST@[202; 223)
+ L_CURLY@[202; 203) "{"
+ WHITESPACE@[203; 212) "\n "
+ ENUM_VARIANT@[212; 216)
+ NAME@[212; 216)
+ IDENT@[212; 216) "Fine"
+ COMMA@[216; 217) ","
+ WHITESPACE@[217; 222) "\n "
+ R_CURLY@[222; 223) "}"
+ WHITESPACE@[223; 229) "\n\n "
+ ENUM_DEF@[229; 300)
+ ENUM_KW@[229; 233) "enum"
+ WHITESPACE@[233; 234) " "
+ NAME@[234; 239)
+ IDENT@[234; 239) "Test3"
+ WHITESPACE@[239; 240) " "
+ ENUM_VARIANT_LIST@[240; 300)
+ L_CURLY@[240; 241) "{"
+ WHITESPACE@[241; 250) "\n "
+ ENUM_VARIANT@[250; 293)
+ NAME@[250; 259)
+ IDENT@[250; 259) "StillFine"
+ WHITESPACE@[259; 260) " "
+ NAMED_FIELD_DEF_LIST@[260; 293)
+ L_CURLY@[260; 261) "{"
+ WHITESPACE@[261; 274) "\n "
+ NAMED_FIELD_DEF@[274; 282)
+ NAME@[274; 277)
+ IDENT@[274; 277) "def"
+ COLON@[277; 278) ":"
+ WHITESPACE@[278; 279) " "
+ PATH_TYPE@[279; 282)
+ PATH@[279; 282)
+ PATH_SEGMENT@[279; 282)
+ NAME_REF@[279; 282)
+ IDENT@[279; 282) "i32"
+ COMMA@[282; 283) ","
+ WHITESPACE@[283; 292) "\n "
+ R_CURLY@[292; 293) "}"
+ COMMA@[293; 294) ","
+ WHITESPACE@[294; 299) "\n "
+ R_CURLY@[299; 300) "}"
+ WHITESPACE@[300; 306) "\n\n "
+ EXPR_STMT@[306; 459)
+ BLOCK_EXPR@[306; 459)
+ BLOCK@[306; 459)
+ L_CURLY@[306; 307) "{"
+ WHITESPACE@[307; 316) "\n "
+ ENUM_DEF@[316; 453)
+ COMMENT@[316; 329) "// fail again"
+ WHITESPACE@[329; 338) "\n "
+ ENUM_KW@[338; 342) "enum"
+ WHITESPACE@[342; 343) " "
+ NAME@[343; 348)
+ IDENT@[343; 348) "Test4"
+ WHITESPACE@[348; 349) " "
+ ENUM_VARIANT_LIST@[349; 453)
+ L_CURLY@[349; 350) "{"
+ WHITESPACE@[350; 363) "\n "
+ ENUM_VARIANT@[363; 372)
+ NAME@[363; 367)
+ IDENT@[363; 367) "Nope"
+ POS_FIELD_DEF_LIST@[367; 372)
+ L_PAREN@[367; 368) "("
+ POS_FIELD_DEF@[368; 371)
+ PATH_TYPE@[368; 371)
+ PATH@[368; 371)
+ PATH_SEGMENT@[368; 371)
+ NAME_REF@[368; 371)
+ IDENT@[368; 371) "i32"
+ WHITESPACE@[371; 372) " "
+ ERROR@[372; 372)
+ ERROR@[372; 374)
+ L_CURLY@[372; 373) "{"
+ R_CURLY@[373; 374) "}"
+ ERROR@[374; 375)
+ R_PAREN@[374; 375) ")"
+ WHITESPACE@[375; 376) " "
+ COMMENT@[376; 396) "//~ ERROR: found `{`"
+ WHITESPACE@[396; 422) "\n ..."
+ COMMENT@[422; 443) "//~^ ERROR: found `{`"
+ WHITESPACE@[443; 452) "\n "
+ R_CURLY@[452; 453) "}"
+ WHITESPACE@[453; 458) "\n "
+ R_CURLY@[458; 459) "}"
+ WHITESPACE@[459; 464) "\n "
+ COMMENT@[464; 486) "// still recover later"
+ WHITESPACE@[486; 491) "\n "
+ LET_STMT@[491; 510)
+ LET_KW@[491; 494) "let"
+ WHITESPACE@[494; 495) " "
+ BIND_PAT@[495; 505)
+ NAME@[495; 505)
+ IDENT@[495; 505) "bad_syntax"
+ WHITESPACE@[505; 506) " "
+ EQ@[506; 507) "="
+ WHITESPACE@[507; 508) " "
+ ERROR@[508; 509)
+ UNDERSCORE@[508; 509) "_"
+ SEMI@[509; 510) ";"
+ WHITESPACE@[510; 511) " "
+ COMMENT@[511; 572) "//~ ERROR: expected e ..."
+ WHITESPACE@[572; 573) "\n"
+ R_CURLY@[573; 574) "}"
+ WHITESPACE@[574; 575) "\n"
+error 95: expected type
+error 95: expected COMMA
+error 96: expected field
+error 98: expected field declaration
+error 371: expected COMMA
+error 372: expected a type
+error 372: expected R_PAREN
+error 372: expected COMMA
+error 372: expected enum variant
+error 374: expected enum variant
+error 508: expected expression
--- /dev/null
+impl<T: Clone>
+impl<T> OnceCell<T> {}
--- /dev/null
+SOURCE_FILE@[0; 38)
+ IMPL_BLOCK@[0; 14)
+ IMPL_KW@[0; 4) "impl"
+ TYPE_PARAM_LIST@[4; 14)
+ L_ANGLE@[4; 5) "<"
+ TYPE_PARAM@[5; 13)
+ NAME@[5; 6)
+ IDENT@[5; 6) "T"
+ COLON@[6; 7) ":"
+ WHITESPACE@[7; 8) " "
+ TYPE_BOUND_LIST@[8; 13)
+ TYPE_BOUND@[8; 13)
+ PATH_TYPE@[8; 13)
+ PATH@[8; 13)
+ PATH_SEGMENT@[8; 13)
+ NAME_REF@[8; 13)
+ IDENT@[8; 13) "Clone"
+ R_ANGLE@[13; 14) ">"
+ WHITESPACE@[14; 15) "\n"
+ IMPL_BLOCK@[15; 37)
+ IMPL_KW@[15; 19) "impl"
+ TYPE_PARAM_LIST@[19; 22)
+ L_ANGLE@[19; 20) "<"
+ TYPE_PARAM@[20; 21)
+ NAME@[20; 21)
+ IDENT@[20; 21) "T"
+ R_ANGLE@[21; 22) ">"
+ WHITESPACE@[22; 23) " "
+ PATH_TYPE@[23; 34)
+ PATH@[23; 34)
+ PATH_SEGMENT@[23; 34)
+ NAME_REF@[23; 31)
+ IDENT@[23; 31) "OnceCell"
+ TYPE_ARG_LIST@[31; 34)
+ L_ANGLE@[31; 32) "<"
+ TYPE_ARG@[32; 33)
+ PATH_TYPE@[32; 33)
+ PATH@[32; 33)
+ PATH_SEGMENT@[32; 33)
+ NAME_REF@[32; 33)
+ IDENT@[32; 33) "T"
+ R_ANGLE@[33; 34) ">"
+ WHITESPACE@[34; 35) " "
+ ITEM_LIST@[35; 37)
+ L_CURLY@[35; 36) "{"
+ R_CURLY@[36; 37) "}"
+ WHITESPACE@[37; 38) "\n"
+error 14: expected trait or type
+error 14: expected `{`
--- /dev/null
+fn foo()
+ where for<'a>
+{}
--- /dev/null
+SOURCE_FILE@[0; 30)
+ FN_DEF@[0; 29)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 13) "\n "
+ WHERE_CLAUSE@[13; 26)
+ WHERE_KW@[13; 18) "where"
+ WHITESPACE@[18; 19) " "
+ WHERE_PRED@[19; 26)
+ FOR_TYPE@[19; 26)
+ FOR_KW@[19; 22) "for"
+ TYPE_PARAM_LIST@[22; 26)
+ L_ANGLE@[22; 23) "<"
+ LIFETIME_PARAM@[23; 25)
+ LIFETIME@[23; 25) "\'a"
+ R_ANGLE@[25; 26) ">"
+ WHITESPACE@[26; 27) "\n"
+ BLOCK@[27; 29)
+ L_CURLY@[27; 28) "{"
+ R_CURLY@[28; 29) "}"
+ WHITESPACE@[29; 30) "\n"
+error 26: expected a path
+error 26: expected colon
--- /dev/null
+macro parse_use_trees($($s:expr),* $(,)*) {
+ vec![
+ $(parse_use_tree($s),)*
+ ]
+}
+
+#[test]
+fn test_use_tree_merge() {
+ macro test_merge([$($input:expr),* $(,)*], [$($output:expr),* $(,)*]) {
+ assert_eq!(
+ merge_use_trees(parse_use_trees!($($input,)*)),
+ parse_use_trees!($($output,)*),
+ );
+ }
+}
--- /dev/null
+SOURCE_FILE@[0; 349)
+ MACRO_CALL@[0; 41)
+ PATH@[0; 5)
+ PATH_SEGMENT@[0; 5)
+ NAME_REF@[0; 5)
+ IDENT@[0; 5) "macro"
+ WHITESPACE@[5; 6) " "
+ NAME@[6; 21)
+ IDENT@[6; 21) "parse_use_trees"
+ TOKEN_TREE@[21; 41)
+ L_PAREN@[21; 22) "("
+ DOLLAR@[22; 23) "$"
+ TOKEN_TREE@[23; 32)
+ L_PAREN@[23; 24) "("
+ DOLLAR@[24; 25) "$"
+ IDENT@[25; 26) "s"
+ COLON@[26; 27) ":"
+ IDENT@[27; 31) "expr"
+ R_PAREN@[31; 32) ")"
+ COMMA@[32; 33) ","
+ STAR@[33; 34) "*"
+ WHITESPACE@[34; 35) " "
+ DOLLAR@[35; 36) "$"
+ TOKEN_TREE@[36; 39)
+ L_PAREN@[36; 37) "("
+ COMMA@[37; 38) ","
+ R_PAREN@[38; 39) ")"
+ STAR@[39; 40) "*"
+ R_PAREN@[40; 41) ")"
+ WHITESPACE@[41; 42) " "
+ ERROR@[42; 93)
+ L_CURLY@[42; 43) "{"
+ WHITESPACE@[43; 48) "\n "
+ MACRO_CALL@[48; 91)
+ PATH@[48; 51)
+ PATH_SEGMENT@[48; 51)
+ NAME_REF@[48; 51)
+ IDENT@[48; 51) "vec"
+ EXCL@[51; 52) "!"
+ TOKEN_TREE@[52; 91)
+ L_BRACK@[52; 53) "["
+ WHITESPACE@[53; 62) "\n "
+ DOLLAR@[62; 63) "$"
+ TOKEN_TREE@[63; 84)
+ L_PAREN@[63; 64) "("
+ IDENT@[64; 78) "parse_use_tree"
+ TOKEN_TREE@[78; 82)
+ L_PAREN@[78; 79) "("
+ DOLLAR@[79; 80) "$"
+ IDENT@[80; 81) "s"
+ R_PAREN@[81; 82) ")"
+ COMMA@[82; 83) ","
+ R_PAREN@[83; 84) ")"
+ STAR@[84; 85) "*"
+ WHITESPACE@[85; 90) "\n "
+ R_BRACK@[90; 91) "]"
+ WHITESPACE@[91; 92) "\n"
+ R_CURLY@[92; 93) "}"
+ WHITESPACE@[93; 95) "\n\n"
+ FN_DEF@[95; 348)
+ ATTR@[95; 102)
+ POUND@[95; 96) "#"
+ TOKEN_TREE@[96; 102)
+ L_BRACK@[96; 97) "["
+ IDENT@[97; 101) "test"
+ R_BRACK@[101; 102) "]"
+ WHITESPACE@[102; 103) "\n"
+ FN_KW@[103; 105) "fn"
+ WHITESPACE@[105; 106) " "
+ NAME@[106; 125)
+ IDENT@[106; 125) "test_use_tree_merge"
+ PARAM_LIST@[125; 127)
+ L_PAREN@[125; 126) "("
+ R_PAREN@[126; 127) ")"
+ WHITESPACE@[127; 128) " "
+ BLOCK@[128; 348)
+ L_CURLY@[128; 129) "{"
+ WHITESPACE@[129; 134) "\n "
+ EXPR_STMT@[134; 139)
+ PATH_EXPR@[134; 139)
+ PATH@[134; 139)
+ PATH_SEGMENT@[134; 139)
+ NAME_REF@[134; 139)
+ IDENT@[134; 139) "macro"
+ WHITESPACE@[139; 140) " "
+ EXPR_STMT@[140; 154)
+ CALL_EXPR@[140; 154)
+ PATH_EXPR@[140; 150)
+ PATH@[140; 150)
+ PATH_SEGMENT@[140; 150)
+ NAME_REF@[140; 150)
+ IDENT@[140; 150) "test_merge"
+ ARG_LIST@[150; 154)
+ L_PAREN@[150; 151) "("
+ ARRAY_EXPR@[151; 154)
+ L_BRACK@[151; 152) "["
+ ERROR@[152; 153)
+ DOLLAR@[152; 153) "$"
+ PAREN_EXPR@[153; 154)
+ L_PAREN@[153; 154) "("
+ EXPR_STMT@[154; 155)
+ ERROR@[154; 155)
+ DOLLAR@[154; 155) "$"
+ EXPR_STMT@[155; 160)
+ PATH_EXPR@[155; 160)
+ PATH@[155; 160)
+ PATH_SEGMENT@[155; 160)
+ NAME_REF@[155; 160)
+ IDENT@[155; 160) "input"
+ EXPR_STMT@[160; 161)
+ ERROR@[160; 161)
+ COLON@[160; 161) ":"
+ EXPR_STMT@[161; 165)
+ PATH_EXPR@[161; 165)
+ PATH@[161; 165)
+ PATH_SEGMENT@[161; 165)
+ NAME_REF@[161; 165)
+ IDENT@[161; 165) "expr"
+ EXPR_STMT@[165; 166)
+ ERROR@[165; 166)
+ R_PAREN@[165; 166) ")"
+ EXPR_STMT@[166; 167)
+ ERROR@[166; 167)
+ COMMA@[166; 167) ","
+ EXPR_STMT@[167; 170)
+ PREFIX_EXPR@[167; 170)
+ STAR@[167; 168) "*"
+ WHITESPACE@[168; 169) " "
+ ERROR@[169; 170)
+ DOLLAR@[169; 170) "$"
+ EXPR_STMT@[170; 171)
+ PAREN_EXPR@[170; 171)
+ L_PAREN@[170; 171) "("
+ EXPR_STMT@[171; 172)
+ ERROR@[171; 172)
+ COMMA@[171; 172) ","
+ EXPR_STMT@[172; 173)
+ ERROR@[172; 173)
+ R_PAREN@[172; 173) ")"
+ EXPR_STMT@[173; 175)
+ PREFIX_EXPR@[173; 175)
+ STAR@[173; 174) "*"
+ ERROR@[174; 175)
+ R_BRACK@[174; 175) "]"
+ EXPR_STMT@[175; 176)
+ ERROR@[175; 176)
+ COMMA@[175; 176) ","
+ WHITESPACE@[176; 177) " "
+ EXPR_STMT@[177; 180)
+ ARRAY_EXPR@[177; 180)
+ L_BRACK@[177; 178) "["
+ ERROR@[178; 179)
+ DOLLAR@[178; 179) "$"
+ PAREN_EXPR@[179; 180)
+ L_PAREN@[179; 180) "("
+ EXPR_STMT@[180; 181)
+ ERROR@[180; 181)
+ DOLLAR@[180; 181) "$"
+ EXPR_STMT@[181; 187)
+ PATH_EXPR@[181; 187)
+ PATH@[181; 187)
+ PATH_SEGMENT@[181; 187)
+ NAME_REF@[181; 187)
+ IDENT@[181; 187) "output"
+ EXPR_STMT@[187; 188)
+ ERROR@[187; 188)
+ COLON@[187; 188) ":"
+ EXPR_STMT@[188; 192)
+ PATH_EXPR@[188; 192)
+ PATH@[188; 192)
+ PATH_SEGMENT@[188; 192)
+ NAME_REF@[188; 192)
+ IDENT@[188; 192) "expr"
+ EXPR_STMT@[192; 193)
+ ERROR@[192; 193)
+ R_PAREN@[192; 193) ")"
+ EXPR_STMT@[193; 194)
+ ERROR@[193; 194)
+ COMMA@[193; 194) ","
+ EXPR_STMT@[194; 197)
+ PREFIX_EXPR@[194; 197)
+ STAR@[194; 195) "*"
+ WHITESPACE@[195; 196) " "
+ ERROR@[196; 197)
+ DOLLAR@[196; 197) "$"
+ EXPR_STMT@[197; 198)
+ PAREN_EXPR@[197; 198)
+ L_PAREN@[197; 198) "("
+ EXPR_STMT@[198; 199)
+ ERROR@[198; 199)
+ COMMA@[198; 199) ","
+ EXPR_STMT@[199; 200)
+ ERROR@[199; 200)
+ R_PAREN@[199; 200) ")"
+ EXPR_STMT@[200; 202)
+ PREFIX_EXPR@[200; 202)
+ STAR@[200; 201) "*"
+ ERROR@[201; 202)
+ R_BRACK@[201; 202) "]"
+ EXPR_STMT@[202; 203)
+ ERROR@[202; 203)
+ R_PAREN@[202; 203) ")"
+ WHITESPACE@[203; 204) " "
+ BLOCK_EXPR@[204; 346)
+ BLOCK@[204; 346)
+ L_CURLY@[204; 205) "{"
+ WHITESPACE@[205; 214) "\n "
+ EXPR_STMT@[214; 340)
+ MACRO_CALL@[214; 339)
+ PATH@[214; 223)
+ PATH_SEGMENT@[214; 223)
+ NAME_REF@[214; 223)
+ IDENT@[214; 223) "assert_eq"
+ EXCL@[223; 224) "!"
+ TOKEN_TREE@[224; 339)
+ L_PAREN@[224; 225) "("
+ WHITESPACE@[225; 238) "\n "
+ IDENT@[238; 253) "merge_use_trees"
+ TOKEN_TREE@[253; 284)
+ L_PAREN@[253; 254) "("
+ IDENT@[254; 269) "parse_use_trees"
+ EXCL@[269; 270) "!"
+ TOKEN_TREE@[270; 283)
+ L_PAREN@[270; 271) "("
+ DOLLAR@[271; 272) "$"
+ TOKEN_TREE@[272; 281)
+ L_PAREN@[272; 273) "("
+ DOLLAR@[273; 274) "$"
+ IDENT@[274; 279) "input"
+ COMMA@[279; 280) ","
+ R_PAREN@[280; 281) ")"
+ STAR@[281; 282) "*"
+ R_PAREN@[282; 283) ")"
+ R_PAREN@[283; 284) ")"
+ COMMA@[284; 285) ","
+ WHITESPACE@[285; 298) "\n "
+ IDENT@[298; 313) "parse_use_trees"
+ EXCL@[313; 314) "!"
+ TOKEN_TREE@[314; 328)
+ L_PAREN@[314; 315) "("
+ DOLLAR@[315; 316) "$"
+ TOKEN_TREE@[316; 326)
+ L_PAREN@[316; 317) "("
+ DOLLAR@[317; 318) "$"
+ IDENT@[318; 324) "output"
+ COMMA@[324; 325) ","
+ R_PAREN@[325; 326) ")"
+ STAR@[326; 327) "*"
+ R_PAREN@[327; 328) ")"
+ COMMA@[328; 329) ","
+ WHITESPACE@[329; 338) "\n "
+ R_PAREN@[338; 339) ")"
+ SEMI@[339; 340) ";"
+ WHITESPACE@[340; 345) "\n "
+ R_CURLY@[345; 346) "}"
+ WHITESPACE@[346; 347) "\n"
+ R_CURLY@[347; 348) "}"
+ WHITESPACE@[348; 349) "\n"
+error 5: expected EXCL
+error 41: expected SEMI
+error 42: expected an item
+error 139: expected SEMI
+error 152: expected expression
+error 153: expected COMMA
+error 154: expected expression
+error 154: expected R_PAREN
+error 154: expected COMMA
+error 154: expected expression
+error 154: expected R_BRACK
+error 154: expected COMMA
+error 154: expected SEMI
+error 154: expected expression
+error 155: expected SEMI
+error 160: expected SEMI
+error 160: expected expression
+error 161: expected SEMI
+error 165: expected SEMI
+error 165: expected expression
+error 166: expected SEMI
+error 166: expected expression
+error 167: expected SEMI
+error 169: expected expression
+error 170: expected SEMI
+error 171: expected expression
+error 171: expected R_PAREN
+error 171: expected SEMI
+error 171: expected expression
+error 172: expected SEMI
+error 172: expected expression
+error 173: expected SEMI
+error 174: expected expression
+error 175: expected SEMI
+error 175: expected expression
+error 176: expected SEMI
+error 178: expected expression
+error 179: expected COMMA
+error 180: expected expression
+error 180: expected R_PAREN
+error 180: expected COMMA
+error 180: expected expression
+error 180: expected R_BRACK
+error 180: expected SEMI
+error 180: expected expression
+error 181: expected SEMI
+error 187: expected SEMI
+error 187: expected expression
+error 188: expected SEMI
+error 192: expected SEMI
+error 192: expected expression
+error 193: expected SEMI
+error 193: expected expression
+error 194: expected SEMI
+error 196: expected expression
+error 197: expected SEMI
+error 198: expected expression
+error 198: expected R_PAREN
+error 198: expected SEMI
+error 198: expected expression
+error 199: expected SEMI
+error 199: expected expression
+error 200: expected SEMI
+error 201: expected expression
+error 202: expected SEMI
+error 202: expected expression
+error 203: expected SEMI
--- /dev/null
+fn foo(a: A) {
+ a.
+}
--- /dev/null
+SOURCE_FILE@[0; 24)
+ FN_DEF@[0; 23)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 12)
+ L_PAREN@[6; 7) "("
+ PARAM@[7; 11)
+ BIND_PAT@[7; 8)
+ NAME@[7; 8)
+ IDENT@[7; 8) "a"
+ COLON@[8; 9) ":"
+ WHITESPACE@[9; 10) " "
+ PATH_TYPE@[10; 11)
+ PATH@[10; 11)
+ PATH_SEGMENT@[10; 11)
+ NAME_REF@[10; 11)
+ IDENT@[10; 11) "A"
+ R_PAREN@[11; 12) ")"
+ WHITESPACE@[12; 13) " "
+ BLOCK@[13; 23)
+ L_CURLY@[13; 14) "{"
+ WHITESPACE@[14; 19) "\n "
+ FIELD_EXPR@[19; 21)
+ PATH_EXPR@[19; 20)
+ PATH@[19; 20)
+ PATH_SEGMENT@[19; 20)
+ NAME_REF@[19; 20)
+ IDENT@[19; 20) "a"
+ DOT@[20; 21) "."
+ WHITESPACE@[21; 22) "\n"
+ R_CURLY@[22; 23) "}"
+ WHITESPACE@[23; 24) "\n"
+error 21: expected field name or number
--- /dev/null
+fn block() {
+ let inner = {
+ #![doc("Inner attributes not allowed here")]
+ //! Nor are ModuleDoc comments
+ };
+ if true {
+ #![doc("Nor here")]
+ #![doc("We error on each attr")]
+ //! Nor are ModuleDoc comments
+ }
+ while true {
+ #![doc("Nor here")]
+ //! Nor are ModuleDoc comments
+ }
+}
--- /dev/null
+SOURCE_FILE@[0; 350)
+ FN_DEF@[0; 349)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 8)
+ IDENT@[3; 8) "block"
+ PARAM_LIST@[8; 10)
+ L_PAREN@[8; 9) "("
+ R_PAREN@[9; 10) ")"
+ WHITESPACE@[10; 11) " "
+ BLOCK@[11; 349)
+ L_CURLY@[11; 12) "{"
+ WHITESPACE@[12; 17) "\n "
+ LET_STMT@[17; 129)
+ LET_KW@[17; 20) "let"
+ WHITESPACE@[20; 21) " "
+ BIND_PAT@[21; 26)
+ NAME@[21; 26)
+ IDENT@[21; 26) "inner"
+ WHITESPACE@[26; 27) " "
+ EQ@[27; 28) "="
+ WHITESPACE@[28; 29) " "
+ BLOCK_EXPR@[29; 128)
+ BLOCK@[29; 128)
+ L_CURLY@[29; 30) "{"
+ WHITESPACE@[30; 39) "\n "
+ ATTR@[39; 83)
+ POUND@[39; 40) "#"
+ EXCL@[40; 41) "!"
+ TOKEN_TREE@[41; 83)
+ L_BRACK@[41; 42) "["
+ IDENT@[42; 45) "doc"
+ TOKEN_TREE@[45; 82)
+ L_PAREN@[45; 46) "("
+ STRING@[46; 81) "\"Inner attributes not ..."
+ R_PAREN@[81; 82) ")"
+ R_BRACK@[82; 83) "]"
+ WHITESPACE@[83; 92) "\n "
+ COMMENT@[92; 122) "//! Nor are ModuleDoc ..."
+ WHITESPACE@[122; 127) "\n "
+ R_CURLY@[127; 128) "}"
+ SEMI@[128; 129) ";"
+ WHITESPACE@[129; 134) "\n "
+ EXPR_STMT@[134; 257)
+ IF_EXPR@[134; 257)
+ IF_KW@[134; 136) "if"
+ WHITESPACE@[136; 137) " "
+ CONDITION@[137; 141)
+ LITERAL@[137; 141)
+ TRUE_KW@[137; 141) "true"
+ WHITESPACE@[141; 142) " "
+ BLOCK@[142; 257)
+ L_CURLY@[142; 143) "{"
+ WHITESPACE@[143; 152) "\n "
+ ATTR@[152; 171)
+ POUND@[152; 153) "#"
+ EXCL@[153; 154) "!"
+ TOKEN_TREE@[154; 171)
+ L_BRACK@[154; 155) "["
+ IDENT@[155; 158) "doc"
+ TOKEN_TREE@[158; 170)
+ L_PAREN@[158; 159) "("
+ STRING@[159; 169) "\"Nor here\""
+ R_PAREN@[169; 170) ")"
+ R_BRACK@[170; 171) "]"
+ WHITESPACE@[171; 180) "\n "
+ ATTR@[180; 212)
+ POUND@[180; 181) "#"
+ EXCL@[181; 182) "!"
+ TOKEN_TREE@[182; 212)
+ L_BRACK@[182; 183) "["
+ IDENT@[183; 186) "doc"
+ TOKEN_TREE@[186; 211)
+ L_PAREN@[186; 187) "("
+ STRING@[187; 210) "\"We error on each attr\""
+ R_PAREN@[210; 211) ")"
+ R_BRACK@[211; 212) "]"
+ WHITESPACE@[212; 221) "\n "
+ COMMENT@[221; 251) "//! Nor are ModuleDoc ..."
+ WHITESPACE@[251; 256) "\n "
+ R_CURLY@[256; 257) "}"
+ WHITESPACE@[257; 262) "\n "
+ WHILE_EXPR@[262; 347)
+ WHILE_KW@[262; 267) "while"
+ WHITESPACE@[267; 268) " "
+ CONDITION@[268; 272)
+ LITERAL@[268; 272)
+ TRUE_KW@[268; 272) "true"
+ WHITESPACE@[272; 273) " "
+ BLOCK@[273; 347)
+ L_CURLY@[273; 274) "{"
+ WHITESPACE@[274; 283) "\n "
+ ATTR@[283; 302)
+ POUND@[283; 284) "#"
+ EXCL@[284; 285) "!"
+ TOKEN_TREE@[285; 302)
+ L_BRACK@[285; 286) "["
+ IDENT@[286; 289) "doc"
+ TOKEN_TREE@[289; 301)
+ L_PAREN@[289; 290) "("
+ STRING@[290; 300) "\"Nor here\""
+ R_PAREN@[300; 301) ")"
+ R_BRACK@[301; 302) "]"
+ WHITESPACE@[302; 311) "\n "
+ COMMENT@[311; 341) "//! Nor are ModuleDoc ..."
+ WHITESPACE@[341; 346) "\n "
+ R_CURLY@[346; 347) "}"
+ WHITESPACE@[347; 348) "\n"
+ R_CURLY@[348; 349) "}"
+ WHITESPACE@[349; 350) "\n"
+error [39; 83): A block in this position cannot accept inner attributes
+error [152; 171): A block in this position cannot accept inner attributes
+error [180; 212): A block in this position cannot accept inner attributes
+error [283; 302): A block in this position cannot accept inner attributes
--- /dev/null
+fn foo() {
+ match () {
+ _ => (),
+ #![doc("Not allowed here")]
+ _ => (),
+ }
+
+ match () {
+ _ => (),
+ _ => (),
+ #![doc("Nor here")]
+ }
+
+ match () {
+ #[cfg(test)]
+ #![doc("Nor here")]
+ _ => (),
+ _ => (),
+ }
+}
--- /dev/null
+SOURCE_FILE@[0; 293)
+ FN_DEF@[0; 292)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 292)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ EXPR_STMT@[15; 101)
+ MATCH_EXPR@[15; 101)
+ MATCH_KW@[15; 20) "match"
+ WHITESPACE@[20; 21) " "
+ TUPLE_EXPR@[21; 23)
+ L_PAREN@[21; 22) "("
+ R_PAREN@[22; 23) ")"
+ WHITESPACE@[23; 24) " "
+ MATCH_ARM_LIST@[24; 101)
+ L_CURLY@[24; 25) "{"
+ WHITESPACE@[25; 34) "\n "
+ MATCH_ARM@[34; 41)
+ PLACEHOLDER_PAT@[34; 35)
+ UNDERSCORE@[34; 35) "_"
+ WHITESPACE@[35; 36) " "
+ FAT_ARROW@[36; 38) "=>"
+ WHITESPACE@[38; 39) " "
+ TUPLE_EXPR@[39; 41)
+ L_PAREN@[39; 40) "("
+ R_PAREN@[40; 41) ")"
+ COMMA@[41; 42) ","
+ WHITESPACE@[42; 51) "\n "
+ MATCH_ARM@[51; 78)
+ ATTR@[51; 52)
+ POUND@[51; 52) "#"
+ ERROR@[52; 53)
+ EXCL@[52; 53) "!"
+ ARRAY_EXPR@[53; 78)
+ L_BRACK@[53; 54) "["
+ CALL_EXPR@[54; 77)
+ PATH_EXPR@[54; 57)
+ PATH@[54; 57)
+ PATH_SEGMENT@[54; 57)
+ NAME_REF@[54; 57)
+ IDENT@[54; 57) "doc"
+ ARG_LIST@[57; 77)
+ L_PAREN@[57; 58) "("
+ LITERAL@[58; 76)
+ STRING@[58; 76) "\"Not allowed here\""
+ R_PAREN@[76; 77) ")"
+ R_BRACK@[77; 78) "]"
+ WHITESPACE@[78; 87) "\n "
+ MATCH_ARM@[87; 94)
+ PLACEHOLDER_PAT@[87; 88)
+ UNDERSCORE@[87; 88) "_"
+ WHITESPACE@[88; 89) " "
+ FAT_ARROW@[89; 91) "=>"
+ WHITESPACE@[91; 92) " "
+ TUPLE_EXPR@[92; 94)
+ L_PAREN@[92; 93) "("
+ R_PAREN@[93; 94) ")"
+ COMMA@[94; 95) ","
+ WHITESPACE@[95; 100) "\n "
+ R_CURLY@[100; 101) "}"
+ WHITESPACE@[101; 107) "\n\n "
+ EXPR_STMT@[107; 185)
+ MATCH_EXPR@[107; 185)
+ MATCH_KW@[107; 112) "match"
+ WHITESPACE@[112; 113) " "
+ TUPLE_EXPR@[113; 115)
+ L_PAREN@[113; 114) "("
+ R_PAREN@[114; 115) ")"
+ WHITESPACE@[115; 116) " "
+ MATCH_ARM_LIST@[116; 185)
+ L_CURLY@[116; 117) "{"
+ WHITESPACE@[117; 126) "\n "
+ MATCH_ARM@[126; 133)
+ PLACEHOLDER_PAT@[126; 127)
+ UNDERSCORE@[126; 127) "_"
+ WHITESPACE@[127; 128) " "
+ FAT_ARROW@[128; 130) "=>"
+ WHITESPACE@[130; 131) " "
+ TUPLE_EXPR@[131; 133)
+ L_PAREN@[131; 132) "("
+ R_PAREN@[132; 133) ")"
+ COMMA@[133; 134) ","
+ WHITESPACE@[134; 143) "\n "
+ MATCH_ARM@[143; 150)
+ PLACEHOLDER_PAT@[143; 144)
+ UNDERSCORE@[143; 144) "_"
+ WHITESPACE@[144; 145) " "
+ FAT_ARROW@[145; 147) "=>"
+ WHITESPACE@[147; 148) " "
+ TUPLE_EXPR@[148; 150)
+ L_PAREN@[148; 149) "("
+ R_PAREN@[149; 150) ")"
+ COMMA@[150; 151) ","
+ WHITESPACE@[151; 160) "\n "
+ MATCH_ARM@[160; 179)
+ ATTR@[160; 161)
+ POUND@[160; 161) "#"
+ ERROR@[161; 162)
+ EXCL@[161; 162) "!"
+ ARRAY_EXPR@[162; 179)
+ L_BRACK@[162; 163) "["
+ CALL_EXPR@[163; 178)
+ PATH_EXPR@[163; 166)
+ PATH@[163; 166)
+ PATH_SEGMENT@[163; 166)
+ NAME_REF@[163; 166)
+ IDENT@[163; 166) "doc"
+ ARG_LIST@[166; 178)
+ L_PAREN@[166; 167) "("
+ LITERAL@[167; 177)
+ STRING@[167; 177) "\"Nor here\""
+ R_PAREN@[177; 178) ")"
+ R_BRACK@[178; 179) "]"
+ WHITESPACE@[179; 184) "\n "
+ R_CURLY@[184; 185) "}"
+ WHITESPACE@[185; 191) "\n\n "
+ MATCH_EXPR@[191; 290)
+ MATCH_KW@[191; 196) "match"
+ WHITESPACE@[196; 197) " "
+ TUPLE_EXPR@[197; 199)
+ L_PAREN@[197; 198) "("
+ R_PAREN@[198; 199) ")"
+ WHITESPACE@[199; 200) " "
+ MATCH_ARM_LIST@[200; 290)
+ L_CURLY@[200; 201) "{"
+ WHITESPACE@[201; 210) "\n "
+ MATCH_ARM@[210; 250)
+ ATTR@[210; 222)
+ POUND@[210; 211) "#"
+ TOKEN_TREE@[211; 222)
+ L_BRACK@[211; 212) "["
+ IDENT@[212; 215) "cfg"
+ TOKEN_TREE@[215; 221)
+ L_PAREN@[215; 216) "("
+ IDENT@[216; 220) "test"
+ R_PAREN@[220; 221) ")"
+ R_BRACK@[221; 222) "]"
+ WHITESPACE@[222; 231) "\n "
+ ATTR@[231; 232)
+ POUND@[231; 232) "#"
+ ERROR@[232; 233)
+ EXCL@[232; 233) "!"
+ ARRAY_EXPR@[233; 250)
+ L_BRACK@[233; 234) "["
+ CALL_EXPR@[234; 249)
+ PATH_EXPR@[234; 237)
+ PATH@[234; 237)
+ PATH_SEGMENT@[234; 237)
+ NAME_REF@[234; 237)
+ IDENT@[234; 237) "doc"
+ ARG_LIST@[237; 249)
+ L_PAREN@[237; 238) "("
+ LITERAL@[238; 248)
+ STRING@[238; 248) "\"Nor here\""
+ R_PAREN@[248; 249) ")"
+ R_BRACK@[249; 250) "]"
+ WHITESPACE@[250; 259) "\n "
+ MATCH_ARM@[259; 266)
+ PLACEHOLDER_PAT@[259; 260)
+ UNDERSCORE@[259; 260) "_"
+ WHITESPACE@[260; 261) " "
+ FAT_ARROW@[261; 263) "=>"
+ WHITESPACE@[263; 264) " "
+ TUPLE_EXPR@[264; 266)
+ L_PAREN@[264; 265) "("
+ R_PAREN@[265; 266) ")"
+ COMMA@[266; 267) ","
+ WHITESPACE@[267; 276) "\n "
+ MATCH_ARM@[276; 283)
+ PLACEHOLDER_PAT@[276; 277)
+ UNDERSCORE@[276; 277) "_"
+ WHITESPACE@[277; 278) " "
+ FAT_ARROW@[278; 280) "=>"
+ WHITESPACE@[280; 281) " "
+ TUPLE_EXPR@[281; 283)
+ L_PAREN@[281; 282) "("
+ R_PAREN@[282; 283) ")"
+ COMMA@[283; 284) ","
+ WHITESPACE@[284; 289) "\n "
+ R_CURLY@[289; 290) "}"
+ WHITESPACE@[290; 291) "\n"
+ R_CURLY@[291; 292) "}"
+ WHITESPACE@[292; 293) "\n"
+error 52: expected `[`
+error 52: expected pattern
+error 53: expected FAT_ARROW
+error 78: expected COMMA
+error 161: expected `[`
+error 161: expected pattern
+error 162: expected FAT_ARROW
+error 232: expected `[`
+error 232: expected pattern
+error 233: expected FAT_ARROW
+error 250: expected COMMA
--- /dev/null
+fn foo() {
+ match () {
+ _ => (),
+ _ => (),
+ #[cfg(test)]
+ }
+}
--- /dev/null
+SOURCE_FILE@[0; 89)
+ FN_DEF@[0; 88)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 88)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ MATCH_EXPR@[15; 86)
+ MATCH_KW@[15; 20) "match"
+ WHITESPACE@[20; 21) " "
+ TUPLE_EXPR@[21; 23)
+ L_PAREN@[21; 22) "("
+ R_PAREN@[22; 23) ")"
+ WHITESPACE@[23; 24) " "
+ MATCH_ARM_LIST@[24; 86)
+ L_CURLY@[24; 25) "{"
+ WHITESPACE@[25; 34) "\n "
+ MATCH_ARM@[34; 41)
+ PLACEHOLDER_PAT@[34; 35)
+ UNDERSCORE@[34; 35) "_"
+ WHITESPACE@[35; 36) " "
+ FAT_ARROW@[36; 38) "=>"
+ WHITESPACE@[38; 39) " "
+ TUPLE_EXPR@[39; 41)
+ L_PAREN@[39; 40) "("
+ R_PAREN@[40; 41) ")"
+ COMMA@[41; 42) ","
+ WHITESPACE@[42; 51) "\n "
+ MATCH_ARM@[51; 58)
+ PLACEHOLDER_PAT@[51; 52)
+ UNDERSCORE@[51; 52) "_"
+ WHITESPACE@[52; 53) " "
+ FAT_ARROW@[53; 55) "=>"
+ WHITESPACE@[55; 56) " "
+ TUPLE_EXPR@[56; 58)
+ L_PAREN@[56; 57) "("
+ R_PAREN@[57; 58) ")"
+ COMMA@[58; 59) ","
+ WHITESPACE@[59; 68) "\n "
+ MATCH_ARM@[68; 80)
+ ATTR@[68; 80)
+ POUND@[68; 69) "#"
+ TOKEN_TREE@[69; 80)
+ L_BRACK@[69; 70) "["
+ IDENT@[70; 73) "cfg"
+ TOKEN_TREE@[73; 79)
+ L_PAREN@[73; 74) "("
+ IDENT@[74; 78) "test"
+ R_PAREN@[78; 79) ")"
+ R_BRACK@[79; 80) "]"
+ WHITESPACE@[80; 85) "\n "
+ R_CURLY@[85; 86) "}"
+ WHITESPACE@[86; 87) "\n"
+ R_CURLY@[87; 88) "}"
+ WHITESPACE@[88; 89) "\n"
+error 80: expected pattern
+error 80: expected FAT_ARROW
+error 80: expected expression
--- /dev/null
+//! An experimental implementation of [Rust RFC#2256 lrs);
+ let root = SyntaxNode::new_owned(root);
+ validate_block_structure(root.borrowed());
+ File { root }
+ }
+ pub fn parse(text: &str) -> File {
+ let tokens = tokenize(&text);
+ let (green, errors) = parser_impl::parse_with::<syntax_node::GreenBuilder>(
+ text, &tokens, grammar::root,
+ );
+ File::new(green, errors)
+ }
+ pub fn reparse(&self, edit: &AtomTextEdit) -> File {
+ self.incremental_reparse(edit).unwrap_or_else(|| self.full_reparse(edit))
+ }
+ pub fn incremental_reparse(&self, edit: &AtomTextEdit) -> Option<File> {
+ let (node, reparser) = find_reparsable_node(self.syntax(), edit.delete)?;
+ let text = replace_range(
+ node.text().to_string(),
+ edit.delete - node.range().start(),
+ &edit.insert,
+ );
+ let tokens = tokenize(&text);
+ if !is_balanced(&tokens) {
+ return None;
+ }
+ let (green, new_errors) = parser_impl::parse_with::<syntax_node::GreenBuilder>(
+ &te2t, &tokens, reparser,
+ );
+ let green_root = node.replace_with(green);
+ let errors = merge_errors(self.errors(), new_errors, node, edit);
+ Some(File::new(green_root, errors))
+ }
+ fn full_reparse(&self, edit: &AtomTextEdit) -> File {
+ let text = replace_range(self.syntax().text().to_string(), edit.delete, &edit.insert);
+ File::parse(&text)
+ }
+ pub fn ast(&self) -> ast::Root {
+ ast::Root::cast(self.syntax()).unwrap()
+ }
+ pub fn syntax(&self) -> SyntaxNodeRef {
+ self.root.brroowed()
+ }
+ mp_tree(root),
+ );
+ assert!(
+ node.next_sibling().is_none() && pair.prev_sibling().is_none(),
+ "\nfloating curlys at {:?}\nfile:\n{}\nerror:\n{}\n",
+ node,
+ root.text(),
+ node.text(),
+ );
+ }
+ }
+ _ => (),
+ }
+ }
+}
+
+#[derive(Debug, Clone)]
+pub struct AtomTextEdit {
+ pub delete: TextRange,
+ pub insert: String,
+}
+
+impl AtomTextEdit {
+ pub fn replace(range: TextRange, replace_with: String) -> AtomTextEdit {
+ AtomTextEdit { delete: range, insert: replace_with }
+ }
+
+ pub fn delete(range: TextRange) -> AtomTextEdit {
+ AtomTextEdit::replace(range, String::new())
+ }
+
+ pub fn insert(offset: TextUnit, text: String) -> AtomTextEdit {
+ AtomTextEdit::replace(TextRange::offset_len(offset, 0.into()), text)
+ }
+}
+
+fn find_reparsable_node(node: SyntaxNodeRef, range: TextRange) -> Option<(SyntaxNodeRef, fn(&mut Parser))> {
+ let node = algo::find_covering_node(node, range);
+ return algo::ancestors(node)
+ .filter_map(|node| reparser(node).map(|r| (node, r)))
+ .next();
+
+ fn reparser(node: SyntaxNodeRef) -> Option<fn(&mut Parser)> {
+ let res = match node.kind() {
+ BLOCK => grammar::block,
+ NAMED_FIELD_DEF_LIST => grammar::named_field_def_list,
+ _ => return None,
+ };
+ Some(res)
+ }
+}
+
+pub /*(meh)*/ fn replace_range(mut text: String, range: TextRange, replace_with: &str) -> String {
+ let start = u32::from(range.start()) as usize;
+ let end = u32::from(range.end()) as usize;
+ text.replace_range(start..end, replace_with);
+ text
+}
+
+fn is_balanced(tokens: &[Token]) -> bool {
+ if tokens.len() == 0
+ || tokens.first().unwrap().kind != L_CURLY
+ || tokens.last().unwrap().kind != R_CURLY {
+ return false
+ }
+ let mut balance = 0usize;
+ for t in tokens.iter() {
+ match t.kind {
+ L_CURLYt {
+ pub delete: TextRange,
+ pub insert: String,
+}
+
+impl AtomTextEdit {
+ pub fn replace(range: TextRange, replace_with: String) -> AtomTextEdit {
+ AtomTextEdit { delete: range, insert: replace_with }
+ }
+
+ pub fn delete(range: TextRange) -> AtomTextEdit {
+ AtomTextEdit::replace(range, String::new())
+ }
+
+ pub fn insert(offset: TextUnit, text: String) -> AtomTextEdit {
+ AtomTextEdit::replace(TextRange::offset_len(offset, 0.into()), text)
+ }
+}
+
+fn find_reparsable_node(node: SyntaxNodeRef, range: TextRange) -> Option<(SyntaxNodeRef, fn(&mut Parser))> {
+ let node = algo::find_covering_node(node, range);
+ return algo::ancestors(node)
+ .filter_map(|node| reparser(node).map(|r| (node, r)))
+ .next();
+
+ fn reparser(node: SyntaxNodeRef) -> Option<fn(&mut Parser)> {
+ let res = match node.kind() {
+ ;
+ let end = u32::from(range.end()) as usize;
+ text.replaT => grammar::named_field_def_list,
+ _ => return None,
+ };
+ Some(res)
+ }
+}
+
+pub /*(meh)*/ fn replace_range(mut text: String, range: TextRange, replace_with: &str) -> String {
+ let start = u32::from(range.start()) as usize;
+ let end = u32::from(range.end()) as usize;
+ text.replace_range(start..end, replace_with);
+ text
+}
+
+fn is_balanced(tokens: &[Token]) -> bool {
+ if tokens.len() == 0
+ || tokens.first().unwrap().kind != L_CURLY
+ || tokens.last().unwrap().kind != R_CURLY {
+ return false
+ }
+ let mut balance = 0usize;
+ for t in tokens.iter() {
+ match t.kind {
+ L_CURLY => balance += 1,
+ R_CURLY => balance = match balance.checked_sub(1) {
+ Some(b) => b,
+ None => return false,
+ },
+ _ => (),
+ }
+ }
+ balance == 0
+}
+
+fn merge_errors(
+ old_errors: Vec<SyntaxError>,
+ new_errors: Vec<SyntaxError>,
+ old_node: SyntaxNodeRef,
+ edit: &AtomTextEdit,
+) -> Vec<SyntaxError> {
+ let mut res = Vec::new();
+ for e in old_errors {
+ if e.offset < old_node.range().start() {
+ res.push(e)
+ } else if e.offset > old_node.range().end() {
+ res.push(SyntaxError {
+ msg: e.msg,
+ offset: e.offset + TextUnit::of_str(&edit.insert) - edit.delete.len(),
+ })
+ }
+ }
+ for e in new_errors {
+ res.push(SyntaxError {
+ msg: e.msg,
+ offset: e.offset + old_node.range().start(),
+ })
+ }
+ res
+}
--- /dev/null
+use ra_syntax::{
+ File, TextRange, SyntaxNodeRef, TextUnit,
+ SyntaxKind::*,
+ algo::{find_leaf_at_offset, LeafAtOffset, find_covering_node, ancestors, Direction, siblings},
+};
+
+pub fn extend_selection(file: &File, range: TextRange) -> Option<TextRange> {
+ let syntax = file.syntax();
+ extend(syntax.borrowed(), range)
+}
+
+pub(crate) fn extend(root: SyntaxNodeRef, range: TextRange) -> Option<TextRange> {
+ if range.is_empty() {
+ let offset = range.start();
+ let mut leaves = find_leaf_at_offset(root, offset);
+ if leaves.clone().all(|it| it.kind() == WHITESPACE) {
+ return Some(extend_ws(root, leaves.next()?, offset));
+ }
+ let leaf = match leaves {
+ LeafAtOffset::None => return None,
+ LeafAtOffset::Single(l) => l,
+ LeafAtOffset::Between(l, r) => pick_best(l, r),
+ };
+ return Some(leaf.range());
+ };
+ let node = find_covering_node(root, range);
+ if node.kind() == COMMENT && range == node.range() {
+ if let Some(range) = extend_comments(node) {
+ return Some(range);
+ }
+ }
+
+ match ancestors(node).skip_while(|n| n.range() == range).next() {
+ None => None,
+ Some(parent) => Some(parent.range()),
+ }
+}
+
+fn extend_ws(root: SyntaxNodeRef, ws: SyntaxNodeRef, offset: TextUnit) -> TextRange {
+ let ws_text = ws.leaf_text().unwrap();
+ let suffix = TextRange::from_to(offset, ws.range().end()) - ws.range().start();
+ let prefix = TextRange::from_to(ws.range().start(), offset) - ws.range().start();
+ let ws_suffix = &ws_text.as_str()[suffix];
+ let ws_prefix = &ws_text.as_str()[prefix];
+ if ws_text.contains("\n") && !ws_suffix.contains("\n") {
+ if let Some(node) = ws.next_sibling() {
+ let start = match ws_prefix.rfind('\n') {
+ Some(idx) => ws.range().start() + TextUnit::from((idx + 1) as u32),
+ None => node.range().start()
+ };
+ let end = if root.text().char_at(node.range().end()) == Some('\n') {
+ node.range().end() + TextUnit::of_char('\n')
+ } else {
+ node.range().end()
+ };
+ return TextRange::from_to(start, end);
+ }
+ }
+ ws.range()
+}
+
+fn pick_best<'a>(l: SyntaxNodeRef<'a>, r: Syntd[axNodeRef<'a>) -> SyntaxNodeRef<'a> {
+ return if priority(r) > priority(l) { r } else { l };
+ fn priority(n: SyntaxNodeRef) -> usize {
+ match n.kind() {
+ WHITESPACE => 0,
+ IDENT | SELF_KW | SUPER_KW | CRATE_KW => 2,
+ _ => 1,
+ }
+ }
+}
+
+fn extend_comments(node: SyntaxNodeRef) -> Option<TextRange> {
+ let left = adj_com[ments(node, Direction::Backward);
+ let right = adj_comments(node, Direction::Forward);
+ if left != right {
+ Some(TextRange::from_to(
+ left.range().start(),
+ right.range().end(),
+ ))
+ } else {
+ None
+ }
+}
+
+fn adj_comments(node: SyntaxNodeRef, dir: Direction) -> SyntaxNodeRef {
+ let mut res = node;
+ for node in siblings(node, dir) {
+ match node.kind() {
+ COMMENT => res = node,
+ WHITESPACE if !node.leaf_text().unwrap().as_str().contains("\n\n") => (),
+ _ => break
+ }
+ }
+ res
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use test_utils::extract_offset;
+
+ fn do_check(before: &str, afters: &[&str]) {
+ let (cursor, before) = extract_offset(before);
+ let file = File::parse(&before);
+ let mut range = TextRange::of
--- /dev/null
+!('\
\ No newline at end of file
--- /dev/null
+if'\xɿ
\ No newline at end of file
--- /dev/null
+b"\xʿ
\ No newline at end of file
--- /dev/null
+type T = [() 92];
--- /dev/null
+SOURCE_FILE@[0; 18)
+ TYPE_ALIAS_DEF@[0; 12)
+ TYPE_KW@[0; 4) "type"
+ WHITESPACE@[4; 5) " "
+ NAME@[5; 6)
+ IDENT@[5; 6) "T"
+ WHITESPACE@[6; 7) " "
+ EQ@[7; 8) "="
+ WHITESPACE@[8; 9) " "
+ SLICE_TYPE@[9; 12)
+ L_BRACK@[9; 10) "["
+ TUPLE_TYPE@[10; 12)
+ L_PAREN@[10; 11) "("
+ R_PAREN@[11; 12) ")"
+ WHITESPACE@[12; 13) " "
+ ERROR@[13; 15)
+ INT_NUMBER@[13; 15) "92"
+ ERROR@[15; 16)
+ R_BRACK@[15; 16) "]"
+ ERROR@[16; 17)
+ SEMI@[16; 17) ";"
+ WHITESPACE@[17; 18) "\n"
+error 12: expected `;` or `]`
+error 12: expected SEMI
+error 13: expected an item
+error 15: expected an item
+error 16: expected an item
--- /dev/null
+fn main() {
+ 'loop: impl
+}
--- /dev/null
+SOURCE_FILE@[0; 30)
+ FN_DEF@[0; 29)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 7)
+ IDENT@[3; 7) "main"
+ PARAM_LIST@[7; 9)
+ L_PAREN@[7; 8) "("
+ R_PAREN@[8; 9) ")"
+ WHITESPACE@[9; 10) " "
+ BLOCK@[10; 29)
+ L_CURLY@[10; 11) "{"
+ WHITESPACE@[11; 16) "\n "
+ EXPR_STMT@[16; 22)
+ ERROR@[16; 22)
+ LABEL@[16; 22)
+ LIFETIME@[16; 21) "\'loop"
+ COLON@[21; 22) ":"
+ WHITESPACE@[22; 23) " "
+ IMPL_BLOCK@[23; 27)
+ IMPL_KW@[23; 27) "impl"
+ WHITESPACE@[27; 28) "\n"
+ R_CURLY@[28; 29) "}"
+ WHITESPACE@[29; 30) "\n"
+error 22: expected a loop
+error 22: expected SEMI
+error 27: expected type
+error 27: expected `{`
--- /dev/null
+type T = *();
--- /dev/null
+SOURCE_FILE@[0; 14)
+ TYPE_ALIAS_DEF@[0; 13)
+ TYPE_KW@[0; 4) "type"
+ WHITESPACE@[4; 5) " "
+ NAME@[5; 6)
+ IDENT@[5; 6) "T"
+ WHITESPACE@[6; 7) " "
+ EQ@[7; 8) "="
+ WHITESPACE@[8; 9) " "
+ POINTER_TYPE@[9; 12)
+ STAR@[9; 10) "*"
+ TUPLE_TYPE@[10; 12)
+ L_PAREN@[10; 11) "("
+ R_PAREN@[11; 12) ")"
+ SEMI@[12; 13) ";"
+ WHITESPACE@[13; 14) "\n"
+error 10: expected mut or const in raw pointer type (use `*mut T` or `*const T` as appropriate)
--- /dev/null
+impl Type {}
+impl Trait1 for T {}
+impl impl NotType {}
+impl Trait2 for impl NotType {}
--- /dev/null
+SOURCE_FILE@[0; 87)
+ IMPL_BLOCK@[0; 12)
+ IMPL_KW@[0; 4) "impl"
+ WHITESPACE@[4; 5) " "
+ PATH_TYPE@[5; 9)
+ PATH@[5; 9)
+ PATH_SEGMENT@[5; 9)
+ NAME_REF@[5; 9)
+ IDENT@[5; 9) "Type"
+ WHITESPACE@[9; 10) " "
+ ITEM_LIST@[10; 12)
+ L_CURLY@[10; 11) "{"
+ R_CURLY@[11; 12) "}"
+ WHITESPACE@[12; 13) "\n"
+ IMPL_BLOCK@[13; 33)
+ IMPL_KW@[13; 17) "impl"
+ WHITESPACE@[17; 18) " "
+ PATH_TYPE@[18; 24)
+ PATH@[18; 24)
+ PATH_SEGMENT@[18; 24)
+ NAME_REF@[18; 24)
+ IDENT@[18; 24) "Trait1"
+ WHITESPACE@[24; 25) " "
+ FOR_KW@[25; 28) "for"
+ WHITESPACE@[28; 29) " "
+ PATH_TYPE@[29; 30)
+ PATH@[29; 30)
+ PATH_SEGMENT@[29; 30)
+ NAME_REF@[29; 30)
+ IDENT@[29; 30) "T"
+ WHITESPACE@[30; 31) " "
+ ITEM_LIST@[31; 33)
+ L_CURLY@[31; 32) "{"
+ R_CURLY@[32; 33) "}"
+ WHITESPACE@[33; 34) "\n"
+ IMPL_BLOCK@[34; 38)
+ IMPL_KW@[34; 38) "impl"
+ WHITESPACE@[38; 39) " "
+ IMPL_BLOCK@[39; 54)
+ IMPL_KW@[39; 43) "impl"
+ WHITESPACE@[43; 44) " "
+ PATH_TYPE@[44; 51)
+ PATH@[44; 51)
+ PATH_SEGMENT@[44; 51)
+ NAME_REF@[44; 51)
+ IDENT@[44; 51) "NotType"
+ WHITESPACE@[51; 52) " "
+ ITEM_LIST@[52; 54)
+ L_CURLY@[52; 53) "{"
+ R_CURLY@[53; 54) "}"
+ WHITESPACE@[54; 55) "\n"
+ IMPL_BLOCK@[55; 70)
+ IMPL_KW@[55; 59) "impl"
+ WHITESPACE@[59; 60) " "
+ PATH_TYPE@[60; 66)
+ PATH@[60; 66)
+ PATH_SEGMENT@[60; 66)
+ NAME_REF@[60; 66)
+ IDENT@[60; 66) "Trait2"
+ WHITESPACE@[66; 67) " "
+ FOR_KW@[67; 70) "for"
+ WHITESPACE@[70; 71) " "
+ IMPL_BLOCK@[71; 86)
+ IMPL_KW@[71; 75) "impl"
+ WHITESPACE@[75; 76) " "
+ PATH_TYPE@[76; 83)
+ PATH@[76; 83)
+ PATH_SEGMENT@[76; 83)
+ NAME_REF@[76; 83)
+ IDENT@[76; 83) "NotType"
+ WHITESPACE@[83; 84) " "
+ ITEM_LIST@[84; 86)
+ L_CURLY@[84; 85) "{"
+ R_CURLY@[85; 86) "}"
+ WHITESPACE@[86; 87) "\n"
+error 38: expected trait or type
+error 38: expected `{`
+error 70: expected trait or type
+error 70: expected `{`
--- /dev/null
+type F = unsafe ();
--- /dev/null
+SOURCE_FILE@[0; 20)
+ TYPE_ALIAS_DEF@[0; 15)
+ TYPE_KW@[0; 4) "type"
+ WHITESPACE@[4; 5) " "
+ NAME@[5; 6)
+ IDENT@[5; 6) "F"
+ WHITESPACE@[6; 7) " "
+ EQ@[7; 8) "="
+ WHITESPACE@[8; 9) " "
+ UNSAFE_KW@[9; 15) "unsafe"
+ WHITESPACE@[15; 16) " "
+ ERROR@[16; 17)
+ L_PAREN@[16; 17) "("
+ ERROR@[17; 18)
+ R_PAREN@[17; 18) ")"
+ ERROR@[18; 19)
+ SEMI@[18; 19) ";"
+ WHITESPACE@[19; 20) "\n"
+error 15: expected `fn`
+error 15: expected SEMI
+error 16: expected an item
+error 17: expected an item
+error 18: expected an item
--- /dev/null
+fn foo(){} unsafe { } fn bar(){}
--- /dev/null
+SOURCE_FILE@[0; 33)
+ FN_DEF@[0; 10)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ BLOCK@[8; 10)
+ L_CURLY@[8; 9) "{"
+ R_CURLY@[9; 10) "}"
+ WHITESPACE@[10; 11) " "
+ ERROR@[11; 17)
+ UNSAFE_KW@[11; 17) "unsafe"
+ WHITESPACE@[17; 18) " "
+ ERROR@[18; 21)
+ L_CURLY@[18; 19) "{"
+ WHITESPACE@[19; 20) " "
+ R_CURLY@[20; 21) "}"
+ WHITESPACE@[21; 22) " "
+ FN_DEF@[22; 32)
+ FN_KW@[22; 24) "fn"
+ WHITESPACE@[24; 25) " "
+ NAME@[25; 28)
+ IDENT@[25; 28) "bar"
+ PARAM_LIST@[28; 30)
+ L_PAREN@[28; 29) "("
+ R_PAREN@[29; 30) ")"
+ BLOCK@[30; 32)
+ L_CURLY@[30; 31) "{"
+ R_CURLY@[31; 32) "}"
+ WHITESPACE@[32; 33) "\n"
+error 11: expected an item
+error 18: expected an item
--- /dev/null
+fn foo() { let _ = async {} }
--- /dev/null
+SOURCE_FILE@[0; 30)
+ FN_DEF@[0; 29)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 29)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 11) " "
+ LET_STMT@[11; 27)
+ LET_KW@[11; 14) "let"
+ WHITESPACE@[14; 15) " "
+ PLACEHOLDER_PAT@[15; 16)
+ UNDERSCORE@[15; 16) "_"
+ WHITESPACE@[16; 17) " "
+ EQ@[17; 18) "="
+ WHITESPACE@[18; 19) " "
+ BLOCK_EXPR@[19; 27)
+ ASYNC_KW@[19; 24) "async"
+ WHITESPACE@[24; 25) " "
+ BLOCK@[25; 27)
+ L_CURLY@[25; 26) "{"
+ R_CURLY@[26; 27) "}"
+ WHITESPACE@[27; 28) " "
+ R_CURLY@[28; 29) "}"
+ WHITESPACE@[29; 30) "\n"
+error 27: expected SEMI
--- /dev/null
+fn foo() { pub 92; }
--- /dev/null
+SOURCE_FILE@[0; 21)
+ FN_DEF@[0; 20)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 20)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 11) " "
+ ERROR@[11; 14)
+ VISIBILITY@[11; 14)
+ PUB_KW@[11; 14) "pub"
+ WHITESPACE@[14; 15) " "
+ EXPR_STMT@[15; 18)
+ LITERAL@[15; 17)
+ INT_NUMBER@[15; 17) "92"
+ SEMI@[17; 18) ";"
+ WHITESPACE@[18; 19) " "
+ R_CURLY@[19; 20) "}"
+ WHITESPACE@[20; 21) "\n"
+error 14: expected an item
--- /dev/null
+fn foo() {
+ #[A] 1 + 2;
+ #[B] if true {};
+}
--- /dev/null
+SOURCE_FILE@[0; 48)
+ FN_DEF@[0; 47)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 47)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 14) "\n "
+ EXPR_STMT@[14; 25)
+ ATTR@[14; 18)
+ POUND@[14; 15) "#"
+ TOKEN_TREE@[15; 18)
+ L_BRACK@[15; 16) "["
+ IDENT@[16; 17) "A"
+ R_BRACK@[17; 18) "]"
+ WHITESPACE@[18; 19) " "
+ BIN_EXPR@[19; 24)
+ LITERAL@[19; 20)
+ INT_NUMBER@[19; 20) "1"
+ WHITESPACE@[20; 21) " "
+ PLUS@[21; 22) "+"
+ WHITESPACE@[22; 23) " "
+ LITERAL@[23; 24)
+ INT_NUMBER@[23; 24) "2"
+ SEMI@[24; 25) ";"
+ WHITESPACE@[25; 29) "\n "
+ EXPR_STMT@[29; 45)
+ ATTR@[29; 33)
+ POUND@[29; 30) "#"
+ TOKEN_TREE@[30; 33)
+ L_BRACK@[30; 31) "["
+ IDENT@[31; 32) "B"
+ R_BRACK@[32; 33) "]"
+ WHITESPACE@[33; 34) " "
+ IF_EXPR@[34; 44)
+ IF_KW@[34; 36) "if"
+ WHITESPACE@[36; 37) " "
+ CONDITION@[37; 41)
+ LITERAL@[37; 41)
+ TRUE_KW@[37; 41) "true"
+ WHITESPACE@[41; 42) " "
+ BLOCK@[42; 44)
+ L_CURLY@[42; 43) "{"
+ R_CURLY@[43; 44) "}"
+ SEMI@[44; 45) ";"
+ WHITESPACE@[45; 46) "\n"
+ R_CURLY@[46; 47) "}"
+ WHITESPACE@[47; 48) "\n"
+error 24: attributes are not allowed on BIN_EXPR
+error 44: attributes are not allowed on IF_EXPR
--- /dev/null
+fn foo() {
+ x.0.;
+ x.1i32;
+ x.0x01;
+}
--- /dev/null
+SOURCE_FILE@[0; 47)
+ FN_DEF@[0; 46)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 46)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ EXPR_STMT@[15; 20)
+ FIELD_EXPR@[15; 19)
+ PATH_EXPR@[15; 16)
+ PATH@[15; 16)
+ PATH_SEGMENT@[15; 16)
+ NAME_REF@[15; 16)
+ IDENT@[15; 16) "x"
+ DOT@[16; 17) "."
+ FLOAT_NUMBER@[17; 19) "0."
+ SEMI@[19; 20) ";"
+ WHITESPACE@[20; 25) "\n "
+ EXPR_STMT@[25; 32)
+ FIELD_EXPR@[25; 31)
+ PATH_EXPR@[25; 26)
+ PATH@[25; 26)
+ PATH_SEGMENT@[25; 26)
+ NAME_REF@[25; 26)
+ IDENT@[25; 26) "x"
+ DOT@[26; 27) "."
+ INT_NUMBER@[27; 31) "1i32"
+ SEMI@[31; 32) ";"
+ WHITESPACE@[32; 37) "\n "
+ EXPR_STMT@[37; 44)
+ FIELD_EXPR@[37; 43)
+ PATH_EXPR@[37; 38)
+ PATH@[37; 38)
+ PATH_SEGMENT@[37; 38)
+ NAME_REF@[37; 38)
+ IDENT@[37; 38) "x"
+ DOT@[38; 39) "."
+ INT_NUMBER@[39; 43) "0x01"
+ SEMI@[43; 44) ";"
+ WHITESPACE@[44; 45) "\n"
+ R_CURLY@[45; 46) "}"
+ WHITESPACE@[46; 47) "\n"
+error [17; 19): Tuple (struct) field access is only allowed through decimal integers with no underscores or suffix
+error [27; 31): Tuple (struct) field access is only allowed through decimal integers with no underscores or suffix
+error [39; 43): Tuple (struct) field access is only allowed through decimal integers with no underscores or suffix
--- /dev/null
+async unsafe fn foo() {}
+unsafe const fn bar() {}
--- /dev/null
+SOURCE_FILE@[0; 50)
+ ERROR@[0; 5)
+ ASYNC_KW@[0; 5) "async"
+ WHITESPACE@[5; 6) " "
+ FN_DEF@[6; 24)
+ UNSAFE_KW@[6; 12) "unsafe"
+ WHITESPACE@[12; 13) " "
+ FN_KW@[13; 15) "fn"
+ WHITESPACE@[15; 16) " "
+ NAME@[16; 19)
+ IDENT@[16; 19) "foo"
+ PARAM_LIST@[19; 21)
+ L_PAREN@[19; 20) "("
+ R_PAREN@[20; 21) ")"
+ WHITESPACE@[21; 22) " "
+ BLOCK@[22; 24)
+ L_CURLY@[22; 23) "{"
+ R_CURLY@[23; 24) "}"
+ WHITESPACE@[24; 25) "\n"
+ ERROR@[25; 31)
+ UNSAFE_KW@[25; 31) "unsafe"
+ WHITESPACE@[31; 32) " "
+ FN_DEF@[32; 49)
+ CONST_KW@[32; 37) "const"
+ WHITESPACE@[37; 38) " "
+ FN_KW@[38; 40) "fn"
+ WHITESPACE@[40; 41) " "
+ NAME@[41; 44)
+ IDENT@[41; 44) "bar"
+ PARAM_LIST@[44; 46)
+ L_PAREN@[44; 45) "("
+ R_PAREN@[45; 46) ")"
+ WHITESPACE@[46; 47) " "
+ BLOCK@[47; 49)
+ L_CURLY@[47; 48) "{"
+ R_CURLY@[48; 49) "}"
+ WHITESPACE@[49; 50) "\n"
+error 5: expected existential, fn, trait or impl
+error 31: expected existential, fn, trait or impl
--- /dev/null
+trait T {
+ default type T = Bar;
+ default fn foo() {}
+}
--- /dev/null
+SOURCE_FILE@[0; 62)
+ TRAIT_DEF@[0; 61)
+ TRAIT_KW@[0; 5) "trait"
+ WHITESPACE@[5; 6) " "
+ NAME@[6; 7)
+ IDENT@[6; 7) "T"
+ WHITESPACE@[7; 8) " "
+ ITEM_LIST@[8; 61)
+ L_CURLY@[8; 9) "{"
+ WHITESPACE@[9; 14) "\n "
+ MACRO_CALL@[14; 21)
+ PATH@[14; 21)
+ PATH_SEGMENT@[14; 21)
+ NAME_REF@[14; 21)
+ IDENT@[14; 21) "default"
+ WHITESPACE@[21; 22) " "
+ TYPE_ALIAS_DEF@[22; 35)
+ TYPE_KW@[22; 26) "type"
+ WHITESPACE@[26; 27) " "
+ NAME@[27; 28)
+ IDENT@[27; 28) "T"
+ WHITESPACE@[28; 29) " "
+ EQ@[29; 30) "="
+ WHITESPACE@[30; 31) " "
+ PATH_TYPE@[31; 34)
+ PATH@[31; 34)
+ PATH_SEGMENT@[31; 34)
+ NAME_REF@[31; 34)
+ IDENT@[31; 34) "Bar"
+ SEMI@[34; 35) ";"
+ WHITESPACE@[35; 40) "\n "
+ MACRO_CALL@[40; 47)
+ PATH@[40; 47)
+ PATH_SEGMENT@[40; 47)
+ NAME_REF@[40; 47)
+ IDENT@[40; 47) "default"
+ WHITESPACE@[47; 48) " "
+ FN_DEF@[48; 59)
+ FN_KW@[48; 50) "fn"
+ WHITESPACE@[50; 51) " "
+ NAME@[51; 54)
+ IDENT@[51; 54) "foo"
+ PARAM_LIST@[54; 56)
+ L_PAREN@[54; 55) "("
+ R_PAREN@[55; 56) ")"
+ WHITESPACE@[56; 57) " "
+ BLOCK@[57; 59)
+ L_CURLY@[57; 58) "{"
+ R_CURLY@[58; 59) "}"
+ WHITESPACE@[59; 60) "\n"
+ R_CURLY@[60; 61) "}"
+ WHITESPACE@[61; 62) "\n"
+error 21: expected EXCL
+error 21: expected `{`, `[`, `(`
+error 21: expected SEMI
+error 47: expected EXCL
+error 47: expected `{`, `[`, `(`
+error 47: expected SEMI
--- /dev/null
+impl F {
+ type A: Clone;
+ const B: i32;
+ fn foo() {}
+ fn bar(&self);
+}
--- /dev/null
+SOURCE_FILE@[0; 83)
+ IMPL_BLOCK@[0; 82)
+ IMPL_KW@[0; 4) "impl"
+ WHITESPACE@[4; 5) " "
+ PATH_TYPE@[5; 6)
+ PATH@[5; 6)
+ PATH_SEGMENT@[5; 6)
+ NAME_REF@[5; 6)
+ IDENT@[5; 6) "F"
+ WHITESPACE@[6; 7) " "
+ ITEM_LIST@[7; 82)
+ L_CURLY@[7; 8) "{"
+ WHITESPACE@[8; 13) "\n "
+ TYPE_ALIAS_DEF@[13; 27)
+ TYPE_KW@[13; 17) "type"
+ WHITESPACE@[17; 18) " "
+ NAME@[18; 19)
+ IDENT@[18; 19) "A"
+ COLON@[19; 20) ":"
+ WHITESPACE@[20; 21) " "
+ TYPE_BOUND_LIST@[21; 26)
+ TYPE_BOUND@[21; 26)
+ PATH_TYPE@[21; 26)
+ PATH@[21; 26)
+ PATH_SEGMENT@[21; 26)
+ NAME_REF@[21; 26)
+ IDENT@[21; 26) "Clone"
+ SEMI@[26; 27) ";"
+ WHITESPACE@[27; 32) "\n "
+ CONST_DEF@[32; 45)
+ CONST_KW@[32; 37) "const"
+ WHITESPACE@[37; 38) " "
+ NAME@[38; 39)
+ IDENT@[38; 39) "B"
+ COLON@[39; 40) ":"
+ WHITESPACE@[40; 41) " "
+ PATH_TYPE@[41; 44)
+ PATH@[41; 44)
+ PATH_SEGMENT@[41; 44)
+ NAME_REF@[41; 44)
+ IDENT@[41; 44) "i32"
+ SEMI@[44; 45) ";"
+ WHITESPACE@[45; 50) "\n "
+ FN_DEF@[50; 61)
+ FN_KW@[50; 52) "fn"
+ WHITESPACE@[52; 53) " "
+ NAME@[53; 56)
+ IDENT@[53; 56) "foo"
+ PARAM_LIST@[56; 58)
+ L_PAREN@[56; 57) "("
+ R_PAREN@[57; 58) ")"
+ WHITESPACE@[58; 59) " "
+ BLOCK@[59; 61)
+ L_CURLY@[59; 60) "{"
+ R_CURLY@[60; 61) "}"
+ WHITESPACE@[61; 66) "\n "
+ FN_DEF@[66; 80)
+ FN_KW@[66; 68) "fn"
+ WHITESPACE@[68; 69) " "
+ NAME@[69; 72)
+ IDENT@[69; 72) "bar"
+ PARAM_LIST@[72; 79)
+ L_PAREN@[72; 73) "("
+ SELF_PARAM@[73; 78)
+ AMP@[73; 74) "&"
+ SELF_KW@[74; 78) "self"
+ R_PAREN@[78; 79) ")"
+ SEMI@[79; 80) ";"
+ WHITESPACE@[80; 81) "\n"
+ R_CURLY@[81; 82) "}"
+ WHITESPACE@[82; 83) "\n"
--- /dev/null
+use {crate::path::from::root, or::path::from::crate_name}; // Rust 2018 (with a crate named `or`)
+use {path::from::root}; // Rust 2015
+use ::{some::arbritrary::path}; // Rust 2015
+use ::{{{crate::export}}}; // Nonsensical but perfectly legal nestnig
--- /dev/null
+SOURCE_FILE@[0; 250)
+ USE_ITEM@[0; 58)
+ USE_KW@[0; 3) "use"
+ WHITESPACE@[3; 4) " "
+ USE_TREE@[4; 57)
+ USE_TREE_LIST@[4; 57)
+ L_CURLY@[4; 5) "{"
+ USE_TREE@[5; 28)
+ PATH@[5; 28)
+ PATH@[5; 22)
+ PATH@[5; 16)
+ PATH@[5; 10)
+ PATH_SEGMENT@[5; 10)
+ CRATE_KW@[5; 10) "crate"
+ COLONCOLON@[10; 12) "::"
+ PATH_SEGMENT@[12; 16)
+ NAME_REF@[12; 16)
+ IDENT@[12; 16) "path"
+ COLONCOLON@[16; 18) "::"
+ PATH_SEGMENT@[18; 22)
+ NAME_REF@[18; 22)
+ IDENT@[18; 22) "from"
+ COLONCOLON@[22; 24) "::"
+ PATH_SEGMENT@[24; 28)
+ NAME_REF@[24; 28)
+ IDENT@[24; 28) "root"
+ COMMA@[28; 29) ","
+ WHITESPACE@[29; 30) " "
+ USE_TREE@[30; 56)
+ PATH@[30; 56)
+ PATH@[30; 44)
+ PATH@[30; 38)
+ PATH@[30; 32)
+ PATH_SEGMENT@[30; 32)
+ NAME_REF@[30; 32)
+ IDENT@[30; 32) "or"
+ COLONCOLON@[32; 34) "::"
+ PATH_SEGMENT@[34; 38)
+ NAME_REF@[34; 38)
+ IDENT@[34; 38) "path"
+ COLONCOLON@[38; 40) "::"
+ PATH_SEGMENT@[40; 44)
+ NAME_REF@[40; 44)
+ IDENT@[40; 44) "from"
+ COLONCOLON@[44; 46) "::"
+ PATH_SEGMENT@[46; 56)
+ NAME_REF@[46; 56)
+ IDENT@[46; 56) "crate_name"
+ R_CURLY@[56; 57) "}"
+ SEMI@[57; 58) ";"
+ WHITESPACE@[58; 59) " "
+ COMMENT@[59; 97) "// Rust 2018 (with a ..."
+ WHITESPACE@[97; 98) "\n"
+ USE_ITEM@[98; 121)
+ USE_KW@[98; 101) "use"
+ WHITESPACE@[101; 102) " "
+ USE_TREE@[102; 120)
+ USE_TREE_LIST@[102; 120)
+ L_CURLY@[102; 103) "{"
+ USE_TREE@[103; 119)
+ PATH@[103; 119)
+ PATH@[103; 113)
+ PATH@[103; 107)
+ PATH_SEGMENT@[103; 107)
+ NAME_REF@[103; 107)
+ IDENT@[103; 107) "path"
+ COLONCOLON@[107; 109) "::"
+ PATH_SEGMENT@[109; 113)
+ NAME_REF@[109; 113)
+ IDENT@[109; 113) "from"
+ COLONCOLON@[113; 115) "::"
+ PATH_SEGMENT@[115; 119)
+ NAME_REF@[115; 119)
+ IDENT@[115; 119) "root"
+ R_CURLY@[119; 120) "}"
+ SEMI@[120; 121) ";"
+ WHITESPACE@[121; 122) " "
+ COMMENT@[122; 134) "// Rust 2015"
+ WHITESPACE@[134; 135) "\n"
+ USE_ITEM@[135; 166)
+ USE_KW@[135; 138) "use"
+ WHITESPACE@[138; 139) " "
+ USE_TREE@[139; 165)
+ COLONCOLON@[139; 141) "::"
+ USE_TREE_LIST@[141; 165)
+ L_CURLY@[141; 142) "{"
+ USE_TREE@[142; 164)
+ PATH@[142; 164)
+ PATH@[142; 158)
+ PATH@[142; 146)
+ PATH_SEGMENT@[142; 146)
+ NAME_REF@[142; 146)
+ IDENT@[142; 146) "some"
+ COLONCOLON@[146; 148) "::"
+ PATH_SEGMENT@[148; 158)
+ NAME_REF@[148; 158)
+ IDENT@[148; 158) "arbritrary"
+ COLONCOLON@[158; 160) "::"
+ PATH_SEGMENT@[160; 164)
+ NAME_REF@[160; 164)
+ IDENT@[160; 164) "path"
+ R_CURLY@[164; 165) "}"
+ SEMI@[165; 166) ";"
+ WHITESPACE@[166; 167) " "
+ COMMENT@[167; 179) "// Rust 2015"
+ WHITESPACE@[179; 180) "\n"
+ USE_ITEM@[180; 206)
+ USE_KW@[180; 183) "use"
+ WHITESPACE@[183; 184) " "
+ USE_TREE@[184; 205)
+ COLONCOLON@[184; 186) "::"
+ USE_TREE_LIST@[186; 205)
+ L_CURLY@[186; 187) "{"
+ USE_TREE@[187; 204)
+ USE_TREE_LIST@[187; 204)
+ L_CURLY@[187; 188) "{"
+ USE_TREE@[188; 203)
+ USE_TREE_LIST@[188; 203)
+ L_CURLY@[188; 189) "{"
+ USE_TREE@[189; 202)
+ PATH@[189; 202)
+ PATH@[189; 194)
+ PATH_SEGMENT@[189; 194)
+ CRATE_KW@[189; 194) "crate"
+ COLONCOLON@[194; 196) "::"
+ PATH_SEGMENT@[196; 202)
+ NAME_REF@[196; 202)
+ IDENT@[196; 202) "export"
+ R_CURLY@[202; 203) "}"
+ R_CURLY@[203; 204) "}"
+ R_CURLY@[204; 205) "}"
+ SEMI@[205; 206) ";"
+ WHITESPACE@[206; 207) " "
+ COMMENT@[207; 249) "// Nonsensical but pe ..."
+ WHITESPACE@[249; 250) "\n"
--- /dev/null
+fn test<F>()
+where
+ for<'a> F: Fn(&'a str)
+{ }
--- /dev/null
+SOURCE_FILE@[0; 49)
+ FN_DEF@[0; 48)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 7)
+ IDENT@[3; 7) "test"
+ TYPE_PARAM_LIST@[7; 10)
+ L_ANGLE@[7; 8) "<"
+ TYPE_PARAM@[8; 9)
+ NAME@[8; 9)
+ IDENT@[8; 9) "F"
+ R_ANGLE@[9; 10) ">"
+ PARAM_LIST@[10; 12)
+ L_PAREN@[10; 11) "("
+ R_PAREN@[11; 12) ")"
+ WHITESPACE@[12; 13) "\n"
+ WHERE_CLAUSE@[13; 44)
+ WHERE_KW@[13; 18) "where"
+ WHITESPACE@[18; 22) "\n "
+ WHERE_PRED@[22; 44)
+ FOR_TYPE@[22; 31)
+ FOR_KW@[22; 25) "for"
+ TYPE_PARAM_LIST@[25; 29)
+ L_ANGLE@[25; 26) "<"
+ LIFETIME_PARAM@[26; 28)
+ LIFETIME@[26; 28) "\'a"
+ R_ANGLE@[28; 29) ">"
+ WHITESPACE@[29; 30) " "
+ PATH_TYPE@[30; 31)
+ PATH@[30; 31)
+ PATH_SEGMENT@[30; 31)
+ NAME_REF@[30; 31)
+ IDENT@[30; 31) "F"
+ COLON@[31; 32) ":"
+ WHITESPACE@[32; 33) " "
+ TYPE_BOUND_LIST@[33; 44)
+ TYPE_BOUND@[33; 44)
+ PATH_TYPE@[33; 44)
+ PATH@[33; 44)
+ PATH_SEGMENT@[33; 44)
+ NAME_REF@[33; 35)
+ IDENT@[33; 35) "Fn"
+ PARAM_LIST@[35; 44)
+ L_PAREN@[35; 36) "("
+ PARAM@[36; 43)
+ REFERENCE_TYPE@[36; 43)
+ AMP@[36; 37) "&"
+ LIFETIME@[37; 39) "\'a"
+ WHITESPACE@[39; 40) " "
+ PATH_TYPE@[40; 43)
+ PATH@[40; 43)
+ PATH_SEGMENT@[40; 43)
+ NAME_REF@[40; 43)
+ IDENT@[40; 43) "str"
+ R_PAREN@[43; 44) ")"
+ WHITESPACE@[44; 45) "\n"
+ BLOCK@[45; 48)
+ L_CURLY@[45; 46) "{"
+ WHITESPACE@[46; 47) " "
+ R_CURLY@[47; 48) "}"
+ WHITESPACE@[48; 49) "\n"
--- /dev/null
+type F = Box<Fn(a: i32, &b: &i32, &mut c: &i32, ())>;
--- /dev/null
+SOURCE_FILE@[0; 54)
+ TYPE_ALIAS_DEF@[0; 53)
+ TYPE_KW@[0; 4) "type"
+ WHITESPACE@[4; 5) " "
+ NAME@[5; 6)
+ IDENT@[5; 6) "F"
+ WHITESPACE@[6; 7) " "
+ EQ@[7; 8) "="
+ WHITESPACE@[8; 9) " "
+ PATH_TYPE@[9; 52)
+ PATH@[9; 52)
+ PATH_SEGMENT@[9; 52)
+ NAME_REF@[9; 12)
+ IDENT@[9; 12) "Box"
+ TYPE_ARG_LIST@[12; 52)
+ L_ANGLE@[12; 13) "<"
+ TYPE_ARG@[13; 51)
+ PATH_TYPE@[13; 51)
+ PATH@[13; 51)
+ PATH_SEGMENT@[13; 51)
+ NAME_REF@[13; 15)
+ IDENT@[13; 15) "Fn"
+ PARAM_LIST@[15; 51)
+ L_PAREN@[15; 16) "("
+ PARAM@[16; 22)
+ BIND_PAT@[16; 17)
+ NAME@[16; 17)
+ IDENT@[16; 17) "a"
+ COLON@[17; 18) ":"
+ WHITESPACE@[18; 19) " "
+ PATH_TYPE@[19; 22)
+ PATH@[19; 22)
+ PATH_SEGMENT@[19; 22)
+ NAME_REF@[19; 22)
+ IDENT@[19; 22) "i32"
+ COMMA@[22; 23) ","
+ WHITESPACE@[23; 24) " "
+ PARAM@[24; 32)
+ REF_PAT@[24; 26)
+ AMP@[24; 25) "&"
+ BIND_PAT@[25; 26)
+ NAME@[25; 26)
+ IDENT@[25; 26) "b"
+ COLON@[26; 27) ":"
+ WHITESPACE@[27; 28) " "
+ REFERENCE_TYPE@[28; 32)
+ AMP@[28; 29) "&"
+ PATH_TYPE@[29; 32)
+ PATH@[29; 32)
+ PATH_SEGMENT@[29; 32)
+ NAME_REF@[29; 32)
+ IDENT@[29; 32) "i32"
+ COMMA@[32; 33) ","
+ WHITESPACE@[33; 34) " "
+ PARAM@[34; 46)
+ REF_PAT@[34; 40)
+ AMP@[34; 35) "&"
+ MUT_KW@[35; 38) "mut"
+ WHITESPACE@[38; 39) " "
+ BIND_PAT@[39; 40)
+ NAME@[39; 40)
+ IDENT@[39; 40) "c"
+ COLON@[40; 41) ":"
+ WHITESPACE@[41; 42) " "
+ REFERENCE_TYPE@[42; 46)
+ AMP@[42; 43) "&"
+ PATH_TYPE@[43; 46)
+ PATH@[43; 46)
+ PATH_SEGMENT@[43; 46)
+ NAME_REF@[43; 46)
+ IDENT@[43; 46) "i32"
+ COMMA@[46; 47) ","
+ WHITESPACE@[47; 48) " "
+ PARAM@[48; 50)
+ TUPLE_TYPE@[48; 50)
+ L_PAREN@[48; 49) "("
+ R_PAREN@[49; 50) ")"
+ R_PAREN@[50; 51) ")"
+ R_ANGLE@[51; 52) ">"
+ SEMI@[52; 53) ";"
+ WHITESPACE@[53; 54) "\n"
--- /dev/null
+fn foo<T: Clone + Copy>(){}
--- /dev/null
+SOURCE_FILE@[0; 28)
+ FN_DEF@[0; 27)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ TYPE_PARAM_LIST@[6; 23)
+ L_ANGLE@[6; 7) "<"
+ TYPE_PARAM@[7; 22)
+ NAME@[7; 8)
+ IDENT@[7; 8) "T"
+ COLON@[8; 9) ":"
+ WHITESPACE@[9; 10) " "
+ TYPE_BOUND_LIST@[10; 22)
+ TYPE_BOUND@[10; 15)
+ PATH_TYPE@[10; 15)
+ PATH@[10; 15)
+ PATH_SEGMENT@[10; 15)
+ NAME_REF@[10; 15)
+ IDENT@[10; 15) "Clone"
+ WHITESPACE@[15; 16) " "
+ PLUS@[16; 17) "+"
+ WHITESPACE@[17; 18) " "
+ TYPE_BOUND@[18; 22)
+ PATH_TYPE@[18; 22)
+ PATH@[18; 22)
+ PATH_SEGMENT@[18; 22)
+ NAME_REF@[18; 22)
+ IDENT@[18; 22) "Copy"
+ R_ANGLE@[22; 23) ">"
+ PARAM_LIST@[23; 25)
+ L_PAREN@[23; 24) "("
+ R_PAREN@[24; 25) ")"
+ BLOCK@[25; 27)
+ L_CURLY@[25; 26) "{"
+ R_CURLY@[26; 27) "}"
+ WHITESPACE@[27; 28) "\n"
--- /dev/null
+impl S {
+ fn a(self) {}
+ fn b(&self,) {}
+ fn c(&'a self,) {}
+ fn d(&'a mut self, x: i32) {}
+ fn e(mut self) {}
+}
--- /dev/null
+SOURCE_FILE@[0; 128)
+ IMPL_BLOCK@[0; 127)
+ IMPL_KW@[0; 4) "impl"
+ WHITESPACE@[4; 5) " "
+ PATH_TYPE@[5; 6)
+ PATH@[5; 6)
+ PATH_SEGMENT@[5; 6)
+ NAME_REF@[5; 6)
+ IDENT@[5; 6) "S"
+ WHITESPACE@[6; 7) " "
+ ITEM_LIST@[7; 127)
+ L_CURLY@[7; 8) "{"
+ WHITESPACE@[8; 13) "\n "
+ FN_DEF@[13; 26)
+ FN_KW@[13; 15) "fn"
+ WHITESPACE@[15; 16) " "
+ NAME@[16; 17)
+ IDENT@[16; 17) "a"
+ PARAM_LIST@[17; 23)
+ L_PAREN@[17; 18) "("
+ SELF_PARAM@[18; 22)
+ SELF_KW@[18; 22) "self"
+ R_PAREN@[22; 23) ")"
+ WHITESPACE@[23; 24) " "
+ BLOCK@[24; 26)
+ L_CURLY@[24; 25) "{"
+ R_CURLY@[25; 26) "}"
+ WHITESPACE@[26; 31) "\n "
+ FN_DEF@[31; 46)
+ FN_KW@[31; 33) "fn"
+ WHITESPACE@[33; 34) " "
+ NAME@[34; 35)
+ IDENT@[34; 35) "b"
+ PARAM_LIST@[35; 43)
+ L_PAREN@[35; 36) "("
+ SELF_PARAM@[36; 41)
+ AMP@[36; 37) "&"
+ SELF_KW@[37; 41) "self"
+ COMMA@[41; 42) ","
+ R_PAREN@[42; 43) ")"
+ WHITESPACE@[43; 44) " "
+ BLOCK@[44; 46)
+ L_CURLY@[44; 45) "{"
+ R_CURLY@[45; 46) "}"
+ WHITESPACE@[46; 51) "\n "
+ FN_DEF@[51; 69)
+ FN_KW@[51; 53) "fn"
+ WHITESPACE@[53; 54) " "
+ NAME@[54; 55)
+ IDENT@[54; 55) "c"
+ PARAM_LIST@[55; 66)
+ L_PAREN@[55; 56) "("
+ SELF_PARAM@[56; 64)
+ AMP@[56; 57) "&"
+ LIFETIME@[57; 59) "\'a"
+ WHITESPACE@[59; 60) " "
+ SELF_KW@[60; 64) "self"
+ COMMA@[64; 65) ","
+ R_PAREN@[65; 66) ")"
+ WHITESPACE@[66; 67) " "
+ BLOCK@[67; 69)
+ L_CURLY@[67; 68) "{"
+ R_CURLY@[68; 69) "}"
+ WHITESPACE@[69; 74) "\n "
+ FN_DEF@[74; 103)
+ FN_KW@[74; 76) "fn"
+ WHITESPACE@[76; 77) " "
+ NAME@[77; 78)
+ IDENT@[77; 78) "d"
+ PARAM_LIST@[78; 100)
+ L_PAREN@[78; 79) "("
+ SELF_PARAM@[79; 91)
+ AMP@[79; 80) "&"
+ LIFETIME@[80; 82) "\'a"
+ WHITESPACE@[82; 83) " "
+ MUT_KW@[83; 86) "mut"
+ WHITESPACE@[86; 87) " "
+ SELF_KW@[87; 91) "self"
+ COMMA@[91; 92) ","
+ WHITESPACE@[92; 93) " "
+ PARAM@[93; 99)
+ BIND_PAT@[93; 94)
+ NAME@[93; 94)
+ IDENT@[93; 94) "x"
+ COLON@[94; 95) ":"
+ WHITESPACE@[95; 96) " "
+ PATH_TYPE@[96; 99)
+ PATH@[96; 99)
+ PATH_SEGMENT@[96; 99)
+ NAME_REF@[96; 99)
+ IDENT@[96; 99) "i32"
+ R_PAREN@[99; 100) ")"
+ WHITESPACE@[100; 101) " "
+ BLOCK@[101; 103)
+ L_CURLY@[101; 102) "{"
+ R_CURLY@[102; 103) "}"
+ WHITESPACE@[103; 108) "\n "
+ FN_DEF@[108; 125)
+ FN_KW@[108; 110) "fn"
+ WHITESPACE@[110; 111) " "
+ NAME@[111; 112)
+ IDENT@[111; 112) "e"
+ PARAM_LIST@[112; 122)
+ L_PAREN@[112; 113) "("
+ SELF_PARAM@[113; 121)
+ MUT_KW@[113; 116) "mut"
+ WHITESPACE@[116; 117) " "
+ SELF_KW@[117; 121) "self"
+ R_PAREN@[121; 122) ")"
+ WHITESPACE@[122; 123) " "
+ BLOCK@[123; 125)
+ L_CURLY@[123; 124) "{"
+ R_CURLY@[124; 125) "}"
+ WHITESPACE@[125; 126) "\n"
+ R_CURLY@[126; 127) "}"
+ WHITESPACE@[127; 128) "\n"
--- /dev/null
+struct S<T: 'a + ?Sized + (Copy)>;
--- /dev/null
+SOURCE_FILE@[0; 35)
+ STRUCT_DEF@[0; 34)
+ STRUCT_KW@[0; 6) "struct"
+ WHITESPACE@[6; 7) " "
+ NAME@[7; 8)
+ IDENT@[7; 8) "S"
+ TYPE_PARAM_LIST@[8; 33)
+ L_ANGLE@[8; 9) "<"
+ TYPE_PARAM@[9; 32)
+ NAME@[9; 10)
+ IDENT@[9; 10) "T"
+ COLON@[10; 11) ":"
+ WHITESPACE@[11; 12) " "
+ TYPE_BOUND_LIST@[12; 32)
+ TYPE_BOUND@[12; 14)
+ LIFETIME@[12; 14) "\'a"
+ WHITESPACE@[14; 15) " "
+ PLUS@[15; 16) "+"
+ WHITESPACE@[16; 17) " "
+ TYPE_BOUND@[17; 23)
+ QUESTION@[17; 18) "?"
+ PATH_TYPE@[18; 23)
+ PATH@[18; 23)
+ PATH_SEGMENT@[18; 23)
+ NAME_REF@[18; 23)
+ IDENT@[18; 23) "Sized"
+ WHITESPACE@[23; 24) " "
+ PLUS@[24; 25) "+"
+ WHITESPACE@[25; 26) " "
+ TYPE_BOUND@[26; 32)
+ L_PAREN@[26; 27) "("
+ PATH_TYPE@[27; 31)
+ PATH@[27; 31)
+ PATH_SEGMENT@[27; 31)
+ NAME_REF@[27; 31)
+ IDENT@[27; 31) "Copy"
+ R_PAREN@[31; 32) ")"
+ R_ANGLE@[32; 33) ">"
+ SEMI@[33; 34) ";"
+ WHITESPACE@[34; 35) "\n"
--- /dev/null
+fn foo() {
+ let foo::Bar = ();
+ let ::Bar = ();
+ let Bar { .. } = ();
+ let Bar(..) = ();
+}
--- /dev/null
+SOURCE_FILE@[0; 103)
+ FN_DEF@[0; 102)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 102)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ LET_STMT@[15; 33)
+ LET_KW@[15; 18) "let"
+ WHITESPACE@[18; 19) " "
+ PATH_PAT@[19; 27)
+ PATH@[19; 27)
+ PATH@[19; 22)
+ PATH_SEGMENT@[19; 22)
+ NAME_REF@[19; 22)
+ IDENT@[19; 22) "foo"
+ COLONCOLON@[22; 24) "::"
+ PATH_SEGMENT@[24; 27)
+ NAME_REF@[24; 27)
+ IDENT@[24; 27) "Bar"
+ WHITESPACE@[27; 28) " "
+ EQ@[28; 29) "="
+ WHITESPACE@[29; 30) " "
+ TUPLE_EXPR@[30; 32)
+ L_PAREN@[30; 31) "("
+ R_PAREN@[31; 32) ")"
+ SEMI@[32; 33) ";"
+ WHITESPACE@[33; 38) "\n "
+ LET_STMT@[38; 53)
+ LET_KW@[38; 41) "let"
+ WHITESPACE@[41; 42) " "
+ PATH_PAT@[42; 47)
+ PATH@[42; 47)
+ PATH_SEGMENT@[42; 47)
+ COLONCOLON@[42; 44) "::"
+ NAME_REF@[44; 47)
+ IDENT@[44; 47) "Bar"
+ WHITESPACE@[47; 48) " "
+ EQ@[48; 49) "="
+ WHITESPACE@[49; 50) " "
+ TUPLE_EXPR@[50; 52)
+ L_PAREN@[50; 51) "("
+ R_PAREN@[51; 52) ")"
+ SEMI@[52; 53) ";"
+ WHITESPACE@[53; 58) "\n "
+ LET_STMT@[58; 78)
+ LET_KW@[58; 61) "let"
+ WHITESPACE@[61; 62) " "
+ STRUCT_PAT@[62; 72)
+ PATH@[62; 65)
+ PATH_SEGMENT@[62; 65)
+ NAME_REF@[62; 65)
+ IDENT@[62; 65) "Bar"
+ WHITESPACE@[65; 66) " "
+ FIELD_PAT_LIST@[66; 72)
+ L_CURLY@[66; 67) "{"
+ WHITESPACE@[67; 68) " "
+ DOTDOT@[68; 70) ".."
+ WHITESPACE@[70; 71) " "
+ R_CURLY@[71; 72) "}"
+ WHITESPACE@[72; 73) " "
+ EQ@[73; 74) "="
+ WHITESPACE@[74; 75) " "
+ TUPLE_EXPR@[75; 77)
+ L_PAREN@[75; 76) "("
+ R_PAREN@[76; 77) ")"
+ SEMI@[77; 78) ";"
+ WHITESPACE@[78; 83) "\n "
+ LET_STMT@[83; 100)
+ LET_KW@[83; 86) "let"
+ WHITESPACE@[86; 87) " "
+ TUPLE_STRUCT_PAT@[87; 94)
+ PATH@[87; 90)
+ PATH_SEGMENT@[87; 90)
+ NAME_REF@[87; 90)
+ IDENT@[87; 90) "Bar"
+ L_PAREN@[90; 91) "("
+ DOTDOT@[91; 93) ".."
+ R_PAREN@[93; 94) ")"
+ WHITESPACE@[94; 95) " "
+ EQ@[95; 96) "="
+ WHITESPACE@[96; 97) " "
+ TUPLE_EXPR@[97; 99)
+ L_PAREN@[97; 98) "("
+ R_PAREN@[98; 99) ")"
+ SEMI@[99; 100) ";"
+ WHITESPACE@[100; 101) "\n"
+ R_CURLY@[101; 102) "}"
+ WHITESPACE@[102; 103) "\n"
--- /dev/null
+fn foo() {
+ loop {};
+}
--- /dev/null
+SOURCE_FILE@[0; 26)
+ FN_DEF@[0; 25)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 25)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ EXPR_STMT@[15; 23)
+ LOOP_EXPR@[15; 22)
+ LOOP_KW@[15; 19) "loop"
+ WHITESPACE@[19; 20) " "
+ BLOCK@[20; 22)
+ L_CURLY@[20; 21) "{"
+ R_CURLY@[21; 22) "}"
+ SEMI@[22; 23) ";"
+ WHITESPACE@[23; 24) "\n"
+ R_CURLY@[24; 25) "}"
+ WHITESPACE@[25; 26) "\n"
--- /dev/null
+SOURCE_FILE@[0; 10)
+ EXTERN_BLOCK@[0; 9)
+ ABI@[0; 6)
+ EXTERN_KW@[0; 6) "extern"
+ WHITESPACE@[6; 7) " "
+ EXTERN_ITEM_LIST@[7; 9)
+ L_CURLY@[7; 8) "{"
+ R_CURLY@[8; 9) "}"
+ WHITESPACE@[9; 10) "\n"
--- /dev/null
+fn foo() {
+ x.foo;
+ x.0.bar;
+ x.0();
+}
--- /dev/null
+SOURCE_FILE@[0; 48)
+ FN_DEF@[0; 47)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 47)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ EXPR_STMT@[15; 21)
+ FIELD_EXPR@[15; 20)
+ PATH_EXPR@[15; 16)
+ PATH@[15; 16)
+ PATH_SEGMENT@[15; 16)
+ NAME_REF@[15; 16)
+ IDENT@[15; 16) "x"
+ DOT@[16; 17) "."
+ NAME_REF@[17; 20)
+ IDENT@[17; 20) "foo"
+ SEMI@[20; 21) ";"
+ WHITESPACE@[21; 26) "\n "
+ EXPR_STMT@[26; 34)
+ FIELD_EXPR@[26; 33)
+ FIELD_EXPR@[26; 29)
+ PATH_EXPR@[26; 27)
+ PATH@[26; 27)
+ PATH_SEGMENT@[26; 27)
+ NAME_REF@[26; 27)
+ IDENT@[26; 27) "x"
+ DOT@[27; 28) "."
+ INT_NUMBER@[28; 29) "0"
+ DOT@[29; 30) "."
+ NAME_REF@[30; 33)
+ IDENT@[30; 33) "bar"
+ SEMI@[33; 34) ";"
+ WHITESPACE@[34; 39) "\n "
+ EXPR_STMT@[39; 45)
+ CALL_EXPR@[39; 44)
+ FIELD_EXPR@[39; 42)
+ PATH_EXPR@[39; 40)
+ PATH@[39; 40)
+ PATH_SEGMENT@[39; 40)
+ NAME_REF@[39; 40)
+ IDENT@[39; 40) "x"
+ DOT@[40; 41) "."
+ INT_NUMBER@[41; 42) "0"
+ ARG_LIST@[42; 44)
+ L_PAREN@[42; 43) "("
+ R_PAREN@[43; 44) ")"
+ SEMI@[44; 45) ";"
+ WHITESPACE@[45; 46) "\n"
+ R_CURLY@[46; 47) "}"
+ WHITESPACE@[47; 48) "\n"
--- /dev/null
+type Foo where Foo: Copy = ();
--- /dev/null
+SOURCE_FILE@[0; 31)
+ TYPE_ALIAS_DEF@[0; 30)
+ TYPE_KW@[0; 4) "type"
+ WHITESPACE@[4; 5) " "
+ NAME@[5; 8)
+ IDENT@[5; 8) "Foo"
+ WHITESPACE@[8; 9) " "
+ WHERE_CLAUSE@[9; 24)
+ WHERE_KW@[9; 14) "where"
+ WHITESPACE@[14; 15) " "
+ WHERE_PRED@[15; 24)
+ PATH_TYPE@[15; 18)
+ PATH@[15; 18)
+ PATH_SEGMENT@[15; 18)
+ NAME_REF@[15; 18)
+ IDENT@[15; 18) "Foo"
+ COLON@[18; 19) ":"
+ WHITESPACE@[19; 20) " "
+ TYPE_BOUND_LIST@[20; 24)
+ TYPE_BOUND@[20; 24)
+ PATH_TYPE@[20; 24)
+ PATH@[20; 24)
+ PATH_SEGMENT@[20; 24)
+ NAME_REF@[20; 24)
+ IDENT@[20; 24) "Copy"
+ WHITESPACE@[24; 25) " "
+ EQ@[25; 26) "="
+ WHITESPACE@[26; 27) " "
+ TUPLE_TYPE@[27; 29)
+ L_PAREN@[27; 28) "("
+ R_PAREN@[28; 29) ")"
+ SEMI@[29; 30) ";"
+ WHITESPACE@[30; 31) "\n"
--- /dev/null
+type M = *mut ();
+type C = *mut ();
--- /dev/null
+SOURCE_FILE@[0; 36)
+ TYPE_ALIAS_DEF@[0; 17)
+ TYPE_KW@[0; 4) "type"
+ WHITESPACE@[4; 5) " "
+ NAME@[5; 6)
+ IDENT@[5; 6) "M"
+ WHITESPACE@[6; 7) " "
+ EQ@[7; 8) "="
+ WHITESPACE@[8; 9) " "
+ POINTER_TYPE@[9; 16)
+ STAR@[9; 10) "*"
+ MUT_KW@[10; 13) "mut"
+ WHITESPACE@[13; 14) " "
+ TUPLE_TYPE@[14; 16)
+ L_PAREN@[14; 15) "("
+ R_PAREN@[15; 16) ")"
+ SEMI@[16; 17) ";"
+ WHITESPACE@[17; 18) "\n"
+ TYPE_ALIAS_DEF@[18; 35)
+ TYPE_KW@[18; 22) "type"
+ WHITESPACE@[22; 23) " "
+ NAME@[23; 24)
+ IDENT@[23; 24) "C"
+ WHITESPACE@[24; 25) " "
+ EQ@[25; 26) "="
+ WHITESPACE@[26; 27) " "
+ POINTER_TYPE@[27; 34)
+ STAR@[27; 28) "*"
+ MUT_KW@[28; 31) "mut"
+ WHITESPACE@[31; 32) " "
+ TUPLE_TYPE@[32; 34)
+ L_PAREN@[32; 33) "("
+ R_PAREN@[33; 34) ")"
+ SEMI@[34; 35) ";"
+ WHITESPACE@[35; 36) "\n"
--- /dev/null
+type Never = !;
--- /dev/null
+SOURCE_FILE@[0; 16)
+ TYPE_ALIAS_DEF@[0; 15)
+ TYPE_KW@[0; 4) "type"
+ WHITESPACE@[4; 5) " "
+ NAME@[5; 10)
+ IDENT@[5; 10) "Never"
+ WHITESPACE@[10; 11) " "
+ EQ@[11; 12) "="
+ WHITESPACE@[12; 13) " "
+ NEVER_TYPE@[13; 14)
+ EXCL@[13; 14) "!"
+ SEMI@[14; 15) ";"
+ WHITESPACE@[15; 16) "\n"
--- /dev/null
+fn foo() {
+ loop {
+ continue;
+ continue 'l;
+ }
+}
--- /dev/null
+SOURCE_FILE@[0; 69)
+ FN_DEF@[0; 68)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 68)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ LOOP_EXPR@[15; 66)
+ LOOP_KW@[15; 19) "loop"
+ WHITESPACE@[19; 20) " "
+ BLOCK@[20; 66)
+ L_CURLY@[20; 21) "{"
+ WHITESPACE@[21; 30) "\n "
+ EXPR_STMT@[30; 39)
+ CONTINUE_EXPR@[30; 38)
+ CONTINUE_KW@[30; 38) "continue"
+ SEMI@[38; 39) ";"
+ WHITESPACE@[39; 48) "\n "
+ EXPR_STMT@[48; 60)
+ CONTINUE_EXPR@[48; 59)
+ CONTINUE_KW@[48; 56) "continue"
+ WHITESPACE@[56; 57) " "
+ LIFETIME@[57; 59) "\'l"
+ SEMI@[59; 60) ";"
+ WHITESPACE@[60; 65) "\n "
+ R_CURLY@[65; 66) "}"
+ WHITESPACE@[66; 67) "\n"
+ R_CURLY@[67; 68) "}"
+ WHITESPACE@[68; 69) "\n"
--- /dev/null
+unsafe trait T {}
--- /dev/null
+SOURCE_FILE@[0; 18)
+ TRAIT_DEF@[0; 17)
+ UNSAFE_KW@[0; 6) "unsafe"
+ WHITESPACE@[6; 7) " "
+ TRAIT_KW@[7; 12) "trait"
+ WHITESPACE@[12; 13) " "
+ NAME@[13; 14)
+ IDENT@[13; 14) "T"
+ WHITESPACE@[14; 15) " "
+ ITEM_LIST@[15; 17)
+ L_CURLY@[15; 16) "{"
+ R_CURLY@[16; 17) "}"
+ WHITESPACE@[17; 18) "\n"
--- /dev/null
+type T = [(); 92];
--- /dev/null
+SOURCE_FILE@[0; 19)
+ TYPE_ALIAS_DEF@[0; 18)
+ TYPE_KW@[0; 4) "type"
+ WHITESPACE@[4; 5) " "
+ NAME@[5; 6)
+ IDENT@[5; 6) "T"
+ WHITESPACE@[6; 7) " "
+ EQ@[7; 8) "="
+ WHITESPACE@[8; 9) " "
+ ARRAY_TYPE@[9; 17)
+ L_BRACK@[9; 10) "["
+ TUPLE_TYPE@[10; 12)
+ L_PAREN@[10; 11) "("
+ R_PAREN@[11; 12) ")"
+ SEMI@[12; 13) ";"
+ WHITESPACE@[13; 14) " "
+ LITERAL@[14; 16)
+ INT_NUMBER@[14; 16) "92"
+ R_BRACK@[16; 17) "]"
+ SEMI@[17; 18) ";"
+ WHITESPACE@[18; 19) "\n"
--- /dev/null
+impl S {
+ fn a(self: &Self) {}
+ fn b(mut self: Box<Self>) {}
+}
--- /dev/null
+SOURCE_FILE@[0; 69)
+ IMPL_BLOCK@[0; 68)
+ IMPL_KW@[0; 4) "impl"
+ WHITESPACE@[4; 5) " "
+ PATH_TYPE@[5; 6)
+ PATH@[5; 6)
+ PATH_SEGMENT@[5; 6)
+ NAME_REF@[5; 6)
+ IDENT@[5; 6) "S"
+ WHITESPACE@[6; 7) " "
+ ITEM_LIST@[7; 68)
+ L_CURLY@[7; 8) "{"
+ WHITESPACE@[8; 13) "\n "
+ FN_DEF@[13; 33)
+ FN_KW@[13; 15) "fn"
+ WHITESPACE@[15; 16) " "
+ NAME@[16; 17)
+ IDENT@[16; 17) "a"
+ PARAM_LIST@[17; 30)
+ L_PAREN@[17; 18) "("
+ SELF_PARAM@[18; 29)
+ SELF_KW@[18; 22) "self"
+ COLON@[22; 23) ":"
+ WHITESPACE@[23; 24) " "
+ REFERENCE_TYPE@[24; 29)
+ AMP@[24; 25) "&"
+ PATH_TYPE@[25; 29)
+ PATH@[25; 29)
+ PATH_SEGMENT@[25; 29)
+ NAME_REF@[25; 29)
+ IDENT@[25; 29) "Self"
+ R_PAREN@[29; 30) ")"
+ WHITESPACE@[30; 31) " "
+ BLOCK@[31; 33)
+ L_CURLY@[31; 32) "{"
+ R_CURLY@[32; 33) "}"
+ WHITESPACE@[33; 38) "\n "
+ FN_DEF@[38; 66)
+ FN_KW@[38; 40) "fn"
+ WHITESPACE@[40; 41) " "
+ NAME@[41; 42)
+ IDENT@[41; 42) "b"
+ PARAM_LIST@[42; 63)
+ L_PAREN@[42; 43) "("
+ SELF_PARAM@[43; 62)
+ MUT_KW@[43; 46) "mut"
+ WHITESPACE@[46; 47) " "
+ SELF_KW@[47; 51) "self"
+ COLON@[51; 52) ":"
+ WHITESPACE@[52; 53) " "
+ PATH_TYPE@[53; 62)
+ PATH@[53; 62)
+ PATH_SEGMENT@[53; 62)
+ NAME_REF@[53; 56)
+ IDENT@[53; 56) "Box"
+ TYPE_ARG_LIST@[56; 62)
+ L_ANGLE@[56; 57) "<"
+ TYPE_ARG@[57; 61)
+ PATH_TYPE@[57; 61)
+ PATH@[57; 61)
+ PATH_SEGMENT@[57; 61)
+ NAME_REF@[57; 61)
+ IDENT@[57; 61) "Self"
+ R_ANGLE@[61; 62) ">"
+ R_PAREN@[62; 63) ")"
+ WHITESPACE@[63; 64) " "
+ BLOCK@[64; 66)
+ L_CURLY@[64; 65) "{"
+ R_CURLY@[65; 66) "}"
+ WHITESPACE@[66; 67) "\n"
+ R_CURLY@[67; 68) "}"
+ WHITESPACE@[68; 69) "\n"
--- /dev/null
+fn foo() {
+ **&1;
+ !!true;
+ --1;
+}
--- /dev/null
+SOURCE_FILE@[0; 44)
+ FN_DEF@[0; 43)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 43)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ EXPR_STMT@[15; 20)
+ PREFIX_EXPR@[15; 19)
+ STAR@[15; 16) "*"
+ PREFIX_EXPR@[16; 19)
+ STAR@[16; 17) "*"
+ REF_EXPR@[17; 19)
+ AMP@[17; 18) "&"
+ LITERAL@[18; 19)
+ INT_NUMBER@[18; 19) "1"
+ SEMI@[19; 20) ";"
+ WHITESPACE@[20; 25) "\n "
+ EXPR_STMT@[25; 32)
+ PREFIX_EXPR@[25; 31)
+ EXCL@[25; 26) "!"
+ PREFIX_EXPR@[26; 31)
+ EXCL@[26; 27) "!"
+ LITERAL@[27; 31)
+ TRUE_KW@[27; 31) "true"
+ SEMI@[31; 32) ";"
+ WHITESPACE@[32; 37) "\n "
+ EXPR_STMT@[37; 41)
+ PREFIX_EXPR@[37; 40)
+ MINUS@[37; 38) "-"
+ PREFIX_EXPR@[38; 40)
+ MINUS@[38; 39) "-"
+ LITERAL@[39; 40)
+ INT_NUMBER@[39; 40) "1"
+ SEMI@[40; 41) ";"
+ WHITESPACE@[41; 42) "\n"
+ R_CURLY@[42; 43) "}"
+ WHITESPACE@[43; 44) "\n"
--- /dev/null
+use *;
+use ::*;
+use some::path::{*};
+use some::path::{::*};
--- /dev/null
+SOURCE_FILE@[0; 60)
+ USE_ITEM@[0; 6)
+ USE_KW@[0; 3) "use"
+ WHITESPACE@[3; 4) " "
+ USE_TREE@[4; 5)
+ STAR@[4; 5) "*"
+ SEMI@[5; 6) ";"
+ WHITESPACE@[6; 7) "\n"
+ USE_ITEM@[7; 15)
+ USE_KW@[7; 10) "use"
+ WHITESPACE@[10; 11) " "
+ USE_TREE@[11; 14)
+ COLONCOLON@[11; 13) "::"
+ STAR@[13; 14) "*"
+ SEMI@[14; 15) ";"
+ WHITESPACE@[15; 16) "\n"
+ USE_ITEM@[16; 36)
+ USE_KW@[16; 19) "use"
+ WHITESPACE@[19; 20) " "
+ USE_TREE@[20; 35)
+ PATH@[20; 30)
+ PATH@[20; 24)
+ PATH_SEGMENT@[20; 24)
+ NAME_REF@[20; 24)
+ IDENT@[20; 24) "some"
+ COLONCOLON@[24; 26) "::"
+ PATH_SEGMENT@[26; 30)
+ NAME_REF@[26; 30)
+ IDENT@[26; 30) "path"
+ COLONCOLON@[30; 32) "::"
+ USE_TREE_LIST@[32; 35)
+ L_CURLY@[32; 33) "{"
+ USE_TREE@[33; 34)
+ STAR@[33; 34) "*"
+ R_CURLY@[34; 35) "}"
+ SEMI@[35; 36) ";"
+ WHITESPACE@[36; 37) "\n"
+ USE_ITEM@[37; 59)
+ USE_KW@[37; 40) "use"
+ WHITESPACE@[40; 41) " "
+ USE_TREE@[41; 58)
+ PATH@[41; 51)
+ PATH@[41; 45)
+ PATH_SEGMENT@[41; 45)
+ NAME_REF@[41; 45)
+ IDENT@[41; 45) "some"
+ COLONCOLON@[45; 47) "::"
+ PATH_SEGMENT@[47; 51)
+ NAME_REF@[47; 51)
+ IDENT@[47; 51) "path"
+ COLONCOLON@[51; 53) "::"
+ USE_TREE_LIST@[53; 58)
+ L_CURLY@[53; 54) "{"
+ USE_TREE@[54; 57)
+ COLONCOLON@[54; 56) "::"
+ STAR@[56; 57) "*"
+ R_CURLY@[57; 58) "}"
+ SEMI@[58; 59) ";"
+ WHITESPACE@[59; 60) "\n"
--- /dev/null
+impl F {
+ type A = i32;
+ const B: i32 = 92;
+ fn foo() {}
+ fn bar(&self) {}
+}
--- /dev/null
+SOURCE_FILE@[0; 89)
+ IMPL_BLOCK@[0; 88)
+ IMPL_KW@[0; 4) "impl"
+ WHITESPACE@[4; 5) " "
+ PATH_TYPE@[5; 6)
+ PATH@[5; 6)
+ PATH_SEGMENT@[5; 6)
+ NAME_REF@[5; 6)
+ IDENT@[5; 6) "F"
+ WHITESPACE@[6; 7) " "
+ ITEM_LIST@[7; 88)
+ L_CURLY@[7; 8) "{"
+ WHITESPACE@[8; 13) "\n "
+ TYPE_ALIAS_DEF@[13; 26)
+ TYPE_KW@[13; 17) "type"
+ WHITESPACE@[17; 18) " "
+ NAME@[18; 19)
+ IDENT@[18; 19) "A"
+ WHITESPACE@[19; 20) " "
+ EQ@[20; 21) "="
+ WHITESPACE@[21; 22) " "
+ PATH_TYPE@[22; 25)
+ PATH@[22; 25)
+ PATH_SEGMENT@[22; 25)
+ NAME_REF@[22; 25)
+ IDENT@[22; 25) "i32"
+ SEMI@[25; 26) ";"
+ WHITESPACE@[26; 31) "\n "
+ CONST_DEF@[31; 49)
+ CONST_KW@[31; 36) "const"
+ WHITESPACE@[36; 37) " "
+ NAME@[37; 38)
+ IDENT@[37; 38) "B"
+ COLON@[38; 39) ":"
+ WHITESPACE@[39; 40) " "
+ PATH_TYPE@[40; 43)
+ PATH@[40; 43)
+ PATH_SEGMENT@[40; 43)
+ NAME_REF@[40; 43)
+ IDENT@[40; 43) "i32"
+ WHITESPACE@[43; 44) " "
+ EQ@[44; 45) "="
+ WHITESPACE@[45; 46) " "
+ LITERAL@[46; 48)
+ INT_NUMBER@[46; 48) "92"
+ SEMI@[48; 49) ";"
+ WHITESPACE@[49; 54) "\n "
+ FN_DEF@[54; 65)
+ FN_KW@[54; 56) "fn"
+ WHITESPACE@[56; 57) " "
+ NAME@[57; 60)
+ IDENT@[57; 60) "foo"
+ PARAM_LIST@[60; 62)
+ L_PAREN@[60; 61) "("
+ R_PAREN@[61; 62) ")"
+ WHITESPACE@[62; 63) " "
+ BLOCK@[63; 65)
+ L_CURLY@[63; 64) "{"
+ R_CURLY@[64; 65) "}"
+ WHITESPACE@[65; 70) "\n "
+ FN_DEF@[70; 86)
+ FN_KW@[70; 72) "fn"
+ WHITESPACE@[72; 73) " "
+ NAME@[73; 76)
+ IDENT@[73; 76) "bar"
+ PARAM_LIST@[76; 83)
+ L_PAREN@[76; 77) "("
+ SELF_PARAM@[77; 82)
+ AMP@[77; 78) "&"
+ SELF_KW@[78; 82) "self"
+ R_PAREN@[82; 83) ")"
+ WHITESPACE@[83; 84) " "
+ BLOCK@[84; 86)
+ L_CURLY@[84; 85) "{"
+ R_CURLY@[85; 86) "}"
+ WHITESPACE@[86; 87) "\n"
+ R_CURLY@[87; 88) "}"
+ WHITESPACE@[88; 89) "\n"
--- /dev/null
+pub(crate) struct S;
+pub(self) struct S;
+pub(self) struct S;
+pub(self) struct S;
--- /dev/null
+SOURCE_FILE@[0; 81)
+ STRUCT_DEF@[0; 20)
+ VISIBILITY@[0; 10)
+ PUB_KW@[0; 3) "pub"
+ L_PAREN@[3; 4) "("
+ CRATE_KW@[4; 9) "crate"
+ R_PAREN@[9; 10) ")"
+ WHITESPACE@[10; 11) " "
+ STRUCT_KW@[11; 17) "struct"
+ WHITESPACE@[17; 18) " "
+ NAME@[18; 19)
+ IDENT@[18; 19) "S"
+ SEMI@[19; 20) ";"
+ WHITESPACE@[20; 21) "\n"
+ STRUCT_DEF@[21; 40)
+ VISIBILITY@[21; 30)
+ PUB_KW@[21; 24) "pub"
+ L_PAREN@[24; 25) "("
+ SELF_KW@[25; 29) "self"
+ R_PAREN@[29; 30) ")"
+ WHITESPACE@[30; 31) " "
+ STRUCT_KW@[31; 37) "struct"
+ WHITESPACE@[37; 38) " "
+ NAME@[38; 39)
+ IDENT@[38; 39) "S"
+ SEMI@[39; 40) ";"
+ WHITESPACE@[40; 41) "\n"
+ STRUCT_DEF@[41; 60)
+ VISIBILITY@[41; 50)
+ PUB_KW@[41; 44) "pub"
+ L_PAREN@[44; 45) "("
+ SELF_KW@[45; 49) "self"
+ R_PAREN@[49; 50) ")"
+ WHITESPACE@[50; 51) " "
+ STRUCT_KW@[51; 57) "struct"
+ WHITESPACE@[57; 58) " "
+ NAME@[58; 59)
+ IDENT@[58; 59) "S"
+ SEMI@[59; 60) ";"
+ WHITESPACE@[60; 61) "\n"
+ STRUCT_DEF@[61; 80)
+ VISIBILITY@[61; 70)
+ PUB_KW@[61; 64) "pub"
+ L_PAREN@[64; 65) "("
+ SELF_KW@[65; 69) "self"
+ R_PAREN@[69; 70) ")"
+ WHITESPACE@[70; 71) " "
+ STRUCT_KW@[71; 77) "struct"
+ WHITESPACE@[77; 78) " "
+ NAME@[78; 79)
+ IDENT@[78; 79) "S"
+ SEMI@[79; 80) ";"
+ WHITESPACE@[80; 81) "\n"
--- /dev/null
+type Placeholder = _;
--- /dev/null
+SOURCE_FILE@[0; 22)
+ TYPE_ALIAS_DEF@[0; 21)
+ TYPE_KW@[0; 4) "type"
+ WHITESPACE@[4; 5) " "
+ NAME@[5; 16)
+ IDENT@[5; 16) "Placeholder"
+ WHITESPACE@[16; 17) " "
+ EQ@[17; 18) "="
+ WHITESPACE@[18; 19) " "
+ PLACEHOLDER_TYPE@[19; 20)
+ UNDERSCORE@[19; 20) "_"
+ SEMI@[20; 21) ";"
+ WHITESPACE@[21; 22) "\n"
--- /dev/null
+fn main() {
+ let [a, b, ..] = [];
+}
--- /dev/null
+SOURCE_FILE@[0; 39)
+ FN_DEF@[0; 38)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 7)
+ IDENT@[3; 7) "main"
+ PARAM_LIST@[7; 9)
+ L_PAREN@[7; 8) "("
+ R_PAREN@[8; 9) ")"
+ WHITESPACE@[9; 10) " "
+ BLOCK@[10; 38)
+ L_CURLY@[10; 11) "{"
+ WHITESPACE@[11; 16) "\n "
+ LET_STMT@[16; 36)
+ LET_KW@[16; 19) "let"
+ WHITESPACE@[19; 20) " "
+ SLICE_PAT@[20; 30)
+ L_BRACK@[20; 21) "["
+ BIND_PAT@[21; 22)
+ NAME@[21; 22)
+ IDENT@[21; 22) "a"
+ COMMA@[22; 23) ","
+ WHITESPACE@[23; 24) " "
+ BIND_PAT@[24; 25)
+ NAME@[24; 25)
+ IDENT@[24; 25) "b"
+ COMMA@[25; 26) ","
+ WHITESPACE@[26; 27) " "
+ DOTDOT@[27; 29) ".."
+ R_BRACK@[29; 30) "]"
+ WHITESPACE@[30; 31) " "
+ EQ@[31; 32) "="
+ WHITESPACE@[32; 33) " "
+ ARRAY_EXPR@[33; 35)
+ L_BRACK@[33; 34) "["
+ R_BRACK@[34; 35) "]"
+ SEMI@[35; 36) ";"
+ WHITESPACE@[36; 37) "\n"
+ R_CURLY@[37; 38) "}"
+ WHITESPACE@[38; 39) "\n"
--- /dev/null
+type T = [()];
--- /dev/null
+SOURCE_FILE@[0; 15)
+ TYPE_ALIAS_DEF@[0; 14)
+ TYPE_KW@[0; 4) "type"
+ WHITESPACE@[4; 5) " "
+ NAME@[5; 6)
+ IDENT@[5; 6) "T"
+ WHITESPACE@[6; 7) " "
+ EQ@[7; 8) "="
+ WHITESPACE@[8; 9) " "
+ SLICE_TYPE@[9; 13)
+ L_BRACK@[9; 10) "["
+ TUPLE_TYPE@[10; 12)
+ L_PAREN@[10; 11) "("
+ R_PAREN@[11; 12) ")"
+ R_BRACK@[12; 13) "]"
+ SEMI@[13; 14) ";"
+ WHITESPACE@[14; 15) "\n"
--- /dev/null
+fn foo() {
+ let S() = ();
+ let S(_) = ();
+ let S(_,) = ();
+ let S(_, .. , x) = ();
+}
--- /dev/null
+SOURCE_FILE@[0; 97)
+ FN_DEF@[0; 96)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 96)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ LET_STMT@[15; 28)
+ LET_KW@[15; 18) "let"
+ WHITESPACE@[18; 19) " "
+ TUPLE_STRUCT_PAT@[19; 22)
+ PATH@[19; 20)
+ PATH_SEGMENT@[19; 20)
+ NAME_REF@[19; 20)
+ IDENT@[19; 20) "S"
+ L_PAREN@[20; 21) "("
+ R_PAREN@[21; 22) ")"
+ WHITESPACE@[22; 23) " "
+ EQ@[23; 24) "="
+ WHITESPACE@[24; 25) " "
+ TUPLE_EXPR@[25; 27)
+ L_PAREN@[25; 26) "("
+ R_PAREN@[26; 27) ")"
+ SEMI@[27; 28) ";"
+ WHITESPACE@[28; 33) "\n "
+ LET_STMT@[33; 47)
+ LET_KW@[33; 36) "let"
+ WHITESPACE@[36; 37) " "
+ TUPLE_STRUCT_PAT@[37; 41)
+ PATH@[37; 38)
+ PATH_SEGMENT@[37; 38)
+ NAME_REF@[37; 38)
+ IDENT@[37; 38) "S"
+ L_PAREN@[38; 39) "("
+ PLACEHOLDER_PAT@[39; 40)
+ UNDERSCORE@[39; 40) "_"
+ R_PAREN@[40; 41) ")"
+ WHITESPACE@[41; 42) " "
+ EQ@[42; 43) "="
+ WHITESPACE@[43; 44) " "
+ TUPLE_EXPR@[44; 46)
+ L_PAREN@[44; 45) "("
+ R_PAREN@[45; 46) ")"
+ SEMI@[46; 47) ";"
+ WHITESPACE@[47; 52) "\n "
+ LET_STMT@[52; 67)
+ LET_KW@[52; 55) "let"
+ WHITESPACE@[55; 56) " "
+ TUPLE_STRUCT_PAT@[56; 61)
+ PATH@[56; 57)
+ PATH_SEGMENT@[56; 57)
+ NAME_REF@[56; 57)
+ IDENT@[56; 57) "S"
+ L_PAREN@[57; 58) "("
+ PLACEHOLDER_PAT@[58; 59)
+ UNDERSCORE@[58; 59) "_"
+ COMMA@[59; 60) ","
+ R_PAREN@[60; 61) ")"
+ WHITESPACE@[61; 62) " "
+ EQ@[62; 63) "="
+ WHITESPACE@[63; 64) " "
+ TUPLE_EXPR@[64; 66)
+ L_PAREN@[64; 65) "("
+ R_PAREN@[65; 66) ")"
+ SEMI@[66; 67) ";"
+ WHITESPACE@[67; 72) "\n "
+ LET_STMT@[72; 94)
+ LET_KW@[72; 75) "let"
+ WHITESPACE@[75; 76) " "
+ TUPLE_STRUCT_PAT@[76; 88)
+ PATH@[76; 77)
+ PATH_SEGMENT@[76; 77)
+ NAME_REF@[76; 77)
+ IDENT@[76; 77) "S"
+ L_PAREN@[77; 78) "("
+ PLACEHOLDER_PAT@[78; 79)
+ UNDERSCORE@[78; 79) "_"
+ COMMA@[79; 80) ","
+ WHITESPACE@[80; 81) " "
+ DOTDOT@[81; 83) ".."
+ WHITESPACE@[83; 84) " "
+ COMMA@[84; 85) ","
+ WHITESPACE@[85; 86) " "
+ BIND_PAT@[86; 87)
+ NAME@[86; 87)
+ IDENT@[86; 87) "x"
+ R_PAREN@[87; 88) ")"
+ WHITESPACE@[88; 89) " "
+ EQ@[89; 90) "="
+ WHITESPACE@[90; 91) " "
+ TUPLE_EXPR@[91; 93)
+ L_PAREN@[91; 92) "("
+ R_PAREN@[92; 93) ")"
+ SEMI@[93; 94) ";"
+ WHITESPACE@[94; 95) "\n"
+ R_CURLY@[95; 96) "}"
+ WHITESPACE@[96; 97) "\n"
--- /dev/null
+fn main() {
+ let &a = ();
+ let &mut b = ();
+}
--- /dev/null
+SOURCE_FILE@[0; 52)
+ FN_DEF@[0; 51)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 7)
+ IDENT@[3; 7) "main"
+ PARAM_LIST@[7; 9)
+ L_PAREN@[7; 8) "("
+ R_PAREN@[8; 9) ")"
+ WHITESPACE@[9; 10) " "
+ BLOCK@[10; 51)
+ L_CURLY@[10; 11) "{"
+ WHITESPACE@[11; 16) "\n "
+ LET_STMT@[16; 28)
+ LET_KW@[16; 19) "let"
+ WHITESPACE@[19; 20) " "
+ REF_PAT@[20; 22)
+ AMP@[20; 21) "&"
+ BIND_PAT@[21; 22)
+ NAME@[21; 22)
+ IDENT@[21; 22) "a"
+ WHITESPACE@[22; 23) " "
+ EQ@[23; 24) "="
+ WHITESPACE@[24; 25) " "
+ TUPLE_EXPR@[25; 27)
+ L_PAREN@[25; 26) "("
+ R_PAREN@[26; 27) ")"
+ SEMI@[27; 28) ";"
+ WHITESPACE@[28; 33) "\n "
+ LET_STMT@[33; 49)
+ LET_KW@[33; 36) "let"
+ WHITESPACE@[36; 37) " "
+ REF_PAT@[37; 43)
+ AMP@[37; 38) "&"
+ MUT_KW@[38; 41) "mut"
+ WHITESPACE@[41; 42) " "
+ BIND_PAT@[42; 43)
+ NAME@[42; 43)
+ IDENT@[42; 43) "b"
+ WHITESPACE@[43; 44) " "
+ EQ@[44; 45) "="
+ WHITESPACE@[45; 46) " "
+ TUPLE_EXPR@[46; 48)
+ L_PAREN@[46; 47) "("
+ R_PAREN@[47; 48) ")"
+ SEMI@[48; 49) ";"
+ WHITESPACE@[49; 50) "\n"
+ R_CURLY@[50; 51) "}"
+ WHITESPACE@[51; 52) "\n"
--- /dev/null
+type A = impl Iterator<Item=Foo<'a>> + 'a;
--- /dev/null
+SOURCE_FILE@[0; 43)
+ TYPE_ALIAS_DEF@[0; 42)
+ TYPE_KW@[0; 4) "type"
+ WHITESPACE@[4; 5) " "
+ NAME@[5; 6)
+ IDENT@[5; 6) "A"
+ WHITESPACE@[6; 7) " "
+ EQ@[7; 8) "="
+ WHITESPACE@[8; 9) " "
+ IMPL_TRAIT_TYPE@[9; 41)
+ IMPL_KW@[9; 13) "impl"
+ WHITESPACE@[13; 14) " "
+ TYPE_BOUND_LIST@[14; 41)
+ TYPE_BOUND@[14; 36)
+ PATH_TYPE@[14; 36)
+ PATH@[14; 36)
+ PATH_SEGMENT@[14; 36)
+ NAME_REF@[14; 22)
+ IDENT@[14; 22) "Iterator"
+ TYPE_ARG_LIST@[22; 36)
+ L_ANGLE@[22; 23) "<"
+ ASSOC_TYPE_ARG@[23; 35)
+ NAME_REF@[23; 27)
+ IDENT@[23; 27) "Item"
+ EQ@[27; 28) "="
+ PATH_TYPE@[28; 35)
+ PATH@[28; 35)
+ PATH_SEGMENT@[28; 35)
+ NAME_REF@[28; 31)
+ IDENT@[28; 31) "Foo"
+ TYPE_ARG_LIST@[31; 35)
+ L_ANGLE@[31; 32) "<"
+ LIFETIME_ARG@[32; 34)
+ LIFETIME@[32; 34) "\'a"
+ R_ANGLE@[34; 35) ">"
+ R_ANGLE@[35; 36) ">"
+ WHITESPACE@[36; 37) " "
+ PLUS@[37; 38) "+"
+ WHITESPACE@[38; 39) " "
+ TYPE_BOUND@[39; 41)
+ LIFETIME@[39; 41) "\'a"
+ SEMI@[41; 42) ";"
+ WHITESPACE@[42; 43) "\n"
--- /dev/null
+fn foo() {
+ 82 as i32;
+ 81 as i8 + 1;
+ 79 as i16 - 1;
+ 0x36 as u8 <= 0x37;
+}
--- /dev/null
+SOURCE_FILE@[0; 89)
+ FN_DEF@[0; 88)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 88)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ EXPR_STMT@[15; 25)
+ CAST_EXPR@[15; 24)
+ LITERAL@[15; 17)
+ INT_NUMBER@[15; 17) "82"
+ WHITESPACE@[17; 18) " "
+ AS_KW@[18; 20) "as"
+ WHITESPACE@[20; 21) " "
+ PATH_TYPE@[21; 24)
+ PATH@[21; 24)
+ PATH_SEGMENT@[21; 24)
+ NAME_REF@[21; 24)
+ IDENT@[21; 24) "i32"
+ SEMI@[24; 25) ";"
+ WHITESPACE@[25; 30) "\n "
+ EXPR_STMT@[30; 43)
+ BIN_EXPR@[30; 42)
+ CAST_EXPR@[30; 38)
+ LITERAL@[30; 32)
+ INT_NUMBER@[30; 32) "81"
+ WHITESPACE@[32; 33) " "
+ AS_KW@[33; 35) "as"
+ WHITESPACE@[35; 36) " "
+ PATH_TYPE@[36; 38)
+ PATH@[36; 38)
+ PATH_SEGMENT@[36; 38)
+ NAME_REF@[36; 38)
+ IDENT@[36; 38) "i8"
+ WHITESPACE@[38; 39) " "
+ PLUS@[39; 40) "+"
+ WHITESPACE@[40; 41) " "
+ LITERAL@[41; 42)
+ INT_NUMBER@[41; 42) "1"
+ SEMI@[42; 43) ";"
+ WHITESPACE@[43; 48) "\n "
+ EXPR_STMT@[48; 62)
+ BIN_EXPR@[48; 61)
+ CAST_EXPR@[48; 57)
+ LITERAL@[48; 50)
+ INT_NUMBER@[48; 50) "79"
+ WHITESPACE@[50; 51) " "
+ AS_KW@[51; 53) "as"
+ WHITESPACE@[53; 54) " "
+ PATH_TYPE@[54; 57)
+ PATH@[54; 57)
+ PATH_SEGMENT@[54; 57)
+ NAME_REF@[54; 57)
+ IDENT@[54; 57) "i16"
+ WHITESPACE@[57; 58) " "
+ MINUS@[58; 59) "-"
+ WHITESPACE@[59; 60) " "
+ LITERAL@[60; 61)
+ INT_NUMBER@[60; 61) "1"
+ SEMI@[61; 62) ";"
+ WHITESPACE@[62; 67) "\n "
+ EXPR_STMT@[67; 86)
+ BIN_EXPR@[67; 85)
+ CAST_EXPR@[67; 77)
+ LITERAL@[67; 71)
+ INT_NUMBER@[67; 71) "0x36"
+ WHITESPACE@[71; 72) " "
+ AS_KW@[72; 74) "as"
+ WHITESPACE@[74; 75) " "
+ PATH_TYPE@[75; 77)
+ PATH@[75; 77)
+ PATH_SEGMENT@[75; 77)
+ NAME_REF@[75; 77)
+ IDENT@[75; 77) "u8"
+ WHITESPACE@[77; 78) " "
+ LTEQ@[78; 80) "<="
+ WHITESPACE@[80; 81) " "
+ LITERAL@[81; 85)
+ INT_NUMBER@[81; 85) "0x37"
+ SEMI@[85; 86) ";"
+ WHITESPACE@[86; 87) "\n"
+ R_CURLY@[87; 88) "}"
+ WHITESPACE@[88; 89) "\n"
--- /dev/null
+fn foo() { if let Some(_) = None {} }
+fn bar() {
+ if let Some(_) | Some(_) = None {}
+ if let | Some(_) = None {}
+ while let Some(_) | Some(_) = None {}
+ while let | Some(_) = None {}
+}
--- /dev/null
+SOURCE_FILE@[0; 197)
+ FN_DEF@[0; 37)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 37)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 11) " "
+ IF_EXPR@[11; 35)
+ IF_KW@[11; 13) "if"
+ WHITESPACE@[13; 14) " "
+ CONDITION@[14; 32)
+ LET_KW@[14; 17) "let"
+ WHITESPACE@[17; 18) " "
+ TUPLE_STRUCT_PAT@[18; 25)
+ PATH@[18; 22)
+ PATH_SEGMENT@[18; 22)
+ NAME_REF@[18; 22)
+ IDENT@[18; 22) "Some"
+ L_PAREN@[22; 23) "("
+ PLACEHOLDER_PAT@[23; 24)
+ UNDERSCORE@[23; 24) "_"
+ R_PAREN@[24; 25) ")"
+ WHITESPACE@[25; 26) " "
+ EQ@[26; 27) "="
+ WHITESPACE@[27; 28) " "
+ PATH_EXPR@[28; 32)
+ PATH@[28; 32)
+ PATH_SEGMENT@[28; 32)
+ NAME_REF@[28; 32)
+ IDENT@[28; 32) "None"
+ WHITESPACE@[32; 33) " "
+ BLOCK@[33; 35)
+ L_CURLY@[33; 34) "{"
+ R_CURLY@[34; 35) "}"
+ WHITESPACE@[35; 36) " "
+ R_CURLY@[36; 37) "}"
+ WHITESPACE@[37; 38) "\n"
+ FN_DEF@[38; 196)
+ FN_KW@[38; 40) "fn"
+ WHITESPACE@[40; 41) " "
+ NAME@[41; 44)
+ IDENT@[41; 44) "bar"
+ PARAM_LIST@[44; 46)
+ L_PAREN@[44; 45) "("
+ R_PAREN@[45; 46) ")"
+ WHITESPACE@[46; 47) " "
+ BLOCK@[47; 196)
+ L_CURLY@[47; 48) "{"
+ WHITESPACE@[48; 53) "\n "
+ EXPR_STMT@[53; 87)
+ IF_EXPR@[53; 87)
+ IF_KW@[53; 55) "if"
+ WHITESPACE@[55; 56) " "
+ CONDITION@[56; 84)
+ LET_KW@[56; 59) "let"
+ WHITESPACE@[59; 60) " "
+ TUPLE_STRUCT_PAT@[60; 67)
+ PATH@[60; 64)
+ PATH_SEGMENT@[60; 64)
+ NAME_REF@[60; 64)
+ IDENT@[60; 64) "Some"
+ L_PAREN@[64; 65) "("
+ PLACEHOLDER_PAT@[65; 66)
+ UNDERSCORE@[65; 66) "_"
+ R_PAREN@[66; 67) ")"
+ WHITESPACE@[67; 68) " "
+ PIPE@[68; 69) "|"
+ WHITESPACE@[69; 70) " "
+ TUPLE_STRUCT_PAT@[70; 77)
+ PATH@[70; 74)
+ PATH_SEGMENT@[70; 74)
+ NAME_REF@[70; 74)
+ IDENT@[70; 74) "Some"
+ L_PAREN@[74; 75) "("
+ PLACEHOLDER_PAT@[75; 76)
+ UNDERSCORE@[75; 76) "_"
+ R_PAREN@[76; 77) ")"
+ WHITESPACE@[77; 78) " "
+ EQ@[78; 79) "="
+ WHITESPACE@[79; 80) " "
+ PATH_EXPR@[80; 84)
+ PATH@[80; 84)
+ PATH_SEGMENT@[80; 84)
+ NAME_REF@[80; 84)
+ IDENT@[80; 84) "None"
+ WHITESPACE@[84; 85) " "
+ BLOCK@[85; 87)
+ L_CURLY@[85; 86) "{"
+ R_CURLY@[86; 87) "}"
+ WHITESPACE@[87; 92) "\n "
+ EXPR_STMT@[92; 118)
+ IF_EXPR@[92; 118)
+ IF_KW@[92; 94) "if"
+ WHITESPACE@[94; 95) " "
+ CONDITION@[95; 115)
+ LET_KW@[95; 98) "let"
+ WHITESPACE@[98; 99) " "
+ PIPE@[99; 100) "|"
+ WHITESPACE@[100; 101) " "
+ TUPLE_STRUCT_PAT@[101; 108)
+ PATH@[101; 105)
+ PATH_SEGMENT@[101; 105)
+ NAME_REF@[101; 105)
+ IDENT@[101; 105) "Some"
+ L_PAREN@[105; 106) "("
+ PLACEHOLDER_PAT@[106; 107)
+ UNDERSCORE@[106; 107) "_"
+ R_PAREN@[107; 108) ")"
+ WHITESPACE@[108; 109) " "
+ EQ@[109; 110) "="
+ WHITESPACE@[110; 111) " "
+ PATH_EXPR@[111; 115)
+ PATH@[111; 115)
+ PATH_SEGMENT@[111; 115)
+ NAME_REF@[111; 115)
+ IDENT@[111; 115) "None"
+ WHITESPACE@[115; 116) " "
+ BLOCK@[116; 118)
+ L_CURLY@[116; 117) "{"
+ R_CURLY@[117; 118) "}"
+ WHITESPACE@[118; 123) "\n "
+ EXPR_STMT@[123; 160)
+ WHILE_EXPR@[123; 160)
+ WHILE_KW@[123; 128) "while"
+ WHITESPACE@[128; 129) " "
+ CONDITION@[129; 157)
+ LET_KW@[129; 132) "let"
+ WHITESPACE@[132; 133) " "
+ TUPLE_STRUCT_PAT@[133; 140)
+ PATH@[133; 137)
+ PATH_SEGMENT@[133; 137)
+ NAME_REF@[133; 137)
+ IDENT@[133; 137) "Some"
+ L_PAREN@[137; 138) "("
+ PLACEHOLDER_PAT@[138; 139)
+ UNDERSCORE@[138; 139) "_"
+ R_PAREN@[139; 140) ")"
+ WHITESPACE@[140; 141) " "
+ PIPE@[141; 142) "|"
+ WHITESPACE@[142; 143) " "
+ TUPLE_STRUCT_PAT@[143; 150)
+ PATH@[143; 147)
+ PATH_SEGMENT@[143; 147)
+ NAME_REF@[143; 147)
+ IDENT@[143; 147) "Some"
+ L_PAREN@[147; 148) "("
+ PLACEHOLDER_PAT@[148; 149)
+ UNDERSCORE@[148; 149) "_"
+ R_PAREN@[149; 150) ")"
+ WHITESPACE@[150; 151) " "
+ EQ@[151; 152) "="
+ WHITESPACE@[152; 153) " "
+ PATH_EXPR@[153; 157)
+ PATH@[153; 157)
+ PATH_SEGMENT@[153; 157)
+ NAME_REF@[153; 157)
+ IDENT@[153; 157) "None"
+ WHITESPACE@[157; 158) " "
+ BLOCK@[158; 160)
+ L_CURLY@[158; 159) "{"
+ R_CURLY@[159; 160) "}"
+ WHITESPACE@[160; 165) "\n "
+ WHILE_EXPR@[165; 194)
+ WHILE_KW@[165; 170) "while"
+ WHITESPACE@[170; 171) " "
+ CONDITION@[171; 191)
+ LET_KW@[171; 174) "let"
+ WHITESPACE@[174; 175) " "
+ PIPE@[175; 176) "|"
+ WHITESPACE@[176; 177) " "
+ TUPLE_STRUCT_PAT@[177; 184)
+ PATH@[177; 181)
+ PATH_SEGMENT@[177; 181)
+ NAME_REF@[177; 181)
+ IDENT@[177; 181) "Some"
+ L_PAREN@[181; 182) "("
+ PLACEHOLDER_PAT@[182; 183)
+ UNDERSCORE@[182; 183) "_"
+ R_PAREN@[183; 184) ")"
+ WHITESPACE@[184; 185) " "
+ EQ@[185; 186) "="
+ WHITESPACE@[186; 187) " "
+ PATH_EXPR@[187; 191)
+ PATH@[187; 191)
+ PATH_SEGMENT@[187; 191)
+ NAME_REF@[187; 191)
+ IDENT@[187; 191) "None"
+ WHITESPACE@[191; 192) " "
+ BLOCK@[192; 194)
+ L_CURLY@[192; 193) "{"
+ R_CURLY@[193; 194) "}"
+ WHITESPACE@[194; 195) "\n"
+ R_CURLY@[195; 196) "}"
+ WHITESPACE@[196; 197) "\n"
--- /dev/null
+fn foo() {
+ while true {};
+ while let Some(x) = it.next() {};
+}
--- /dev/null
+SOURCE_FILE@[0; 70)
+ FN_DEF@[0; 69)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 69)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ EXPR_STMT@[15; 29)
+ WHILE_EXPR@[15; 28)
+ WHILE_KW@[15; 20) "while"
+ WHITESPACE@[20; 21) " "
+ CONDITION@[21; 25)
+ LITERAL@[21; 25)
+ TRUE_KW@[21; 25) "true"
+ WHITESPACE@[25; 26) " "
+ BLOCK@[26; 28)
+ L_CURLY@[26; 27) "{"
+ R_CURLY@[27; 28) "}"
+ SEMI@[28; 29) ";"
+ WHITESPACE@[29; 34) "\n "
+ EXPR_STMT@[34; 67)
+ WHILE_EXPR@[34; 66)
+ WHILE_KW@[34; 39) "while"
+ WHITESPACE@[39; 40) " "
+ CONDITION@[40; 63)
+ LET_KW@[40; 43) "let"
+ WHITESPACE@[43; 44) " "
+ TUPLE_STRUCT_PAT@[44; 51)
+ PATH@[44; 48)
+ PATH_SEGMENT@[44; 48)
+ NAME_REF@[44; 48)
+ IDENT@[44; 48) "Some"
+ L_PAREN@[48; 49) "("
+ BIND_PAT@[49; 50)
+ NAME@[49; 50)
+ IDENT@[49; 50) "x"
+ R_PAREN@[50; 51) ")"
+ WHITESPACE@[51; 52) " "
+ EQ@[52; 53) "="
+ WHITESPACE@[53; 54) " "
+ METHOD_CALL_EXPR@[54; 63)
+ PATH_EXPR@[54; 56)
+ PATH@[54; 56)
+ PATH_SEGMENT@[54; 56)
+ NAME_REF@[54; 56)
+ IDENT@[54; 56) "it"
+ DOT@[56; 57) "."
+ NAME_REF@[57; 61)
+ IDENT@[57; 61) "next"
+ ARG_LIST@[61; 63)
+ L_PAREN@[61; 62) "("
+ R_PAREN@[62; 63) ")"
+ WHITESPACE@[63; 64) " "
+ BLOCK@[64; 66)
+ L_CURLY@[64; 65) "{"
+ R_CURLY@[65; 66) "}"
+ SEMI@[66; 67) ";"
+ WHITESPACE@[67; 68) "\n"
+ R_CURLY@[68; 69) "}"
+ WHITESPACE@[69; 70) "\n"
--- /dev/null
+type A = fn();
+type B = unsafe fn();
+type C = unsafe extern "C" fn();
+type D = extern "C" fn ( u8 , ... ) -> u8;
--- /dev/null
+SOURCE_FILE@[0; 113)
+ TYPE_ALIAS_DEF@[0; 14)
+ TYPE_KW@[0; 4) "type"
+ WHITESPACE@[4; 5) " "
+ NAME@[5; 6)
+ IDENT@[5; 6) "A"
+ WHITESPACE@[6; 7) " "
+ EQ@[7; 8) "="
+ WHITESPACE@[8; 9) " "
+ FN_POINTER_TYPE@[9; 13)
+ FN_KW@[9; 11) "fn"
+ PARAM_LIST@[11; 13)
+ L_PAREN@[11; 12) "("
+ R_PAREN@[12; 13) ")"
+ SEMI@[13; 14) ";"
+ WHITESPACE@[14; 15) "\n"
+ TYPE_ALIAS_DEF@[15; 36)
+ TYPE_KW@[15; 19) "type"
+ WHITESPACE@[19; 20) " "
+ NAME@[20; 21)
+ IDENT@[20; 21) "B"
+ WHITESPACE@[21; 22) " "
+ EQ@[22; 23) "="
+ WHITESPACE@[23; 24) " "
+ FN_POINTER_TYPE@[24; 35)
+ UNSAFE_KW@[24; 30) "unsafe"
+ WHITESPACE@[30; 31) " "
+ FN_KW@[31; 33) "fn"
+ PARAM_LIST@[33; 35)
+ L_PAREN@[33; 34) "("
+ R_PAREN@[34; 35) ")"
+ SEMI@[35; 36) ";"
+ WHITESPACE@[36; 37) "\n"
+ TYPE_ALIAS_DEF@[37; 69)
+ TYPE_KW@[37; 41) "type"
+ WHITESPACE@[41; 42) " "
+ NAME@[42; 43)
+ IDENT@[42; 43) "C"
+ WHITESPACE@[43; 44) " "
+ EQ@[44; 45) "="
+ WHITESPACE@[45; 46) " "
+ FN_POINTER_TYPE@[46; 68)
+ UNSAFE_KW@[46; 52) "unsafe"
+ WHITESPACE@[52; 53) " "
+ ABI@[53; 63)
+ EXTERN_KW@[53; 59) "extern"
+ WHITESPACE@[59; 60) " "
+ STRING@[60; 63) "\"C\""
+ WHITESPACE@[63; 64) " "
+ FN_KW@[64; 66) "fn"
+ PARAM_LIST@[66; 68)
+ L_PAREN@[66; 67) "("
+ R_PAREN@[67; 68) ")"
+ SEMI@[68; 69) ";"
+ WHITESPACE@[69; 70) "\n"
+ TYPE_ALIAS_DEF@[70; 112)
+ TYPE_KW@[70; 74) "type"
+ WHITESPACE@[74; 75) " "
+ NAME@[75; 76)
+ IDENT@[75; 76) "D"
+ WHITESPACE@[76; 77) " "
+ EQ@[77; 78) "="
+ WHITESPACE@[78; 79) " "
+ FN_POINTER_TYPE@[79; 111)
+ ABI@[79; 89)
+ EXTERN_KW@[79; 85) "extern"
+ WHITESPACE@[85; 86) " "
+ STRING@[86; 89) "\"C\""
+ WHITESPACE@[89; 90) " "
+ FN_KW@[90; 92) "fn"
+ WHITESPACE@[92; 93) " "
+ PARAM_LIST@[93; 105)
+ L_PAREN@[93; 94) "("
+ WHITESPACE@[94; 95) " "
+ PARAM@[95; 97)
+ PATH_TYPE@[95; 97)
+ PATH@[95; 97)
+ PATH_SEGMENT@[95; 97)
+ NAME_REF@[95; 97)
+ IDENT@[95; 97) "u8"
+ WHITESPACE@[97; 98) " "
+ COMMA@[98; 99) ","
+ WHITESPACE@[99; 100) " "
+ DOTDOTDOT@[100; 103) "..."
+ WHITESPACE@[103; 104) " "
+ R_PAREN@[104; 105) ")"
+ WHITESPACE@[105; 106) " "
+ RET_TYPE@[106; 111)
+ THIN_ARROW@[106; 108) "->"
+ WHITESPACE@[108; 109) " "
+ PATH_TYPE@[109; 111)
+ PATH@[109; 111)
+ PATH_SEGMENT@[109; 111)
+ NAME_REF@[109; 111)
+ IDENT@[109; 111) "u8"
+ SEMI@[111; 112) ";"
+ WHITESPACE@[112; 113) "\n"
--- /dev/null
+type A = &();
+type B = &'static ();
+type C = &mut ();
--- /dev/null
+SOURCE_FILE@[0; 54)
+ TYPE_ALIAS_DEF@[0; 13)
+ TYPE_KW@[0; 4) "type"
+ WHITESPACE@[4; 5) " "
+ NAME@[5; 6)
+ IDENT@[5; 6) "A"
+ WHITESPACE@[6; 7) " "
+ EQ@[7; 8) "="
+ WHITESPACE@[8; 9) " "
+ REFERENCE_TYPE@[9; 12)
+ AMP@[9; 10) "&"
+ TUPLE_TYPE@[10; 12)
+ L_PAREN@[10; 11) "("
+ R_PAREN@[11; 12) ")"
+ SEMI@[12; 13) ";"
+ WHITESPACE@[13; 14) "\n"
+ TYPE_ALIAS_DEF@[14; 35)
+ TYPE_KW@[14; 18) "type"
+ WHITESPACE@[18; 19) " "
+ NAME@[19; 20)
+ IDENT@[19; 20) "B"
+ WHITESPACE@[20; 21) " "
+ EQ@[21; 22) "="
+ WHITESPACE@[22; 23) " "
+ REFERENCE_TYPE@[23; 34)
+ AMP@[23; 24) "&"
+ LIFETIME@[24; 31) "\'static"
+ WHITESPACE@[31; 32) " "
+ TUPLE_TYPE@[32; 34)
+ L_PAREN@[32; 33) "("
+ R_PAREN@[33; 34) ")"
+ SEMI@[34; 35) ";"
+ WHITESPACE@[35; 36) "\n"
+ TYPE_ALIAS_DEF@[36; 53)
+ TYPE_KW@[36; 40) "type"
+ WHITESPACE@[40; 41) " "
+ NAME@[41; 42)
+ IDENT@[41; 42) "C"
+ WHITESPACE@[42; 43) " "
+ EQ@[43; 44) "="
+ WHITESPACE@[44; 45) " "
+ REFERENCE_TYPE@[45; 52)
+ AMP@[45; 46) "&"
+ MUT_KW@[46; 49) "mut"
+ WHITESPACE@[49; 50) " "
+ TUPLE_TYPE@[50; 52)
+ L_PAREN@[50; 51) "("
+ R_PAREN@[51; 52) ")"
+ SEMI@[52; 53) ";"
+ WHITESPACE@[53; 54) "\n"
--- /dev/null
+fn foo() {
+ loop {
+ break;
+ break 'l;
+ break 92;
+ break 'l 92;
+ }
+}
--- /dev/null
+SOURCE_FILE@[0; 102)
+ FN_DEF@[0; 101)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 101)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ LOOP_EXPR@[15; 99)
+ LOOP_KW@[15; 19) "loop"
+ WHITESPACE@[19; 20) " "
+ BLOCK@[20; 99)
+ L_CURLY@[20; 21) "{"
+ WHITESPACE@[21; 30) "\n "
+ EXPR_STMT@[30; 36)
+ BREAK_EXPR@[30; 35)
+ BREAK_KW@[30; 35) "break"
+ SEMI@[35; 36) ";"
+ WHITESPACE@[36; 45) "\n "
+ EXPR_STMT@[45; 54)
+ BREAK_EXPR@[45; 53)
+ BREAK_KW@[45; 50) "break"
+ WHITESPACE@[50; 51) " "
+ LIFETIME@[51; 53) "\'l"
+ SEMI@[53; 54) ";"
+ WHITESPACE@[54; 63) "\n "
+ EXPR_STMT@[63; 72)
+ BREAK_EXPR@[63; 71)
+ BREAK_KW@[63; 68) "break"
+ WHITESPACE@[68; 69) " "
+ LITERAL@[69; 71)
+ INT_NUMBER@[69; 71) "92"
+ SEMI@[71; 72) ";"
+ WHITESPACE@[72; 81) "\n "
+ EXPR_STMT@[81; 93)
+ BREAK_EXPR@[81; 92)
+ BREAK_KW@[81; 86) "break"
+ WHITESPACE@[86; 87) " "
+ LIFETIME@[87; 89) "\'l"
+ WHITESPACE@[89; 90) " "
+ LITERAL@[90; 92)
+ INT_NUMBER@[90; 92) "92"
+ SEMI@[92; 93) ";"
+ WHITESPACE@[93; 98) "\n "
+ R_CURLY@[98; 99) "}"
+ WHITESPACE@[99; 100) "\n"
+ R_CURLY@[100; 101) "}"
+ WHITESPACE@[101; 102) "\n"
--- /dev/null
+unsafe extern "C" fn foo() {}
--- /dev/null
+SOURCE_FILE@[0; 30)
+ FN_DEF@[0; 29)
+ UNSAFE_KW@[0; 6) "unsafe"
+ WHITESPACE@[6; 7) " "
+ ABI@[7; 17)
+ EXTERN_KW@[7; 13) "extern"
+ WHITESPACE@[13; 14) " "
+ STRING@[14; 17) "\"C\""
+ WHITESPACE@[17; 18) " "
+ FN_KW@[18; 20) "fn"
+ WHITESPACE@[20; 21) " "
+ NAME@[21; 24)
+ IDENT@[21; 24) "foo"
+ PARAM_LIST@[24; 26)
+ L_PAREN@[24; 25) "("
+ R_PAREN@[25; 26) ")"
+ WHITESPACE@[26; 27) " "
+ BLOCK@[27; 29)
+ L_CURLY@[27; 28) "{"
+ R_CURLY@[28; 29) "}"
+ WHITESPACE@[29; 30) "\n"
--- /dev/null
+type X = <A as B>::Output;
+fn foo() { <usize as Default>::default(); }
--- /dev/null
+SOURCE_FILE@[0; 71)
+ TYPE_ALIAS_DEF@[0; 26)
+ TYPE_KW@[0; 4) "type"
+ WHITESPACE@[4; 5) " "
+ NAME@[5; 6)
+ IDENT@[5; 6) "X"
+ WHITESPACE@[6; 7) " "
+ EQ@[7; 8) "="
+ WHITESPACE@[8; 9) " "
+ PATH_TYPE@[9; 25)
+ PATH@[9; 25)
+ PATH@[9; 17)
+ PATH_SEGMENT@[9; 17)
+ L_ANGLE@[9; 10) "<"
+ PATH_TYPE@[10; 11)
+ PATH@[10; 11)
+ PATH_SEGMENT@[10; 11)
+ NAME_REF@[10; 11)
+ IDENT@[10; 11) "A"
+ WHITESPACE@[11; 12) " "
+ AS_KW@[12; 14) "as"
+ WHITESPACE@[14; 15) " "
+ PATH_TYPE@[15; 16)
+ PATH@[15; 16)
+ PATH_SEGMENT@[15; 16)
+ NAME_REF@[15; 16)
+ IDENT@[15; 16) "B"
+ R_ANGLE@[16; 17) ">"
+ COLONCOLON@[17; 19) "::"
+ PATH_SEGMENT@[19; 25)
+ NAME_REF@[19; 25)
+ IDENT@[19; 25) "Output"
+ SEMI@[25; 26) ";"
+ WHITESPACE@[26; 27) "\n"
+ FN_DEF@[27; 70)
+ FN_KW@[27; 29) "fn"
+ WHITESPACE@[29; 30) " "
+ NAME@[30; 33)
+ IDENT@[30; 33) "foo"
+ PARAM_LIST@[33; 35)
+ L_PAREN@[33; 34) "("
+ R_PAREN@[34; 35) ")"
+ WHITESPACE@[35; 36) " "
+ BLOCK@[36; 70)
+ L_CURLY@[36; 37) "{"
+ WHITESPACE@[37; 38) " "
+ EXPR_STMT@[38; 68)
+ CALL_EXPR@[38; 67)
+ PATH_EXPR@[38; 65)
+ PATH@[38; 65)
+ PATH@[38; 56)
+ PATH_SEGMENT@[38; 56)
+ L_ANGLE@[38; 39) "<"
+ PATH_TYPE@[39; 44)
+ PATH@[39; 44)
+ PATH_SEGMENT@[39; 44)
+ NAME_REF@[39; 44)
+ IDENT@[39; 44) "usize"
+ WHITESPACE@[44; 45) " "
+ AS_KW@[45; 47) "as"
+ WHITESPACE@[47; 48) " "
+ PATH_TYPE@[48; 55)
+ PATH@[48; 55)
+ PATH_SEGMENT@[48; 55)
+ NAME_REF@[48; 55)
+ IDENT@[48; 55) "Default"
+ R_ANGLE@[55; 56) ">"
+ COLONCOLON@[56; 58) "::"
+ PATH_SEGMENT@[58; 65)
+ NAME_REF@[58; 65)
+ IDENT@[58; 65) "default"
+ ARG_LIST@[65; 67)
+ L_PAREN@[65; 66) "("
+ R_PAREN@[66; 67) ")"
+ SEMI@[67; 68) ";"
+ WHITESPACE@[68; 69) " "
+ R_CURLY@[69; 70) "}"
+ WHITESPACE@[70; 71) "\n"
--- /dev/null
+fn foo() { xs[..]; }
--- /dev/null
+SOURCE_FILE@[0; 21)
+ FN_DEF@[0; 20)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 20)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 11) " "
+ EXPR_STMT@[11; 18)
+ INDEX_EXPR@[11; 17)
+ PATH_EXPR@[11; 13)
+ PATH@[11; 13)
+ PATH_SEGMENT@[11; 13)
+ NAME_REF@[11; 13)
+ IDENT@[11; 13) "xs"
+ L_BRACK@[13; 14) "["
+ RANGE_EXPR@[14; 16)
+ DOTDOT@[14; 16) ".."
+ R_BRACK@[16; 17) "]"
+ SEMI@[17; 18) ";"
+ WHITESPACE@[18; 19) " "
+ R_CURLY@[19; 20) "}"
+ WHITESPACE@[20; 21) "\n"
--- /dev/null
+type A = B<'static, i32, Item=u64>;
--- /dev/null
+SOURCE_FILE@[0; 36)
+ TYPE_ALIAS_DEF@[0; 35)
+ TYPE_KW@[0; 4) "type"
+ WHITESPACE@[4; 5) " "
+ NAME@[5; 6)
+ IDENT@[5; 6) "A"
+ WHITESPACE@[6; 7) " "
+ EQ@[7; 8) "="
+ WHITESPACE@[8; 9) " "
+ PATH_TYPE@[9; 34)
+ PATH@[9; 34)
+ PATH_SEGMENT@[9; 34)
+ NAME_REF@[9; 10)
+ IDENT@[9; 10) "B"
+ TYPE_ARG_LIST@[10; 34)
+ L_ANGLE@[10; 11) "<"
+ LIFETIME_ARG@[11; 18)
+ LIFETIME@[11; 18) "\'static"
+ COMMA@[18; 19) ","
+ WHITESPACE@[19; 20) " "
+ TYPE_ARG@[20; 23)
+ PATH_TYPE@[20; 23)
+ PATH@[20; 23)
+ PATH_SEGMENT@[20; 23)
+ NAME_REF@[20; 23)
+ IDENT@[20; 23) "i32"
+ COMMA@[23; 24) ","
+ WHITESPACE@[24; 25) " "
+ ASSOC_TYPE_ARG@[25; 33)
+ NAME_REF@[25; 29)
+ IDENT@[25; 29) "Item"
+ EQ@[29; 30) "="
+ PATH_TYPE@[30; 33)
+ PATH@[30; 33)
+ PATH_SEGMENT@[30; 33)
+ NAME_REF@[30; 33)
+ IDENT@[30; 33) "u64"
+ R_ANGLE@[33; 34) ">"
+ SEMI@[34; 35) ";"
+ WHITESPACE@[35; 36) "\n"
--- /dev/null
+crate fn main() { }
+struct S { crate field: u32 }
+struct T(crate u32);
--- /dev/null
+SOURCE_FILE@[0; 71)
+ FN_DEF@[0; 19)
+ VISIBILITY@[0; 5)
+ CRATE_KW@[0; 5) "crate"
+ WHITESPACE@[5; 6) " "
+ FN_KW@[6; 8) "fn"
+ WHITESPACE@[8; 9) " "
+ NAME@[9; 13)
+ IDENT@[9; 13) "main"
+ PARAM_LIST@[13; 15)
+ L_PAREN@[13; 14) "("
+ R_PAREN@[14; 15) ")"
+ WHITESPACE@[15; 16) " "
+ BLOCK@[16; 19)
+ L_CURLY@[16; 17) "{"
+ WHITESPACE@[17; 18) " "
+ R_CURLY@[18; 19) "}"
+ WHITESPACE@[19; 20) "\n"
+ STRUCT_DEF@[20; 49)
+ STRUCT_KW@[20; 26) "struct"
+ WHITESPACE@[26; 27) " "
+ NAME@[27; 28)
+ IDENT@[27; 28) "S"
+ WHITESPACE@[28; 29) " "
+ NAMED_FIELD_DEF_LIST@[29; 49)
+ L_CURLY@[29; 30) "{"
+ WHITESPACE@[30; 31) " "
+ NAMED_FIELD_DEF@[31; 47)
+ VISIBILITY@[31; 36)
+ CRATE_KW@[31; 36) "crate"
+ WHITESPACE@[36; 37) " "
+ NAME@[37; 42)
+ IDENT@[37; 42) "field"
+ COLON@[42; 43) ":"
+ WHITESPACE@[43; 44) " "
+ PATH_TYPE@[44; 47)
+ PATH@[44; 47)
+ PATH_SEGMENT@[44; 47)
+ NAME_REF@[44; 47)
+ IDENT@[44; 47) "u32"
+ WHITESPACE@[47; 48) " "
+ R_CURLY@[48; 49) "}"
+ WHITESPACE@[49; 50) "\n"
+ STRUCT_DEF@[50; 70)
+ STRUCT_KW@[50; 56) "struct"
+ WHITESPACE@[56; 57) " "
+ NAME@[57; 58)
+ IDENT@[57; 58) "T"
+ POS_FIELD_DEF_LIST@[58; 69)
+ L_PAREN@[58; 59) "("
+ POS_FIELD_DEF@[59; 68)
+ VISIBILITY@[59; 64)
+ CRATE_KW@[59; 64) "crate"
+ WHITESPACE@[64; 65) " "
+ PATH_TYPE@[65; 68)
+ PATH@[65; 68)
+ PATH_SEGMENT@[65; 68)
+ NAME_REF@[65; 68)
+ IDENT@[65; 68) "u32"
+ R_PAREN@[68; 69) ")"
+ SEMI@[69; 70) ";"
+ WHITESPACE@[70; 71) "\n"
--- /dev/null
+trait T<U>: Hash + Clone where U: Copy {}
+trait X<U: Debug + Display>: Hash + Clone where U: Copy {}
--- /dev/null
+SOURCE_FILE@[0; 101)
+ TRAIT_DEF@[0; 41)
+ TRAIT_KW@[0; 5) "trait"
+ WHITESPACE@[5; 6) " "
+ NAME@[6; 7)
+ IDENT@[6; 7) "T"
+ TYPE_PARAM_LIST@[7; 10)
+ L_ANGLE@[7; 8) "<"
+ TYPE_PARAM@[8; 9)
+ NAME@[8; 9)
+ IDENT@[8; 9) "U"
+ R_ANGLE@[9; 10) ">"
+ COLON@[10; 11) ":"
+ WHITESPACE@[11; 12) " "
+ TYPE_BOUND_LIST@[12; 24)
+ TYPE_BOUND@[12; 16)
+ PATH_TYPE@[12; 16)
+ PATH@[12; 16)
+ PATH_SEGMENT@[12; 16)
+ NAME_REF@[12; 16)
+ IDENT@[12; 16) "Hash"
+ WHITESPACE@[16; 17) " "
+ PLUS@[17; 18) "+"
+ WHITESPACE@[18; 19) " "
+ TYPE_BOUND@[19; 24)
+ PATH_TYPE@[19; 24)
+ PATH@[19; 24)
+ PATH_SEGMENT@[19; 24)
+ NAME_REF@[19; 24)
+ IDENT@[19; 24) "Clone"
+ WHITESPACE@[24; 25) " "
+ WHERE_CLAUSE@[25; 38)
+ WHERE_KW@[25; 30) "where"
+ WHITESPACE@[30; 31) " "
+ WHERE_PRED@[31; 38)
+ PATH_TYPE@[31; 32)
+ PATH@[31; 32)
+ PATH_SEGMENT@[31; 32)
+ NAME_REF@[31; 32)
+ IDENT@[31; 32) "U"
+ COLON@[32; 33) ":"
+ WHITESPACE@[33; 34) " "
+ TYPE_BOUND_LIST@[34; 38)
+ TYPE_BOUND@[34; 38)
+ PATH_TYPE@[34; 38)
+ PATH@[34; 38)
+ PATH_SEGMENT@[34; 38)
+ NAME_REF@[34; 38)
+ IDENT@[34; 38) "Copy"
+ WHITESPACE@[38; 39) " "
+ ITEM_LIST@[39; 41)
+ L_CURLY@[39; 40) "{"
+ R_CURLY@[40; 41) "}"
+ WHITESPACE@[41; 42) "\n"
+ TRAIT_DEF@[42; 100)
+ TRAIT_KW@[42; 47) "trait"
+ WHITESPACE@[47; 48) " "
+ NAME@[48; 49)
+ IDENT@[48; 49) "X"
+ TYPE_PARAM_LIST@[49; 69)
+ L_ANGLE@[49; 50) "<"
+ TYPE_PARAM@[50; 68)
+ NAME@[50; 51)
+ IDENT@[50; 51) "U"
+ COLON@[51; 52) ":"
+ WHITESPACE@[52; 53) " "
+ TYPE_BOUND_LIST@[53; 68)
+ TYPE_BOUND@[53; 58)
+ PATH_TYPE@[53; 58)
+ PATH@[53; 58)
+ PATH_SEGMENT@[53; 58)
+ NAME_REF@[53; 58)
+ IDENT@[53; 58) "Debug"
+ WHITESPACE@[58; 59) " "
+ PLUS@[59; 60) "+"
+ WHITESPACE@[60; 61) " "
+ TYPE_BOUND@[61; 68)
+ PATH_TYPE@[61; 68)
+ PATH@[61; 68)
+ PATH_SEGMENT@[61; 68)
+ NAME_REF@[61; 68)
+ IDENT@[61; 68) "Display"
+ R_ANGLE@[68; 69) ">"
+ COLON@[69; 70) ":"
+ WHITESPACE@[70; 71) " "
+ TYPE_BOUND_LIST@[71; 83)
+ TYPE_BOUND@[71; 75)
+ PATH_TYPE@[71; 75)
+ PATH@[71; 75)
+ PATH_SEGMENT@[71; 75)
+ NAME_REF@[71; 75)
+ IDENT@[71; 75) "Hash"
+ WHITESPACE@[75; 76) " "
+ PLUS@[76; 77) "+"
+ WHITESPACE@[77; 78) " "
+ TYPE_BOUND@[78; 83)
+ PATH_TYPE@[78; 83)
+ PATH@[78; 83)
+ PATH_SEGMENT@[78; 83)
+ NAME_REF@[78; 83)
+ IDENT@[78; 83) "Clone"
+ WHITESPACE@[83; 84) " "
+ WHERE_CLAUSE@[84; 97)
+ WHERE_KW@[84; 89) "where"
+ WHITESPACE@[89; 90) " "
+ WHERE_PRED@[90; 97)
+ PATH_TYPE@[90; 91)
+ PATH@[90; 91)
+ PATH_SEGMENT@[90; 91)
+ NAME_REF@[90; 91)
+ IDENT@[90; 91) "U"
+ COLON@[91; 92) ":"
+ WHITESPACE@[92; 93) " "
+ TYPE_BOUND_LIST@[93; 97)
+ TYPE_BOUND@[93; 97)
+ PATH_TYPE@[93; 97)
+ PATH@[93; 97)
+ PATH_SEGMENT@[93; 97)
+ NAME_REF@[93; 97)
+ IDENT@[93; 97) "Copy"
+ WHITESPACE@[97; 98) " "
+ ITEM_LIST@[98; 100)
+ L_CURLY@[98; 99) "{"
+ R_CURLY@[99; 100) "}"
+ WHITESPACE@[100; 101) "\n"
--- /dev/null
+fn foo() {
+ let _ = f();
+ let _ = f()(1)(1, 2,);
+ let _ = f(<Foo>::func());
+ f(<Foo as Trait>::func());
+}
--- /dev/null
+SOURCE_FILE@[0; 118)
+ FN_DEF@[0; 117)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 117)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ LET_STMT@[15; 27)
+ LET_KW@[15; 18) "let"
+ WHITESPACE@[18; 19) " "
+ PLACEHOLDER_PAT@[19; 20)
+ UNDERSCORE@[19; 20) "_"
+ WHITESPACE@[20; 21) " "
+ EQ@[21; 22) "="
+ WHITESPACE@[22; 23) " "
+ CALL_EXPR@[23; 26)
+ PATH_EXPR@[23; 24)
+ PATH@[23; 24)
+ PATH_SEGMENT@[23; 24)
+ NAME_REF@[23; 24)
+ IDENT@[23; 24) "f"
+ ARG_LIST@[24; 26)
+ L_PAREN@[24; 25) "("
+ R_PAREN@[25; 26) ")"
+ SEMI@[26; 27) ";"
+ WHITESPACE@[27; 32) "\n "
+ LET_STMT@[32; 54)
+ LET_KW@[32; 35) "let"
+ WHITESPACE@[35; 36) " "
+ PLACEHOLDER_PAT@[36; 37)
+ UNDERSCORE@[36; 37) "_"
+ WHITESPACE@[37; 38) " "
+ EQ@[38; 39) "="
+ WHITESPACE@[39; 40) " "
+ CALL_EXPR@[40; 53)
+ CALL_EXPR@[40; 46)
+ CALL_EXPR@[40; 43)
+ PATH_EXPR@[40; 41)
+ PATH@[40; 41)
+ PATH_SEGMENT@[40; 41)
+ NAME_REF@[40; 41)
+ IDENT@[40; 41) "f"
+ ARG_LIST@[41; 43)
+ L_PAREN@[41; 42) "("
+ R_PAREN@[42; 43) ")"
+ ARG_LIST@[43; 46)
+ L_PAREN@[43; 44) "("
+ LITERAL@[44; 45)
+ INT_NUMBER@[44; 45) "1"
+ R_PAREN@[45; 46) ")"
+ ARG_LIST@[46; 53)
+ L_PAREN@[46; 47) "("
+ LITERAL@[47; 48)
+ INT_NUMBER@[47; 48) "1"
+ COMMA@[48; 49) ","
+ WHITESPACE@[49; 50) " "
+ LITERAL@[50; 51)
+ INT_NUMBER@[50; 51) "2"
+ COMMA@[51; 52) ","
+ R_PAREN@[52; 53) ")"
+ SEMI@[53; 54) ";"
+ WHITESPACE@[54; 59) "\n "
+ LET_STMT@[59; 84)
+ LET_KW@[59; 62) "let"
+ WHITESPACE@[62; 63) " "
+ PLACEHOLDER_PAT@[63; 64)
+ UNDERSCORE@[63; 64) "_"
+ WHITESPACE@[64; 65) " "
+ EQ@[65; 66) "="
+ WHITESPACE@[66; 67) " "
+ CALL_EXPR@[67; 83)
+ PATH_EXPR@[67; 68)
+ PATH@[67; 68)
+ PATH_SEGMENT@[67; 68)
+ NAME_REF@[67; 68)
+ IDENT@[67; 68) "f"
+ ARG_LIST@[68; 83)
+ L_PAREN@[68; 69) "("
+ CALL_EXPR@[69; 82)
+ PATH_EXPR@[69; 80)
+ PATH@[69; 80)
+ PATH@[69; 74)
+ PATH_SEGMENT@[69; 74)
+ L_ANGLE@[69; 70) "<"
+ PATH_TYPE@[70; 73)
+ PATH@[70; 73)
+ PATH_SEGMENT@[70; 73)
+ NAME_REF@[70; 73)
+ IDENT@[70; 73) "Foo"
+ R_ANGLE@[73; 74) ">"
+ COLONCOLON@[74; 76) "::"
+ PATH_SEGMENT@[76; 80)
+ NAME_REF@[76; 80)
+ IDENT@[76; 80) "func"
+ ARG_LIST@[80; 82)
+ L_PAREN@[80; 81) "("
+ R_PAREN@[81; 82) ")"
+ R_PAREN@[82; 83) ")"
+ SEMI@[83; 84) ";"
+ WHITESPACE@[84; 89) "\n "
+ EXPR_STMT@[89; 115)
+ CALL_EXPR@[89; 114)
+ PATH_EXPR@[89; 90)
+ PATH@[89; 90)
+ PATH_SEGMENT@[89; 90)
+ NAME_REF@[89; 90)
+ IDENT@[89; 90) "f"
+ ARG_LIST@[90; 114)
+ L_PAREN@[90; 91) "("
+ CALL_EXPR@[91; 113)
+ PATH_EXPR@[91; 111)
+ PATH@[91; 111)
+ PATH@[91; 105)
+ PATH_SEGMENT@[91; 105)
+ L_ANGLE@[91; 92) "<"
+ PATH_TYPE@[92; 95)
+ PATH@[92; 95)
+ PATH_SEGMENT@[92; 95)
+ NAME_REF@[92; 95)
+ IDENT@[92; 95) "Foo"
+ WHITESPACE@[95; 96) " "
+ AS_KW@[96; 98) "as"
+ WHITESPACE@[98; 99) " "
+ PATH_TYPE@[99; 104)
+ PATH@[99; 104)
+ PATH_SEGMENT@[99; 104)
+ NAME_REF@[99; 104)
+ IDENT@[99; 104) "Trait"
+ R_ANGLE@[104; 105) ">"
+ COLONCOLON@[105; 107) "::"
+ PATH_SEGMENT@[107; 111)
+ NAME_REF@[107; 111)
+ IDENT@[107; 111) "func"
+ ARG_LIST@[111; 113)
+ L_PAREN@[111; 112) "("
+ R_PAREN@[112; 113) ")"
+ R_PAREN@[113; 114) ")"
+ SEMI@[114; 115) ";"
+ WHITESPACE@[115; 116) "\n"
+ R_CURLY@[116; 117) "}"
+ WHITESPACE@[117; 118) "\n"
--- /dev/null
+use some::path as some_name;
+use some::{
+ other::path as some_other_name,
+ different::path as different_name,
+ yet::another::path,
+ running::out::of::synonyms::for_::different::*
+};
+use Trait as _;
--- /dev/null
+SOURCE_FILE@[0; 198)
+ USE_ITEM@[0; 28)
+ USE_KW@[0; 3) "use"
+ WHITESPACE@[3; 4) " "
+ USE_TREE@[4; 27)
+ PATH@[4; 14)
+ PATH@[4; 8)
+ PATH_SEGMENT@[4; 8)
+ NAME_REF@[4; 8)
+ IDENT@[4; 8) "some"
+ COLONCOLON@[8; 10) "::"
+ PATH_SEGMENT@[10; 14)
+ NAME_REF@[10; 14)
+ IDENT@[10; 14) "path"
+ WHITESPACE@[14; 15) " "
+ ALIAS@[15; 27)
+ AS_KW@[15; 17) "as"
+ WHITESPACE@[17; 18) " "
+ NAME@[18; 27)
+ IDENT@[18; 27) "some_name"
+ SEMI@[27; 28) ";"
+ WHITESPACE@[28; 29) "\n"
+ USE_ITEM@[29; 181)
+ USE_KW@[29; 32) "use"
+ WHITESPACE@[32; 33) " "
+ USE_TREE@[33; 180)
+ PATH@[33; 37)
+ PATH_SEGMENT@[33; 37)
+ NAME_REF@[33; 37)
+ IDENT@[33; 37) "some"
+ COLONCOLON@[37; 39) "::"
+ USE_TREE_LIST@[39; 180)
+ L_CURLY@[39; 40) "{"
+ WHITESPACE@[40; 42) "\n "
+ USE_TREE@[42; 72)
+ PATH@[42; 53)
+ PATH@[42; 47)
+ PATH_SEGMENT@[42; 47)
+ NAME_REF@[42; 47)
+ IDENT@[42; 47) "other"
+ COLONCOLON@[47; 49) "::"
+ PATH_SEGMENT@[49; 53)
+ NAME_REF@[49; 53)
+ IDENT@[49; 53) "path"
+ WHITESPACE@[53; 54) " "
+ ALIAS@[54; 72)
+ AS_KW@[54; 56) "as"
+ WHITESPACE@[56; 57) " "
+ NAME@[57; 72)
+ IDENT@[57; 72) "some_other_name"
+ COMMA@[72; 73) ","
+ WHITESPACE@[73; 75) "\n "
+ USE_TREE@[75; 108)
+ PATH@[75; 90)
+ PATH@[75; 84)
+ PATH_SEGMENT@[75; 84)
+ NAME_REF@[75; 84)
+ IDENT@[75; 84) "different"
+ COLONCOLON@[84; 86) "::"
+ PATH_SEGMENT@[86; 90)
+ NAME_REF@[86; 90)
+ IDENT@[86; 90) "path"
+ WHITESPACE@[90; 91) " "
+ ALIAS@[91; 108)
+ AS_KW@[91; 93) "as"
+ WHITESPACE@[93; 94) " "
+ NAME@[94; 108)
+ IDENT@[94; 108) "different_name"
+ COMMA@[108; 109) ","
+ WHITESPACE@[109; 111) "\n "
+ USE_TREE@[111; 129)
+ PATH@[111; 129)
+ PATH@[111; 123)
+ PATH@[111; 114)
+ PATH_SEGMENT@[111; 114)
+ NAME_REF@[111; 114)
+ IDENT@[111; 114) "yet"
+ COLONCOLON@[114; 116) "::"
+ PATH_SEGMENT@[116; 123)
+ NAME_REF@[116; 123)
+ IDENT@[116; 123) "another"
+ COLONCOLON@[123; 125) "::"
+ PATH_SEGMENT@[125; 129)
+ NAME_REF@[125; 129)
+ IDENT@[125; 129) "path"
+ COMMA@[129; 130) ","
+ WHITESPACE@[130; 132) "\n "
+ USE_TREE@[132; 178)
+ PATH@[132; 175)
+ PATH@[132; 164)
+ PATH@[132; 158)
+ PATH@[132; 148)
+ PATH@[132; 144)
+ PATH@[132; 139)
+ PATH_SEGMENT@[132; 139)
+ NAME_REF@[132; 139)
+ IDENT@[132; 139) "running"
+ COLONCOLON@[139; 141) "::"
+ PATH_SEGMENT@[141; 144)
+ NAME_REF@[141; 144)
+ IDENT@[141; 144) "out"
+ COLONCOLON@[144; 146) "::"
+ PATH_SEGMENT@[146; 148)
+ NAME_REF@[146; 148)
+ IDENT@[146; 148) "of"
+ COLONCOLON@[148; 150) "::"
+ PATH_SEGMENT@[150; 158)
+ NAME_REF@[150; 158)
+ IDENT@[150; 158) "synonyms"
+ COLONCOLON@[158; 160) "::"
+ PATH_SEGMENT@[160; 164)
+ NAME_REF@[160; 164)
+ IDENT@[160; 164) "for_"
+ COLONCOLON@[164; 166) "::"
+ PATH_SEGMENT@[166; 175)
+ NAME_REF@[166; 175)
+ IDENT@[166; 175) "different"
+ COLONCOLON@[175; 177) "::"
+ STAR@[177; 178) "*"
+ WHITESPACE@[178; 179) "\n"
+ R_CURLY@[179; 180) "}"
+ SEMI@[180; 181) ";"
+ WHITESPACE@[181; 182) "\n"
+ USE_ITEM@[182; 197)
+ USE_KW@[182; 185) "use"
+ WHITESPACE@[185; 186) " "
+ USE_TREE@[186; 196)
+ PATH@[186; 191)
+ PATH_SEGMENT@[186; 191)
+ NAME_REF@[186; 191)
+ IDENT@[186; 191) "Trait"
+ WHITESPACE@[191; 192) " "
+ ALIAS@[192; 196)
+ AS_KW@[192; 194) "as"
+ WHITESPACE@[194; 195) " "
+ UNDERSCORE@[195; 196) "_"
+ SEMI@[196; 197) ";"
+ WHITESPACE@[197; 198) "\n"
--- /dev/null
+fn a() { fn b() {} }
--- /dev/null
+SOURCE_FILE@[0; 21)
+ FN_DEF@[0; 20)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 4)
+ IDENT@[3; 4) "a"
+ PARAM_LIST@[4; 6)
+ L_PAREN@[4; 5) "("
+ R_PAREN@[5; 6) ")"
+ WHITESPACE@[6; 7) " "
+ BLOCK@[7; 20)
+ L_CURLY@[7; 8) "{"
+ WHITESPACE@[8; 9) " "
+ FN_DEF@[9; 18)
+ FN_KW@[9; 11) "fn"
+ WHITESPACE@[11; 12) " "
+ NAME@[12; 13)
+ IDENT@[12; 13) "b"
+ PARAM_LIST@[13; 15)
+ L_PAREN@[13; 14) "("
+ R_PAREN@[14; 15) ")"
+ WHITESPACE@[15; 16) " "
+ BLOCK@[16; 18)
+ L_CURLY@[16; 17) "{"
+ R_CURLY@[17; 18) "}"
+ WHITESPACE@[18; 19) " "
+ R_CURLY@[19; 20) "}"
+ WHITESPACE@[20; 21) "\n"
--- /dev/null
+fn foo<F: FnMut(&mut Foo<'a>)>(){}
--- /dev/null
+SOURCE_FILE@[0; 35)
+ FN_DEF@[0; 34)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ TYPE_PARAM_LIST@[6; 30)
+ L_ANGLE@[6; 7) "<"
+ TYPE_PARAM@[7; 29)
+ NAME@[7; 8)
+ IDENT@[7; 8) "F"
+ COLON@[8; 9) ":"
+ WHITESPACE@[9; 10) " "
+ TYPE_BOUND_LIST@[10; 29)
+ TYPE_BOUND@[10; 29)
+ PATH_TYPE@[10; 29)
+ PATH@[10; 29)
+ PATH_SEGMENT@[10; 29)
+ NAME_REF@[10; 15)
+ IDENT@[10; 15) "FnMut"
+ PARAM_LIST@[15; 29)
+ L_PAREN@[15; 16) "("
+ PARAM@[16; 28)
+ REFERENCE_TYPE@[16; 28)
+ AMP@[16; 17) "&"
+ MUT_KW@[17; 20) "mut"
+ WHITESPACE@[20; 21) " "
+ PATH_TYPE@[21; 28)
+ PATH@[21; 28)
+ PATH_SEGMENT@[21; 28)
+ NAME_REF@[21; 24)
+ IDENT@[21; 24) "Foo"
+ TYPE_ARG_LIST@[24; 28)
+ L_ANGLE@[24; 25) "<"
+ LIFETIME_ARG@[25; 27)
+ LIFETIME@[25; 27) "\'a"
+ R_ANGLE@[27; 28) ">"
+ R_PAREN@[28; 29) ")"
+ R_ANGLE@[29; 30) ">"
+ PARAM_LIST@[30; 32)
+ L_PAREN@[30; 31) "("
+ R_PAREN@[31; 32) ")"
+ BLOCK@[32; 34)
+ L_CURLY@[32; 33) "{"
+ R_CURLY@[33; 34) "}"
+ WHITESPACE@[34; 35) "\n"
--- /dev/null
+type T = (i32,);
--- /dev/null
+SOURCE_FILE@[0; 17)
+ TYPE_ALIAS_DEF@[0; 16)
+ TYPE_KW@[0; 4) "type"
+ WHITESPACE@[4; 5) " "
+ NAME@[5; 6)
+ IDENT@[5; 6) "T"
+ WHITESPACE@[6; 7) " "
+ EQ@[7; 8) "="
+ WHITESPACE@[8; 9) " "
+ TUPLE_TYPE@[9; 15)
+ L_PAREN@[9; 10) "("
+ PATH_TYPE@[10; 13)
+ PATH@[10; 13)
+ PATH_SEGMENT@[10; 13)
+ NAME_REF@[10; 13)
+ IDENT@[10; 13) "i32"
+ COMMA@[13; 14) ","
+ R_PAREN@[14; 15) ")"
+ SEMI@[15; 16) ";"
+ WHITESPACE@[16; 17) "\n"
--- /dev/null
+unsafe default impl Foo {}
--- /dev/null
+SOURCE_FILE@[0; 27)
+ IMPL_BLOCK@[0; 26)
+ UNSAFE_KW@[0; 6) "unsafe"
+ WHITESPACE@[6; 7) " "
+ DEFAULT_KW@[7; 14) "default"
+ WHITESPACE@[14; 15) " "
+ IMPL_KW@[15; 19) "impl"
+ WHITESPACE@[19; 20) " "
+ PATH_TYPE@[20; 23)
+ PATH@[20; 23)
+ PATH_SEGMENT@[20; 23)
+ NAME_REF@[20; 23)
+ IDENT@[20; 23) "Foo"
+ WHITESPACE@[23; 24) " "
+ ITEM_LIST@[24; 26)
+ L_CURLY@[24; 25) "{"
+ R_CURLY@[25; 26) "}"
+ WHITESPACE@[26; 27) "\n"
--- /dev/null
+fn foo() -> Box<T + 'f> {}
+fn foo() -> Box<dyn T + 'f> {}
--- /dev/null
+SOURCE_FILE@[0; 58)
+ FN_DEF@[0; 26)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ RET_TYPE@[9; 23)
+ THIN_ARROW@[9; 11) "->"
+ WHITESPACE@[11; 12) " "
+ PATH_TYPE@[12; 23)
+ PATH@[12; 23)
+ PATH_SEGMENT@[12; 23)
+ NAME_REF@[12; 15)
+ IDENT@[12; 15) "Box"
+ TYPE_ARG_LIST@[15; 23)
+ L_ANGLE@[15; 16) "<"
+ TYPE_ARG@[16; 22)
+ DYN_TRAIT_TYPE@[16; 22)
+ TYPE_BOUND_LIST@[16; 22)
+ TYPE_BOUND@[16; 17)
+ PATH_TYPE@[16; 17)
+ PATH@[16; 17)
+ PATH_SEGMENT@[16; 17)
+ NAME_REF@[16; 17)
+ IDENT@[16; 17) "T"
+ WHITESPACE@[17; 18) " "
+ PLUS@[18; 19) "+"
+ WHITESPACE@[19; 20) " "
+ TYPE_BOUND@[20; 22)
+ LIFETIME@[20; 22) "\'f"
+ R_ANGLE@[22; 23) ">"
+ WHITESPACE@[23; 24) " "
+ BLOCK@[24; 26)
+ L_CURLY@[24; 25) "{"
+ R_CURLY@[25; 26) "}"
+ WHITESPACE@[26; 27) "\n"
+ FN_DEF@[27; 57)
+ FN_KW@[27; 29) "fn"
+ WHITESPACE@[29; 30) " "
+ NAME@[30; 33)
+ IDENT@[30; 33) "foo"
+ PARAM_LIST@[33; 35)
+ L_PAREN@[33; 34) "("
+ R_PAREN@[34; 35) ")"
+ WHITESPACE@[35; 36) " "
+ RET_TYPE@[36; 54)
+ THIN_ARROW@[36; 38) "->"
+ WHITESPACE@[38; 39) " "
+ PATH_TYPE@[39; 54)
+ PATH@[39; 54)
+ PATH_SEGMENT@[39; 54)
+ NAME_REF@[39; 42)
+ IDENT@[39; 42) "Box"
+ TYPE_ARG_LIST@[42; 54)
+ L_ANGLE@[42; 43) "<"
+ TYPE_ARG@[43; 53)
+ DYN_TRAIT_TYPE@[43; 53)
+ DYN_KW@[43; 46) "dyn"
+ WHITESPACE@[46; 47) " "
+ TYPE_BOUND_LIST@[47; 53)
+ TYPE_BOUND@[47; 48)
+ PATH_TYPE@[47; 48)
+ PATH@[47; 48)
+ PATH_SEGMENT@[47; 48)
+ NAME_REF@[47; 48)
+ IDENT@[47; 48) "T"
+ WHITESPACE@[48; 49) " "
+ PLUS@[49; 50) "+"
+ WHITESPACE@[50; 51) " "
+ TYPE_BOUND@[51; 53)
+ LIFETIME@[51; 53) "\'f"
+ R_ANGLE@[53; 54) ">"
+ WHITESPACE@[54; 55) " "
+ BLOCK@[55; 57)
+ L_CURLY@[55; 56) "{"
+ R_CURLY@[56; 57) "}"
+ WHITESPACE@[57; 58) "\n"
--- /dev/null
+trait T { fn foo(); }
--- /dev/null
+SOURCE_FILE@[0; 22)
+ TRAIT_DEF@[0; 21)
+ TRAIT_KW@[0; 5) "trait"
+ WHITESPACE@[5; 6) " "
+ NAME@[6; 7)
+ IDENT@[6; 7) "T"
+ WHITESPACE@[7; 8) " "
+ ITEM_LIST@[8; 21)
+ L_CURLY@[8; 9) "{"
+ WHITESPACE@[9; 10) " "
+ FN_DEF@[10; 19)
+ FN_KW@[10; 12) "fn"
+ WHITESPACE@[12; 13) " "
+ NAME@[13; 16)
+ IDENT@[13; 16) "foo"
+ PARAM_LIST@[16; 18)
+ L_PAREN@[16; 17) "("
+ R_PAREN@[17; 18) ")"
+ SEMI@[18; 19) ";"
+ WHITESPACE@[19; 20) " "
+ R_CURLY@[20; 21) "}"
+ WHITESPACE@[21; 22) "\n"
--- /dev/null
+type T = ();
--- /dev/null
+SOURCE_FILE@[0; 13)
+ TYPE_ALIAS_DEF@[0; 12)
+ TYPE_KW@[0; 4) "type"
+ WHITESPACE@[4; 5) " "
+ NAME@[5; 6)
+ IDENT@[5; 6) "T"
+ WHITESPACE@[6; 7) " "
+ EQ@[7; 8) "="
+ WHITESPACE@[8; 9) " "
+ TUPLE_TYPE@[9; 11)
+ L_PAREN@[9; 10) "("
+ R_PAREN@[10; 11) ")"
+ SEMI@[11; 12) ";"
+ WHITESPACE@[12; 13) "\n"
--- /dev/null
+type A = Foo;
+type B = ::Foo;
+type C = self::Foo;
+type D = super::Foo;
--- /dev/null
+SOURCE_FILE@[0; 71)
+ TYPE_ALIAS_DEF@[0; 13)
+ TYPE_KW@[0; 4) "type"
+ WHITESPACE@[4; 5) " "
+ NAME@[5; 6)
+ IDENT@[5; 6) "A"
+ WHITESPACE@[6; 7) " "
+ EQ@[7; 8) "="
+ WHITESPACE@[8; 9) " "
+ PATH_TYPE@[9; 12)
+ PATH@[9; 12)
+ PATH_SEGMENT@[9; 12)
+ NAME_REF@[9; 12)
+ IDENT@[9; 12) "Foo"
+ SEMI@[12; 13) ";"
+ WHITESPACE@[13; 14) "\n"
+ TYPE_ALIAS_DEF@[14; 29)
+ TYPE_KW@[14; 18) "type"
+ WHITESPACE@[18; 19) " "
+ NAME@[19; 20)
+ IDENT@[19; 20) "B"
+ WHITESPACE@[20; 21) " "
+ EQ@[21; 22) "="
+ WHITESPACE@[22; 23) " "
+ PATH_TYPE@[23; 28)
+ PATH@[23; 28)
+ PATH_SEGMENT@[23; 28)
+ COLONCOLON@[23; 25) "::"
+ NAME_REF@[25; 28)
+ IDENT@[25; 28) "Foo"
+ SEMI@[28; 29) ";"
+ WHITESPACE@[29; 30) "\n"
+ TYPE_ALIAS_DEF@[30; 49)
+ TYPE_KW@[30; 34) "type"
+ WHITESPACE@[34; 35) " "
+ NAME@[35; 36)
+ IDENT@[35; 36) "C"
+ WHITESPACE@[36; 37) " "
+ EQ@[37; 38) "="
+ WHITESPACE@[38; 39) " "
+ PATH_TYPE@[39; 48)
+ PATH@[39; 48)
+ PATH@[39; 43)
+ PATH_SEGMENT@[39; 43)
+ SELF_KW@[39; 43) "self"
+ COLONCOLON@[43; 45) "::"
+ PATH_SEGMENT@[45; 48)
+ NAME_REF@[45; 48)
+ IDENT@[45; 48) "Foo"
+ SEMI@[48; 49) ";"
+ WHITESPACE@[49; 50) "\n"
+ TYPE_ALIAS_DEF@[50; 70)
+ TYPE_KW@[50; 54) "type"
+ WHITESPACE@[54; 55) " "
+ NAME@[55; 56)
+ IDENT@[55; 56) "D"
+ WHITESPACE@[56; 57) " "
+ EQ@[57; 58) "="
+ WHITESPACE@[58; 59) " "
+ PATH_TYPE@[59; 69)
+ PATH@[59; 69)
+ PATH@[59; 64)
+ PATH_SEGMENT@[59; 64)
+ SUPER_KW@[59; 64) "super"
+ COLONCOLON@[64; 66) "::"
+ PATH_SEGMENT@[66; 69)
+ NAME_REF@[66; 69)
+ IDENT@[66; 69) "Foo"
+ SEMI@[69; 70) ";"
+ WHITESPACE@[70; 71) "\n"
--- /dev/null
+fn foo() {
+ let _ = a;
+ let _ = a::b;
+ let _ = ::a::<b>;
+ let _ = format!();
+}
--- /dev/null
+SOURCE_FILE@[0; 91)
+ FN_DEF@[0; 90)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 90)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ LET_STMT@[15; 25)
+ LET_KW@[15; 18) "let"
+ WHITESPACE@[18; 19) " "
+ PLACEHOLDER_PAT@[19; 20)
+ UNDERSCORE@[19; 20) "_"
+ WHITESPACE@[20; 21) " "
+ EQ@[21; 22) "="
+ WHITESPACE@[22; 23) " "
+ PATH_EXPR@[23; 24)
+ PATH@[23; 24)
+ PATH_SEGMENT@[23; 24)
+ NAME_REF@[23; 24)
+ IDENT@[23; 24) "a"
+ SEMI@[24; 25) ";"
+ WHITESPACE@[25; 30) "\n "
+ LET_STMT@[30; 43)
+ LET_KW@[30; 33) "let"
+ WHITESPACE@[33; 34) " "
+ PLACEHOLDER_PAT@[34; 35)
+ UNDERSCORE@[34; 35) "_"
+ WHITESPACE@[35; 36) " "
+ EQ@[36; 37) "="
+ WHITESPACE@[37; 38) " "
+ PATH_EXPR@[38; 42)
+ PATH@[38; 42)
+ PATH@[38; 39)
+ PATH_SEGMENT@[38; 39)
+ NAME_REF@[38; 39)
+ IDENT@[38; 39) "a"
+ COLONCOLON@[39; 41) "::"
+ PATH_SEGMENT@[41; 42)
+ NAME_REF@[41; 42)
+ IDENT@[41; 42) "b"
+ SEMI@[42; 43) ";"
+ WHITESPACE@[43; 48) "\n "
+ LET_STMT@[48; 65)
+ LET_KW@[48; 51) "let"
+ WHITESPACE@[51; 52) " "
+ PLACEHOLDER_PAT@[52; 53)
+ UNDERSCORE@[52; 53) "_"
+ WHITESPACE@[53; 54) " "
+ EQ@[54; 55) "="
+ WHITESPACE@[55; 56) " "
+ PATH_EXPR@[56; 64)
+ PATH@[56; 64)
+ PATH_SEGMENT@[56; 64)
+ COLONCOLON@[56; 58) "::"
+ NAME_REF@[58; 59)
+ IDENT@[58; 59) "a"
+ TYPE_ARG_LIST@[59; 64)
+ COLONCOLON@[59; 61) "::"
+ L_ANGLE@[61; 62) "<"
+ TYPE_ARG@[62; 63)
+ PATH_TYPE@[62; 63)
+ PATH@[62; 63)
+ PATH_SEGMENT@[62; 63)
+ NAME_REF@[62; 63)
+ IDENT@[62; 63) "b"
+ R_ANGLE@[63; 64) ">"
+ SEMI@[64; 65) ";"
+ WHITESPACE@[65; 70) "\n "
+ LET_STMT@[70; 88)
+ LET_KW@[70; 73) "let"
+ WHITESPACE@[73; 74) " "
+ PLACEHOLDER_PAT@[74; 75)
+ UNDERSCORE@[74; 75) "_"
+ WHITESPACE@[75; 76) " "
+ EQ@[76; 77) "="
+ WHITESPACE@[77; 78) " "
+ MACRO_CALL@[78; 87)
+ PATH@[78; 84)
+ PATH_SEGMENT@[78; 84)
+ NAME_REF@[78; 84)
+ IDENT@[78; 84) "format"
+ EXCL@[84; 85) "!"
+ TOKEN_TREE@[85; 87)
+ L_PAREN@[85; 86) "("
+ R_PAREN@[86; 87) ")"
+ SEMI@[87; 88) ";"
+ WHITESPACE@[88; 89) "\n"
+ R_CURLY@[89; 90) "}"
+ WHITESPACE@[90; 91) "\n"
--- /dev/null
+struct S {
+ #[serde(with = "url_serde")]
+ pub uri: Uri,
+}
--- /dev/null
+SOURCE_FILE@[0; 64)
+ STRUCT_DEF@[0; 63)
+ STRUCT_KW@[0; 6) "struct"
+ WHITESPACE@[6; 7) " "
+ NAME@[7; 8)
+ IDENT@[7; 8) "S"
+ WHITESPACE@[8; 9) " "
+ NAMED_FIELD_DEF_LIST@[9; 63)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ NAMED_FIELD_DEF@[15; 60)
+ ATTR@[15; 43)
+ POUND@[15; 16) "#"
+ TOKEN_TREE@[16; 43)
+ L_BRACK@[16; 17) "["
+ IDENT@[17; 22) "serde"
+ TOKEN_TREE@[22; 42)
+ L_PAREN@[22; 23) "("
+ IDENT@[23; 27) "with"
+ WHITESPACE@[27; 28) " "
+ EQ@[28; 29) "="
+ WHITESPACE@[29; 30) " "
+ STRING@[30; 41) "\"url_serde\""
+ R_PAREN@[41; 42) ")"
+ R_BRACK@[42; 43) "]"
+ WHITESPACE@[43; 48) "\n "
+ VISIBILITY@[48; 51)
+ PUB_KW@[48; 51) "pub"
+ WHITESPACE@[51; 52) " "
+ NAME@[52; 55)
+ IDENT@[52; 55) "uri"
+ COLON@[55; 56) ":"
+ WHITESPACE@[56; 57) " "
+ PATH_TYPE@[57; 60)
+ PATH@[57; 60)
+ PATH_SEGMENT@[57; 60)
+ NAME_REF@[57; 60)
+ IDENT@[57; 60) "Uri"
+ COMMA@[60; 61) ","
+ WHITESPACE@[61; 62) "\n"
+ R_CURLY@[62; 63) "}"
+ WHITESPACE@[63; 64) "\n"
--- /dev/null
+fn main() {
+ match () {
+ -1 => (),
+ 92 => (),
+ 'c' => (),
+ "hello" => (),
+ }
+}
--- /dev/null
+SOURCE_FILE@[0; 113)
+ FN_DEF@[0; 112)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 7)
+ IDENT@[3; 7) "main"
+ PARAM_LIST@[7; 9)
+ L_PAREN@[7; 8) "("
+ R_PAREN@[8; 9) ")"
+ WHITESPACE@[9; 10) " "
+ BLOCK@[10; 112)
+ L_CURLY@[10; 11) "{"
+ WHITESPACE@[11; 16) "\n "
+ MATCH_EXPR@[16; 110)
+ MATCH_KW@[16; 21) "match"
+ WHITESPACE@[21; 22) " "
+ TUPLE_EXPR@[22; 24)
+ L_PAREN@[22; 23) "("
+ R_PAREN@[23; 24) ")"
+ WHITESPACE@[24; 25) " "
+ MATCH_ARM_LIST@[25; 110)
+ L_CURLY@[25; 26) "{"
+ WHITESPACE@[26; 35) "\n "
+ MATCH_ARM@[35; 43)
+ LITERAL_PAT@[35; 37)
+ MINUS@[35; 36) "-"
+ LITERAL@[36; 37)
+ INT_NUMBER@[36; 37) "1"
+ WHITESPACE@[37; 38) " "
+ FAT_ARROW@[38; 40) "=>"
+ WHITESPACE@[40; 41) " "
+ TUPLE_EXPR@[41; 43)
+ L_PAREN@[41; 42) "("
+ R_PAREN@[42; 43) ")"
+ COMMA@[43; 44) ","
+ WHITESPACE@[44; 53) "\n "
+ MATCH_ARM@[53; 61)
+ LITERAL_PAT@[53; 55)
+ LITERAL@[53; 55)
+ INT_NUMBER@[53; 55) "92"
+ WHITESPACE@[55; 56) " "
+ FAT_ARROW@[56; 58) "=>"
+ WHITESPACE@[58; 59) " "
+ TUPLE_EXPR@[59; 61)
+ L_PAREN@[59; 60) "("
+ R_PAREN@[60; 61) ")"
+ COMMA@[61; 62) ","
+ WHITESPACE@[62; 71) "\n "
+ MATCH_ARM@[71; 80)
+ LITERAL_PAT@[71; 74)
+ LITERAL@[71; 74)
+ CHAR@[71; 74) "\'c\'"
+ WHITESPACE@[74; 75) " "
+ FAT_ARROW@[75; 77) "=>"
+ WHITESPACE@[77; 78) " "
+ TUPLE_EXPR@[78; 80)
+ L_PAREN@[78; 79) "("
+ R_PAREN@[79; 80) ")"
+ COMMA@[80; 81) ","
+ WHITESPACE@[81; 90) "\n "
+ MATCH_ARM@[90; 103)
+ LITERAL_PAT@[90; 97)
+ LITERAL@[90; 97)
+ STRING@[90; 97) "\"hello\""
+ WHITESPACE@[97; 98) " "
+ FAT_ARROW@[98; 100) "=>"
+ WHITESPACE@[100; 101) " "
+ TUPLE_EXPR@[101; 103)
+ L_PAREN@[101; 102) "("
+ R_PAREN@[102; 103) ")"
+ COMMA@[103; 104) ","
+ WHITESPACE@[104; 109) "\n "
+ R_CURLY@[109; 110) "}"
+ WHITESPACE@[110; 111) "\n"
+ R_CURLY@[111; 112) "}"
+ WHITESPACE@[112; 113) "\n"
--- /dev/null
+fn foo()
+where
+ 'a: 'b + 'c,
+ T: Clone + Copy + 'static,
+ Iterator::Item: 'a,
+ <T as Iterator>::Item: 'a
+{}
--- /dev/null
+SOURCE_FILE@[0; 116)
+ FN_DEF@[0; 115)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) "\n"
+ WHERE_CLAUSE@[9; 112)
+ WHERE_KW@[9; 14) "where"
+ WHITESPACE@[14; 18) "\n "
+ WHERE_PRED@[18; 29)
+ LIFETIME@[18; 20) "\'a"
+ COLON@[20; 21) ":"
+ WHITESPACE@[21; 22) " "
+ TYPE_BOUND_LIST@[22; 29)
+ TYPE_BOUND@[22; 24)
+ LIFETIME@[22; 24) "\'b"
+ WHITESPACE@[24; 25) " "
+ PLUS@[25; 26) "+"
+ WHITESPACE@[26; 27) " "
+ TYPE_BOUND@[27; 29)
+ LIFETIME@[27; 29) "\'c"
+ COMMA@[29; 30) ","
+ WHITESPACE@[30; 34) "\n "
+ WHERE_PRED@[34; 59)
+ PATH_TYPE@[34; 35)
+ PATH@[34; 35)
+ PATH_SEGMENT@[34; 35)
+ NAME_REF@[34; 35)
+ IDENT@[34; 35) "T"
+ COLON@[35; 36) ":"
+ WHITESPACE@[36; 37) " "
+ TYPE_BOUND_LIST@[37; 59)
+ TYPE_BOUND@[37; 42)
+ PATH_TYPE@[37; 42)
+ PATH@[37; 42)
+ PATH_SEGMENT@[37; 42)
+ NAME_REF@[37; 42)
+ IDENT@[37; 42) "Clone"
+ WHITESPACE@[42; 43) " "
+ PLUS@[43; 44) "+"
+ WHITESPACE@[44; 45) " "
+ TYPE_BOUND@[45; 49)
+ PATH_TYPE@[45; 49)
+ PATH@[45; 49)
+ PATH_SEGMENT@[45; 49)
+ NAME_REF@[45; 49)
+ IDENT@[45; 49) "Copy"
+ WHITESPACE@[49; 50) " "
+ PLUS@[50; 51) "+"
+ WHITESPACE@[51; 52) " "
+ TYPE_BOUND@[52; 59)
+ LIFETIME@[52; 59) "\'static"
+ COMMA@[59; 60) ","
+ WHITESPACE@[60; 64) "\n "
+ WHERE_PRED@[64; 82)
+ PATH_TYPE@[64; 78)
+ PATH@[64; 78)
+ PATH@[64; 72)
+ PATH_SEGMENT@[64; 72)
+ NAME_REF@[64; 72)
+ IDENT@[64; 72) "Iterator"
+ COLONCOLON@[72; 74) "::"
+ PATH_SEGMENT@[74; 78)
+ NAME_REF@[74; 78)
+ IDENT@[74; 78) "Item"
+ COLON@[78; 79) ":"
+ WHITESPACE@[79; 80) " "
+ TYPE_BOUND_LIST@[80; 82)
+ TYPE_BOUND@[80; 82)
+ LIFETIME@[80; 82) "\'a"
+ COMMA@[82; 83) ","
+ WHITESPACE@[83; 87) "\n "
+ WHERE_PRED@[87; 112)
+ PATH_TYPE@[87; 108)
+ PATH@[87; 108)
+ PATH@[87; 102)
+ PATH_SEGMENT@[87; 102)
+ L_ANGLE@[87; 88) "<"
+ PATH_TYPE@[88; 89)
+ PATH@[88; 89)
+ PATH_SEGMENT@[88; 89)
+ NAME_REF@[88; 89)
+ IDENT@[88; 89) "T"
+ WHITESPACE@[89; 90) " "
+ AS_KW@[90; 92) "as"
+ WHITESPACE@[92; 93) " "
+ PATH_TYPE@[93; 101)
+ PATH@[93; 101)
+ PATH_SEGMENT@[93; 101)
+ NAME_REF@[93; 101)
+ IDENT@[93; 101) "Iterator"
+ R_ANGLE@[101; 102) ">"
+ COLONCOLON@[102; 104) "::"
+ PATH_SEGMENT@[104; 108)
+ NAME_REF@[104; 108)
+ IDENT@[104; 108) "Item"
+ COLON@[108; 109) ":"
+ WHITESPACE@[109; 110) " "
+ TYPE_BOUND_LIST@[110; 112)
+ TYPE_BOUND@[110; 112)
+ LIFETIME@[110; 112) "\'a"
+ WHITESPACE@[112; 113) "\n"
+ BLOCK@[113; 115)
+ L_CURLY@[113; 114) "{"
+ R_CURLY@[114; 115) "}"
+ WHITESPACE@[115; 116) "\n"
--- /dev/null
+const fn foo() {}
--- /dev/null
+SOURCE_FILE@[0; 18)
+ FN_DEF@[0; 17)
+ CONST_KW@[0; 5) "const"
+ WHITESPACE@[5; 6) " "
+ FN_KW@[6; 8) "fn"
+ WHITESPACE@[8; 9) " "
+ NAME@[9; 12)
+ IDENT@[9; 12) "foo"
+ PARAM_LIST@[12; 14)
+ L_PAREN@[12; 13) "("
+ R_PAREN@[13; 14) ")"
+ WHITESPACE@[14; 15) " "
+ BLOCK@[15; 17)
+ L_CURLY@[15; 16) "{"
+ R_CURLY@[16; 17) "}"
+ WHITESPACE@[17; 18) "\n"
--- /dev/null
+fn main() {
+ match 92 {
+ 0 ... 100 => (),
+ 101 ..= 200 => (),
+ 200 .. 301=> (),
+ }
+}
--- /dev/null
+SOURCE_FILE@[0; 112)
+ FN_DEF@[0; 111)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 7)
+ IDENT@[3; 7) "main"
+ PARAM_LIST@[7; 9)
+ L_PAREN@[7; 8) "("
+ R_PAREN@[8; 9) ")"
+ WHITESPACE@[9; 10) " "
+ BLOCK@[10; 111)
+ L_CURLY@[10; 11) "{"
+ WHITESPACE@[11; 16) "\n "
+ MATCH_EXPR@[16; 109)
+ MATCH_KW@[16; 21) "match"
+ WHITESPACE@[21; 22) " "
+ LITERAL@[22; 24)
+ INT_NUMBER@[22; 24) "92"
+ WHITESPACE@[24; 25) " "
+ MATCH_ARM_LIST@[25; 109)
+ L_CURLY@[25; 26) "{"
+ WHITESPACE@[26; 35) "\n "
+ MATCH_ARM@[35; 50)
+ RANGE_PAT@[35; 44)
+ LITERAL_PAT@[35; 36)
+ LITERAL@[35; 36)
+ INT_NUMBER@[35; 36) "0"
+ WHITESPACE@[36; 37) " "
+ DOTDOTDOT@[37; 40) "..."
+ WHITESPACE@[40; 41) " "
+ LITERAL_PAT@[41; 44)
+ LITERAL@[41; 44)
+ INT_NUMBER@[41; 44) "100"
+ WHITESPACE@[44; 45) " "
+ FAT_ARROW@[45; 47) "=>"
+ WHITESPACE@[47; 48) " "
+ TUPLE_EXPR@[48; 50)
+ L_PAREN@[48; 49) "("
+ R_PAREN@[49; 50) ")"
+ COMMA@[50; 51) ","
+ WHITESPACE@[51; 60) "\n "
+ MATCH_ARM@[60; 77)
+ RANGE_PAT@[60; 71)
+ LITERAL_PAT@[60; 63)
+ LITERAL@[60; 63)
+ INT_NUMBER@[60; 63) "101"
+ WHITESPACE@[63; 64) " "
+ DOTDOTEQ@[64; 67) "..="
+ WHITESPACE@[67; 68) " "
+ LITERAL_PAT@[68; 71)
+ LITERAL@[68; 71)
+ INT_NUMBER@[68; 71) "200"
+ WHITESPACE@[71; 72) " "
+ FAT_ARROW@[72; 74) "=>"
+ WHITESPACE@[74; 75) " "
+ TUPLE_EXPR@[75; 77)
+ L_PAREN@[75; 76) "("
+ R_PAREN@[76; 77) ")"
+ COMMA@[77; 78) ","
+ WHITESPACE@[78; 87) "\n "
+ MATCH_ARM@[87; 102)
+ RANGE_PAT@[87; 97)
+ LITERAL_PAT@[87; 90)
+ LITERAL@[87; 90)
+ INT_NUMBER@[87; 90) "200"
+ WHITESPACE@[90; 91) " "
+ DOTDOT@[91; 93) ".."
+ WHITESPACE@[93; 94) " "
+ LITERAL_PAT@[94; 97)
+ LITERAL@[94; 97)
+ INT_NUMBER@[94; 97) "301"
+ FAT_ARROW@[97; 99) "=>"
+ WHITESPACE@[99; 100) " "
+ TUPLE_EXPR@[100; 102)
+ L_PAREN@[100; 101) "("
+ R_PAREN@[101; 102) ")"
+ COMMA@[102; 103) ","
+ WHITESPACE@[103; 108) "\n "
+ R_CURLY@[108; 109) "}"
+ WHITESPACE@[109; 110) "\n"
+ R_CURLY@[110; 111) "}"
+ WHITESPACE@[111; 112) "\n"
--- /dev/null
+fn foo() {
+ match () {
+ _ => (),
+ _ => {}
+ _ => ()
+ }
+}
--- /dev/null
+SOURCE_FILE@[0; 83)
+ FN_DEF@[0; 82)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 82)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ MATCH_EXPR@[15; 80)
+ MATCH_KW@[15; 20) "match"
+ WHITESPACE@[20; 21) " "
+ TUPLE_EXPR@[21; 23)
+ L_PAREN@[21; 22) "("
+ R_PAREN@[22; 23) ")"
+ WHITESPACE@[23; 24) " "
+ MATCH_ARM_LIST@[24; 80)
+ L_CURLY@[24; 25) "{"
+ WHITESPACE@[25; 34) "\n "
+ MATCH_ARM@[34; 41)
+ PLACEHOLDER_PAT@[34; 35)
+ UNDERSCORE@[34; 35) "_"
+ WHITESPACE@[35; 36) " "
+ FAT_ARROW@[36; 38) "=>"
+ WHITESPACE@[38; 39) " "
+ TUPLE_EXPR@[39; 41)
+ L_PAREN@[39; 40) "("
+ R_PAREN@[40; 41) ")"
+ COMMA@[41; 42) ","
+ WHITESPACE@[42; 51) "\n "
+ MATCH_ARM@[51; 58)
+ PLACEHOLDER_PAT@[51; 52)
+ UNDERSCORE@[51; 52) "_"
+ WHITESPACE@[52; 53) " "
+ FAT_ARROW@[53; 55) "=>"
+ WHITESPACE@[55; 56) " "
+ BLOCK_EXPR@[56; 58)
+ BLOCK@[56; 58)
+ L_CURLY@[56; 57) "{"
+ R_CURLY@[57; 58) "}"
+ WHITESPACE@[58; 67) "\n "
+ MATCH_ARM@[67; 74)
+ PLACEHOLDER_PAT@[67; 68)
+ UNDERSCORE@[67; 68) "_"
+ WHITESPACE@[68; 69) " "
+ FAT_ARROW@[69; 71) "=>"
+ WHITESPACE@[71; 72) " "
+ TUPLE_EXPR@[72; 74)
+ L_PAREN@[72; 73) "("
+ R_PAREN@[73; 74) ")"
+ WHITESPACE@[74; 79) "\n "
+ R_CURLY@[79; 80) "}"
+ WHITESPACE@[80; 81) "\n"
+ R_CURLY@[81; 82) "}"
+ WHITESPACE@[82; 83) "\n"
--- /dev/null
+extern crate foo;
--- /dev/null
+SOURCE_FILE@[0; 18)
+ EXTERN_CRATE_ITEM@[0; 17)
+ EXTERN_KW@[0; 6) "extern"
+ WHITESPACE@[6; 7) " "
+ CRATE_KW@[7; 12) "crate"
+ WHITESPACE@[12; 13) " "
+ NAME_REF@[13; 16)
+ IDENT@[13; 16) "foo"
+ SEMI@[16; 17) ";"
+ WHITESPACE@[17; 18) "\n"
--- /dev/null
+fn foo() {
+ S {};
+ S { x, y: 32, };
+ S { x, y: 32, ..Default::default() };
+}
--- /dev/null
+SOURCE_FILE@[0; 86)
+ FN_DEF@[0; 85)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 85)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ EXPR_STMT@[15; 20)
+ STRUCT_LIT@[15; 19)
+ PATH@[15; 16)
+ PATH_SEGMENT@[15; 16)
+ NAME_REF@[15; 16)
+ IDENT@[15; 16) "S"
+ WHITESPACE@[16; 17) " "
+ NAMED_FIELD_LIST@[17; 19)
+ L_CURLY@[17; 18) "{"
+ R_CURLY@[18; 19) "}"
+ SEMI@[19; 20) ";"
+ WHITESPACE@[20; 25) "\n "
+ EXPR_STMT@[25; 41)
+ STRUCT_LIT@[25; 40)
+ PATH@[25; 26)
+ PATH_SEGMENT@[25; 26)
+ NAME_REF@[25; 26)
+ IDENT@[25; 26) "S"
+ WHITESPACE@[26; 27) " "
+ NAMED_FIELD_LIST@[27; 40)
+ L_CURLY@[27; 28) "{"
+ WHITESPACE@[28; 29) " "
+ NAMED_FIELD@[29; 30)
+ NAME_REF@[29; 30)
+ IDENT@[29; 30) "x"
+ COMMA@[30; 31) ","
+ WHITESPACE@[31; 32) " "
+ NAMED_FIELD@[32; 37)
+ NAME_REF@[32; 33)
+ IDENT@[32; 33) "y"
+ COLON@[33; 34) ":"
+ WHITESPACE@[34; 35) " "
+ LITERAL@[35; 37)
+ INT_NUMBER@[35; 37) "32"
+ COMMA@[37; 38) ","
+ WHITESPACE@[38; 39) " "
+ R_CURLY@[39; 40) "}"
+ SEMI@[40; 41) ";"
+ WHITESPACE@[41; 46) "\n "
+ EXPR_STMT@[46; 83)
+ STRUCT_LIT@[46; 82)
+ PATH@[46; 47)
+ PATH_SEGMENT@[46; 47)
+ NAME_REF@[46; 47)
+ IDENT@[46; 47) "S"
+ WHITESPACE@[47; 48) " "
+ NAMED_FIELD_LIST@[48; 82)
+ L_CURLY@[48; 49) "{"
+ WHITESPACE@[49; 50) " "
+ NAMED_FIELD@[50; 51)
+ NAME_REF@[50; 51)
+ IDENT@[50; 51) "x"
+ COMMA@[51; 52) ","
+ WHITESPACE@[52; 53) " "
+ NAMED_FIELD@[53; 58)
+ NAME_REF@[53; 54)
+ IDENT@[53; 54) "y"
+ COLON@[54; 55) ":"
+ WHITESPACE@[55; 56) " "
+ LITERAL@[56; 58)
+ INT_NUMBER@[56; 58) "32"
+ COMMA@[58; 59) ","
+ WHITESPACE@[59; 60) " "
+ DOTDOT@[60; 62) ".."
+ CALL_EXPR@[62; 80)
+ PATH_EXPR@[62; 78)
+ PATH@[62; 78)
+ PATH@[62; 69)
+ PATH_SEGMENT@[62; 69)
+ NAME_REF@[62; 69)
+ IDENT@[62; 69) "Default"
+ COLONCOLON@[69; 71) "::"
+ PATH_SEGMENT@[71; 78)
+ NAME_REF@[71; 78)
+ IDENT@[71; 78) "default"
+ ARG_LIST@[78; 80)
+ L_PAREN@[78; 79) "("
+ R_PAREN@[79; 80) ")"
+ WHITESPACE@[80; 81) " "
+ R_CURLY@[81; 82) "}"
+ SEMI@[82; 83) ";"
+ WHITESPACE@[83; 84) "\n"
+ R_CURLY@[84; 85) "}"
+ WHITESPACE@[85; 86) "\n"
--- /dev/null
+fn foo() {}
+macro_rules! foo {}
+foo::bar!();
+super::baz! {}
+struct S;
--- /dev/null
+SOURCE_FILE@[0; 70)
+ FN_DEF@[0; 11)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 11)
+ L_CURLY@[9; 10) "{"
+ R_CURLY@[10; 11) "}"
+ WHITESPACE@[11; 12) "\n"
+ MACRO_CALL@[12; 31)
+ PATH@[12; 23)
+ PATH_SEGMENT@[12; 23)
+ NAME_REF@[12; 23)
+ IDENT@[12; 23) "macro_rules"
+ EXCL@[23; 24) "!"
+ WHITESPACE@[24; 25) " "
+ NAME@[25; 28)
+ IDENT@[25; 28) "foo"
+ WHITESPACE@[28; 29) " "
+ TOKEN_TREE@[29; 31)
+ L_CURLY@[29; 30) "{"
+ R_CURLY@[30; 31) "}"
+ WHITESPACE@[31; 32) "\n"
+ MACRO_CALL@[32; 44)
+ PATH@[32; 40)
+ PATH@[32; 35)
+ PATH_SEGMENT@[32; 35)
+ NAME_REF@[32; 35)
+ IDENT@[32; 35) "foo"
+ COLONCOLON@[35; 37) "::"
+ PATH_SEGMENT@[37; 40)
+ NAME_REF@[37; 40)
+ IDENT@[37; 40) "bar"
+ EXCL@[40; 41) "!"
+ TOKEN_TREE@[41; 43)
+ L_PAREN@[41; 42) "("
+ R_PAREN@[42; 43) ")"
+ SEMI@[43; 44) ";"
+ WHITESPACE@[44; 45) "\n"
+ MACRO_CALL@[45; 59)
+ PATH@[45; 55)
+ PATH@[45; 50)
+ PATH_SEGMENT@[45; 50)
+ SUPER_KW@[45; 50) "super"
+ COLONCOLON@[50; 52) "::"
+ PATH_SEGMENT@[52; 55)
+ NAME_REF@[52; 55)
+ IDENT@[52; 55) "baz"
+ EXCL@[55; 56) "!"
+ WHITESPACE@[56; 57) " "
+ TOKEN_TREE@[57; 59)
+ L_CURLY@[57; 58) "{"
+ R_CURLY@[58; 59) "}"
+ WHITESPACE@[59; 60) "\n"
+ STRUCT_DEF@[60; 69)
+ STRUCT_KW@[60; 66) "struct"
+ WHITESPACE@[66; 67) " "
+ NAME@[67; 68)
+ IDENT@[67; 68) "S"
+ SEMI@[68; 69) ";"
+ WHITESPACE@[69; 70) "\n"
--- /dev/null
+impl !Send for X {}
--- /dev/null
+SOURCE_FILE@[0; 20)
+ IMPL_BLOCK@[0; 19)
+ IMPL_KW@[0; 4) "impl"
+ WHITESPACE@[4; 5) " "
+ EXCL@[5; 6) "!"
+ PATH_TYPE@[6; 10)
+ PATH@[6; 10)
+ PATH_SEGMENT@[6; 10)
+ NAME_REF@[6; 10)
+ IDENT@[6; 10) "Send"
+ WHITESPACE@[10; 11) " "
+ FOR_KW@[11; 14) "for"
+ WHITESPACE@[14; 15) " "
+ PATH_TYPE@[15; 16)
+ PATH@[15; 16)
+ PATH_SEGMENT@[15; 16)
+ NAME_REF@[15; 16)
+ IDENT@[15; 16) "X"
+ WHITESPACE@[16; 17) " "
+ ITEM_LIST@[17; 19)
+ L_CURLY@[17; 18) "{"
+ R_CURLY@[18; 19) "}"
+ WHITESPACE@[19; 20) "\n"
--- /dev/null
+fn foo() {
+ if true {};
+ if true {} else {};
+ if true {} else if false {} else {};
+ if S {};
+}
--- /dev/null
+SOURCE_FILE@[0; 107)
+ FN_DEF@[0; 106)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 106)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ EXPR_STMT@[15; 26)
+ IF_EXPR@[15; 25)
+ IF_KW@[15; 17) "if"
+ WHITESPACE@[17; 18) " "
+ CONDITION@[18; 22)
+ LITERAL@[18; 22)
+ TRUE_KW@[18; 22) "true"
+ WHITESPACE@[22; 23) " "
+ BLOCK@[23; 25)
+ L_CURLY@[23; 24) "{"
+ R_CURLY@[24; 25) "}"
+ SEMI@[25; 26) ";"
+ WHITESPACE@[26; 31) "\n "
+ EXPR_STMT@[31; 50)
+ IF_EXPR@[31; 49)
+ IF_KW@[31; 33) "if"
+ WHITESPACE@[33; 34) " "
+ CONDITION@[34; 38)
+ LITERAL@[34; 38)
+ TRUE_KW@[34; 38) "true"
+ WHITESPACE@[38; 39) " "
+ BLOCK@[39; 41)
+ L_CURLY@[39; 40) "{"
+ R_CURLY@[40; 41) "}"
+ WHITESPACE@[41; 42) " "
+ ELSE_KW@[42; 46) "else"
+ WHITESPACE@[46; 47) " "
+ BLOCK@[47; 49)
+ L_CURLY@[47; 48) "{"
+ R_CURLY@[48; 49) "}"
+ SEMI@[49; 50) ";"
+ WHITESPACE@[50; 55) "\n "
+ EXPR_STMT@[55; 91)
+ IF_EXPR@[55; 90)
+ IF_KW@[55; 57) "if"
+ WHITESPACE@[57; 58) " "
+ CONDITION@[58; 62)
+ LITERAL@[58; 62)
+ TRUE_KW@[58; 62) "true"
+ WHITESPACE@[62; 63) " "
+ BLOCK@[63; 65)
+ L_CURLY@[63; 64) "{"
+ R_CURLY@[64; 65) "}"
+ WHITESPACE@[65; 66) " "
+ ELSE_KW@[66; 70) "else"
+ WHITESPACE@[70; 71) " "
+ IF_EXPR@[71; 90)
+ IF_KW@[71; 73) "if"
+ WHITESPACE@[73; 74) " "
+ CONDITION@[74; 79)
+ LITERAL@[74; 79)
+ FALSE_KW@[74; 79) "false"
+ WHITESPACE@[79; 80) " "
+ BLOCK@[80; 82)
+ L_CURLY@[80; 81) "{"
+ R_CURLY@[81; 82) "}"
+ WHITESPACE@[82; 83) " "
+ ELSE_KW@[83; 87) "else"
+ WHITESPACE@[87; 88) " "
+ BLOCK@[88; 90)
+ L_CURLY@[88; 89) "{"
+ R_CURLY@[89; 90) "}"
+ SEMI@[90; 91) ";"
+ WHITESPACE@[91; 96) "\n "
+ EXPR_STMT@[96; 104)
+ IF_EXPR@[96; 103)
+ IF_KW@[96; 98) "if"
+ WHITESPACE@[98; 99) " "
+ CONDITION@[99; 100)
+ PATH_EXPR@[99; 100)
+ PATH@[99; 100)
+ PATH_SEGMENT@[99; 100)
+ NAME_REF@[99; 100)
+ IDENT@[99; 100) "S"
+ WHITESPACE@[100; 101) " "
+ BLOCK@[101; 103)
+ L_CURLY@[101; 102) "{"
+ R_CURLY@[102; 103) "}"
+ SEMI@[103; 104) ";"
+ WHITESPACE@[104; 105) "\n"
+ R_CURLY@[105; 106) "}"
+ WHITESPACE@[106; 107) "\n"
--- /dev/null
+type A = dyn Iterator<Item=Foo<'a>> + 'a;
--- /dev/null
+SOURCE_FILE@[0; 42)
+ TYPE_ALIAS_DEF@[0; 41)
+ TYPE_KW@[0; 4) "type"
+ WHITESPACE@[4; 5) " "
+ NAME@[5; 6)
+ IDENT@[5; 6) "A"
+ WHITESPACE@[6; 7) " "
+ EQ@[7; 8) "="
+ WHITESPACE@[8; 9) " "
+ DYN_TRAIT_TYPE@[9; 40)
+ DYN_KW@[9; 12) "dyn"
+ WHITESPACE@[12; 13) " "
+ TYPE_BOUND_LIST@[13; 40)
+ TYPE_BOUND@[13; 35)
+ PATH_TYPE@[13; 35)
+ PATH@[13; 35)
+ PATH_SEGMENT@[13; 35)
+ NAME_REF@[13; 21)
+ IDENT@[13; 21) "Iterator"
+ TYPE_ARG_LIST@[21; 35)
+ L_ANGLE@[21; 22) "<"
+ ASSOC_TYPE_ARG@[22; 34)
+ NAME_REF@[22; 26)
+ IDENT@[22; 26) "Item"
+ EQ@[26; 27) "="
+ PATH_TYPE@[27; 34)
+ PATH@[27; 34)
+ PATH_SEGMENT@[27; 34)
+ NAME_REF@[27; 30)
+ IDENT@[27; 30) "Foo"
+ TYPE_ARG_LIST@[30; 34)
+ L_ANGLE@[30; 31) "<"
+ LIFETIME_ARG@[31; 33)
+ LIFETIME@[31; 33) "\'a"
+ R_ANGLE@[33; 34) ">"
+ R_ANGLE@[34; 35) ">"
+ WHITESPACE@[35; 36) " "
+ PLUS@[36; 37) "+"
+ WHITESPACE@[37; 38) " "
+ TYPE_BOUND@[38; 40)
+ LIFETIME@[38; 40) "\'a"
+ SEMI@[40; 41) ";"
+ WHITESPACE@[41; 42) "\n"
--- /dev/null
+fn foo() {
+ match () {
+ _ => (),
+ _ if Test > Test{field: 0} => (),
+ X | Y if Z => (),
+ | X | Y if Z => (),
+ | X => (),
+ };
+}
--- /dev/null
+SOURCE_FILE@[0; 167)
+ FN_DEF@[0; 166)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 166)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ EXPR_STMT@[15; 164)
+ MATCH_EXPR@[15; 163)
+ MATCH_KW@[15; 20) "match"
+ WHITESPACE@[20; 21) " "
+ TUPLE_EXPR@[21; 23)
+ L_PAREN@[21; 22) "("
+ R_PAREN@[22; 23) ")"
+ WHITESPACE@[23; 24) " "
+ MATCH_ARM_LIST@[24; 163)
+ L_CURLY@[24; 25) "{"
+ WHITESPACE@[25; 34) "\n "
+ MATCH_ARM@[34; 41)
+ PLACEHOLDER_PAT@[34; 35)
+ UNDERSCORE@[34; 35) "_"
+ WHITESPACE@[35; 36) " "
+ FAT_ARROW@[36; 38) "=>"
+ WHITESPACE@[38; 39) " "
+ TUPLE_EXPR@[39; 41)
+ L_PAREN@[39; 40) "("
+ R_PAREN@[40; 41) ")"
+ COMMA@[41; 42) ","
+ WHITESPACE@[42; 51) "\n "
+ MATCH_ARM@[51; 83)
+ PLACEHOLDER_PAT@[51; 52)
+ UNDERSCORE@[51; 52) "_"
+ WHITESPACE@[52; 53) " "
+ MATCH_GUARD@[53; 77)
+ IF_KW@[53; 55) "if"
+ WHITESPACE@[55; 56) " "
+ BIN_EXPR@[56; 77)
+ PATH_EXPR@[56; 60)
+ PATH@[56; 60)
+ PATH_SEGMENT@[56; 60)
+ NAME_REF@[56; 60)
+ IDENT@[56; 60) "Test"
+ WHITESPACE@[60; 61) " "
+ R_ANGLE@[61; 62) ">"
+ WHITESPACE@[62; 63) " "
+ STRUCT_LIT@[63; 77)
+ PATH@[63; 67)
+ PATH_SEGMENT@[63; 67)
+ NAME_REF@[63; 67)
+ IDENT@[63; 67) "Test"
+ NAMED_FIELD_LIST@[67; 77)
+ L_CURLY@[67; 68) "{"
+ NAMED_FIELD@[68; 76)
+ NAME_REF@[68; 73)
+ IDENT@[68; 73) "field"
+ COLON@[73; 74) ":"
+ WHITESPACE@[74; 75) " "
+ LITERAL@[75; 76)
+ INT_NUMBER@[75; 76) "0"
+ R_CURLY@[76; 77) "}"
+ WHITESPACE@[77; 78) " "
+ FAT_ARROW@[78; 80) "=>"
+ WHITESPACE@[80; 81) " "
+ TUPLE_EXPR@[81; 83)
+ L_PAREN@[81; 82) "("
+ R_PAREN@[82; 83) ")"
+ COMMA@[83; 84) ","
+ WHITESPACE@[84; 93) "\n "
+ MATCH_ARM@[93; 109)
+ BIND_PAT@[93; 94)
+ NAME@[93; 94)
+ IDENT@[93; 94) "X"
+ WHITESPACE@[94; 95) " "
+ PIPE@[95; 96) "|"
+ WHITESPACE@[96; 97) " "
+ BIND_PAT@[97; 98)
+ NAME@[97; 98)
+ IDENT@[97; 98) "Y"
+ WHITESPACE@[98; 99) " "
+ MATCH_GUARD@[99; 103)
+ IF_KW@[99; 101) "if"
+ WHITESPACE@[101; 102) " "
+ PATH_EXPR@[102; 103)
+ PATH@[102; 103)
+ PATH_SEGMENT@[102; 103)
+ NAME_REF@[102; 103)
+ IDENT@[102; 103) "Z"
+ WHITESPACE@[103; 104) " "
+ FAT_ARROW@[104; 106) "=>"
+ WHITESPACE@[106; 107) " "
+ TUPLE_EXPR@[107; 109)
+ L_PAREN@[107; 108) "("
+ R_PAREN@[108; 109) ")"
+ COMMA@[109; 110) ","
+ WHITESPACE@[110; 119) "\n "
+ MATCH_ARM@[119; 137)
+ PIPE@[119; 120) "|"
+ WHITESPACE@[120; 121) " "
+ BIND_PAT@[121; 122)
+ NAME@[121; 122)
+ IDENT@[121; 122) "X"
+ WHITESPACE@[122; 123) " "
+ PIPE@[123; 124) "|"
+ WHITESPACE@[124; 125) " "
+ BIND_PAT@[125; 126)
+ NAME@[125; 126)
+ IDENT@[125; 126) "Y"
+ WHITESPACE@[126; 127) " "
+ MATCH_GUARD@[127; 131)
+ IF_KW@[127; 129) "if"
+ WHITESPACE@[129; 130) " "
+ PATH_EXPR@[130; 131)
+ PATH@[130; 131)
+ PATH_SEGMENT@[130; 131)
+ NAME_REF@[130; 131)
+ IDENT@[130; 131) "Z"
+ WHITESPACE@[131; 132) " "
+ FAT_ARROW@[132; 134) "=>"
+ WHITESPACE@[134; 135) " "
+ TUPLE_EXPR@[135; 137)
+ L_PAREN@[135; 136) "("
+ R_PAREN@[136; 137) ")"
+ COMMA@[137; 138) ","
+ WHITESPACE@[138; 147) "\n "
+ MATCH_ARM@[147; 156)
+ PIPE@[147; 148) "|"
+ WHITESPACE@[148; 149) " "
+ BIND_PAT@[149; 150)
+ NAME@[149; 150)
+ IDENT@[149; 150) "X"
+ WHITESPACE@[150; 151) " "
+ FAT_ARROW@[151; 153) "=>"
+ WHITESPACE@[153; 154) " "
+ TUPLE_EXPR@[154; 156)
+ L_PAREN@[154; 155) "("
+ R_PAREN@[155; 156) ")"
+ COMMA@[156; 157) ","
+ WHITESPACE@[157; 162) "\n "
+ R_CURLY@[162; 163) "}"
+ SEMI@[163; 164) ";"
+ WHITESPACE@[164; 165) "\n"
+ R_CURLY@[165; 166) "}"
+ WHITESPACE@[166; 167) "\n"
--- /dev/null
+use crate::foo;
--- /dev/null
+SOURCE_FILE@[0; 16)
+ USE_ITEM@[0; 15)
+ USE_KW@[0; 3) "use"
+ WHITESPACE@[3; 4) " "
+ USE_TREE@[4; 14)
+ PATH@[4; 14)
+ PATH@[4; 9)
+ PATH_SEGMENT@[4; 9)
+ CRATE_KW@[4; 9) "crate"
+ COLONCOLON@[9; 11) "::"
+ PATH_SEGMENT@[11; 14)
+ NAME_REF@[11; 14)
+ IDENT@[11; 14) "foo"
+ SEMI@[14; 15) ";"
+ WHITESPACE@[15; 16) "\n"
--- /dev/null
+union Foo {}
+union Foo {
+ a: i32,
+ b: f32,
+}
--- /dev/null
+SOURCE_FILE@[0; 51)
+ STRUCT_DEF@[0; 12)
+ UNION_KW@[0; 5) "union"
+ WHITESPACE@[5; 6) " "
+ NAME@[6; 9)
+ IDENT@[6; 9) "Foo"
+ WHITESPACE@[9; 10) " "
+ NAMED_FIELD_DEF_LIST@[10; 12)
+ L_CURLY@[10; 11) "{"
+ R_CURLY@[11; 12) "}"
+ WHITESPACE@[12; 13) "\n"
+ STRUCT_DEF@[13; 50)
+ UNION_KW@[13; 18) "union"
+ WHITESPACE@[18; 19) " "
+ NAME@[19; 22)
+ IDENT@[19; 22) "Foo"
+ WHITESPACE@[22; 23) " "
+ NAMED_FIELD_DEF_LIST@[23; 50)
+ L_CURLY@[23; 24) "{"
+ WHITESPACE@[24; 29) "\n "
+ NAMED_FIELD_DEF@[29; 35)
+ NAME@[29; 30)
+ IDENT@[29; 30) "a"
+ COLON@[30; 31) ":"
+ WHITESPACE@[31; 32) " "
+ PATH_TYPE@[32; 35)
+ PATH@[32; 35)
+ PATH_SEGMENT@[32; 35)
+ NAME_REF@[32; 35)
+ IDENT@[32; 35) "i32"
+ COMMA@[35; 36) ","
+ WHITESPACE@[36; 41) "\n "
+ NAMED_FIELD_DEF@[41; 47)
+ NAME@[41; 42)
+ IDENT@[41; 42) "b"
+ COLON@[42; 43) ":"
+ WHITESPACE@[43; 44) " "
+ PATH_TYPE@[44; 47)
+ PATH@[44; 47)
+ PATH_SEGMENT@[44; 47)
+ NAME_REF@[44; 47)
+ IDENT@[44; 47) "f32"
+ COMMA@[47; 48) ","
+ WHITESPACE@[48; 49) "\n"
+ R_CURLY@[49; 50) "}"
+ WHITESPACE@[50; 51) "\n"
--- /dev/null
+use crate::{Item};
+use self::{Item};
--- /dev/null
+SOURCE_FILE@[0; 37)
+ USE_ITEM@[0; 18)
+ USE_KW@[0; 3) "use"
+ WHITESPACE@[3; 4) " "
+ USE_TREE@[4; 17)
+ PATH@[4; 9)
+ PATH_SEGMENT@[4; 9)
+ CRATE_KW@[4; 9) "crate"
+ COLONCOLON@[9; 11) "::"
+ USE_TREE_LIST@[11; 17)
+ L_CURLY@[11; 12) "{"
+ USE_TREE@[12; 16)
+ PATH@[12; 16)
+ PATH_SEGMENT@[12; 16)
+ NAME_REF@[12; 16)
+ IDENT@[12; 16) "Item"
+ R_CURLY@[16; 17) "}"
+ SEMI@[17; 18) ";"
+ WHITESPACE@[18; 19) "\n"
+ USE_ITEM@[19; 36)
+ USE_KW@[19; 22) "use"
+ WHITESPACE@[22; 23) " "
+ USE_TREE@[23; 35)
+ PATH@[23; 27)
+ PATH_SEGMENT@[23; 27)
+ SELF_KW@[23; 27) "self"
+ COLONCOLON@[27; 29) "::"
+ USE_TREE_LIST@[29; 35)
+ L_CURLY@[29; 30) "{"
+ USE_TREE@[30; 34)
+ PATH@[30; 34)
+ PATH_SEGMENT@[30; 34)
+ NAME_REF@[30; 34)
+ IDENT@[30; 34) "Item"
+ R_CURLY@[34; 35) "}"
+ SEMI@[35; 36) ";"
+ WHITESPACE@[36; 37) "\n"
--- /dev/null
+fn foo() {
+ let _ = {1} & 2;
+ {1} &2;
+}
--- /dev/null
+SOURCE_FILE@[0; 46)
+ FN_DEF@[0; 45)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 45)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ LET_STMT@[15; 31)
+ LET_KW@[15; 18) "let"
+ WHITESPACE@[18; 19) " "
+ PLACEHOLDER_PAT@[19; 20)
+ UNDERSCORE@[19; 20) "_"
+ WHITESPACE@[20; 21) " "
+ EQ@[21; 22) "="
+ WHITESPACE@[22; 23) " "
+ BIN_EXPR@[23; 30)
+ BLOCK_EXPR@[23; 26)
+ BLOCK@[23; 26)
+ L_CURLY@[23; 24) "{"
+ LITERAL@[24; 25)
+ INT_NUMBER@[24; 25) "1"
+ R_CURLY@[25; 26) "}"
+ WHITESPACE@[26; 27) " "
+ AMP@[27; 28) "&"
+ WHITESPACE@[28; 29) " "
+ LITERAL@[29; 30)
+ INT_NUMBER@[29; 30) "2"
+ SEMI@[30; 31) ";"
+ WHITESPACE@[31; 36) "\n "
+ EXPR_STMT@[36; 39)
+ BLOCK_EXPR@[36; 39)
+ BLOCK@[36; 39)
+ L_CURLY@[36; 37) "{"
+ LITERAL@[37; 38)
+ INT_NUMBER@[37; 38) "1"
+ R_CURLY@[38; 39) "}"
+ WHITESPACE@[39; 40) " "
+ EXPR_STMT@[40; 43)
+ REF_EXPR@[40; 42)
+ AMP@[40; 41) "&"
+ LITERAL@[41; 42)
+ INT_NUMBER@[41; 42) "2"
+ SEMI@[42; 43) ";"
+ WHITESPACE@[43; 44) "\n"
+ R_CURLY@[44; 45) "}"
+ WHITESPACE@[45; 46) "\n"
--- /dev/null
+fn foo() {
+ match () { };
+ match S {};
+}
--- /dev/null
+SOURCE_FILE@[0; 47)
+ FN_DEF@[0; 46)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 46)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ EXPR_STMT@[15; 28)
+ MATCH_EXPR@[15; 27)
+ MATCH_KW@[15; 20) "match"
+ WHITESPACE@[20; 21) " "
+ TUPLE_EXPR@[21; 23)
+ L_PAREN@[21; 22) "("
+ R_PAREN@[22; 23) ")"
+ WHITESPACE@[23; 24) " "
+ MATCH_ARM_LIST@[24; 27)
+ L_CURLY@[24; 25) "{"
+ WHITESPACE@[25; 26) " "
+ R_CURLY@[26; 27) "}"
+ SEMI@[27; 28) ";"
+ WHITESPACE@[28; 33) "\n "
+ EXPR_STMT@[33; 44)
+ MATCH_EXPR@[33; 43)
+ MATCH_KW@[33; 38) "match"
+ WHITESPACE@[38; 39) " "
+ PATH_EXPR@[39; 40)
+ PATH@[39; 40)
+ PATH_SEGMENT@[39; 40)
+ NAME_REF@[39; 40)
+ IDENT@[39; 40) "S"
+ WHITESPACE@[40; 41) " "
+ MATCH_ARM_LIST@[41; 43)
+ L_CURLY@[41; 42) "{"
+ R_CURLY@[42; 43) "}"
+ SEMI@[43; 44) ";"
+ WHITESPACE@[44; 45) "\n"
+ R_CURLY@[45; 46) "}"
+ WHITESPACE@[46; 47) "\n"
--- /dev/null
+fn foo() {
+ return;
+ return 92;
+}
--- /dev/null
+SOURCE_FILE@[0; 40)
+ FN_DEF@[0; 39)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 39)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ EXPR_STMT@[15; 22)
+ RETURN_EXPR@[15; 21)
+ RETURN_KW@[15; 21) "return"
+ SEMI@[21; 22) ";"
+ WHITESPACE@[22; 27) "\n "
+ EXPR_STMT@[27; 37)
+ RETURN_EXPR@[27; 36)
+ RETURN_KW@[27; 33) "return"
+ WHITESPACE@[33; 34) " "
+ LITERAL@[34; 36)
+ INT_NUMBER@[34; 36) "92"
+ SEMI@[36; 37) ";"
+ WHITESPACE@[37; 38) "\n"
+ R_CURLY@[38; 39) "}"
+ WHITESPACE@[39; 40) "\n"
--- /dev/null
+type Result<T> = ();
--- /dev/null
+SOURCE_FILE@[0; 21)
+ TYPE_ALIAS_DEF@[0; 20)
+ TYPE_KW@[0; 4) "type"
+ WHITESPACE@[4; 5) " "
+ NAME@[5; 11)
+ IDENT@[5; 11) "Result"
+ TYPE_PARAM_LIST@[11; 14)
+ L_ANGLE@[11; 12) "<"
+ TYPE_PARAM@[12; 13)
+ NAME@[12; 13)
+ IDENT@[12; 13) "T"
+ R_ANGLE@[13; 14) ">"
+ WHITESPACE@[14; 15) " "
+ EQ@[15; 16) "="
+ WHITESPACE@[16; 17) " "
+ TUPLE_TYPE@[17; 19)
+ L_PAREN@[17; 18) "("
+ R_PAREN@[18; 19) ")"
+ SEMI@[19; 20) ";"
+ WHITESPACE@[20; 21) "\n"
--- /dev/null
+fn foo() {
+ match () {
+ _ => {}
+ () => {}
+ [] => {}
+ }
+}
--- /dev/null
+SOURCE_FILE@[0; 84)
+ FN_DEF@[0; 83)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 83)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ MATCH_EXPR@[15; 81)
+ MATCH_KW@[15; 20) "match"
+ WHITESPACE@[20; 21) " "
+ TUPLE_EXPR@[21; 23)
+ L_PAREN@[21; 22) "("
+ R_PAREN@[22; 23) ")"
+ WHITESPACE@[23; 24) " "
+ MATCH_ARM_LIST@[24; 81)
+ L_CURLY@[24; 25) "{"
+ WHITESPACE@[25; 34) "\n "
+ MATCH_ARM@[34; 41)
+ PLACEHOLDER_PAT@[34; 35)
+ UNDERSCORE@[34; 35) "_"
+ WHITESPACE@[35; 36) " "
+ FAT_ARROW@[36; 38) "=>"
+ WHITESPACE@[38; 39) " "
+ BLOCK_EXPR@[39; 41)
+ BLOCK@[39; 41)
+ L_CURLY@[39; 40) "{"
+ R_CURLY@[40; 41) "}"
+ WHITESPACE@[41; 50) "\n "
+ MATCH_ARM@[50; 58)
+ TUPLE_PAT@[50; 52)
+ L_PAREN@[50; 51) "("
+ R_PAREN@[51; 52) ")"
+ WHITESPACE@[52; 53) " "
+ FAT_ARROW@[53; 55) "=>"
+ WHITESPACE@[55; 56) " "
+ BLOCK_EXPR@[56; 58)
+ BLOCK@[56; 58)
+ L_CURLY@[56; 57) "{"
+ R_CURLY@[57; 58) "}"
+ WHITESPACE@[58; 67) "\n "
+ MATCH_ARM@[67; 75)
+ SLICE_PAT@[67; 69)
+ L_BRACK@[67; 68) "["
+ R_BRACK@[68; 69) "]"
+ WHITESPACE@[69; 70) " "
+ FAT_ARROW@[70; 72) "=>"
+ WHITESPACE@[72; 73) " "
+ BLOCK_EXPR@[73; 75)
+ BLOCK@[73; 75)
+ L_CURLY@[73; 74) "{"
+ R_CURLY@[74; 75) "}"
+ WHITESPACE@[75; 80) "\n "
+ R_CURLY@[80; 81) "}"
+ WHITESPACE@[81; 82) "\n"
+ R_CURLY@[82; 83) "}"
+ WHITESPACE@[83; 84) "\n"
--- /dev/null
+fn a() {}
+fn b() { let _ = 1; }
+fn c() { 1; 2; }
+fn d() { 1; 2 }
--- /dev/null
+SOURCE_FILE@[0; 65)
+ FN_DEF@[0; 9)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 4)
+ IDENT@[3; 4) "a"
+ PARAM_LIST@[4; 6)
+ L_PAREN@[4; 5) "("
+ R_PAREN@[5; 6) ")"
+ WHITESPACE@[6; 7) " "
+ BLOCK@[7; 9)
+ L_CURLY@[7; 8) "{"
+ R_CURLY@[8; 9) "}"
+ WHITESPACE@[9; 10) "\n"
+ FN_DEF@[10; 31)
+ FN_KW@[10; 12) "fn"
+ WHITESPACE@[12; 13) " "
+ NAME@[13; 14)
+ IDENT@[13; 14) "b"
+ PARAM_LIST@[14; 16)
+ L_PAREN@[14; 15) "("
+ R_PAREN@[15; 16) ")"
+ WHITESPACE@[16; 17) " "
+ BLOCK@[17; 31)
+ L_CURLY@[17; 18) "{"
+ WHITESPACE@[18; 19) " "
+ LET_STMT@[19; 29)
+ LET_KW@[19; 22) "let"
+ WHITESPACE@[22; 23) " "
+ PLACEHOLDER_PAT@[23; 24)
+ UNDERSCORE@[23; 24) "_"
+ WHITESPACE@[24; 25) " "
+ EQ@[25; 26) "="
+ WHITESPACE@[26; 27) " "
+ LITERAL@[27; 28)
+ INT_NUMBER@[27; 28) "1"
+ SEMI@[28; 29) ";"
+ WHITESPACE@[29; 30) " "
+ R_CURLY@[30; 31) "}"
+ WHITESPACE@[31; 32) "\n"
+ FN_DEF@[32; 48)
+ FN_KW@[32; 34) "fn"
+ WHITESPACE@[34; 35) " "
+ NAME@[35; 36)
+ IDENT@[35; 36) "c"
+ PARAM_LIST@[36; 38)
+ L_PAREN@[36; 37) "("
+ R_PAREN@[37; 38) ")"
+ WHITESPACE@[38; 39) " "
+ BLOCK@[39; 48)
+ L_CURLY@[39; 40) "{"
+ WHITESPACE@[40; 41) " "
+ EXPR_STMT@[41; 43)
+ LITERAL@[41; 42)
+ INT_NUMBER@[41; 42) "1"
+ SEMI@[42; 43) ";"
+ WHITESPACE@[43; 44) " "
+ EXPR_STMT@[44; 46)
+ LITERAL@[44; 45)
+ INT_NUMBER@[44; 45) "2"
+ SEMI@[45; 46) ";"
+ WHITESPACE@[46; 47) " "
+ R_CURLY@[47; 48) "}"
+ WHITESPACE@[48; 49) "\n"
+ FN_DEF@[49; 64)
+ FN_KW@[49; 51) "fn"
+ WHITESPACE@[51; 52) " "
+ NAME@[52; 53)
+ IDENT@[52; 53) "d"
+ PARAM_LIST@[53; 55)
+ L_PAREN@[53; 54) "("
+ R_PAREN@[54; 55) ")"
+ WHITESPACE@[55; 56) " "
+ BLOCK@[56; 64)
+ L_CURLY@[56; 57) "{"
+ WHITESPACE@[57; 58) " "
+ EXPR_STMT@[58; 60)
+ LITERAL@[58; 59)
+ INT_NUMBER@[58; 59) "1"
+ SEMI@[59; 60) ";"
+ WHITESPACE@[60; 61) " "
+ LITERAL@[61; 62)
+ INT_NUMBER@[61; 62) "2"
+ WHITESPACE@[62; 63) " "
+ R_CURLY@[63; 64) "}"
+ WHITESPACE@[64; 65) "\n"
--- /dev/null
+fn foo<T>() where T: Copy {}
--- /dev/null
+SOURCE_FILE@[0; 29)
+ FN_DEF@[0; 28)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ TYPE_PARAM_LIST@[6; 9)
+ L_ANGLE@[6; 7) "<"
+ TYPE_PARAM@[7; 8)
+ NAME@[7; 8)
+ IDENT@[7; 8) "T"
+ R_ANGLE@[8; 9) ">"
+ PARAM_LIST@[9; 11)
+ L_PAREN@[9; 10) "("
+ R_PAREN@[10; 11) ")"
+ WHITESPACE@[11; 12) " "
+ WHERE_CLAUSE@[12; 25)
+ WHERE_KW@[12; 17) "where"
+ WHITESPACE@[17; 18) " "
+ WHERE_PRED@[18; 25)
+ PATH_TYPE@[18; 19)
+ PATH@[18; 19)
+ PATH_SEGMENT@[18; 19)
+ NAME_REF@[18; 19)
+ IDENT@[18; 19) "T"
+ COLON@[19; 20) ":"
+ WHITESPACE@[20; 21) " "
+ TYPE_BOUND_LIST@[21; 25)
+ TYPE_BOUND@[21; 25)
+ PATH_TYPE@[21; 25)
+ PATH@[21; 25)
+ PATH_SEGMENT@[21; 25)
+ NAME_REF@[21; 25)
+ IDENT@[21; 25) "Copy"
+ WHITESPACE@[25; 26) " "
+ BLOCK@[26; 28)
+ L_CURLY@[26; 27) "{"
+ R_CURLY@[27; 28) "}"
+ WHITESPACE@[28; 29) "\n"
--- /dev/null
+fn foo() {
+ x?;
+}
--- /dev/null
+SOURCE_FILE@[0; 21)
+ FN_DEF@[0; 20)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 20)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ EXPR_STMT@[15; 18)
+ TRY_EXPR@[15; 17)
+ PATH_EXPR@[15; 16)
+ PATH@[15; 16)
+ PATH_SEGMENT@[15; 16)
+ NAME_REF@[15; 16)
+ IDENT@[15; 16) "x"
+ QUESTION@[16; 17) "?"
+ SEMI@[17; 18) ";"
+ WHITESPACE@[18; 19) "\n"
+ R_CURLY@[19; 20) "}"
+ WHITESPACE@[20; 21) "\n"
--- /dev/null
+type Foo = Bar;
--- /dev/null
+SOURCE_FILE@[0; 16)
+ TYPE_ALIAS_DEF@[0; 15)
+ TYPE_KW@[0; 4) "type"
+ WHITESPACE@[4; 5) " "
+ NAME@[5; 8)
+ IDENT@[5; 8) "Foo"
+ WHITESPACE@[8; 9) " "
+ EQ@[9; 10) "="
+ WHITESPACE@[10; 11) " "
+ PATH_TYPE@[11; 14)
+ PATH@[11; 14)
+ PATH_SEGMENT@[11; 14)
+ NAME_REF@[11; 14)
+ IDENT@[11; 14) "Bar"
+ SEMI@[14; 15) ";"
+ WHITESPACE@[15; 16) "\n"
--- /dev/null
+impl Foo {}
--- /dev/null
+SOURCE_FILE@[0; 12)
+ IMPL_BLOCK@[0; 11)
+ IMPL_KW@[0; 4) "impl"
+ WHITESPACE@[4; 5) " "
+ PATH_TYPE@[5; 8)
+ PATH@[5; 8)
+ PATH_SEGMENT@[5; 8)
+ NAME_REF@[5; 8)
+ IDENT@[5; 8) "Foo"
+ WHITESPACE@[8; 9) " "
+ ITEM_LIST@[9; 11)
+ L_CURLY@[9; 10) "{"
+ R_CURLY@[10; 11) "}"
+ WHITESPACE@[11; 12) "\n"
--- /dev/null
+fn foo() { let x = 1..; }
--- /dev/null
+SOURCE_FILE@[0; 26)
+ FN_DEF@[0; 25)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 25)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 11) " "
+ LET_STMT@[11; 23)
+ LET_KW@[11; 14) "let"
+ WHITESPACE@[14; 15) " "
+ BIND_PAT@[15; 16)
+ NAME@[15; 16)
+ IDENT@[15; 16) "x"
+ WHITESPACE@[16; 17) " "
+ EQ@[17; 18) "="
+ WHITESPACE@[18; 19) " "
+ RANGE_EXPR@[19; 22)
+ LITERAL@[19; 20)
+ INT_NUMBER@[19; 20) "1"
+ DOTDOT@[20; 22) ".."
+ SEMI@[22; 23) ";"
+ WHITESPACE@[23; 24) " "
+ R_CURLY@[24; 25) "}"
+ WHITESPACE@[25; 26) "\n"
--- /dev/null
+type A = for<'a> fn() -> ();
+fn foo<T>(_t: &T) where for<'a> &'a T: Iterator {}
+fn bar<T>(_t: &T) where for<'a> &'a mut T: Iterator {}
--- /dev/null
+SOURCE_FILE@[0; 135)
+ TYPE_ALIAS_DEF@[0; 28)
+ TYPE_KW@[0; 4) "type"
+ WHITESPACE@[4; 5) " "
+ NAME@[5; 6)
+ IDENT@[5; 6) "A"
+ WHITESPACE@[6; 7) " "
+ EQ@[7; 8) "="
+ WHITESPACE@[8; 9) " "
+ FOR_TYPE@[9; 27)
+ FOR_KW@[9; 12) "for"
+ TYPE_PARAM_LIST@[12; 16)
+ L_ANGLE@[12; 13) "<"
+ LIFETIME_PARAM@[13; 15)
+ LIFETIME@[13; 15) "\'a"
+ R_ANGLE@[15; 16) ">"
+ WHITESPACE@[16; 17) " "
+ FN_POINTER_TYPE@[17; 27)
+ FN_KW@[17; 19) "fn"
+ PARAM_LIST@[19; 21)
+ L_PAREN@[19; 20) "("
+ R_PAREN@[20; 21) ")"
+ WHITESPACE@[21; 22) " "
+ RET_TYPE@[22; 27)
+ THIN_ARROW@[22; 24) "->"
+ WHITESPACE@[24; 25) " "
+ TUPLE_TYPE@[25; 27)
+ L_PAREN@[25; 26) "("
+ R_PAREN@[26; 27) ")"
+ SEMI@[27; 28) ";"
+ WHITESPACE@[28; 29) "\n"
+ FN_DEF@[29; 79)
+ FN_KW@[29; 31) "fn"
+ WHITESPACE@[31; 32) " "
+ NAME@[32; 35)
+ IDENT@[32; 35) "foo"
+ TYPE_PARAM_LIST@[35; 38)
+ L_ANGLE@[35; 36) "<"
+ TYPE_PARAM@[36; 37)
+ NAME@[36; 37)
+ IDENT@[36; 37) "T"
+ R_ANGLE@[37; 38) ">"
+ PARAM_LIST@[38; 46)
+ L_PAREN@[38; 39) "("
+ PARAM@[39; 45)
+ BIND_PAT@[39; 41)
+ NAME@[39; 41)
+ IDENT@[39; 41) "_t"
+ COLON@[41; 42) ":"
+ WHITESPACE@[42; 43) " "
+ REFERENCE_TYPE@[43; 45)
+ AMP@[43; 44) "&"
+ PATH_TYPE@[44; 45)
+ PATH@[44; 45)
+ PATH_SEGMENT@[44; 45)
+ NAME_REF@[44; 45)
+ IDENT@[44; 45) "T"
+ R_PAREN@[45; 46) ")"
+ WHITESPACE@[46; 47) " "
+ WHERE_CLAUSE@[47; 76)
+ WHERE_KW@[47; 52) "where"
+ WHITESPACE@[52; 53) " "
+ WHERE_PRED@[53; 76)
+ FOR_TYPE@[53; 66)
+ FOR_KW@[53; 56) "for"
+ TYPE_PARAM_LIST@[56; 60)
+ L_ANGLE@[56; 57) "<"
+ LIFETIME_PARAM@[57; 59)
+ LIFETIME@[57; 59) "\'a"
+ R_ANGLE@[59; 60) ">"
+ WHITESPACE@[60; 61) " "
+ REFERENCE_TYPE@[61; 66)
+ AMP@[61; 62) "&"
+ LIFETIME@[62; 64) "\'a"
+ WHITESPACE@[64; 65) " "
+ PATH_TYPE@[65; 66)
+ PATH@[65; 66)
+ PATH_SEGMENT@[65; 66)
+ NAME_REF@[65; 66)
+ IDENT@[65; 66) "T"
+ COLON@[66; 67) ":"
+ WHITESPACE@[67; 68) " "
+ TYPE_BOUND_LIST@[68; 76)
+ TYPE_BOUND@[68; 76)
+ PATH_TYPE@[68; 76)
+ PATH@[68; 76)
+ PATH_SEGMENT@[68; 76)
+ NAME_REF@[68; 76)
+ IDENT@[68; 76) "Iterator"
+ WHITESPACE@[76; 77) " "
+ BLOCK@[77; 79)
+ L_CURLY@[77; 78) "{"
+ R_CURLY@[78; 79) "}"
+ WHITESPACE@[79; 80) "\n"
+ FN_DEF@[80; 134)
+ FN_KW@[80; 82) "fn"
+ WHITESPACE@[82; 83) " "
+ NAME@[83; 86)
+ IDENT@[83; 86) "bar"
+ TYPE_PARAM_LIST@[86; 89)
+ L_ANGLE@[86; 87) "<"
+ TYPE_PARAM@[87; 88)
+ NAME@[87; 88)
+ IDENT@[87; 88) "T"
+ R_ANGLE@[88; 89) ">"
+ PARAM_LIST@[89; 97)
+ L_PAREN@[89; 90) "("
+ PARAM@[90; 96)
+ BIND_PAT@[90; 92)
+ NAME@[90; 92)
+ IDENT@[90; 92) "_t"
+ COLON@[92; 93) ":"
+ WHITESPACE@[93; 94) " "
+ REFERENCE_TYPE@[94; 96)
+ AMP@[94; 95) "&"
+ PATH_TYPE@[95; 96)
+ PATH@[95; 96)
+ PATH_SEGMENT@[95; 96)
+ NAME_REF@[95; 96)
+ IDENT@[95; 96) "T"
+ R_PAREN@[96; 97) ")"
+ WHITESPACE@[97; 98) " "
+ WHERE_CLAUSE@[98; 131)
+ WHERE_KW@[98; 103) "where"
+ WHITESPACE@[103; 104) " "
+ WHERE_PRED@[104; 131)
+ FOR_TYPE@[104; 121)
+ FOR_KW@[104; 107) "for"
+ TYPE_PARAM_LIST@[107; 111)
+ L_ANGLE@[107; 108) "<"
+ LIFETIME_PARAM@[108; 110)
+ LIFETIME@[108; 110) "\'a"
+ R_ANGLE@[110; 111) ">"
+ WHITESPACE@[111; 112) " "
+ REFERENCE_TYPE@[112; 121)
+ AMP@[112; 113) "&"
+ LIFETIME@[113; 115) "\'a"
+ WHITESPACE@[115; 116) " "
+ MUT_KW@[116; 119) "mut"
+ WHITESPACE@[119; 120) " "
+ PATH_TYPE@[120; 121)
+ PATH@[120; 121)
+ PATH_SEGMENT@[120; 121)
+ NAME_REF@[120; 121)
+ IDENT@[120; 121) "T"
+ COLON@[121; 122) ":"
+ WHITESPACE@[122; 123) " "
+ TYPE_BOUND_LIST@[123; 131)
+ TYPE_BOUND@[123; 131)
+ PATH_TYPE@[123; 131)
+ PATH@[123; 131)
+ PATH_SEGMENT@[123; 131)
+ NAME_REF@[123; 131)
+ IDENT@[123; 131) "Iterator"
+ WHITESPACE@[131; 132) " "
+ BLOCK@[132; 134)
+ L_CURLY@[132; 133) "{"
+ R_CURLY@[133; 134) "}"
+ WHITESPACE@[134; 135) "\n"
--- /dev/null
+fn foo() {
+ let _ = &1;
+ let _ = &mut &f();
+}
--- /dev/null
+SOURCE_FILE@[0; 52)
+ FN_DEF@[0; 51)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 51)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ LET_STMT@[15; 26)
+ LET_KW@[15; 18) "let"
+ WHITESPACE@[18; 19) " "
+ PLACEHOLDER_PAT@[19; 20)
+ UNDERSCORE@[19; 20) "_"
+ WHITESPACE@[20; 21) " "
+ EQ@[21; 22) "="
+ WHITESPACE@[22; 23) " "
+ REF_EXPR@[23; 25)
+ AMP@[23; 24) "&"
+ LITERAL@[24; 25)
+ INT_NUMBER@[24; 25) "1"
+ SEMI@[25; 26) ";"
+ WHITESPACE@[26; 31) "\n "
+ LET_STMT@[31; 49)
+ LET_KW@[31; 34) "let"
+ WHITESPACE@[34; 35) " "
+ PLACEHOLDER_PAT@[35; 36)
+ UNDERSCORE@[35; 36) "_"
+ WHITESPACE@[36; 37) " "
+ EQ@[37; 38) "="
+ WHITESPACE@[38; 39) " "
+ REF_EXPR@[39; 48)
+ AMP@[39; 40) "&"
+ MUT_KW@[40; 43) "mut"
+ WHITESPACE@[43; 44) " "
+ REF_EXPR@[44; 48)
+ AMP@[44; 45) "&"
+ CALL_EXPR@[45; 48)
+ PATH_EXPR@[45; 46)
+ PATH@[45; 46)
+ PATH_SEGMENT@[45; 46)
+ NAME_REF@[45; 46)
+ IDENT@[45; 46) "f"
+ ARG_LIST@[46; 48)
+ L_PAREN@[46; 47) "("
+ R_PAREN@[47; 48) ")"
+ SEMI@[48; 49) ";"
+ WHITESPACE@[49; 50) "\n"
+ R_CURLY@[50; 51) "}"
+ WHITESPACE@[51; 52) "\n"
--- /dev/null
+struct Foo;
+struct Foo {}
+struct Foo();
+struct Foo(String, usize);
+struct Foo {
+ a: i32,
+ b: f32,
+}
--- /dev/null
+SOURCE_FILE@[0; 106)
+ STRUCT_DEF@[0; 11)
+ STRUCT_KW@[0; 6) "struct"
+ WHITESPACE@[6; 7) " "
+ NAME@[7; 10)
+ IDENT@[7; 10) "Foo"
+ SEMI@[10; 11) ";"
+ WHITESPACE@[11; 12) "\n"
+ STRUCT_DEF@[12; 25)
+ STRUCT_KW@[12; 18) "struct"
+ WHITESPACE@[18; 19) " "
+ NAME@[19; 22)
+ IDENT@[19; 22) "Foo"
+ WHITESPACE@[22; 23) " "
+ NAMED_FIELD_DEF_LIST@[23; 25)
+ L_CURLY@[23; 24) "{"
+ R_CURLY@[24; 25) "}"
+ WHITESPACE@[25; 26) "\n"
+ STRUCT_DEF@[26; 39)
+ STRUCT_KW@[26; 32) "struct"
+ WHITESPACE@[32; 33) " "
+ NAME@[33; 36)
+ IDENT@[33; 36) "Foo"
+ POS_FIELD_DEF_LIST@[36; 38)
+ L_PAREN@[36; 37) "("
+ R_PAREN@[37; 38) ")"
+ SEMI@[38; 39) ";"
+ WHITESPACE@[39; 40) "\n"
+ STRUCT_DEF@[40; 66)
+ STRUCT_KW@[40; 46) "struct"
+ WHITESPACE@[46; 47) " "
+ NAME@[47; 50)
+ IDENT@[47; 50) "Foo"
+ POS_FIELD_DEF_LIST@[50; 65)
+ L_PAREN@[50; 51) "("
+ POS_FIELD_DEF@[51; 57)
+ PATH_TYPE@[51; 57)
+ PATH@[51; 57)
+ PATH_SEGMENT@[51; 57)
+ NAME_REF@[51; 57)
+ IDENT@[51; 57) "String"
+ COMMA@[57; 58) ","
+ WHITESPACE@[58; 59) " "
+ POS_FIELD_DEF@[59; 64)
+ PATH_TYPE@[59; 64)
+ PATH@[59; 64)
+ PATH_SEGMENT@[59; 64)
+ NAME_REF@[59; 64)
+ IDENT@[59; 64) "usize"
+ R_PAREN@[64; 65) ")"
+ SEMI@[65; 66) ";"
+ WHITESPACE@[66; 67) "\n"
+ STRUCT_DEF@[67; 105)
+ STRUCT_KW@[67; 73) "struct"
+ WHITESPACE@[73; 74) " "
+ NAME@[74; 77)
+ IDENT@[74; 77) "Foo"
+ WHITESPACE@[77; 78) " "
+ NAMED_FIELD_DEF_LIST@[78; 105)
+ L_CURLY@[78; 79) "{"
+ WHITESPACE@[79; 84) "\n "
+ NAMED_FIELD_DEF@[84; 90)
+ NAME@[84; 85)
+ IDENT@[84; 85) "a"
+ COLON@[85; 86) ":"
+ WHITESPACE@[86; 87) " "
+ PATH_TYPE@[87; 90)
+ PATH@[87; 90)
+ PATH_SEGMENT@[87; 90)
+ NAME_REF@[87; 90)
+ IDENT@[87; 90) "i32"
+ COMMA@[90; 91) ","
+ WHITESPACE@[91; 96) "\n "
+ NAMED_FIELD_DEF@[96; 102)
+ NAME@[96; 97)
+ IDENT@[96; 97) "b"
+ COLON@[97; 98) ":"
+ WHITESPACE@[98; 99) " "
+ PATH_TYPE@[99; 102)
+ PATH@[99; 102)
+ PATH_SEGMENT@[99; 102)
+ NAME_REF@[99; 102)
+ IDENT@[99; 102) "f32"
+ COMMA@[102; 103) ","
+ WHITESPACE@[103; 104) "\n"
+ R_CURLY@[104; 105) "}"
+ WHITESPACE@[105; 106) "\n"
--- /dev/null
+type T = (i32);
--- /dev/null
+SOURCE_FILE@[0; 16)
+ TYPE_ALIAS_DEF@[0; 15)
+ TYPE_KW@[0; 4) "type"
+ WHITESPACE@[4; 5) " "
+ NAME@[5; 6)
+ IDENT@[5; 6) "T"
+ WHITESPACE@[6; 7) " "
+ EQ@[7; 8) "="
+ WHITESPACE@[8; 9) " "
+ PAREN_TYPE@[9; 14)
+ L_PAREN@[9; 10) "("
+ PATH_TYPE@[10; 13)
+ PATH@[10; 13)
+ PATH_SEGMENT@[10; 13)
+ NAME_REF@[10; 13)
+ IDENT@[10; 13) "i32"
+ R_PAREN@[13; 14) ")"
+ SEMI@[14; 15) ";"
+ WHITESPACE@[15; 16) "\n"
--- /dev/null
+fn foo() {
+ let _ = true;
+ let _ = false;
+ let _ = 1;
+ let _ = 2.0;
+ let _ = b'a';
+ let _ = 'b';
+ let _ = "c";
+ let _ = r"d";
+ let _ = b"e";
+ let _ = br"f";
+}
--- /dev/null
+SOURCE_FILE@[0; 189)
+ FN_DEF@[0; 188)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 188)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ LET_STMT@[15; 28)
+ LET_KW@[15; 18) "let"
+ WHITESPACE@[18; 19) " "
+ PLACEHOLDER_PAT@[19; 20)
+ UNDERSCORE@[19; 20) "_"
+ WHITESPACE@[20; 21) " "
+ EQ@[21; 22) "="
+ WHITESPACE@[22; 23) " "
+ LITERAL@[23; 27)
+ TRUE_KW@[23; 27) "true"
+ SEMI@[27; 28) ";"
+ WHITESPACE@[28; 33) "\n "
+ LET_STMT@[33; 47)
+ LET_KW@[33; 36) "let"
+ WHITESPACE@[36; 37) " "
+ PLACEHOLDER_PAT@[37; 38)
+ UNDERSCORE@[37; 38) "_"
+ WHITESPACE@[38; 39) " "
+ EQ@[39; 40) "="
+ WHITESPACE@[40; 41) " "
+ LITERAL@[41; 46)
+ FALSE_KW@[41; 46) "false"
+ SEMI@[46; 47) ";"
+ WHITESPACE@[47; 52) "\n "
+ LET_STMT@[52; 62)
+ LET_KW@[52; 55) "let"
+ WHITESPACE@[55; 56) " "
+ PLACEHOLDER_PAT@[56; 57)
+ UNDERSCORE@[56; 57) "_"
+ WHITESPACE@[57; 58) " "
+ EQ@[58; 59) "="
+ WHITESPACE@[59; 60) " "
+ LITERAL@[60; 61)
+ INT_NUMBER@[60; 61) "1"
+ SEMI@[61; 62) ";"
+ WHITESPACE@[62; 67) "\n "
+ LET_STMT@[67; 79)
+ LET_KW@[67; 70) "let"
+ WHITESPACE@[70; 71) " "
+ PLACEHOLDER_PAT@[71; 72)
+ UNDERSCORE@[71; 72) "_"
+ WHITESPACE@[72; 73) " "
+ EQ@[73; 74) "="
+ WHITESPACE@[74; 75) " "
+ LITERAL@[75; 78)
+ FLOAT_NUMBER@[75; 78) "2.0"
+ SEMI@[78; 79) ";"
+ WHITESPACE@[79; 84) "\n "
+ LET_STMT@[84; 97)
+ LET_KW@[84; 87) "let"
+ WHITESPACE@[87; 88) " "
+ PLACEHOLDER_PAT@[88; 89)
+ UNDERSCORE@[88; 89) "_"
+ WHITESPACE@[89; 90) " "
+ EQ@[90; 91) "="
+ WHITESPACE@[91; 92) " "
+ LITERAL@[92; 96)
+ BYTE@[92; 96) "b\'a\'"
+ SEMI@[96; 97) ";"
+ WHITESPACE@[97; 102) "\n "
+ LET_STMT@[102; 114)
+ LET_KW@[102; 105) "let"
+ WHITESPACE@[105; 106) " "
+ PLACEHOLDER_PAT@[106; 107)
+ UNDERSCORE@[106; 107) "_"
+ WHITESPACE@[107; 108) " "
+ EQ@[108; 109) "="
+ WHITESPACE@[109; 110) " "
+ LITERAL@[110; 113)
+ CHAR@[110; 113) "\'b\'"
+ SEMI@[113; 114) ";"
+ WHITESPACE@[114; 119) "\n "
+ LET_STMT@[119; 131)
+ LET_KW@[119; 122) "let"
+ WHITESPACE@[122; 123) " "
+ PLACEHOLDER_PAT@[123; 124)
+ UNDERSCORE@[123; 124) "_"
+ WHITESPACE@[124; 125) " "
+ EQ@[125; 126) "="
+ WHITESPACE@[126; 127) " "
+ LITERAL@[127; 130)
+ STRING@[127; 130) "\"c\""
+ SEMI@[130; 131) ";"
+ WHITESPACE@[131; 136) "\n "
+ LET_STMT@[136; 149)
+ LET_KW@[136; 139) "let"
+ WHITESPACE@[139; 140) " "
+ PLACEHOLDER_PAT@[140; 141)
+ UNDERSCORE@[140; 141) "_"
+ WHITESPACE@[141; 142) " "
+ EQ@[142; 143) "="
+ WHITESPACE@[143; 144) " "
+ LITERAL@[144; 148)
+ RAW_STRING@[144; 148) "r\"d\""
+ SEMI@[148; 149) ";"
+ WHITESPACE@[149; 154) "\n "
+ LET_STMT@[154; 167)
+ LET_KW@[154; 157) "let"
+ WHITESPACE@[157; 158) " "
+ PLACEHOLDER_PAT@[158; 159)
+ UNDERSCORE@[158; 159) "_"
+ WHITESPACE@[159; 160) " "
+ EQ@[160; 161) "="
+ WHITESPACE@[161; 162) " "
+ LITERAL@[162; 166)
+ BYTE_STRING@[162; 166) "b\"e\""
+ SEMI@[166; 167) ";"
+ WHITESPACE@[167; 172) "\n "
+ LET_STMT@[172; 186)
+ LET_KW@[172; 175) "let"
+ WHITESPACE@[175; 176) " "
+ PLACEHOLDER_PAT@[176; 177)
+ UNDERSCORE@[176; 177) "_"
+ WHITESPACE@[177; 178) " "
+ EQ@[178; 179) "="
+ WHITESPACE@[179; 180) " "
+ LITERAL@[180; 185)
+ RAW_BYTE_STRING@[180; 185) "br\"f\""
+ SEMI@[185; 186) ";"
+ WHITESPACE@[186; 187) "\n"
+ R_CURLY@[187; 188) "}"
+ WHITESPACE@[188; 189) "\n"
--- /dev/null
+fn foo() {}
+fn bar() -> () {}
--- /dev/null
+SOURCE_FILE@[0; 30)
+ FN_DEF@[0; 11)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 11)
+ L_CURLY@[9; 10) "{"
+ R_CURLY@[10; 11) "}"
+ WHITESPACE@[11; 12) "\n"
+ FN_DEF@[12; 29)
+ FN_KW@[12; 14) "fn"
+ WHITESPACE@[14; 15) " "
+ NAME@[15; 18)
+ IDENT@[15; 18) "bar"
+ PARAM_LIST@[18; 20)
+ L_PAREN@[18; 19) "("
+ R_PAREN@[19; 20) ")"
+ WHITESPACE@[20; 21) " "
+ RET_TYPE@[21; 26)
+ THIN_ARROW@[21; 23) "->"
+ WHITESPACE@[23; 24) " "
+ TUPLE_TYPE@[24; 26)
+ L_PAREN@[24; 25) "("
+ R_PAREN@[25; 26) ")"
+ WHITESPACE@[26; 27) " "
+ BLOCK@[27; 29)
+ L_CURLY@[27; 28) "{"
+ R_CURLY@[28; 29) "}"
+ WHITESPACE@[29; 30) "\n"
--- /dev/null
+unsafe impl Foo {}
--- /dev/null
+SOURCE_FILE@[0; 19)
+ IMPL_BLOCK@[0; 18)
+ UNSAFE_KW@[0; 6) "unsafe"
+ WHITESPACE@[6; 7) " "
+ IMPL_KW@[7; 11) "impl"
+ WHITESPACE@[11; 12) " "
+ PATH_TYPE@[12; 15)
+ PATH@[12; 15)
+ PATH_SEGMENT@[12; 15)
+ NAME_REF@[12; 15)
+ IDENT@[12; 15) "Foo"
+ WHITESPACE@[15; 16) " "
+ ITEM_LIST@[16; 18)
+ L_CURLY@[16; 17) "{"
+ R_CURLY@[17; 18) "}"
+ WHITESPACE@[18; 19) "\n"
--- /dev/null
+fn foo(){
+ if break {}
+ while break {}
+ for i in break {}
+ match break {}
+}
--- /dev/null
+SOURCE_FILE@[0; 88)
+ FN_DEF@[0; 87)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ BLOCK@[8; 87)
+ L_CURLY@[8; 9) "{"
+ WHITESPACE@[9; 14) "\n "
+ EXPR_STMT@[14; 25)
+ IF_EXPR@[14; 25)
+ IF_KW@[14; 16) "if"
+ WHITESPACE@[16; 17) " "
+ CONDITION@[17; 22)
+ BREAK_EXPR@[17; 22)
+ BREAK_KW@[17; 22) "break"
+ WHITESPACE@[22; 23) " "
+ BLOCK@[23; 25)
+ L_CURLY@[23; 24) "{"
+ R_CURLY@[24; 25) "}"
+ WHITESPACE@[25; 30) "\n "
+ EXPR_STMT@[30; 44)
+ WHILE_EXPR@[30; 44)
+ WHILE_KW@[30; 35) "while"
+ WHITESPACE@[35; 36) " "
+ CONDITION@[36; 41)
+ BREAK_EXPR@[36; 41)
+ BREAK_KW@[36; 41) "break"
+ WHITESPACE@[41; 42) " "
+ BLOCK@[42; 44)
+ L_CURLY@[42; 43) "{"
+ R_CURLY@[43; 44) "}"
+ WHITESPACE@[44; 49) "\n "
+ EXPR_STMT@[49; 66)
+ FOR_EXPR@[49; 66)
+ FOR_KW@[49; 52) "for"
+ WHITESPACE@[52; 53) " "
+ BIND_PAT@[53; 54)
+ NAME@[53; 54)
+ IDENT@[53; 54) "i"
+ WHITESPACE@[54; 55) " "
+ IN_KW@[55; 57) "in"
+ WHITESPACE@[57; 58) " "
+ BREAK_EXPR@[58; 63)
+ BREAK_KW@[58; 63) "break"
+ WHITESPACE@[63; 64) " "
+ BLOCK@[64; 66)
+ L_CURLY@[64; 65) "{"
+ R_CURLY@[65; 66) "}"
+ WHITESPACE@[66; 71) "\n "
+ MATCH_EXPR@[71; 85)
+ MATCH_KW@[71; 76) "match"
+ WHITESPACE@[76; 77) " "
+ BREAK_EXPR@[77; 82)
+ BREAK_KW@[77; 82) "break"
+ WHITESPACE@[82; 83) " "
+ MATCH_ARM_LIST@[83; 85)
+ L_CURLY@[83; 84) "{"
+ R_CURLY@[84; 85) "}"
+ WHITESPACE@[85; 86) "\n"
+ R_CURLY@[86; 87) "}"
+ WHITESPACE@[87; 88) "\n"
--- /dev/null
+extern fn foo() {}
--- /dev/null
+SOURCE_FILE@[0; 19)
+ FN_DEF@[0; 18)
+ ABI@[0; 6)
+ EXTERN_KW@[0; 6) "extern"
+ WHITESPACE@[6; 7) " "
+ FN_KW@[7; 9) "fn"
+ WHITESPACE@[9; 10) " "
+ NAME@[10; 13)
+ IDENT@[10; 13) "foo"
+ PARAM_LIST@[13; 15)
+ L_PAREN@[13; 14) "("
+ R_PAREN@[14; 15) ")"
+ WHITESPACE@[15; 16) " "
+ BLOCK@[16; 18)
+ L_CURLY@[16; 17) "{"
+ R_CURLY@[17; 18) "}"
+ WHITESPACE@[18; 19) "\n"
--- /dev/null
+struct S<T = i32>;
--- /dev/null
+SOURCE_FILE@[0; 19)
+ STRUCT_DEF@[0; 18)
+ STRUCT_KW@[0; 6) "struct"
+ WHITESPACE@[6; 7) " "
+ NAME@[7; 8)
+ IDENT@[7; 8) "S"
+ TYPE_PARAM_LIST@[8; 17)
+ L_ANGLE@[8; 9) "<"
+ TYPE_PARAM@[9; 16)
+ NAME@[9; 10)
+ IDENT@[9; 10) "T"
+ WHITESPACE@[10; 11) " "
+ EQ@[11; 12) "="
+ WHITESPACE@[12; 13) " "
+ PATH_TYPE@[13; 16)
+ PATH@[13; 16)
+ PATH_SEGMENT@[13; 16)
+ NAME_REF@[13; 16)
+ IDENT@[13; 16) "i32"
+ R_ANGLE@[16; 17) ">"
+ SEMI@[17; 18) ";"
+ WHITESPACE@[18; 19) "\n"
--- /dev/null
+auto trait T {}
--- /dev/null
+SOURCE_FILE@[0; 16)
+ TRAIT_DEF@[0; 15)
+ AUTO_KW@[0; 4) "auto"
+ WHITESPACE@[4; 5) " "
+ TRAIT_KW@[5; 10) "trait"
+ WHITESPACE@[10; 11) " "
+ NAME@[11; 12)
+ IDENT@[11; 12) "T"
+ WHITESPACE@[12; 13) " "
+ ITEM_LIST@[13; 15)
+ L_CURLY@[13; 14) "{"
+ R_CURLY@[14; 15) "}"
+ WHITESPACE@[15; 16) "\n"
--- /dev/null
+type F = fn() -> ();
--- /dev/null
+SOURCE_FILE@[0; 21)
+ TYPE_ALIAS_DEF@[0; 20)
+ TYPE_KW@[0; 4) "type"
+ WHITESPACE@[4; 5) " "
+ NAME@[5; 6)
+ IDENT@[5; 6) "F"
+ WHITESPACE@[6; 7) " "
+ EQ@[7; 8) "="
+ WHITESPACE@[8; 9) " "
+ FN_POINTER_TYPE@[9; 19)
+ FN_KW@[9; 11) "fn"
+ PARAM_LIST@[11; 13)
+ L_PAREN@[11; 12) "("
+ R_PAREN@[12; 13) ")"
+ WHITESPACE@[13; 14) " "
+ RET_TYPE@[14; 19)
+ THIN_ARROW@[14; 16) "->"
+ WHITESPACE@[16; 17) " "
+ TUPLE_TYPE@[17; 19)
+ L_PAREN@[17; 18) "("
+ R_PAREN@[18; 19) ")"
+ SEMI@[19; 20) ";"
+ WHITESPACE@[20; 21) "\n"
--- /dev/null
+fn foo() {
+ x[1][2];
+}
--- /dev/null
+SOURCE_FILE@[0; 26)
+ FN_DEF@[0; 25)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 25)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ EXPR_STMT@[15; 23)
+ INDEX_EXPR@[15; 22)
+ INDEX_EXPR@[15; 19)
+ PATH_EXPR@[15; 16)
+ PATH@[15; 16)
+ PATH_SEGMENT@[15; 16)
+ NAME_REF@[15; 16)
+ IDENT@[15; 16) "x"
+ L_BRACK@[16; 17) "["
+ LITERAL@[17; 18)
+ INT_NUMBER@[17; 18) "1"
+ R_BRACK@[18; 19) "]"
+ L_BRACK@[19; 20) "["
+ LITERAL@[20; 21)
+ INT_NUMBER@[20; 21) "2"
+ R_BRACK@[21; 22) "]"
+ SEMI@[22; 23) ";"
+ WHITESPACE@[23; 24) "\n"
+ R_CURLY@[24; 25) "}"
+ WHITESPACE@[25; 26) "\n"
--- /dev/null
+unsafe auto trait T {}
--- /dev/null
+SOURCE_FILE@[0; 23)
+ TRAIT_DEF@[0; 22)
+ UNSAFE_KW@[0; 6) "unsafe"
+ WHITESPACE@[6; 7) " "
+ AUTO_KW@[7; 11) "auto"
+ WHITESPACE@[11; 12) " "
+ TRAIT_KW@[12; 17) "trait"
+ WHITESPACE@[17; 18) " "
+ NAME@[18; 19)
+ IDENT@[18; 19) "T"
+ WHITESPACE@[19; 20) " "
+ ITEM_LIST@[20; 22)
+ L_CURLY@[20; 21) "{"
+ R_CURLY@[21; 22) "}"
+ WHITESPACE@[22; 23) "\n"
--- /dev/null
+fn main() { let _ = (); }
--- /dev/null
+SOURCE_FILE@[0; 26)
+ FN_DEF@[0; 25)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 7)
+ IDENT@[3; 7) "main"
+ PARAM_LIST@[7; 9)
+ L_PAREN@[7; 8) "("
+ R_PAREN@[8; 9) ")"
+ WHITESPACE@[9; 10) " "
+ BLOCK@[10; 25)
+ L_CURLY@[10; 11) "{"
+ WHITESPACE@[11; 12) " "
+ LET_STMT@[12; 23)
+ LET_KW@[12; 15) "let"
+ WHITESPACE@[15; 16) " "
+ PLACEHOLDER_PAT@[16; 17)
+ UNDERSCORE@[16; 17) "_"
+ WHITESPACE@[17; 18) " "
+ EQ@[18; 19) "="
+ WHITESPACE@[19; 20) " "
+ TUPLE_EXPR@[20; 22)
+ L_PAREN@[20; 21) "("
+ R_PAREN@[21; 22) ")"
+ SEMI@[22; 23) ";"
+ WHITESPACE@[23; 24) " "
+ R_CURLY@[24; 25) "}"
+ WHITESPACE@[25; 26) "\n"
--- /dev/null
+fn foo() {
+ if true {}
+ loop {}
+ match () {}
+ while true {}
+ for _ in () {}
+ {}
+ {}
+ macro_rules! test {
+ () => {}
+ }
+ test!{}
+}
--- /dev/null
+SOURCE_FILE@[0; 167)
+ FN_DEF@[0; 166)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 166)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ EXPR_STMT@[15; 25)
+ IF_EXPR@[15; 25)
+ IF_KW@[15; 17) "if"
+ WHITESPACE@[17; 18) " "
+ CONDITION@[18; 22)
+ LITERAL@[18; 22)
+ TRUE_KW@[18; 22) "true"
+ WHITESPACE@[22; 23) " "
+ BLOCK@[23; 25)
+ L_CURLY@[23; 24) "{"
+ R_CURLY@[24; 25) "}"
+ WHITESPACE@[25; 30) "\n "
+ EXPR_STMT@[30; 37)
+ LOOP_EXPR@[30; 37)
+ LOOP_KW@[30; 34) "loop"
+ WHITESPACE@[34; 35) " "
+ BLOCK@[35; 37)
+ L_CURLY@[35; 36) "{"
+ R_CURLY@[36; 37) "}"
+ WHITESPACE@[37; 42) "\n "
+ EXPR_STMT@[42; 53)
+ MATCH_EXPR@[42; 53)
+ MATCH_KW@[42; 47) "match"
+ WHITESPACE@[47; 48) " "
+ TUPLE_EXPR@[48; 50)
+ L_PAREN@[48; 49) "("
+ R_PAREN@[49; 50) ")"
+ WHITESPACE@[50; 51) " "
+ MATCH_ARM_LIST@[51; 53)
+ L_CURLY@[51; 52) "{"
+ R_CURLY@[52; 53) "}"
+ WHITESPACE@[53; 58) "\n "
+ EXPR_STMT@[58; 71)
+ WHILE_EXPR@[58; 71)
+ WHILE_KW@[58; 63) "while"
+ WHITESPACE@[63; 64) " "
+ CONDITION@[64; 68)
+ LITERAL@[64; 68)
+ TRUE_KW@[64; 68) "true"
+ WHITESPACE@[68; 69) " "
+ BLOCK@[69; 71)
+ L_CURLY@[69; 70) "{"
+ R_CURLY@[70; 71) "}"
+ WHITESPACE@[71; 76) "\n "
+ EXPR_STMT@[76; 90)
+ FOR_EXPR@[76; 90)
+ FOR_KW@[76; 79) "for"
+ WHITESPACE@[79; 80) " "
+ PLACEHOLDER_PAT@[80; 81)
+ UNDERSCORE@[80; 81) "_"
+ WHITESPACE@[81; 82) " "
+ IN_KW@[82; 84) "in"
+ WHITESPACE@[84; 85) " "
+ TUPLE_EXPR@[85; 87)
+ L_PAREN@[85; 86) "("
+ R_PAREN@[86; 87) ")"
+ WHITESPACE@[87; 88) " "
+ BLOCK@[88; 90)
+ L_CURLY@[88; 89) "{"
+ R_CURLY@[89; 90) "}"
+ WHITESPACE@[90; 95) "\n "
+ EXPR_STMT@[95; 97)
+ BLOCK_EXPR@[95; 97)
+ BLOCK@[95; 97)
+ L_CURLY@[95; 96) "{"
+ R_CURLY@[96; 97) "}"
+ WHITESPACE@[97; 102) "\n "
+ EXPR_STMT@[102; 104)
+ BLOCK_EXPR@[102; 104)
+ BLOCK@[102; 104)
+ L_CURLY@[102; 103) "{"
+ R_CURLY@[103; 104) "}"
+ WHITESPACE@[104; 109) "\n "
+ EXPR_STMT@[109; 152)
+ MACRO_CALL@[109; 152)
+ PATH@[109; 120)
+ PATH_SEGMENT@[109; 120)
+ NAME_REF@[109; 120)
+ IDENT@[109; 120) "macro_rules"
+ EXCL@[120; 121) "!"
+ WHITESPACE@[121; 122) " "
+ NAME@[122; 126)
+ IDENT@[122; 126) "test"
+ WHITESPACE@[126; 127) " "
+ TOKEN_TREE@[127; 152)
+ L_CURLY@[127; 128) "{"
+ WHITESPACE@[128; 138) "\n "
+ TOKEN_TREE@[138; 140)
+ L_PAREN@[138; 139) "("
+ R_PAREN@[139; 140) ")"
+ WHITESPACE@[140; 141) " "
+ EQ@[141; 142) "="
+ R_ANGLE@[142; 143) ">"
+ WHITESPACE@[143; 144) " "
+ TOKEN_TREE@[144; 146)
+ L_CURLY@[144; 145) "{"
+ R_CURLY@[145; 146) "}"
+ WHITESPACE@[146; 151) "\n "
+ R_CURLY@[151; 152) "}"
+ WHITESPACE@[152; 157) "\n "
+ MACRO_CALL@[157; 164)
+ PATH@[157; 161)
+ PATH_SEGMENT@[157; 161)
+ NAME_REF@[157; 161)
+ IDENT@[157; 161) "test"
+ EXCL@[161; 162) "!"
+ TOKEN_TREE@[162; 164)
+ L_CURLY@[162; 163) "{"
+ R_CURLY@[163; 164) "}"
+ WHITESPACE@[164; 165) "\n"
+ R_CURLY@[165; 166) "}"
+ WHITESPACE@[166; 167) "\n"
--- /dev/null
+default impl Foo {}
--- /dev/null
+SOURCE_FILE@[0; 20)
+ IMPL_BLOCK@[0; 19)
+ DEFAULT_KW@[0; 7) "default"
+ WHITESPACE@[7; 8) " "
+ IMPL_KW@[8; 12) "impl"
+ WHITESPACE@[12; 13) " "
+ PATH_TYPE@[13; 16)
+ PATH@[13; 16)
+ PATH_SEGMENT@[13; 16)
+ NAME_REF@[13; 16)
+ IDENT@[13; 16) "Foo"
+ WHITESPACE@[16; 17) " "
+ ITEM_LIST@[17; 19)
+ L_CURLY@[17; 18) "{"
+ R_CURLY@[18; 19) "}"
+ WHITESPACE@[19; 20) "\n"
--- /dev/null
+const unsafe fn foo() {}
--- /dev/null
+SOURCE_FILE@[0; 25)
+ FN_DEF@[0; 24)
+ CONST_KW@[0; 5) "const"
+ WHITESPACE@[5; 6) " "
+ UNSAFE_KW@[6; 12) "unsafe"
+ WHITESPACE@[12; 13) " "
+ FN_KW@[13; 15) "fn"
+ WHITESPACE@[15; 16) " "
+ NAME@[16; 19)
+ IDENT@[16; 19) "foo"
+ PARAM_LIST@[19; 21)
+ L_PAREN@[19; 20) "("
+ R_PAREN@[20; 21) ")"
+ WHITESPACE@[21; 22) " "
+ BLOCK@[22; 24)
+ L_CURLY@[22; 23) "{"
+ R_CURLY@[23; 24) "}"
+ WHITESPACE@[24; 25) "\n"
--- /dev/null
+fn a() {}
+fn b(x: i32) {}
+fn c(x: i32, ) {}
+fn d(x: i32, y: ()) {}
--- /dev/null
+SOURCE_FILE@[0; 67)
+ FN_DEF@[0; 9)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 4)
+ IDENT@[3; 4) "a"
+ PARAM_LIST@[4; 6)
+ L_PAREN@[4; 5) "("
+ R_PAREN@[5; 6) ")"
+ WHITESPACE@[6; 7) " "
+ BLOCK@[7; 9)
+ L_CURLY@[7; 8) "{"
+ R_CURLY@[8; 9) "}"
+ WHITESPACE@[9; 10) "\n"
+ FN_DEF@[10; 25)
+ FN_KW@[10; 12) "fn"
+ WHITESPACE@[12; 13) " "
+ NAME@[13; 14)
+ IDENT@[13; 14) "b"
+ PARAM_LIST@[14; 22)
+ L_PAREN@[14; 15) "("
+ PARAM@[15; 21)
+ BIND_PAT@[15; 16)
+ NAME@[15; 16)
+ IDENT@[15; 16) "x"
+ COLON@[16; 17) ":"
+ WHITESPACE@[17; 18) " "
+ PATH_TYPE@[18; 21)
+ PATH@[18; 21)
+ PATH_SEGMENT@[18; 21)
+ NAME_REF@[18; 21)
+ IDENT@[18; 21) "i32"
+ R_PAREN@[21; 22) ")"
+ WHITESPACE@[22; 23) " "
+ BLOCK@[23; 25)
+ L_CURLY@[23; 24) "{"
+ R_CURLY@[24; 25) "}"
+ WHITESPACE@[25; 26) "\n"
+ FN_DEF@[26; 43)
+ FN_KW@[26; 28) "fn"
+ WHITESPACE@[28; 29) " "
+ NAME@[29; 30)
+ IDENT@[29; 30) "c"
+ PARAM_LIST@[30; 40)
+ L_PAREN@[30; 31) "("
+ PARAM@[31; 37)
+ BIND_PAT@[31; 32)
+ NAME@[31; 32)
+ IDENT@[31; 32) "x"
+ COLON@[32; 33) ":"
+ WHITESPACE@[33; 34) " "
+ PATH_TYPE@[34; 37)
+ PATH@[34; 37)
+ PATH_SEGMENT@[34; 37)
+ NAME_REF@[34; 37)
+ IDENT@[34; 37) "i32"
+ COMMA@[37; 38) ","
+ WHITESPACE@[38; 39) " "
+ R_PAREN@[39; 40) ")"
+ WHITESPACE@[40; 41) " "
+ BLOCK@[41; 43)
+ L_CURLY@[41; 42) "{"
+ R_CURLY@[42; 43) "}"
+ WHITESPACE@[43; 44) "\n"
+ FN_DEF@[44; 66)
+ FN_KW@[44; 46) "fn"
+ WHITESPACE@[46; 47) " "
+ NAME@[47; 48)
+ IDENT@[47; 48) "d"
+ PARAM_LIST@[48; 63)
+ L_PAREN@[48; 49) "("
+ PARAM@[49; 55)
+ BIND_PAT@[49; 50)
+ NAME@[49; 50)
+ IDENT@[49; 50) "x"
+ COLON@[50; 51) ":"
+ WHITESPACE@[51; 52) " "
+ PATH_TYPE@[52; 55)
+ PATH@[52; 55)
+ PATH_SEGMENT@[52; 55)
+ NAME_REF@[52; 55)
+ IDENT@[52; 55) "i32"
+ COMMA@[55; 56) ","
+ WHITESPACE@[56; 57) " "
+ PARAM@[57; 62)
+ BIND_PAT@[57; 58)
+ NAME@[57; 58)
+ IDENT@[57; 58) "y"
+ COLON@[58; 59) ":"
+ WHITESPACE@[59; 60) " "
+ TUPLE_TYPE@[60; 62)
+ L_PAREN@[60; 61) "("
+ R_PAREN@[61; 62) ")"
+ R_PAREN@[62; 63) ")"
+ WHITESPACE@[63; 64) " "
+ BLOCK@[64; 66)
+ L_CURLY@[64; 65) "{"
+ R_CURLY@[65; 66) "}"
+ WHITESPACE@[66; 67) "\n"
--- /dev/null
+fn foo() {
+ for x in [] {};
+}
--- /dev/null
+SOURCE_FILE@[0; 33)
+ FN_DEF@[0; 32)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 32)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ EXPR_STMT@[15; 30)
+ FOR_EXPR@[15; 29)
+ FOR_KW@[15; 18) "for"
+ WHITESPACE@[18; 19) " "
+ BIND_PAT@[19; 20)
+ NAME@[19; 20)
+ IDENT@[19; 20) "x"
+ WHITESPACE@[20; 21) " "
+ IN_KW@[21; 23) "in"
+ WHITESPACE@[23; 24) " "
+ ARRAY_EXPR@[24; 26)
+ L_BRACK@[24; 25) "["
+ R_BRACK@[25; 26) "]"
+ WHITESPACE@[26; 27) " "
+ BLOCK@[27; 29)
+ L_CURLY@[27; 28) "{"
+ R_CURLY@[28; 29) "}"
+ SEMI@[29; 30) ";"
+ WHITESPACE@[30; 31) "\n"
+ R_CURLY@[31; 32) "}"
+ WHITESPACE@[32; 33) "\n"
--- /dev/null
+unsafe fn foo() {}
--- /dev/null
+SOURCE_FILE@[0; 19)
+ FN_DEF@[0; 18)
+ UNSAFE_KW@[0; 6) "unsafe"
+ WHITESPACE@[6; 7) " "
+ FN_KW@[7; 9) "fn"
+ WHITESPACE@[9; 10) " "
+ NAME@[10; 13)
+ IDENT@[10; 13) "foo"
+ PARAM_LIST@[13; 15)
+ L_PAREN@[13; 14) "("
+ R_PAREN@[14; 15) ")"
+ WHITESPACE@[15; 16) " "
+ BLOCK@[16; 18)
+ L_CURLY@[16; 17) "{"
+ R_CURLY@[17; 18) "}"
+ WHITESPACE@[18; 19) "\n"
--- /dev/null
+fn foo() {
+ let S {} = ();
+ let S { f, ref mut g } = ();
+ let S { h: _, ..} = ();
+ let S { h: _, } = ();
+}
--- /dev/null
+SOURCE_FILE@[0; 119)
+ FN_DEF@[0; 118)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 118)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ LET_STMT@[15; 29)
+ LET_KW@[15; 18) "let"
+ WHITESPACE@[18; 19) " "
+ STRUCT_PAT@[19; 23)
+ PATH@[19; 20)
+ PATH_SEGMENT@[19; 20)
+ NAME_REF@[19; 20)
+ IDENT@[19; 20) "S"
+ WHITESPACE@[20; 21) " "
+ FIELD_PAT_LIST@[21; 23)
+ L_CURLY@[21; 22) "{"
+ R_CURLY@[22; 23) "}"
+ WHITESPACE@[23; 24) " "
+ EQ@[24; 25) "="
+ WHITESPACE@[25; 26) " "
+ TUPLE_EXPR@[26; 28)
+ L_PAREN@[26; 27) "("
+ R_PAREN@[27; 28) ")"
+ SEMI@[28; 29) ";"
+ WHITESPACE@[29; 34) "\n "
+ LET_STMT@[34; 62)
+ LET_KW@[34; 37) "let"
+ WHITESPACE@[37; 38) " "
+ STRUCT_PAT@[38; 56)
+ PATH@[38; 39)
+ PATH_SEGMENT@[38; 39)
+ NAME_REF@[38; 39)
+ IDENT@[38; 39) "S"
+ WHITESPACE@[39; 40) " "
+ FIELD_PAT_LIST@[40; 56)
+ L_CURLY@[40; 41) "{"
+ WHITESPACE@[41; 42) " "
+ BIND_PAT@[42; 43)
+ NAME@[42; 43)
+ IDENT@[42; 43) "f"
+ COMMA@[43; 44) ","
+ WHITESPACE@[44; 45) " "
+ BIND_PAT@[45; 54)
+ REF_KW@[45; 48) "ref"
+ WHITESPACE@[48; 49) " "
+ MUT_KW@[49; 52) "mut"
+ WHITESPACE@[52; 53) " "
+ NAME@[53; 54)
+ IDENT@[53; 54) "g"
+ WHITESPACE@[54; 55) " "
+ R_CURLY@[55; 56) "}"
+ WHITESPACE@[56; 57) " "
+ EQ@[57; 58) "="
+ WHITESPACE@[58; 59) " "
+ TUPLE_EXPR@[59; 61)
+ L_PAREN@[59; 60) "("
+ R_PAREN@[60; 61) ")"
+ SEMI@[61; 62) ";"
+ WHITESPACE@[62; 67) "\n "
+ LET_STMT@[67; 90)
+ LET_KW@[67; 70) "let"
+ WHITESPACE@[70; 71) " "
+ STRUCT_PAT@[71; 84)
+ PATH@[71; 72)
+ PATH_SEGMENT@[71; 72)
+ NAME_REF@[71; 72)
+ IDENT@[71; 72) "S"
+ WHITESPACE@[72; 73) " "
+ FIELD_PAT_LIST@[73; 84)
+ L_CURLY@[73; 74) "{"
+ WHITESPACE@[74; 75) " "
+ FIELD_PAT@[75; 79)
+ NAME@[75; 76)
+ IDENT@[75; 76) "h"
+ COLON@[76; 77) ":"
+ WHITESPACE@[77; 78) " "
+ PLACEHOLDER_PAT@[78; 79)
+ UNDERSCORE@[78; 79) "_"
+ COMMA@[79; 80) ","
+ WHITESPACE@[80; 81) " "
+ DOTDOT@[81; 83) ".."
+ R_CURLY@[83; 84) "}"
+ WHITESPACE@[84; 85) " "
+ EQ@[85; 86) "="
+ WHITESPACE@[86; 87) " "
+ TUPLE_EXPR@[87; 89)
+ L_PAREN@[87; 88) "("
+ R_PAREN@[88; 89) ")"
+ SEMI@[89; 90) ";"
+ WHITESPACE@[90; 95) "\n "
+ LET_STMT@[95; 116)
+ LET_KW@[95; 98) "let"
+ WHITESPACE@[98; 99) " "
+ STRUCT_PAT@[99; 110)
+ PATH@[99; 100)
+ PATH_SEGMENT@[99; 100)
+ NAME_REF@[99; 100)
+ IDENT@[99; 100) "S"
+ WHITESPACE@[100; 101) " "
+ FIELD_PAT_LIST@[101; 110)
+ L_CURLY@[101; 102) "{"
+ WHITESPACE@[102; 103) " "
+ FIELD_PAT@[103; 107)
+ NAME@[103; 104)
+ IDENT@[103; 104) "h"
+ COLON@[104; 105) ":"
+ WHITESPACE@[105; 106) " "
+ PLACEHOLDER_PAT@[106; 107)
+ UNDERSCORE@[106; 107) "_"
+ COMMA@[107; 108) ","
+ WHITESPACE@[108; 109) " "
+ R_CURLY@[109; 110) "}"
+ WHITESPACE@[110; 111) " "
+ EQ@[111; 112) "="
+ WHITESPACE@[112; 113) " "
+ TUPLE_EXPR@[113; 115)
+ L_PAREN@[113; 114) "("
+ R_PAREN@[114; 115) ")"
+ SEMI@[115; 116) ";"
+ WHITESPACE@[116; 117) "\n"
+ R_CURLY@[117; 118) "}"
+ WHITESPACE@[118; 119) "\n"
--- /dev/null
+fn foo() {
+ [];
+ [1];
+ [1, 2,];
+ [1; 2];
+}
--- /dev/null
+SOURCE_FILE@[0; 55)
+ FN_DEF@[0; 54)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 54)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ EXPR_STMT@[15; 18)
+ ARRAY_EXPR@[15; 17)
+ L_BRACK@[15; 16) "["
+ R_BRACK@[16; 17) "]"
+ SEMI@[17; 18) ";"
+ WHITESPACE@[18; 23) "\n "
+ EXPR_STMT@[23; 27)
+ ARRAY_EXPR@[23; 26)
+ L_BRACK@[23; 24) "["
+ LITERAL@[24; 25)
+ INT_NUMBER@[24; 25) "1"
+ R_BRACK@[25; 26) "]"
+ SEMI@[26; 27) ";"
+ WHITESPACE@[27; 32) "\n "
+ EXPR_STMT@[32; 40)
+ ARRAY_EXPR@[32; 39)
+ L_BRACK@[32; 33) "["
+ LITERAL@[33; 34)
+ INT_NUMBER@[33; 34) "1"
+ COMMA@[34; 35) ","
+ WHITESPACE@[35; 36) " "
+ LITERAL@[36; 37)
+ INT_NUMBER@[36; 37) "2"
+ COMMA@[37; 38) ","
+ R_BRACK@[38; 39) "]"
+ SEMI@[39; 40) ";"
+ WHITESPACE@[40; 45) "\n "
+ EXPR_STMT@[45; 52)
+ ARRAY_EXPR@[45; 51)
+ L_BRACK@[45; 46) "["
+ LITERAL@[46; 47)
+ INT_NUMBER@[46; 47) "1"
+ SEMI@[47; 48) ";"
+ WHITESPACE@[48; 49) " "
+ LITERAL@[49; 50)
+ INT_NUMBER@[49; 50) "2"
+ R_BRACK@[50; 51) "]"
+ SEMI@[51; 52) ";"
+ WHITESPACE@[52; 53) "\n"
+ R_CURLY@[53; 54) "}"
+ WHITESPACE@[54; 55) "\n"
--- /dev/null
+type F = Box<Fn(x: i32) -> ()>;
--- /dev/null
+SOURCE_FILE@[0; 32)
+ TYPE_ALIAS_DEF@[0; 31)
+ TYPE_KW@[0; 4) "type"
+ WHITESPACE@[4; 5) " "
+ NAME@[5; 6)
+ IDENT@[5; 6) "F"
+ WHITESPACE@[6; 7) " "
+ EQ@[7; 8) "="
+ WHITESPACE@[8; 9) " "
+ PATH_TYPE@[9; 30)
+ PATH@[9; 30)
+ PATH_SEGMENT@[9; 30)
+ NAME_REF@[9; 12)
+ IDENT@[9; 12) "Box"
+ TYPE_ARG_LIST@[12; 30)
+ L_ANGLE@[12; 13) "<"
+ TYPE_ARG@[13; 29)
+ PATH_TYPE@[13; 29)
+ PATH@[13; 29)
+ PATH_SEGMENT@[13; 29)
+ NAME_REF@[13; 15)
+ IDENT@[13; 15) "Fn"
+ PARAM_LIST@[15; 23)
+ L_PAREN@[15; 16) "("
+ PARAM@[16; 22)
+ BIND_PAT@[16; 17)
+ NAME@[16; 17)
+ IDENT@[16; 17) "x"
+ COLON@[17; 18) ":"
+ WHITESPACE@[18; 19) " "
+ PATH_TYPE@[19; 22)
+ PATH@[19; 22)
+ PATH_SEGMENT@[19; 22)
+ NAME_REF@[19; 22)
+ IDENT@[19; 22) "i32"
+ R_PAREN@[22; 23) ")"
+ WHITESPACE@[23; 24) " "
+ RET_TYPE@[24; 29)
+ THIN_ARROW@[24; 26) "->"
+ WHITESPACE@[26; 27) " "
+ TUPLE_TYPE@[27; 29)
+ L_PAREN@[27; 28) "("
+ R_PAREN@[28; 29) ")"
+ R_ANGLE@[29; 30) ">"
+ SEMI@[30; 31) ";"
+ WHITESPACE@[31; 32) "\n"
--- /dev/null
+fn foo() {
+ {};
+ unsafe {};
+ 'label: {};
+}
--- /dev/null
+SOURCE_FILE@[0; 52)
+ FN_DEF@[0; 51)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 51)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ EXPR_STMT@[15; 18)
+ BLOCK_EXPR@[15; 17)
+ BLOCK@[15; 17)
+ L_CURLY@[15; 16) "{"
+ R_CURLY@[16; 17) "}"
+ SEMI@[17; 18) ";"
+ WHITESPACE@[18; 23) "\n "
+ EXPR_STMT@[23; 33)
+ BLOCK_EXPR@[23; 32)
+ UNSAFE_KW@[23; 29) "unsafe"
+ WHITESPACE@[29; 30) " "
+ BLOCK@[30; 32)
+ L_CURLY@[30; 31) "{"
+ R_CURLY@[31; 32) "}"
+ SEMI@[32; 33) ";"
+ WHITESPACE@[33; 38) "\n "
+ EXPR_STMT@[38; 49)
+ BLOCK_EXPR@[38; 48)
+ LABEL@[38; 45)
+ LIFETIME@[38; 44) "\'label"
+ COLON@[44; 45) ":"
+ WHITESPACE@[45; 46) " "
+ BLOCK@[46; 48)
+ L_CURLY@[46; 47) "{"
+ R_CURLY@[47; 48) "}"
+ SEMI@[48; 49) ";"
+ WHITESPACE@[49; 50) "\n"
+ R_CURLY@[50; 51) "}"
+ WHITESPACE@[51; 52) "\n"
--- /dev/null
+fn foo() {
+ || ();
+ || -> i32 { 92 };
+ |x| x;
+ move |x: i32,| x;
+ async || {};
+ move || {};
+ async move || {};
+}
--- /dev/null
+SOURCE_FILE@[0; 134)
+ FN_DEF@[0; 133)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 133)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ EXPR_STMT@[15; 21)
+ LAMBDA_EXPR@[15; 20)
+ PARAM_LIST@[15; 17)
+ PIPE@[15; 16) "|"
+ PIPE@[16; 17) "|"
+ WHITESPACE@[17; 18) " "
+ TUPLE_EXPR@[18; 20)
+ L_PAREN@[18; 19) "("
+ R_PAREN@[19; 20) ")"
+ SEMI@[20; 21) ";"
+ WHITESPACE@[21; 26) "\n "
+ EXPR_STMT@[26; 43)
+ LAMBDA_EXPR@[26; 42)
+ PARAM_LIST@[26; 28)
+ PIPE@[26; 27) "|"
+ PIPE@[27; 28) "|"
+ WHITESPACE@[28; 29) " "
+ RET_TYPE@[29; 35)
+ THIN_ARROW@[29; 31) "->"
+ WHITESPACE@[31; 32) " "
+ PATH_TYPE@[32; 35)
+ PATH@[32; 35)
+ PATH_SEGMENT@[32; 35)
+ NAME_REF@[32; 35)
+ IDENT@[32; 35) "i32"
+ WHITESPACE@[35; 36) " "
+ BLOCK_EXPR@[36; 42)
+ BLOCK@[36; 42)
+ L_CURLY@[36; 37) "{"
+ WHITESPACE@[37; 38) " "
+ LITERAL@[38; 40)
+ INT_NUMBER@[38; 40) "92"
+ WHITESPACE@[40; 41) " "
+ R_CURLY@[41; 42) "}"
+ SEMI@[42; 43) ";"
+ WHITESPACE@[43; 48) "\n "
+ EXPR_STMT@[48; 54)
+ LAMBDA_EXPR@[48; 53)
+ PARAM_LIST@[48; 51)
+ PIPE@[48; 49) "|"
+ PARAM@[49; 50)
+ BIND_PAT@[49; 50)
+ NAME@[49; 50)
+ IDENT@[49; 50) "x"
+ PIPE@[50; 51) "|"
+ WHITESPACE@[51; 52) " "
+ PATH_EXPR@[52; 53)
+ PATH@[52; 53)
+ PATH_SEGMENT@[52; 53)
+ NAME_REF@[52; 53)
+ IDENT@[52; 53) "x"
+ SEMI@[53; 54) ";"
+ WHITESPACE@[54; 59) "\n "
+ EXPR_STMT@[59; 76)
+ LAMBDA_EXPR@[59; 75)
+ MOVE_KW@[59; 63) "move"
+ WHITESPACE@[63; 64) " "
+ PARAM_LIST@[64; 73)
+ PIPE@[64; 65) "|"
+ PARAM@[65; 71)
+ BIND_PAT@[65; 66)
+ NAME@[65; 66)
+ IDENT@[65; 66) "x"
+ COLON@[66; 67) ":"
+ WHITESPACE@[67; 68) " "
+ PATH_TYPE@[68; 71)
+ PATH@[68; 71)
+ PATH_SEGMENT@[68; 71)
+ NAME_REF@[68; 71)
+ IDENT@[68; 71) "i32"
+ COMMA@[71; 72) ","
+ PIPE@[72; 73) "|"
+ WHITESPACE@[73; 74) " "
+ PATH_EXPR@[74; 75)
+ PATH@[74; 75)
+ PATH_SEGMENT@[74; 75)
+ NAME_REF@[74; 75)
+ IDENT@[74; 75) "x"
+ SEMI@[75; 76) ";"
+ WHITESPACE@[76; 81) "\n "
+ EXPR_STMT@[81; 93)
+ LAMBDA_EXPR@[81; 92)
+ ASYNC_KW@[81; 86) "async"
+ WHITESPACE@[86; 87) " "
+ PARAM_LIST@[87; 89)
+ PIPE@[87; 88) "|"
+ PIPE@[88; 89) "|"
+ WHITESPACE@[89; 90) " "
+ BLOCK_EXPR@[90; 92)
+ BLOCK@[90; 92)
+ L_CURLY@[90; 91) "{"
+ R_CURLY@[91; 92) "}"
+ SEMI@[92; 93) ";"
+ WHITESPACE@[93; 98) "\n "
+ EXPR_STMT@[98; 109)
+ LAMBDA_EXPR@[98; 108)
+ MOVE_KW@[98; 102) "move"
+ WHITESPACE@[102; 103) " "
+ PARAM_LIST@[103; 105)
+ PIPE@[103; 104) "|"
+ PIPE@[104; 105) "|"
+ WHITESPACE@[105; 106) " "
+ BLOCK_EXPR@[106; 108)
+ BLOCK@[106; 108)
+ L_CURLY@[106; 107) "{"
+ R_CURLY@[107; 108) "}"
+ SEMI@[108; 109) ";"
+ WHITESPACE@[109; 114) "\n "
+ EXPR_STMT@[114; 131)
+ LAMBDA_EXPR@[114; 130)
+ ASYNC_KW@[114; 119) "async"
+ WHITESPACE@[119; 120) " "
+ MOVE_KW@[120; 124) "move"
+ WHITESPACE@[124; 125) " "
+ PARAM_LIST@[125; 127)
+ PIPE@[125; 126) "|"
+ PIPE@[126; 127) "|"
+ WHITESPACE@[127; 128) " "
+ BLOCK_EXPR@[128; 130)
+ BLOCK@[128; 130)
+ L_CURLY@[128; 129) "{"
+ R_CURLY@[129; 130) "}"
+ SEMI@[130; 131) ";"
+ WHITESPACE@[131; 132) "\n"
+ R_CURLY@[132; 133) "}"
+ WHITESPACE@[133; 134) "\n"
--- /dev/null
+fn foo() {
+ x.foo();
+ y.bar::<T>(1, 2,);
+}
--- /dev/null
+SOURCE_FILE@[0; 49)
+ FN_DEF@[0; 48)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 48)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ EXPR_STMT@[15; 23)
+ METHOD_CALL_EXPR@[15; 22)
+ PATH_EXPR@[15; 16)
+ PATH@[15; 16)
+ PATH_SEGMENT@[15; 16)
+ NAME_REF@[15; 16)
+ IDENT@[15; 16) "x"
+ DOT@[16; 17) "."
+ NAME_REF@[17; 20)
+ IDENT@[17; 20) "foo"
+ ARG_LIST@[20; 22)
+ L_PAREN@[20; 21) "("
+ R_PAREN@[21; 22) ")"
+ SEMI@[22; 23) ";"
+ WHITESPACE@[23; 28) "\n "
+ EXPR_STMT@[28; 46)
+ METHOD_CALL_EXPR@[28; 45)
+ PATH_EXPR@[28; 29)
+ PATH@[28; 29)
+ PATH_SEGMENT@[28; 29)
+ NAME_REF@[28; 29)
+ IDENT@[28; 29) "y"
+ DOT@[29; 30) "."
+ NAME_REF@[30; 33)
+ IDENT@[30; 33) "bar"
+ TYPE_ARG_LIST@[33; 38)
+ COLONCOLON@[33; 35) "::"
+ L_ANGLE@[35; 36) "<"
+ TYPE_ARG@[36; 37)
+ PATH_TYPE@[36; 37)
+ PATH@[36; 37)
+ PATH_SEGMENT@[36; 37)
+ NAME_REF@[36; 37)
+ IDENT@[36; 37) "T"
+ R_ANGLE@[37; 38) ">"
+ ARG_LIST@[38; 45)
+ L_PAREN@[38; 39) "("
+ LITERAL@[39; 40)
+ INT_NUMBER@[39; 40) "1"
+ COMMA@[40; 41) ","
+ WHITESPACE@[41; 42) " "
+ LITERAL@[42; 43)
+ INT_NUMBER@[42; 43) "2"
+ COMMA@[43; 44) ","
+ R_PAREN@[44; 45) ")"
+ SEMI@[45; 46) ";"
+ WHITESPACE@[46; 47) "\n"
+ R_CURLY@[47; 48) "}"
+ WHITESPACE@[48; 49) "\n"
--- /dev/null
+fn foo() {
+ ();
+ (1);
+ (1,);
+}
--- /dev/null
+SOURCE_FILE@[0; 40)
+ FN_DEF@[0; 39)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 39)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ EXPR_STMT@[15; 18)
+ TUPLE_EXPR@[15; 17)
+ L_PAREN@[15; 16) "("
+ R_PAREN@[16; 17) ")"
+ SEMI@[17; 18) ";"
+ WHITESPACE@[18; 23) "\n "
+ EXPR_STMT@[23; 27)
+ PAREN_EXPR@[23; 26)
+ L_PAREN@[23; 24) "("
+ LITERAL@[24; 25)
+ INT_NUMBER@[24; 25) "1"
+ R_PAREN@[25; 26) ")"
+ SEMI@[26; 27) ";"
+ WHITESPACE@[27; 32) "\n "
+ EXPR_STMT@[32; 37)
+ TUPLE_EXPR@[32; 36)
+ L_PAREN@[32; 33) "("
+ LITERAL@[33; 34)
+ INT_NUMBER@[33; 34) "1"
+ COMMA@[34; 35) ","
+ R_PAREN@[35; 36) ")"
+ SEMI@[36; 37) ";"
+ WHITESPACE@[37; 38) "\n"
+ R_CURLY@[38; 39) "}"
+ WHITESPACE@[39; 40) "\n"
--- /dev/null
+fn foo() {
+ 'a: loop {}
+ 'b: while true {}
+ 'c: for x in () {}
+}
--- /dev/null
+SOURCE_FILE@[0; 74)
+ FN_DEF@[0; 73)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 73)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ EXPR_STMT@[15; 26)
+ LOOP_EXPR@[15; 26)
+ LABEL@[15; 18)
+ LIFETIME@[15; 17) "\'a"
+ COLON@[17; 18) ":"
+ WHITESPACE@[18; 19) " "
+ LOOP_KW@[19; 23) "loop"
+ WHITESPACE@[23; 24) " "
+ BLOCK@[24; 26)
+ L_CURLY@[24; 25) "{"
+ R_CURLY@[25; 26) "}"
+ WHITESPACE@[26; 31) "\n "
+ EXPR_STMT@[31; 48)
+ WHILE_EXPR@[31; 48)
+ LABEL@[31; 34)
+ LIFETIME@[31; 33) "\'b"
+ COLON@[33; 34) ":"
+ WHITESPACE@[34; 35) " "
+ WHILE_KW@[35; 40) "while"
+ WHITESPACE@[40; 41) " "
+ CONDITION@[41; 45)
+ LITERAL@[41; 45)
+ TRUE_KW@[41; 45) "true"
+ WHITESPACE@[45; 46) " "
+ BLOCK@[46; 48)
+ L_CURLY@[46; 47) "{"
+ R_CURLY@[47; 48) "}"
+ WHITESPACE@[48; 53) "\n "
+ FOR_EXPR@[53; 71)
+ LABEL@[53; 56)
+ LIFETIME@[53; 55) "\'c"
+ COLON@[55; 56) ":"
+ WHITESPACE@[56; 57) " "
+ FOR_KW@[57; 60) "for"
+ WHITESPACE@[60; 61) " "
+ BIND_PAT@[61; 62)
+ NAME@[61; 62)
+ IDENT@[61; 62) "x"
+ WHITESPACE@[62; 63) " "
+ IN_KW@[63; 65) "in"
+ WHITESPACE@[65; 66) " "
+ TUPLE_EXPR@[66; 68)
+ L_PAREN@[66; 67) "("
+ R_PAREN@[67; 68) ")"
+ WHITESPACE@[68; 69) " "
+ BLOCK@[69; 71)
+ L_CURLY@[69; 70) "{"
+ R_CURLY@[70; 71) "}"
+ WHITESPACE@[71; 72) "\n"
+ R_CURLY@[72; 73) "}"
+ WHITESPACE@[73; 74) "\n"
--- /dev/null
+use ::crate_name; // Rust 2018 - All flavours
+use crate_name; // Rust 2018 - Anchored paths
+use item_in_scope_or_crate_name; // Rust 2018 - Uniform Paths
--- /dev/null
+SOURCE_FILE@[0; 154)
+ USE_ITEM@[0; 17)
+ USE_KW@[0; 3) "use"
+ WHITESPACE@[3; 4) " "
+ USE_TREE@[4; 16)
+ PATH@[4; 16)
+ PATH_SEGMENT@[4; 16)
+ COLONCOLON@[4; 6) "::"
+ NAME_REF@[6; 16)
+ IDENT@[6; 16) "crate_name"
+ SEMI@[16; 17) ";"
+ WHITESPACE@[17; 18) " "
+ COMMENT@[18; 45) "// Rust 2018 - All fl ..."
+ WHITESPACE@[45; 46) "\n"
+ USE_ITEM@[46; 61)
+ USE_KW@[46; 49) "use"
+ WHITESPACE@[49; 50) " "
+ USE_TREE@[50; 60)
+ PATH@[50; 60)
+ PATH_SEGMENT@[50; 60)
+ NAME_REF@[50; 60)
+ IDENT@[50; 60) "crate_name"
+ SEMI@[60; 61) ";"
+ WHITESPACE@[61; 62) " "
+ COMMENT@[62; 91) "// Rust 2018 - Anchor ..."
+ WHITESPACE@[91; 92) "\n"
+ USE_ITEM@[92; 124)
+ USE_KW@[92; 95) "use"
+ WHITESPACE@[95; 96) " "
+ USE_TREE@[96; 123)
+ PATH@[96; 123)
+ PATH_SEGMENT@[96; 123)
+ NAME_REF@[96; 123)
+ IDENT@[96; 123) "item_in_scope_or_crat ..."
+ SEMI@[123; 124) ";"
+ WHITESPACE@[124; 125) " "
+ COMMENT@[125; 153) "// Rust 2018 - Unifor ..."
+ WHITESPACE@[153; 154) "\n"
--- /dev/null
+fn main() {
+ let (a, b, ..) = ();
+}
--- /dev/null
+SOURCE_FILE@[0; 39)
+ FN_DEF@[0; 38)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 7)
+ IDENT@[3; 7) "main"
+ PARAM_LIST@[7; 9)
+ L_PAREN@[7; 8) "("
+ R_PAREN@[8; 9) ")"
+ WHITESPACE@[9; 10) " "
+ BLOCK@[10; 38)
+ L_CURLY@[10; 11) "{"
+ WHITESPACE@[11; 16) "\n "
+ LET_STMT@[16; 36)
+ LET_KW@[16; 19) "let"
+ WHITESPACE@[19; 20) " "
+ TUPLE_PAT@[20; 30)
+ L_PAREN@[20; 21) "("
+ BIND_PAT@[21; 22)
+ NAME@[21; 22)
+ IDENT@[21; 22) "a"
+ COMMA@[22; 23) ","
+ WHITESPACE@[23; 24) " "
+ BIND_PAT@[24; 25)
+ NAME@[24; 25)
+ IDENT@[24; 25) "b"
+ COMMA@[25; 26) ","
+ WHITESPACE@[26; 27) " "
+ DOTDOT@[27; 29) ".."
+ R_PAREN@[29; 30) ")"
+ WHITESPACE@[30; 31) " "
+ EQ@[31; 32) "="
+ WHITESPACE@[32; 33) " "
+ TUPLE_EXPR@[33; 35)
+ L_PAREN@[33; 34) "("
+ R_PAREN@[34; 35) ")"
+ SEMI@[35; 36) ";"
+ WHITESPACE@[36; 37) "\n"
+ R_CURLY@[37; 38) "}"
+ WHITESPACE@[38; 39) "\n"
--- /dev/null
+fn main() {
+ let a = ();
+ let mut b = ();
+ let ref c = ();
+ let ref mut d = ();
+ let e @ _ = ();
+ let ref mut f @ g @ _ = ();
+ let box i = Box::new(1i32);
+}
--- /dev/null
+SOURCE_FILE@[0; 178)
+ FN_DEF@[0; 177)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 7)
+ IDENT@[3; 7) "main"
+ PARAM_LIST@[7; 9)
+ L_PAREN@[7; 8) "("
+ R_PAREN@[8; 9) ")"
+ WHITESPACE@[9; 10) " "
+ BLOCK@[10; 177)
+ L_CURLY@[10; 11) "{"
+ WHITESPACE@[11; 16) "\n "
+ LET_STMT@[16; 27)
+ LET_KW@[16; 19) "let"
+ WHITESPACE@[19; 20) " "
+ BIND_PAT@[20; 21)
+ NAME@[20; 21)
+ IDENT@[20; 21) "a"
+ WHITESPACE@[21; 22) " "
+ EQ@[22; 23) "="
+ WHITESPACE@[23; 24) " "
+ TUPLE_EXPR@[24; 26)
+ L_PAREN@[24; 25) "("
+ R_PAREN@[25; 26) ")"
+ SEMI@[26; 27) ";"
+ WHITESPACE@[27; 32) "\n "
+ LET_STMT@[32; 47)
+ LET_KW@[32; 35) "let"
+ WHITESPACE@[35; 36) " "
+ BIND_PAT@[36; 41)
+ MUT_KW@[36; 39) "mut"
+ WHITESPACE@[39; 40) " "
+ NAME@[40; 41)
+ IDENT@[40; 41) "b"
+ WHITESPACE@[41; 42) " "
+ EQ@[42; 43) "="
+ WHITESPACE@[43; 44) " "
+ TUPLE_EXPR@[44; 46)
+ L_PAREN@[44; 45) "("
+ R_PAREN@[45; 46) ")"
+ SEMI@[46; 47) ";"
+ WHITESPACE@[47; 52) "\n "
+ LET_STMT@[52; 67)
+ LET_KW@[52; 55) "let"
+ WHITESPACE@[55; 56) " "
+ BIND_PAT@[56; 61)
+ REF_KW@[56; 59) "ref"
+ WHITESPACE@[59; 60) " "
+ NAME@[60; 61)
+ IDENT@[60; 61) "c"
+ WHITESPACE@[61; 62) " "
+ EQ@[62; 63) "="
+ WHITESPACE@[63; 64) " "
+ TUPLE_EXPR@[64; 66)
+ L_PAREN@[64; 65) "("
+ R_PAREN@[65; 66) ")"
+ SEMI@[66; 67) ";"
+ WHITESPACE@[67; 72) "\n "
+ LET_STMT@[72; 91)
+ LET_KW@[72; 75) "let"
+ WHITESPACE@[75; 76) " "
+ BIND_PAT@[76; 85)
+ REF_KW@[76; 79) "ref"
+ WHITESPACE@[79; 80) " "
+ MUT_KW@[80; 83) "mut"
+ WHITESPACE@[83; 84) " "
+ NAME@[84; 85)
+ IDENT@[84; 85) "d"
+ WHITESPACE@[85; 86) " "
+ EQ@[86; 87) "="
+ WHITESPACE@[87; 88) " "
+ TUPLE_EXPR@[88; 90)
+ L_PAREN@[88; 89) "("
+ R_PAREN@[89; 90) ")"
+ SEMI@[90; 91) ";"
+ WHITESPACE@[91; 96) "\n "
+ LET_STMT@[96; 111)
+ LET_KW@[96; 99) "let"
+ WHITESPACE@[99; 100) " "
+ BIND_PAT@[100; 105)
+ NAME@[100; 101)
+ IDENT@[100; 101) "e"
+ WHITESPACE@[101; 102) " "
+ AT@[102; 103) "@"
+ WHITESPACE@[103; 104) " "
+ PLACEHOLDER_PAT@[104; 105)
+ UNDERSCORE@[104; 105) "_"
+ WHITESPACE@[105; 106) " "
+ EQ@[106; 107) "="
+ WHITESPACE@[107; 108) " "
+ TUPLE_EXPR@[108; 110)
+ L_PAREN@[108; 109) "("
+ R_PAREN@[109; 110) ")"
+ SEMI@[110; 111) ";"
+ WHITESPACE@[111; 116) "\n "
+ LET_STMT@[116; 143)
+ LET_KW@[116; 119) "let"
+ WHITESPACE@[119; 120) " "
+ BIND_PAT@[120; 137)
+ REF_KW@[120; 123) "ref"
+ WHITESPACE@[123; 124) " "
+ MUT_KW@[124; 127) "mut"
+ WHITESPACE@[127; 128) " "
+ NAME@[128; 129)
+ IDENT@[128; 129) "f"
+ WHITESPACE@[129; 130) " "
+ AT@[130; 131) "@"
+ WHITESPACE@[131; 132) " "
+ BIND_PAT@[132; 137)
+ NAME@[132; 133)
+ IDENT@[132; 133) "g"
+ WHITESPACE@[133; 134) " "
+ AT@[134; 135) "@"
+ WHITESPACE@[135; 136) " "
+ PLACEHOLDER_PAT@[136; 137)
+ UNDERSCORE@[136; 137) "_"
+ WHITESPACE@[137; 138) " "
+ EQ@[138; 139) "="
+ WHITESPACE@[139; 140) " "
+ TUPLE_EXPR@[140; 142)
+ L_PAREN@[140; 141) "("
+ R_PAREN@[141; 142) ")"
+ SEMI@[142; 143) ";"
+ WHITESPACE@[143; 148) "\n "
+ LET_STMT@[148; 175)
+ LET_KW@[148; 151) "let"
+ WHITESPACE@[151; 152) " "
+ BIND_PAT@[152; 157)
+ BOX_KW@[152; 155) "box"
+ WHITESPACE@[155; 156) " "
+ NAME@[156; 157)
+ IDENT@[156; 157) "i"
+ WHITESPACE@[157; 158) " "
+ EQ@[158; 159) "="
+ WHITESPACE@[159; 160) " "
+ CALL_EXPR@[160; 174)
+ PATH_EXPR@[160; 168)
+ PATH@[160; 168)
+ PATH@[160; 163)
+ PATH_SEGMENT@[160; 163)
+ NAME_REF@[160; 163)
+ IDENT@[160; 163) "Box"
+ COLONCOLON@[163; 165) "::"
+ PATH_SEGMENT@[165; 168)
+ NAME_REF@[165; 168)
+ IDENT@[165; 168) "new"
+ ARG_LIST@[168; 174)
+ L_PAREN@[168; 169) "("
+ LITERAL@[169; 173)
+ INT_NUMBER@[169; 173) "1i32"
+ R_PAREN@[173; 174) ")"
+ SEMI@[174; 175) ";"
+ WHITESPACE@[175; 176) "\n"
+ R_CURLY@[176; 177) "}"
+ WHITESPACE@[177; 178) "\n"
--- /dev/null
+fn foo(){
+ ;;;some_expr();;;;{;;;};;;;Ok(())
+}
--- /dev/null
+SOURCE_FILE@[0; 50)
+ FN_DEF@[0; 49)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ BLOCK@[8; 49)
+ L_CURLY@[8; 9) "{"
+ WHITESPACE@[9; 14) "\n "
+ SEMI@[14; 15) ";"
+ SEMI@[15; 16) ";"
+ SEMI@[16; 17) ";"
+ EXPR_STMT@[17; 29)
+ CALL_EXPR@[17; 28)
+ PATH_EXPR@[17; 26)
+ PATH@[17; 26)
+ PATH_SEGMENT@[17; 26)
+ NAME_REF@[17; 26)
+ IDENT@[17; 26) "some_expr"
+ ARG_LIST@[26; 28)
+ L_PAREN@[26; 27) "("
+ R_PAREN@[27; 28) ")"
+ SEMI@[28; 29) ";"
+ SEMI@[29; 30) ";"
+ SEMI@[30; 31) ";"
+ SEMI@[31; 32) ";"
+ EXPR_STMT@[32; 38)
+ BLOCK_EXPR@[32; 37)
+ BLOCK@[32; 37)
+ L_CURLY@[32; 33) "{"
+ SEMI@[33; 34) ";"
+ SEMI@[34; 35) ";"
+ SEMI@[35; 36) ";"
+ R_CURLY@[36; 37) "}"
+ SEMI@[37; 38) ";"
+ SEMI@[38; 39) ";"
+ SEMI@[39; 40) ";"
+ SEMI@[40; 41) ";"
+ CALL_EXPR@[41; 47)
+ PATH_EXPR@[41; 43)
+ PATH@[41; 43)
+ PATH_SEGMENT@[41; 43)
+ NAME_REF@[41; 43)
+ IDENT@[41; 43) "Ok"
+ ARG_LIST@[43; 47)
+ L_PAREN@[43; 44) "("
+ TUPLE_EXPR@[44; 46)
+ L_PAREN@[44; 45) "("
+ R_PAREN@[45; 46) ")"
+ R_PAREN@[46; 47) ")"
+ WHITESPACE@[47; 48) "\n"
+ R_CURLY@[48; 49) "}"
+ WHITESPACE@[49; 50) "\n"
--- /dev/null
+struct Test<T>(T) where T: Clone;
+struct Test<T>(T);
--- /dev/null
+SOURCE_FILE@[0; 53)
+ STRUCT_DEF@[0; 33)
+ STRUCT_KW@[0; 6) "struct"
+ WHITESPACE@[6; 7) " "
+ NAME@[7; 11)
+ IDENT@[7; 11) "Test"
+ TYPE_PARAM_LIST@[11; 14)
+ L_ANGLE@[11; 12) "<"
+ TYPE_PARAM@[12; 13)
+ NAME@[12; 13)
+ IDENT@[12; 13) "T"
+ R_ANGLE@[13; 14) ">"
+ POS_FIELD_DEF_LIST@[14; 17)
+ L_PAREN@[14; 15) "("
+ POS_FIELD_DEF@[15; 16)
+ PATH_TYPE@[15; 16)
+ PATH@[15; 16)
+ PATH_SEGMENT@[15; 16)
+ NAME_REF@[15; 16)
+ IDENT@[15; 16) "T"
+ R_PAREN@[16; 17) ")"
+ WHITESPACE@[17; 18) " "
+ WHERE_CLAUSE@[18; 32)
+ WHERE_KW@[18; 23) "where"
+ WHITESPACE@[23; 24) " "
+ WHERE_PRED@[24; 32)
+ PATH_TYPE@[24; 25)
+ PATH@[24; 25)
+ PATH_SEGMENT@[24; 25)
+ NAME_REF@[24; 25)
+ IDENT@[24; 25) "T"
+ COLON@[25; 26) ":"
+ WHITESPACE@[26; 27) " "
+ TYPE_BOUND_LIST@[27; 32)
+ TYPE_BOUND@[27; 32)
+ PATH_TYPE@[27; 32)
+ PATH@[27; 32)
+ PATH_SEGMENT@[27; 32)
+ NAME_REF@[27; 32)
+ IDENT@[27; 32) "Clone"
+ SEMI@[32; 33) ";"
+ WHITESPACE@[33; 34) "\n"
+ STRUCT_DEF@[34; 52)
+ STRUCT_KW@[34; 40) "struct"
+ WHITESPACE@[40; 41) " "
+ NAME@[41; 45)
+ IDENT@[41; 45) "Test"
+ TYPE_PARAM_LIST@[45; 48)
+ L_ANGLE@[45; 46) "<"
+ TYPE_PARAM@[46; 47)
+ NAME@[46; 47)
+ IDENT@[46; 47) "T"
+ R_ANGLE@[47; 48) ">"
+ POS_FIELD_DEF_LIST@[48; 51)
+ L_PAREN@[48; 49) "("
+ POS_FIELD_DEF@[49; 50)
+ PATH_TYPE@[49; 50)
+ PATH@[49; 50)
+ PATH_SEGMENT@[49; 50)
+ NAME_REF@[49; 50)
+ IDENT@[49; 50) "T"
+ R_PAREN@[50; 51) ")"
+ SEMI@[51; 52) ";"
+ WHITESPACE@[52; 53) "\n"
--- /dev/null
+struct S (
+ #[serde(with = "url_serde")]
+ pub Uri,
+);
--- /dev/null
+SOURCE_FILE@[0; 60)
+ STRUCT_DEF@[0; 59)
+ STRUCT_KW@[0; 6) "struct"
+ WHITESPACE@[6; 7) " "
+ NAME@[7; 8)
+ IDENT@[7; 8) "S"
+ WHITESPACE@[8; 9) " "
+ POS_FIELD_DEF_LIST@[9; 58)
+ L_PAREN@[9; 10) "("
+ WHITESPACE@[10; 15) "\n "
+ POS_FIELD_DEF@[15; 55)
+ ATTR@[15; 43)
+ POUND@[15; 16) "#"
+ TOKEN_TREE@[16; 43)
+ L_BRACK@[16; 17) "["
+ IDENT@[17; 22) "serde"
+ TOKEN_TREE@[22; 42)
+ L_PAREN@[22; 23) "("
+ IDENT@[23; 27) "with"
+ WHITESPACE@[27; 28) " "
+ EQ@[28; 29) "="
+ WHITESPACE@[29; 30) " "
+ STRING@[30; 41) "\"url_serde\""
+ R_PAREN@[41; 42) ")"
+ R_BRACK@[42; 43) "]"
+ WHITESPACE@[43; 48) "\n "
+ VISIBILITY@[48; 51)
+ PUB_KW@[48; 51) "pub"
+ WHITESPACE@[51; 52) " "
+ PATH_TYPE@[52; 55)
+ PATH@[52; 55)
+ PATH_SEGMENT@[52; 55)
+ NAME_REF@[52; 55)
+ IDENT@[52; 55) "Uri"
+ COMMA@[55; 56) ","
+ WHITESPACE@[56; 57) "\n"
+ R_PAREN@[57; 58) ")"
+ SEMI@[58; 59) ";"
+ WHITESPACE@[59; 60) "\n"
--- /dev/null
+trait Foo {
+ fn bar(_: u64, mut x: i32);
+}
--- /dev/null
+SOURCE_FILE@[0; 46)
+ TRAIT_DEF@[0; 45)
+ TRAIT_KW@[0; 5) "trait"
+ WHITESPACE@[5; 6) " "
+ NAME@[6; 9)
+ IDENT@[6; 9) "Foo"
+ WHITESPACE@[9; 10) " "
+ ITEM_LIST@[10; 45)
+ L_CURLY@[10; 11) "{"
+ WHITESPACE@[11; 16) "\n "
+ FN_DEF@[16; 43)
+ FN_KW@[16; 18) "fn"
+ WHITESPACE@[18; 19) " "
+ NAME@[19; 22)
+ IDENT@[19; 22) "bar"
+ PARAM_LIST@[22; 42)
+ L_PAREN@[22; 23) "("
+ PARAM@[23; 29)
+ PLACEHOLDER_PAT@[23; 24)
+ UNDERSCORE@[23; 24) "_"
+ COLON@[24; 25) ":"
+ WHITESPACE@[25; 26) " "
+ PATH_TYPE@[26; 29)
+ PATH@[26; 29)
+ PATH_SEGMENT@[26; 29)
+ NAME_REF@[26; 29)
+ IDENT@[26; 29) "u64"
+ COMMA@[29; 30) ","
+ WHITESPACE@[30; 31) " "
+ PARAM@[31; 41)
+ BIND_PAT@[31; 36)
+ MUT_KW@[31; 34) "mut"
+ WHITESPACE@[34; 35) " "
+ NAME@[35; 36)
+ IDENT@[35; 36) "x"
+ COLON@[36; 37) ":"
+ WHITESPACE@[37; 38) " "
+ PATH_TYPE@[38; 41)
+ PATH@[38; 41)
+ PATH_SEGMENT@[38; 41)
+ NAME_REF@[38; 41)
+ IDENT@[38; 41) "i32"
+ R_PAREN@[41; 42) ")"
+ SEMI@[42; 43) ";"
+ WHITESPACE@[43; 44) "\n"
+ R_CURLY@[44; 45) "}"
+ WHITESPACE@[45; 46) "\n"
--- /dev/null
+type A = foo!();
+type B = crate::foo!();
--- /dev/null
+SOURCE_FILE@[0; 41)
+ TYPE_ALIAS_DEF@[0; 16)
+ TYPE_KW@[0; 4) "type"
+ WHITESPACE@[4; 5) " "
+ NAME@[5; 6)
+ IDENT@[5; 6) "A"
+ WHITESPACE@[6; 7) " "
+ EQ@[7; 8) "="
+ WHITESPACE@[8; 9) " "
+ MACRO_CALL@[9; 15)
+ PATH@[9; 12)
+ PATH_SEGMENT@[9; 12)
+ NAME_REF@[9; 12)
+ IDENT@[9; 12) "foo"
+ EXCL@[12; 13) "!"
+ TOKEN_TREE@[13; 15)
+ L_PAREN@[13; 14) "("
+ R_PAREN@[14; 15) ")"
+ SEMI@[15; 16) ";"
+ WHITESPACE@[16; 17) "\n"
+ TYPE_ALIAS_DEF@[17; 40)
+ TYPE_KW@[17; 21) "type"
+ WHITESPACE@[21; 22) " "
+ NAME@[22; 23)
+ IDENT@[22; 23) "B"
+ WHITESPACE@[23; 24) " "
+ EQ@[24; 25) "="
+ WHITESPACE@[25; 26) " "
+ MACRO_CALL@[26; 39)
+ PATH@[26; 36)
+ PATH@[26; 31)
+ PATH_SEGMENT@[26; 31)
+ CRATE_KW@[26; 31) "crate"
+ COLONCOLON@[31; 33) "::"
+ PATH_SEGMENT@[33; 36)
+ NAME_REF@[33; 36)
+ IDENT@[33; 36) "foo"
+ EXCL@[36; 37) "!"
+ TOKEN_TREE@[37; 39)
+ L_PAREN@[37; 38) "("
+ R_PAREN@[38; 39) ")"
+ SEMI@[39; 40) ";"
+ WHITESPACE@[40; 41) "\n"
--- /dev/null
+enum F{}
+impl F {
+ //! This is a doc comment
+ #![doc("This is also a doc comment")]
+}
--- /dev/null
+SOURCE_FILE@[0; 94)
+ ENUM_DEF@[0; 8)
+ ENUM_KW@[0; 4) "enum"
+ WHITESPACE@[4; 5) " "
+ NAME@[5; 6)
+ IDENT@[5; 6) "F"
+ ENUM_VARIANT_LIST@[6; 8)
+ L_CURLY@[6; 7) "{"
+ R_CURLY@[7; 8) "}"
+ WHITESPACE@[8; 9) "\n"
+ IMPL_BLOCK@[9; 93)
+ IMPL_KW@[9; 13) "impl"
+ WHITESPACE@[13; 14) " "
+ PATH_TYPE@[14; 15)
+ PATH@[14; 15)
+ PATH_SEGMENT@[14; 15)
+ NAME_REF@[14; 15)
+ IDENT@[14; 15) "F"
+ WHITESPACE@[15; 16) " "
+ ITEM_LIST@[16; 93)
+ L_CURLY@[16; 17) "{"
+ WHITESPACE@[17; 23) "\n "
+ COMMENT@[23; 48) "//! This is a doc com ..."
+ WHITESPACE@[48; 54) "\n "
+ ATTR@[54; 91)
+ POUND@[54; 55) "#"
+ EXCL@[55; 56) "!"
+ TOKEN_TREE@[56; 91)
+ L_BRACK@[56; 57) "["
+ IDENT@[57; 60) "doc"
+ TOKEN_TREE@[60; 90)
+ L_PAREN@[60; 61) "("
+ STRING@[61; 89) "\"This is also a doc c ..."
+ R_PAREN@[89; 90) ")"
+ R_BRACK@[90; 91) "]"
+ WHITESPACE@[91; 92) "\n"
+ R_CURLY@[92; 93) "}"
+ WHITESPACE@[93; 94) "\n"
--- /dev/null
+fn foo() {
+ match () {
+ _ if foo => (),
+ }
+}
--- /dev/null
+SOURCE_FILE@[0; 58)
+ FN_DEF@[0; 57)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 57)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ MATCH_EXPR@[15; 55)
+ MATCH_KW@[15; 20) "match"
+ WHITESPACE@[20; 21) " "
+ TUPLE_EXPR@[21; 23)
+ L_PAREN@[21; 22) "("
+ R_PAREN@[22; 23) ")"
+ WHITESPACE@[23; 24) " "
+ MATCH_ARM_LIST@[24; 55)
+ L_CURLY@[24; 25) "{"
+ WHITESPACE@[25; 34) "\n "
+ MATCH_ARM@[34; 48)
+ PLACEHOLDER_PAT@[34; 35)
+ UNDERSCORE@[34; 35) "_"
+ WHITESPACE@[35; 36) " "
+ MATCH_GUARD@[36; 42)
+ IF_KW@[36; 38) "if"
+ WHITESPACE@[38; 39) " "
+ PATH_EXPR@[39; 42)
+ PATH@[39; 42)
+ PATH_SEGMENT@[39; 42)
+ NAME_REF@[39; 42)
+ IDENT@[39; 42) "foo"
+ WHITESPACE@[42; 43) " "
+ FAT_ARROW@[43; 45) "=>"
+ WHITESPACE@[45; 46) " "
+ TUPLE_EXPR@[46; 48)
+ L_PAREN@[46; 47) "("
+ R_PAREN@[47; 48) ")"
+ COMMA@[48; 49) ","
+ WHITESPACE@[49; 54) "\n "
+ R_CURLY@[54; 55) "}"
+ WHITESPACE@[55; 56) "\n"
+ R_CURLY@[56; 57) "}"
+ WHITESPACE@[57; 58) "\n"
--- /dev/null
+fn foo() {
+ match () {
+ #![doc("Inner attribute")]
+ #![doc("Can be")]
+ #![doc("Stacked")]
+ _ => (),
+ }
+}
--- /dev/null
+SOURCE_FILE@[0; 139)
+ FN_DEF@[0; 138)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 138)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ MATCH_EXPR@[15; 136)
+ MATCH_KW@[15; 20) "match"
+ WHITESPACE@[20; 21) " "
+ TUPLE_EXPR@[21; 23)
+ L_PAREN@[21; 22) "("
+ R_PAREN@[22; 23) ")"
+ WHITESPACE@[23; 24) " "
+ MATCH_ARM_LIST@[24; 136)
+ L_CURLY@[24; 25) "{"
+ WHITESPACE@[25; 34) "\n "
+ ATTR@[34; 60)
+ POUND@[34; 35) "#"
+ EXCL@[35; 36) "!"
+ TOKEN_TREE@[36; 60)
+ L_BRACK@[36; 37) "["
+ IDENT@[37; 40) "doc"
+ TOKEN_TREE@[40; 59)
+ L_PAREN@[40; 41) "("
+ STRING@[41; 58) "\"Inner attribute\""
+ R_PAREN@[58; 59) ")"
+ R_BRACK@[59; 60) "]"
+ WHITESPACE@[60; 69) "\n "
+ ATTR@[69; 86)
+ POUND@[69; 70) "#"
+ EXCL@[70; 71) "!"
+ TOKEN_TREE@[71; 86)
+ L_BRACK@[71; 72) "["
+ IDENT@[72; 75) "doc"
+ TOKEN_TREE@[75; 85)
+ L_PAREN@[75; 76) "("
+ STRING@[76; 84) "\"Can be\""
+ R_PAREN@[84; 85) ")"
+ R_BRACK@[85; 86) "]"
+ WHITESPACE@[86; 95) "\n "
+ ATTR@[95; 113)
+ POUND@[95; 96) "#"
+ EXCL@[96; 97) "!"
+ TOKEN_TREE@[97; 113)
+ L_BRACK@[97; 98) "["
+ IDENT@[98; 101) "doc"
+ TOKEN_TREE@[101; 112)
+ L_PAREN@[101; 102) "("
+ STRING@[102; 111) "\"Stacked\""
+ R_PAREN@[111; 112) ")"
+ R_BRACK@[112; 113) "]"
+ WHITESPACE@[113; 122) "\n "
+ MATCH_ARM@[122; 129)
+ PLACEHOLDER_PAT@[122; 123)
+ UNDERSCORE@[122; 123) "_"
+ WHITESPACE@[123; 124) " "
+ FAT_ARROW@[124; 126) "=>"
+ WHITESPACE@[126; 127) " "
+ TUPLE_EXPR@[127; 129)
+ L_PAREN@[127; 128) "("
+ R_PAREN@[128; 129) ")"
+ COMMA@[129; 130) ","
+ WHITESPACE@[130; 135) "\n "
+ R_CURLY@[135; 136) "}"
+ WHITESPACE@[136; 137) "\n"
+ R_CURLY@[137; 138) "}"
+ WHITESPACE@[138; 139) "\n"
--- /dev/null
+fn foo() {
+ match () {
+ #[cfg(feature = "some")]
+ _ => (),
+ #[cfg(feature = "other")]
+ _ => (),
+ #[cfg(feature = "many")]
+ #[cfg(feature = "attributes")]
+ #[cfg(feature = "before")]
+ _ => (),
+ }
+}
--- /dev/null
+SOURCE_FILE@[0; 259)
+ FN_DEF@[0; 258)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 258)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ MATCH_EXPR@[15; 256)
+ MATCH_KW@[15; 20) "match"
+ WHITESPACE@[20; 21) " "
+ TUPLE_EXPR@[21; 23)
+ L_PAREN@[21; 22) "("
+ R_PAREN@[22; 23) ")"
+ WHITESPACE@[23; 24) " "
+ MATCH_ARM_LIST@[24; 256)
+ L_CURLY@[24; 25) "{"
+ WHITESPACE@[25; 34) "\n "
+ MATCH_ARM@[34; 74)
+ ATTR@[34; 58)
+ POUND@[34; 35) "#"
+ TOKEN_TREE@[35; 58)
+ L_BRACK@[35; 36) "["
+ IDENT@[36; 39) "cfg"
+ TOKEN_TREE@[39; 57)
+ L_PAREN@[39; 40) "("
+ IDENT@[40; 47) "feature"
+ WHITESPACE@[47; 48) " "
+ EQ@[48; 49) "="
+ WHITESPACE@[49; 50) " "
+ STRING@[50; 56) "\"some\""
+ R_PAREN@[56; 57) ")"
+ R_BRACK@[57; 58) "]"
+ WHITESPACE@[58; 67) "\n "
+ PLACEHOLDER_PAT@[67; 68)
+ UNDERSCORE@[67; 68) "_"
+ WHITESPACE@[68; 69) " "
+ FAT_ARROW@[69; 71) "=>"
+ WHITESPACE@[71; 72) " "
+ TUPLE_EXPR@[72; 74)
+ L_PAREN@[72; 73) "("
+ R_PAREN@[73; 74) ")"
+ COMMA@[74; 75) ","
+ WHITESPACE@[75; 84) "\n "
+ MATCH_ARM@[84; 125)
+ ATTR@[84; 109)
+ POUND@[84; 85) "#"
+ TOKEN_TREE@[85; 109)
+ L_BRACK@[85; 86) "["
+ IDENT@[86; 89) "cfg"
+ TOKEN_TREE@[89; 108)
+ L_PAREN@[89; 90) "("
+ IDENT@[90; 97) "feature"
+ WHITESPACE@[97; 98) " "
+ EQ@[98; 99) "="
+ WHITESPACE@[99; 100) " "
+ STRING@[100; 107) "\"other\""
+ R_PAREN@[107; 108) ")"
+ R_BRACK@[108; 109) "]"
+ WHITESPACE@[109; 118) "\n "
+ PLACEHOLDER_PAT@[118; 119)
+ UNDERSCORE@[118; 119) "_"
+ WHITESPACE@[119; 120) " "
+ FAT_ARROW@[120; 122) "=>"
+ WHITESPACE@[122; 123) " "
+ TUPLE_EXPR@[123; 125)
+ L_PAREN@[123; 124) "("
+ R_PAREN@[124; 125) ")"
+ COMMA@[125; 126) ","
+ WHITESPACE@[126; 135) "\n "
+ MATCH_ARM@[135; 249)
+ ATTR@[135; 159)
+ POUND@[135; 136) "#"
+ TOKEN_TREE@[136; 159)
+ L_BRACK@[136; 137) "["
+ IDENT@[137; 140) "cfg"
+ TOKEN_TREE@[140; 158)
+ L_PAREN@[140; 141) "("
+ IDENT@[141; 148) "feature"
+ WHITESPACE@[148; 149) " "
+ EQ@[149; 150) "="
+ WHITESPACE@[150; 151) " "
+ STRING@[151; 157) "\"many\""
+ R_PAREN@[157; 158) ")"
+ R_BRACK@[158; 159) "]"
+ WHITESPACE@[159; 168) "\n "
+ ATTR@[168; 198)
+ POUND@[168; 169) "#"
+ TOKEN_TREE@[169; 198)
+ L_BRACK@[169; 170) "["
+ IDENT@[170; 173) "cfg"
+ TOKEN_TREE@[173; 197)
+ L_PAREN@[173; 174) "("
+ IDENT@[174; 181) "feature"
+ WHITESPACE@[181; 182) " "
+ EQ@[182; 183) "="
+ WHITESPACE@[183; 184) " "
+ STRING@[184; 196) "\"attributes\""
+ R_PAREN@[196; 197) ")"
+ R_BRACK@[197; 198) "]"
+ WHITESPACE@[198; 207) "\n "
+ ATTR@[207; 233)
+ POUND@[207; 208) "#"
+ TOKEN_TREE@[208; 233)
+ L_BRACK@[208; 209) "["
+ IDENT@[209; 212) "cfg"
+ TOKEN_TREE@[212; 232)
+ L_PAREN@[212; 213) "("
+ IDENT@[213; 220) "feature"
+ WHITESPACE@[220; 221) " "
+ EQ@[221; 222) "="
+ WHITESPACE@[222; 223) " "
+ STRING@[223; 231) "\"before\""
+ R_PAREN@[231; 232) ")"
+ R_BRACK@[232; 233) "]"
+ WHITESPACE@[233; 242) "\n "
+ PLACEHOLDER_PAT@[242; 243)
+ UNDERSCORE@[242; 243) "_"
+ WHITESPACE@[243; 244) " "
+ FAT_ARROW@[244; 246) "=>"
+ WHITESPACE@[246; 247) " "
+ TUPLE_EXPR@[247; 249)
+ L_PAREN@[247; 248) "("
+ R_PAREN@[248; 249) ")"
+ COMMA@[249; 250) ","
+ WHITESPACE@[250; 255) "\n "
+ R_CURLY@[255; 256) "}"
+ WHITESPACE@[256; 257) "\n"
+ R_CURLY@[257; 258) "}"
+ WHITESPACE@[258; 259) "\n"
--- /dev/null
+fn foo<#[derive(Lifetime)] 'a, #[derive(Type)] T>(_: &'a T) {
+}
--- /dev/null
+SOURCE_FILE@[0; 64)
+ FN_DEF@[0; 63)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ TYPE_PARAM_LIST@[6; 49)
+ L_ANGLE@[6; 7) "<"
+ LIFETIME_PARAM@[7; 29)
+ ATTR@[7; 26)
+ POUND@[7; 8) "#"
+ TOKEN_TREE@[8; 26)
+ L_BRACK@[8; 9) "["
+ IDENT@[9; 15) "derive"
+ TOKEN_TREE@[15; 25)
+ L_PAREN@[15; 16) "("
+ IDENT@[16; 24) "Lifetime"
+ R_PAREN@[24; 25) ")"
+ R_BRACK@[25; 26) "]"
+ WHITESPACE@[26; 27) " "
+ LIFETIME@[27; 29) "\'a"
+ COMMA@[29; 30) ","
+ WHITESPACE@[30; 31) " "
+ TYPE_PARAM@[31; 48)
+ ATTR@[31; 46)
+ POUND@[31; 32) "#"
+ TOKEN_TREE@[32; 46)
+ L_BRACK@[32; 33) "["
+ IDENT@[33; 39) "derive"
+ TOKEN_TREE@[39; 45)
+ L_PAREN@[39; 40) "("
+ IDENT@[40; 44) "Type"
+ R_PAREN@[44; 45) ")"
+ R_BRACK@[45; 46) "]"
+ WHITESPACE@[46; 47) " "
+ NAME@[47; 48)
+ IDENT@[47; 48) "T"
+ R_ANGLE@[48; 49) ">"
+ PARAM_LIST@[49; 59)
+ L_PAREN@[49; 50) "("
+ PARAM@[50; 58)
+ PLACEHOLDER_PAT@[50; 51)
+ UNDERSCORE@[50; 51) "_"
+ COLON@[51; 52) ":"
+ WHITESPACE@[52; 53) " "
+ REFERENCE_TYPE@[53; 58)
+ AMP@[53; 54) "&"
+ LIFETIME@[54; 56) "\'a"
+ WHITESPACE@[56; 57) " "
+ PATH_TYPE@[57; 58)
+ PATH@[57; 58)
+ PATH_SEGMENT@[57; 58)
+ NAME_REF@[57; 58)
+ IDENT@[57; 58) "T"
+ R_PAREN@[58; 59) ")"
+ WHITESPACE@[59; 60) " "
+ BLOCK@[60; 63)
+ L_CURLY@[60; 61) "{"
+ WHITESPACE@[61; 62) "\n"
+ R_CURLY@[62; 63) "}"
+ WHITESPACE@[63; 64) "\n"
--- /dev/null
+extern "C" { fn printf(format: *const i8, ...) -> i32; }
--- /dev/null
+SOURCE_FILE@[0; 57)
+ EXTERN_BLOCK@[0; 56)
+ ABI@[0; 10)
+ EXTERN_KW@[0; 6) "extern"
+ WHITESPACE@[6; 7) " "
+ STRING@[7; 10) "\"C\""
+ WHITESPACE@[10; 11) " "
+ EXTERN_ITEM_LIST@[11; 56)
+ L_CURLY@[11; 12) "{"
+ WHITESPACE@[12; 13) " "
+ FN_DEF@[13; 54)
+ FN_KW@[13; 15) "fn"
+ WHITESPACE@[15; 16) " "
+ NAME@[16; 22)
+ IDENT@[16; 22) "printf"
+ PARAM_LIST@[22; 46)
+ L_PAREN@[22; 23) "("
+ PARAM@[23; 40)
+ BIND_PAT@[23; 29)
+ NAME@[23; 29)
+ IDENT@[23; 29) "format"
+ COLON@[29; 30) ":"
+ WHITESPACE@[30; 31) " "
+ POINTER_TYPE@[31; 40)
+ STAR@[31; 32) "*"
+ CONST_KW@[32; 37) "const"
+ WHITESPACE@[37; 38) " "
+ PATH_TYPE@[38; 40)
+ PATH@[38; 40)
+ PATH_SEGMENT@[38; 40)
+ NAME_REF@[38; 40)
+ IDENT@[38; 40) "i8"
+ COMMA@[40; 41) ","
+ WHITESPACE@[41; 42) " "
+ DOTDOTDOT@[42; 45) "..."
+ R_PAREN@[45; 46) ")"
+ WHITESPACE@[46; 47) " "
+ RET_TYPE@[47; 53)
+ THIN_ARROW@[47; 49) "->"
+ WHITESPACE@[49; 50) " "
+ PATH_TYPE@[50; 53)
+ PATH@[50; 53)
+ PATH_SEGMENT@[50; 53)
+ NAME_REF@[50; 53)
+ IDENT@[50; 53) "i32"
+ SEMI@[53; 54) ";"
+ WHITESPACE@[54; 55) " "
+ R_CURLY@[55; 56) "}"
+ WHITESPACE@[56; 57) "\n"
--- /dev/null
+async fn foo() {}
--- /dev/null
+SOURCE_FILE@[0; 18)
+ FN_DEF@[0; 17)
+ ASYNC_KW@[0; 5) "async"
+ WHITESPACE@[5; 6) " "
+ FN_KW@[6; 8) "fn"
+ WHITESPACE@[8; 9) " "
+ NAME@[9; 12)
+ IDENT@[9; 12) "foo"
+ PARAM_LIST@[12; 14)
+ L_PAREN@[12; 13) "("
+ R_PAREN@[13; 14) ")"
+ WHITESPACE@[14; 15) " "
+ BLOCK@[15; 17)
+ L_CURLY@[15; 16) "{"
+ R_CURLY@[16; 17) "}"
+ WHITESPACE@[17; 18) "\n"
--- /dev/null
+fn foo() { crate::foo(); }
--- /dev/null
+SOURCE_FILE@[0; 27)
+ FN_DEF@[0; 26)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 26)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 11) " "
+ EXPR_STMT@[11; 24)
+ CALL_EXPR@[11; 23)
+ PATH_EXPR@[11; 21)
+ PATH@[11; 21)
+ PATH@[11; 16)
+ PATH_SEGMENT@[11; 16)
+ CRATE_KW@[11; 16) "crate"
+ COLONCOLON@[16; 18) "::"
+ PATH_SEGMENT@[18; 21)
+ NAME_REF@[18; 21)
+ IDENT@[18; 21) "foo"
+ ARG_LIST@[21; 23)
+ L_PAREN@[21; 22) "("
+ R_PAREN@[22; 23) ")"
+ SEMI@[23; 24) ";"
+ WHITESPACE@[24; 25) " "
+ R_CURLY@[25; 26) "}"
+ WHITESPACE@[26; 27) "\n"
--- /dev/null
+fn main() {
+ S { #[cfg(test)] field: 1 }
+}
--- /dev/null
+SOURCE_FILE@[0; 46)
+ FN_DEF@[0; 45)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 7)
+ IDENT@[3; 7) "main"
+ PARAM_LIST@[7; 9)
+ L_PAREN@[7; 8) "("
+ R_PAREN@[8; 9) ")"
+ WHITESPACE@[9; 10) " "
+ BLOCK@[10; 45)
+ L_CURLY@[10; 11) "{"
+ WHITESPACE@[11; 16) "\n "
+ STRUCT_LIT@[16; 43)
+ PATH@[16; 17)
+ PATH_SEGMENT@[16; 17)
+ NAME_REF@[16; 17)
+ IDENT@[16; 17) "S"
+ WHITESPACE@[17; 18) " "
+ NAMED_FIELD_LIST@[18; 43)
+ L_CURLY@[18; 19) "{"
+ WHITESPACE@[19; 20) " "
+ NAMED_FIELD@[20; 41)
+ ATTR@[20; 32)
+ POUND@[20; 21) "#"
+ TOKEN_TREE@[21; 32)
+ L_BRACK@[21; 22) "["
+ IDENT@[22; 25) "cfg"
+ TOKEN_TREE@[25; 31)
+ L_PAREN@[25; 26) "("
+ IDENT@[26; 30) "test"
+ R_PAREN@[30; 31) ")"
+ R_BRACK@[31; 32) "]"
+ WHITESPACE@[32; 33) " "
+ NAME_REF@[33; 38)
+ IDENT@[33; 38) "field"
+ COLON@[38; 39) ":"
+ WHITESPACE@[39; 40) " "
+ LITERAL@[40; 41)
+ INT_NUMBER@[40; 41) "1"
+ WHITESPACE@[41; 42) " "
+ R_CURLY@[42; 43) "}"
+ WHITESPACE@[43; 44) "\n"
+ R_CURLY@[44; 45) "}"
+ WHITESPACE@[45; 46) "\n"
--- /dev/null
+fn foo() {
+ #[A] foo();
+ #[B] bar!{}
+ #[C] #[D] {}
+ #[D] return ();
+}
--- /dev/null
+SOURCE_FILE@[0; 82)
+ FN_DEF@[0; 81)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 81)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ EXPR_STMT@[15; 26)
+ ATTR@[15; 19)
+ POUND@[15; 16) "#"
+ TOKEN_TREE@[16; 19)
+ L_BRACK@[16; 17) "["
+ IDENT@[17; 18) "A"
+ R_BRACK@[18; 19) "]"
+ WHITESPACE@[19; 20) " "
+ CALL_EXPR@[20; 25)
+ PATH_EXPR@[20; 23)
+ PATH@[20; 23)
+ PATH_SEGMENT@[20; 23)
+ NAME_REF@[20; 23)
+ IDENT@[20; 23) "foo"
+ ARG_LIST@[23; 25)
+ L_PAREN@[23; 24) "("
+ R_PAREN@[24; 25) ")"
+ SEMI@[25; 26) ";"
+ WHITESPACE@[26; 31) "\n "
+ EXPR_STMT@[31; 42)
+ ATTR@[31; 35)
+ POUND@[31; 32) "#"
+ TOKEN_TREE@[32; 35)
+ L_BRACK@[32; 33) "["
+ IDENT@[33; 34) "B"
+ R_BRACK@[34; 35) "]"
+ WHITESPACE@[35; 36) " "
+ MACRO_CALL@[36; 42)
+ PATH@[36; 39)
+ PATH_SEGMENT@[36; 39)
+ NAME_REF@[36; 39)
+ IDENT@[36; 39) "bar"
+ EXCL@[39; 40) "!"
+ TOKEN_TREE@[40; 42)
+ L_CURLY@[40; 41) "{"
+ R_CURLY@[41; 42) "}"
+ WHITESPACE@[42; 47) "\n "
+ EXPR_STMT@[47; 59)
+ ATTR@[47; 51)
+ POUND@[47; 48) "#"
+ TOKEN_TREE@[48; 51)
+ L_BRACK@[48; 49) "["
+ IDENT@[49; 50) "C"
+ R_BRACK@[50; 51) "]"
+ WHITESPACE@[51; 52) " "
+ ATTR@[52; 56)
+ POUND@[52; 53) "#"
+ TOKEN_TREE@[53; 56)
+ L_BRACK@[53; 54) "["
+ IDENT@[54; 55) "D"
+ R_BRACK@[55; 56) "]"
+ WHITESPACE@[56; 57) " "
+ BLOCK_EXPR@[57; 59)
+ BLOCK@[57; 59)
+ L_CURLY@[57; 58) "{"
+ R_CURLY@[58; 59) "}"
+ WHITESPACE@[59; 64) "\n "
+ EXPR_STMT@[64; 79)
+ ATTR@[64; 68)
+ POUND@[64; 65) "#"
+ TOKEN_TREE@[65; 68)
+ L_BRACK@[65; 66) "["
+ IDENT@[66; 67) "D"
+ R_BRACK@[67; 68) "]"
+ WHITESPACE@[68; 69) " "
+ RETURN_EXPR@[69; 78)
+ RETURN_KW@[69; 75) "return"
+ WHITESPACE@[75; 76) " "
+ TUPLE_EXPR@[76; 78)
+ L_PAREN@[76; 77) "("
+ R_PAREN@[77; 78) ")"
+ SEMI@[78; 79) ";"
+ WHITESPACE@[79; 80) "\n"
+ R_CURLY@[80; 81) "}"
+ WHITESPACE@[81; 82) "\n"
--- /dev/null
+fn foo() {
+ { #[A] bar!()? }
+ #[B] &()
+}
--- /dev/null
+SOURCE_FILE@[0; 47)
+ FN_DEF@[0; 46)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 46)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ EXPR_STMT@[15; 31)
+ BLOCK_EXPR@[15; 31)
+ BLOCK@[15; 31)
+ L_CURLY@[15; 16) "{"
+ WHITESPACE@[16; 17) " "
+ TRY_EXPR@[17; 29)
+ ATTR@[17; 21)
+ POUND@[17; 18) "#"
+ TOKEN_TREE@[18; 21)
+ L_BRACK@[18; 19) "["
+ IDENT@[19; 20) "A"
+ R_BRACK@[20; 21) "]"
+ WHITESPACE@[21; 22) " "
+ MACRO_CALL@[22; 28)
+ PATH@[22; 25)
+ PATH_SEGMENT@[22; 25)
+ NAME_REF@[22; 25)
+ IDENT@[22; 25) "bar"
+ EXCL@[25; 26) "!"
+ TOKEN_TREE@[26; 28)
+ L_PAREN@[26; 27) "("
+ R_PAREN@[27; 28) ")"
+ QUESTION@[28; 29) "?"
+ WHITESPACE@[29; 30) " "
+ R_CURLY@[30; 31) "}"
+ WHITESPACE@[31; 36) "\n "
+ REF_EXPR@[36; 44)
+ ATTR@[36; 40)
+ POUND@[36; 37) "#"
+ TOKEN_TREE@[37; 40)
+ L_BRACK@[37; 38) "["
+ IDENT@[38; 39) "B"
+ R_BRACK@[39; 40) "]"
+ WHITESPACE@[40; 41) " "
+ AMP@[41; 42) "&"
+ TUPLE_EXPR@[42; 44)
+ L_PAREN@[42; 43) "("
+ R_PAREN@[43; 44) ")"
+ WHITESPACE@[44; 45) "\n"
+ R_CURLY@[45; 46) "}"
+ WHITESPACE@[46; 47) "\n"
--- /dev/null
+unsafe async fn foo() {}
+const unsafe fn bar() {}
--- /dev/null
+SOURCE_FILE@[0; 50)
+ FN_DEF@[0; 24)
+ UNSAFE_KW@[0; 6) "unsafe"
+ WHITESPACE@[6; 7) " "
+ ASYNC_KW@[7; 12) "async"
+ WHITESPACE@[12; 13) " "
+ FN_KW@[13; 15) "fn"
+ WHITESPACE@[15; 16) " "
+ NAME@[16; 19)
+ IDENT@[16; 19) "foo"
+ PARAM_LIST@[19; 21)
+ L_PAREN@[19; 20) "("
+ R_PAREN@[20; 21) ")"
+ WHITESPACE@[21; 22) " "
+ BLOCK@[22; 24)
+ L_CURLY@[22; 23) "{"
+ R_CURLY@[23; 24) "}"
+ WHITESPACE@[24; 25) "\n"
+ FN_DEF@[25; 49)
+ CONST_KW@[25; 30) "const"
+ WHITESPACE@[30; 31) " "
+ UNSAFE_KW@[31; 37) "unsafe"
+ WHITESPACE@[37; 38) " "
+ FN_KW@[38; 40) "fn"
+ WHITESPACE@[40; 41) " "
+ NAME@[41; 44)
+ IDENT@[41; 44) "bar"
+ PARAM_LIST@[44; 46)
+ L_PAREN@[44; 45) "("
+ R_PAREN@[45; 46) ")"
+ WHITESPACE@[46; 47) " "
+ BLOCK@[47; 49)
+ L_CURLY@[47; 48) "{"
+ R_CURLY@[48; 49) "}"
+ WHITESPACE@[49; 50) "\n"
--- /dev/null
+fn main() {
+ let m!(x) = 0;
+}
--- /dev/null
+SOURCE_FILE@[0; 33)
+ FN_DEF@[0; 32)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 7)
+ IDENT@[3; 7) "main"
+ PARAM_LIST@[7; 9)
+ L_PAREN@[7; 8) "("
+ R_PAREN@[8; 9) ")"
+ WHITESPACE@[9; 10) " "
+ BLOCK@[10; 32)
+ L_CURLY@[10; 11) "{"
+ WHITESPACE@[11; 16) "\n "
+ LET_STMT@[16; 30)
+ LET_KW@[16; 19) "let"
+ WHITESPACE@[19; 20) " "
+ MACRO_CALL@[20; 25)
+ PATH_PAT@[20; 21)
+ PATH@[20; 21)
+ PATH_SEGMENT@[20; 21)
+ NAME_REF@[20; 21)
+ IDENT@[20; 21) "m"
+ EXCL@[21; 22) "!"
+ TOKEN_TREE@[22; 25)
+ L_PAREN@[22; 23) "("
+ IDENT@[23; 24) "x"
+ R_PAREN@[24; 25) ")"
+ WHITESPACE@[25; 26) " "
+ EQ@[26; 27) "="
+ WHITESPACE@[27; 28) " "
+ LITERAL@[28; 29)
+ INT_NUMBER@[28; 29) "0"
+ SEMI@[29; 30) ";"
+ WHITESPACE@[30; 31) "\n"
+ R_CURLY@[31; 32) "}"
+ WHITESPACE@[32; 33) "\n"
--- /dev/null
+fn foo() {
+ let a;
+ let b: i32;
+ let c = 92;
+ let d: i32 = 92;
+ let e: !;
+ let _: ! = {};
+}
--- /dev/null
+SOURCE_FILE@[0; 110)
+ FN_DEF@[0; 109)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 109)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ LET_STMT@[15; 21)
+ LET_KW@[15; 18) "let"
+ WHITESPACE@[18; 19) " "
+ BIND_PAT@[19; 20)
+ NAME@[19; 20)
+ IDENT@[19; 20) "a"
+ SEMI@[20; 21) ";"
+ WHITESPACE@[21; 26) "\n "
+ LET_STMT@[26; 37)
+ LET_KW@[26; 29) "let"
+ WHITESPACE@[29; 30) " "
+ BIND_PAT@[30; 31)
+ NAME@[30; 31)
+ IDENT@[30; 31) "b"
+ COLON@[31; 32) ":"
+ WHITESPACE@[32; 33) " "
+ PATH_TYPE@[33; 36)
+ PATH@[33; 36)
+ PATH_SEGMENT@[33; 36)
+ NAME_REF@[33; 36)
+ IDENT@[33; 36) "i32"
+ SEMI@[36; 37) ";"
+ WHITESPACE@[37; 42) "\n "
+ LET_STMT@[42; 53)
+ LET_KW@[42; 45) "let"
+ WHITESPACE@[45; 46) " "
+ BIND_PAT@[46; 47)
+ NAME@[46; 47)
+ IDENT@[46; 47) "c"
+ WHITESPACE@[47; 48) " "
+ EQ@[48; 49) "="
+ WHITESPACE@[49; 50) " "
+ LITERAL@[50; 52)
+ INT_NUMBER@[50; 52) "92"
+ SEMI@[52; 53) ";"
+ WHITESPACE@[53; 58) "\n "
+ LET_STMT@[58; 74)
+ LET_KW@[58; 61) "let"
+ WHITESPACE@[61; 62) " "
+ BIND_PAT@[62; 63)
+ NAME@[62; 63)
+ IDENT@[62; 63) "d"
+ COLON@[63; 64) ":"
+ WHITESPACE@[64; 65) " "
+ PATH_TYPE@[65; 68)
+ PATH@[65; 68)
+ PATH_SEGMENT@[65; 68)
+ NAME_REF@[65; 68)
+ IDENT@[65; 68) "i32"
+ WHITESPACE@[68; 69) " "
+ EQ@[69; 70) "="
+ WHITESPACE@[70; 71) " "
+ LITERAL@[71; 73)
+ INT_NUMBER@[71; 73) "92"
+ SEMI@[73; 74) ";"
+ WHITESPACE@[74; 79) "\n "
+ LET_STMT@[79; 88)
+ LET_KW@[79; 82) "let"
+ WHITESPACE@[82; 83) " "
+ BIND_PAT@[83; 84)
+ NAME@[83; 84)
+ IDENT@[83; 84) "e"
+ COLON@[84; 85) ":"
+ WHITESPACE@[85; 86) " "
+ NEVER_TYPE@[86; 87)
+ EXCL@[86; 87) "!"
+ SEMI@[87; 88) ";"
+ WHITESPACE@[88; 93) "\n "
+ LET_STMT@[93; 107)
+ LET_KW@[93; 96) "let"
+ WHITESPACE@[96; 97) " "
+ PLACEHOLDER_PAT@[97; 98)
+ UNDERSCORE@[97; 98) "_"
+ COLON@[98; 99) ":"
+ WHITESPACE@[99; 100) " "
+ NEVER_TYPE@[100; 101)
+ EXCL@[100; 101) "!"
+ WHITESPACE@[101; 102) " "
+ EQ@[102; 103) "="
+ WHITESPACE@[103; 104) " "
+ BLOCK_EXPR@[104; 106)
+ BLOCK@[104; 106)
+ L_CURLY@[104; 105) "{"
+ R_CURLY@[105; 106) "}"
+ SEMI@[106; 107) ";"
+ WHITESPACE@[107; 108) "\n"
+ R_CURLY@[108; 109) "}"
+ WHITESPACE@[109; 110) "\n"
--- /dev/null
+fn foo() {
+ let _ = try {};
+}
--- /dev/null
+SOURCE_FILE@[0; 33)
+ FN_DEF@[0; 32)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 32)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ LET_STMT@[15; 30)
+ LET_KW@[15; 18) "let"
+ WHITESPACE@[18; 19) " "
+ PLACEHOLDER_PAT@[19; 20)
+ UNDERSCORE@[19; 20) "_"
+ WHITESPACE@[20; 21) " "
+ EQ@[21; 22) "="
+ WHITESPACE@[22; 23) " "
+ TRY_EXPR@[23; 29)
+ TRY_KW@[23; 26) "try"
+ WHITESPACE@[26; 27) " "
+ BLOCK@[27; 29)
+ L_CURLY@[27; 28) "{"
+ R_CURLY@[28; 29) "}"
+ SEMI@[29; 30) ";"
+ WHITESPACE@[30; 31) "\n"
+ R_CURLY@[31; 32) "}"
+ WHITESPACE@[32; 33) "\n"
--- /dev/null
+existential type Foo: Fn() -> usize;
--- /dev/null
+SOURCE_FILE@[0; 37)
+ TYPE_ALIAS_DEF@[0; 36)
+ EXISTENTIAL_KW@[0; 11) "existential"
+ WHITESPACE@[11; 12) " "
+ TYPE_KW@[12; 16) "type"
+ WHITESPACE@[16; 17) " "
+ NAME@[17; 20)
+ IDENT@[17; 20) "Foo"
+ COLON@[20; 21) ":"
+ WHITESPACE@[21; 22) " "
+ TYPE_BOUND_LIST@[22; 35)
+ TYPE_BOUND@[22; 35)
+ PATH_TYPE@[22; 35)
+ PATH@[22; 35)
+ PATH_SEGMENT@[22; 35)
+ NAME_REF@[22; 24)
+ IDENT@[22; 24) "Fn"
+ PARAM_LIST@[24; 26)
+ L_PAREN@[24; 25) "("
+ R_PAREN@[25; 26) ")"
+ WHITESPACE@[26; 27) " "
+ RET_TYPE@[27; 35)
+ THIN_ARROW@[27; 29) "->"
+ WHITESPACE@[29; 30) " "
+ PATH_TYPE@[30; 35)
+ PATH@[30; 35)
+ PATH_SEGMENT@[30; 35)
+ NAME_REF@[30; 35)
+ IDENT@[30; 35) "usize"
+ SEMI@[35; 36) ";"
+ WHITESPACE@[36; 37) "\n"
--- /dev/null
+fn foo() {
+ let x = box 1i32;
+ let y = (box 1i32, box 2i32);
+ let z = Foo(box 1i32, box 2i32);
+}
--- /dev/null
+SOURCE_FILE@[0; 106)
+ FN_DEF@[0; 105)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 105)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ LET_STMT@[15; 32)
+ LET_KW@[15; 18) "let"
+ WHITESPACE@[18; 19) " "
+ BIND_PAT@[19; 20)
+ NAME@[19; 20)
+ IDENT@[19; 20) "x"
+ WHITESPACE@[20; 21) " "
+ EQ@[21; 22) "="
+ WHITESPACE@[22; 23) " "
+ BOX_EXPR@[23; 31)
+ BOX_KW@[23; 26) "box"
+ WHITESPACE@[26; 27) " "
+ LITERAL@[27; 31)
+ INT_NUMBER@[27; 31) "1i32"
+ SEMI@[31; 32) ";"
+ WHITESPACE@[32; 37) "\n "
+ LET_STMT@[37; 66)
+ LET_KW@[37; 40) "let"
+ WHITESPACE@[40; 41) " "
+ BIND_PAT@[41; 42)
+ NAME@[41; 42)
+ IDENT@[41; 42) "y"
+ WHITESPACE@[42; 43) " "
+ EQ@[43; 44) "="
+ WHITESPACE@[44; 45) " "
+ TUPLE_EXPR@[45; 65)
+ L_PAREN@[45; 46) "("
+ BOX_EXPR@[46; 54)
+ BOX_KW@[46; 49) "box"
+ WHITESPACE@[49; 50) " "
+ LITERAL@[50; 54)
+ INT_NUMBER@[50; 54) "1i32"
+ COMMA@[54; 55) ","
+ WHITESPACE@[55; 56) " "
+ BOX_EXPR@[56; 64)
+ BOX_KW@[56; 59) "box"
+ WHITESPACE@[59; 60) " "
+ LITERAL@[60; 64)
+ INT_NUMBER@[60; 64) "2i32"
+ R_PAREN@[64; 65) ")"
+ SEMI@[65; 66) ";"
+ WHITESPACE@[66; 71) "\n "
+ LET_STMT@[71; 103)
+ LET_KW@[71; 74) "let"
+ WHITESPACE@[74; 75) " "
+ BIND_PAT@[75; 76)
+ NAME@[75; 76)
+ IDENT@[75; 76) "z"
+ WHITESPACE@[76; 77) " "
+ EQ@[77; 78) "="
+ WHITESPACE@[78; 79) " "
+ CALL_EXPR@[79; 102)
+ PATH_EXPR@[79; 82)
+ PATH@[79; 82)
+ PATH_SEGMENT@[79; 82)
+ NAME_REF@[79; 82)
+ IDENT@[79; 82) "Foo"
+ ARG_LIST@[82; 102)
+ L_PAREN@[82; 83) "("
+ BOX_EXPR@[83; 91)
+ BOX_KW@[83; 86) "box"
+ WHITESPACE@[86; 87) " "
+ LITERAL@[87; 91)
+ INT_NUMBER@[87; 91) "1i32"
+ COMMA@[91; 92) ","
+ WHITESPACE@[92; 93) " "
+ BOX_EXPR@[93; 101)
+ BOX_KW@[93; 96) "box"
+ WHITESPACE@[96; 97) " "
+ LITERAL@[97; 101)
+ INT_NUMBER@[97; 101) "2i32"
+ R_PAREN@[101; 102) ")"
+ SEMI@[102; 103) ";"
+ WHITESPACE@[103; 104) "\n"
+ R_CURLY@[104; 105) "}"
+ WHITESPACE@[105; 106) "\n"
--- /dev/null
+impl T for Foo {
+ default type T = Bar;
+ default fn foo() {}
+}
--- /dev/null
+SOURCE_FILE@[0; 69)
+ IMPL_BLOCK@[0; 68)
+ IMPL_KW@[0; 4) "impl"
+ WHITESPACE@[4; 5) " "
+ PATH_TYPE@[5; 6)
+ PATH@[5; 6)
+ PATH_SEGMENT@[5; 6)
+ NAME_REF@[5; 6)
+ IDENT@[5; 6) "T"
+ WHITESPACE@[6; 7) " "
+ FOR_KW@[7; 10) "for"
+ WHITESPACE@[10; 11) " "
+ PATH_TYPE@[11; 14)
+ PATH@[11; 14)
+ PATH_SEGMENT@[11; 14)
+ NAME_REF@[11; 14)
+ IDENT@[11; 14) "Foo"
+ WHITESPACE@[14; 15) " "
+ ITEM_LIST@[15; 68)
+ L_CURLY@[15; 16) "{"
+ WHITESPACE@[16; 21) "\n "
+ TYPE_ALIAS_DEF@[21; 42)
+ DEFAULT_KW@[21; 28) "default"
+ WHITESPACE@[28; 29) " "
+ TYPE_KW@[29; 33) "type"
+ WHITESPACE@[33; 34) " "
+ NAME@[34; 35)
+ IDENT@[34; 35) "T"
+ WHITESPACE@[35; 36) " "
+ EQ@[36; 37) "="
+ WHITESPACE@[37; 38) " "
+ PATH_TYPE@[38; 41)
+ PATH@[38; 41)
+ PATH_SEGMENT@[38; 41)
+ NAME_REF@[38; 41)
+ IDENT@[38; 41) "Bar"
+ SEMI@[41; 42) ";"
+ WHITESPACE@[42; 47) "\n "
+ FN_DEF@[47; 66)
+ DEFAULT_KW@[47; 54) "default"
+ WHITESPACE@[54; 55) " "
+ FN_KW@[55; 57) "fn"
+ WHITESPACE@[57; 58) " "
+ NAME@[58; 61)
+ IDENT@[58; 61) "foo"
+ PARAM_LIST@[61; 63)
+ L_PAREN@[61; 62) "("
+ R_PAREN@[62; 63) ")"
+ WHITESPACE@[63; 64) " "
+ BLOCK@[64; 66)
+ L_CURLY@[64; 65) "{"
+ R_CURLY@[65; 66) "}"
+ WHITESPACE@[66; 67) "\n"
+ R_CURLY@[67; 68) "}"
+ WHITESPACE@[68; 69) "\n"
--- /dev/null
+fn simple_function() {
+ enum LocalEnum {
+ One,
+ Two,
+ };
+ fn f() {};
+ struct S {};
+}
--- /dev/null
+SOURCE_FILE@[0; 111)
+ FN_DEF@[0; 110)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 18)
+ IDENT@[3; 18) "simple_function"
+ PARAM_LIST@[18; 20)
+ L_PAREN@[18; 19) "("
+ R_PAREN@[19; 20) ")"
+ WHITESPACE@[20; 21) " "
+ BLOCK@[21; 110)
+ L_CURLY@[21; 22) "{"
+ WHITESPACE@[22; 27) "\n "
+ ENUM_DEF@[27; 75)
+ ENUM_KW@[27; 31) "enum"
+ WHITESPACE@[31; 32) " "
+ NAME@[32; 41)
+ IDENT@[32; 41) "LocalEnum"
+ WHITESPACE@[41; 42) " "
+ ENUM_VARIANT_LIST@[42; 75)
+ L_CURLY@[42; 43) "{"
+ WHITESPACE@[43; 52) "\n "
+ ENUM_VARIANT@[52; 55)
+ NAME@[52; 55)
+ IDENT@[52; 55) "One"
+ COMMA@[55; 56) ","
+ WHITESPACE@[56; 65) "\n "
+ ENUM_VARIANT@[65; 68)
+ NAME@[65; 68)
+ IDENT@[65; 68) "Two"
+ COMMA@[68; 69) ","
+ WHITESPACE@[69; 74) "\n "
+ R_CURLY@[74; 75) "}"
+ SEMI@[75; 76) ";"
+ WHITESPACE@[76; 81) "\n "
+ FN_DEF@[81; 90)
+ FN_KW@[81; 83) "fn"
+ WHITESPACE@[83; 84) " "
+ NAME@[84; 85)
+ IDENT@[84; 85) "f"
+ PARAM_LIST@[85; 87)
+ L_PAREN@[85; 86) "("
+ R_PAREN@[86; 87) ")"
+ WHITESPACE@[87; 88) " "
+ BLOCK@[88; 90)
+ L_CURLY@[88; 89) "{"
+ R_CURLY@[89; 90) "}"
+ SEMI@[90; 91) ";"
+ WHITESPACE@[91; 96) "\n "
+ STRUCT_DEF@[96; 107)
+ STRUCT_KW@[96; 102) "struct"
+ WHITESPACE@[102; 103) " "
+ NAME@[103; 104)
+ IDENT@[103; 104) "S"
+ WHITESPACE@[104; 105) " "
+ NAMED_FIELD_DEF_LIST@[105; 107)
+ L_CURLY@[105; 106) "{"
+ R_CURLY@[106; 107) "}"
+ SEMI@[107; 108) ";"
+ WHITESPACE@[108; 109) "\n"
+ R_CURLY@[109; 110) "}"
+ WHITESPACE@[110; 111) "\n"
--- /dev/null
+pub const A: &[i64] = &[
+ #[cfg(test)]
+ 1,
+ 2,
+];
--- /dev/null
+SOURCE_FILE@[0; 56)
+ CONST_DEF@[0; 55)
+ VISIBILITY@[0; 3)
+ PUB_KW@[0; 3) "pub"
+ WHITESPACE@[3; 4) " "
+ CONST_KW@[4; 9) "const"
+ WHITESPACE@[9; 10) " "
+ NAME@[10; 11)
+ IDENT@[10; 11) "A"
+ COLON@[11; 12) ":"
+ WHITESPACE@[12; 13) " "
+ REFERENCE_TYPE@[13; 19)
+ AMP@[13; 14) "&"
+ SLICE_TYPE@[14; 19)
+ L_BRACK@[14; 15) "["
+ PATH_TYPE@[15; 18)
+ PATH@[15; 18)
+ PATH_SEGMENT@[15; 18)
+ NAME_REF@[15; 18)
+ IDENT@[15; 18) "i64"
+ R_BRACK@[18; 19) "]"
+ WHITESPACE@[19; 20) " "
+ EQ@[20; 21) "="
+ WHITESPACE@[21; 22) " "
+ REF_EXPR@[22; 54)
+ AMP@[22; 23) "&"
+ ARRAY_EXPR@[23; 54)
+ L_BRACK@[23; 24) "["
+ WHITESPACE@[24; 28) "\n "
+ ATTR@[28; 40)
+ POUND@[28; 29) "#"
+ TOKEN_TREE@[29; 40)
+ L_BRACK@[29; 30) "["
+ IDENT@[30; 33) "cfg"
+ TOKEN_TREE@[33; 39)
+ L_PAREN@[33; 34) "("
+ IDENT@[34; 38) "test"
+ R_PAREN@[38; 39) ")"
+ R_BRACK@[39; 40) "]"
+ WHITESPACE@[40; 44) "\n "
+ LITERAL@[44; 45)
+ INT_NUMBER@[44; 45) "1"
+ COMMA@[45; 46) ","
+ WHITESPACE@[46; 50) "\n "
+ LITERAL@[50; 51)
+ INT_NUMBER@[50; 51) "2"
+ COMMA@[51; 52) ","
+ WHITESPACE@[52; 53) "\n"
+ R_BRACK@[53; 54) "]"
+ SEMI@[54; 55) ";"
+ WHITESPACE@[55; 56) "\n"
--- /dev/null
+pub const A: &[i64] = &[
+ 1,
+ #[cfg(test)]
+ 2,
+];
--- /dev/null
+SOURCE_FILE@[0; 56)
+ CONST_DEF@[0; 55)
+ VISIBILITY@[0; 3)
+ PUB_KW@[0; 3) "pub"
+ WHITESPACE@[3; 4) " "
+ CONST_KW@[4; 9) "const"
+ WHITESPACE@[9; 10) " "
+ NAME@[10; 11)
+ IDENT@[10; 11) "A"
+ COLON@[11; 12) ":"
+ WHITESPACE@[12; 13) " "
+ REFERENCE_TYPE@[13; 19)
+ AMP@[13; 14) "&"
+ SLICE_TYPE@[14; 19)
+ L_BRACK@[14; 15) "["
+ PATH_TYPE@[15; 18)
+ PATH@[15; 18)
+ PATH_SEGMENT@[15; 18)
+ NAME_REF@[15; 18)
+ IDENT@[15; 18) "i64"
+ R_BRACK@[18; 19) "]"
+ WHITESPACE@[19; 20) " "
+ EQ@[20; 21) "="
+ WHITESPACE@[21; 22) " "
+ REF_EXPR@[22; 54)
+ AMP@[22; 23) "&"
+ ARRAY_EXPR@[23; 54)
+ L_BRACK@[23; 24) "["
+ WHITESPACE@[24; 28) "\n "
+ LITERAL@[28; 29)
+ INT_NUMBER@[28; 29) "1"
+ COMMA@[29; 30) ","
+ WHITESPACE@[30; 34) "\n "
+ ATTR@[34; 46)
+ POUND@[34; 35) "#"
+ TOKEN_TREE@[35; 46)
+ L_BRACK@[35; 36) "["
+ IDENT@[36; 39) "cfg"
+ TOKEN_TREE@[39; 45)
+ L_PAREN@[39; 40) "("
+ IDENT@[40; 44) "test"
+ R_PAREN@[44; 45) ")"
+ R_BRACK@[45; 46) "]"
+ WHITESPACE@[46; 50) "\n "
+ LITERAL@[50; 51)
+ INT_NUMBER@[50; 51) "2"
+ COMMA@[51; 52) ","
+ WHITESPACE@[52; 53) "\n"
+ R_BRACK@[53; 54) "]"
+ SEMI@[54; 55) ";"
+ WHITESPACE@[55; 56) "\n"
--- /dev/null
+fn foo() {
+ x.await;
+ x.0.await;
+ x.0().await?.hello();
+}
--- /dev/null
+SOURCE_FILE@[0; 67)
+ FN_DEF@[0; 66)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 66)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ EXPR_STMT@[15; 23)
+ AWAIT_EXPR@[15; 22)
+ PATH_EXPR@[15; 16)
+ PATH@[15; 16)
+ PATH_SEGMENT@[15; 16)
+ NAME_REF@[15; 16)
+ IDENT@[15; 16) "x"
+ DOT@[16; 17) "."
+ AWAIT_KW@[17; 22) "await"
+ SEMI@[22; 23) ";"
+ WHITESPACE@[23; 28) "\n "
+ EXPR_STMT@[28; 38)
+ AWAIT_EXPR@[28; 37)
+ FIELD_EXPR@[28; 31)
+ PATH_EXPR@[28; 29)
+ PATH@[28; 29)
+ PATH_SEGMENT@[28; 29)
+ NAME_REF@[28; 29)
+ IDENT@[28; 29) "x"
+ DOT@[29; 30) "."
+ INT_NUMBER@[30; 31) "0"
+ DOT@[31; 32) "."
+ AWAIT_KW@[32; 37) "await"
+ SEMI@[37; 38) ";"
+ WHITESPACE@[38; 43) "\n "
+ EXPR_STMT@[43; 64)
+ METHOD_CALL_EXPR@[43; 63)
+ TRY_EXPR@[43; 55)
+ AWAIT_EXPR@[43; 54)
+ CALL_EXPR@[43; 48)
+ FIELD_EXPR@[43; 46)
+ PATH_EXPR@[43; 44)
+ PATH@[43; 44)
+ PATH_SEGMENT@[43; 44)
+ NAME_REF@[43; 44)
+ IDENT@[43; 44) "x"
+ DOT@[44; 45) "."
+ INT_NUMBER@[45; 46) "0"
+ ARG_LIST@[46; 48)
+ L_PAREN@[46; 47) "("
+ R_PAREN@[47; 48) ")"
+ DOT@[48; 49) "."
+ AWAIT_KW@[49; 54) "await"
+ QUESTION@[54; 55) "?"
+ DOT@[55; 56) "."
+ NAME_REF@[56; 61)
+ IDENT@[56; 61) "hello"
+ ARG_LIST@[61; 63)
+ L_PAREN@[61; 62) "("
+ R_PAREN@[62; 63) ")"
+ SEMI@[63; 64) ";"
+ WHITESPACE@[64; 65) "\n"
+ R_CURLY@[65; 66) "}"
+ WHITESPACE@[66; 67) "\n"
--- /dev/null
+SOURCE_FILE@[0; 0)
--- /dev/null
+struct S<T: Copy> {
+ f: T,
+}
--- /dev/null
+SOURCE_FILE@[0; 32)
+ STRUCT_DEF@[0; 31)
+ STRUCT_KW@[0; 6) "struct"
+ WHITESPACE@[6; 7) " "
+ NAME@[7; 8)
+ IDENT@[7; 8) "S"
+ TYPE_PARAM_LIST@[8; 17)
+ L_ANGLE@[8; 9) "<"
+ TYPE_PARAM@[9; 16)
+ NAME@[9; 10)
+ IDENT@[9; 10) "T"
+ COLON@[10; 11) ":"
+ WHITESPACE@[11; 12) " "
+ TYPE_BOUND_LIST@[12; 16)
+ TYPE_BOUND@[12; 16)
+ PATH_TYPE@[12; 16)
+ PATH@[12; 16)
+ PATH_SEGMENT@[12; 16)
+ NAME_REF@[12; 16)
+ IDENT@[12; 16) "Copy"
+ R_ANGLE@[16; 17) ">"
+ WHITESPACE@[17; 18) " "
+ NAMED_FIELD_DEF_LIST@[18; 31)
+ L_CURLY@[18; 19) "{"
+ WHITESPACE@[19; 24) "\n "
+ NAMED_FIELD_DEF@[24; 28)
+ NAME@[24; 25)
+ IDENT@[24; 25) "f"
+ COLON@[25; 26) ":"
+ WHITESPACE@[26; 27) " "
+ PATH_TYPE@[27; 28)
+ PATH@[27; 28)
+ PATH_SEGMENT@[27; 28)
+ NAME_REF@[27; 28)
+ IDENT@[27; 28) "T"
+ COMMA@[28; 29) ","
+ WHITESPACE@[29; 30) "\n"
+ R_CURLY@[30; 31) "}"
+ WHITESPACE@[31; 32) "\n"
--- /dev/null
+struct S {
+ foo: u32
+}
\ No newline at end of file
--- /dev/null
+SOURCE_FILE@[0; 25)
+ STRUCT_DEF@[0; 25)
+ STRUCT_KW@[0; 6) "struct"
+ WHITESPACE@[6; 7) " "
+ NAME@[7; 8)
+ IDENT@[7; 8) "S"
+ WHITESPACE@[8; 9) " "
+ NAMED_FIELD_DEF_LIST@[9; 25)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ NAMED_FIELD_DEF@[15; 23)
+ NAME@[15; 18)
+ IDENT@[15; 18) "foo"
+ COLON@[18; 19) ":"
+ WHITESPACE@[19; 20) " "
+ PATH_TYPE@[20; 23)
+ PATH@[20; 23)
+ PATH_SEGMENT@[20; 23)
+ NAME_REF@[20; 23)
+ IDENT@[20; 23) "u32"
+ WHITESPACE@[23; 24) "\n"
+ R_CURLY@[24; 25) "}"
--- /dev/null
+#!/use/bin/env rusti
\ No newline at end of file
--- /dev/null
+SOURCE_FILE@[0; 20)
+ SHEBANG@[0; 20) "#!/use/bin/env rusti"
--- /dev/null
+fn foo() {
+}
--- /dev/null
+SOURCE_FILE@[0; 13)
+ FN_DEF@[0; 12)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 12)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 11) "\n"
+ R_CURLY@[11; 12) "}"
+ WHITESPACE@[12; 13) "\n"
--- /dev/null
+#![attr]
+#![attr(true)]
+#![attr(ident)]
+#![attr(ident, 100, true, "true", ident = 100, ident = "hello", ident(100))]
+#![attr(100)]
+#![attr(enabled = true)]
+#![enabled(true)]
+#![attr("hello")]
+#![repr(C, align = 4)]
+#![repr(C, align(4))]
\ No newline at end of file
--- /dev/null
+SOURCE_FILE@[0; 236)
+ ATTR@[0; 8)
+ POUND@[0; 1) "#"
+ EXCL@[1; 2) "!"
+ TOKEN_TREE@[2; 8)
+ L_BRACK@[2; 3) "["
+ IDENT@[3; 7) "attr"
+ R_BRACK@[7; 8) "]"
+ WHITESPACE@[8; 9) "\n"
+ ATTR@[9; 23)
+ POUND@[9; 10) "#"
+ EXCL@[10; 11) "!"
+ TOKEN_TREE@[11; 23)
+ L_BRACK@[11; 12) "["
+ IDENT@[12; 16) "attr"
+ TOKEN_TREE@[16; 22)
+ L_PAREN@[16; 17) "("
+ TRUE_KW@[17; 21) "true"
+ R_PAREN@[21; 22) ")"
+ R_BRACK@[22; 23) "]"
+ WHITESPACE@[23; 24) "\n"
+ ATTR@[24; 39)
+ POUND@[24; 25) "#"
+ EXCL@[25; 26) "!"
+ TOKEN_TREE@[26; 39)
+ L_BRACK@[26; 27) "["
+ IDENT@[27; 31) "attr"
+ TOKEN_TREE@[31; 38)
+ L_PAREN@[31; 32) "("
+ IDENT@[32; 37) "ident"
+ R_PAREN@[37; 38) ")"
+ R_BRACK@[38; 39) "]"
+ WHITESPACE@[39; 40) "\n"
+ ATTR@[40; 116)
+ POUND@[40; 41) "#"
+ EXCL@[41; 42) "!"
+ TOKEN_TREE@[42; 116)
+ L_BRACK@[42; 43) "["
+ IDENT@[43; 47) "attr"
+ TOKEN_TREE@[47; 115)
+ L_PAREN@[47; 48) "("
+ IDENT@[48; 53) "ident"
+ COMMA@[53; 54) ","
+ WHITESPACE@[54; 55) " "
+ INT_NUMBER@[55; 58) "100"
+ COMMA@[58; 59) ","
+ WHITESPACE@[59; 60) " "
+ TRUE_KW@[60; 64) "true"
+ COMMA@[64; 65) ","
+ WHITESPACE@[65; 66) " "
+ STRING@[66; 72) "\"true\""
+ COMMA@[72; 73) ","
+ WHITESPACE@[73; 74) " "
+ IDENT@[74; 79) "ident"
+ WHITESPACE@[79; 80) " "
+ EQ@[80; 81) "="
+ WHITESPACE@[81; 82) " "
+ INT_NUMBER@[82; 85) "100"
+ COMMA@[85; 86) ","
+ WHITESPACE@[86; 87) " "
+ IDENT@[87; 92) "ident"
+ WHITESPACE@[92; 93) " "
+ EQ@[93; 94) "="
+ WHITESPACE@[94; 95) " "
+ STRING@[95; 102) "\"hello\""
+ COMMA@[102; 103) ","
+ WHITESPACE@[103; 104) " "
+ IDENT@[104; 109) "ident"
+ TOKEN_TREE@[109; 114)
+ L_PAREN@[109; 110) "("
+ INT_NUMBER@[110; 113) "100"
+ R_PAREN@[113; 114) ")"
+ R_PAREN@[114; 115) ")"
+ R_BRACK@[115; 116) "]"
+ WHITESPACE@[116; 117) "\n"
+ ATTR@[117; 130)
+ POUND@[117; 118) "#"
+ EXCL@[118; 119) "!"
+ TOKEN_TREE@[119; 130)
+ L_BRACK@[119; 120) "["
+ IDENT@[120; 124) "attr"
+ TOKEN_TREE@[124; 129)
+ L_PAREN@[124; 125) "("
+ INT_NUMBER@[125; 128) "100"
+ R_PAREN@[128; 129) ")"
+ R_BRACK@[129; 130) "]"
+ WHITESPACE@[130; 131) "\n"
+ ATTR@[131; 155)
+ POUND@[131; 132) "#"
+ EXCL@[132; 133) "!"
+ TOKEN_TREE@[133; 155)
+ L_BRACK@[133; 134) "["
+ IDENT@[134; 138) "attr"
+ TOKEN_TREE@[138; 154)
+ L_PAREN@[138; 139) "("
+ IDENT@[139; 146) "enabled"
+ WHITESPACE@[146; 147) " "
+ EQ@[147; 148) "="
+ WHITESPACE@[148; 149) " "
+ TRUE_KW@[149; 153) "true"
+ R_PAREN@[153; 154) ")"
+ R_BRACK@[154; 155) "]"
+ WHITESPACE@[155; 156) "\n"
+ ATTR@[156; 173)
+ POUND@[156; 157) "#"
+ EXCL@[157; 158) "!"
+ TOKEN_TREE@[158; 173)
+ L_BRACK@[158; 159) "["
+ IDENT@[159; 166) "enabled"
+ TOKEN_TREE@[166; 172)
+ L_PAREN@[166; 167) "("
+ TRUE_KW@[167; 171) "true"
+ R_PAREN@[171; 172) ")"
+ R_BRACK@[172; 173) "]"
+ WHITESPACE@[173; 174) "\n"
+ ATTR@[174; 191)
+ POUND@[174; 175) "#"
+ EXCL@[175; 176) "!"
+ TOKEN_TREE@[176; 191)
+ L_BRACK@[176; 177) "["
+ IDENT@[177; 181) "attr"
+ TOKEN_TREE@[181; 190)
+ L_PAREN@[181; 182) "("
+ STRING@[182; 189) "\"hello\""
+ R_PAREN@[189; 190) ")"
+ R_BRACK@[190; 191) "]"
+ WHITESPACE@[191; 192) "\n"
+ ATTR@[192; 214)
+ POUND@[192; 193) "#"
+ EXCL@[193; 194) "!"
+ TOKEN_TREE@[194; 214)
+ L_BRACK@[194; 195) "["
+ IDENT@[195; 199) "repr"
+ TOKEN_TREE@[199; 213)
+ L_PAREN@[199; 200) "("
+ IDENT@[200; 201) "C"
+ COMMA@[201; 202) ","
+ WHITESPACE@[202; 203) " "
+ IDENT@[203; 208) "align"
+ WHITESPACE@[208; 209) " "
+ EQ@[209; 210) "="
+ WHITESPACE@[210; 211) " "
+ INT_NUMBER@[211; 212) "4"
+ R_PAREN@[212; 213) ")"
+ R_BRACK@[213; 214) "]"
+ WHITESPACE@[214; 215) "\n"
+ ATTR@[215; 236)
+ POUND@[215; 216) "#"
+ EXCL@[216; 217) "!"
+ TOKEN_TREE@[217; 236)
+ L_BRACK@[217; 218) "["
+ IDENT@[218; 222) "repr"
+ TOKEN_TREE@[222; 235)
+ L_PAREN@[222; 223) "("
+ IDENT@[223; 224) "C"
+ COMMA@[224; 225) ","
+ WHITESPACE@[225; 226) " "
+ IDENT@[226; 231) "align"
+ TOKEN_TREE@[231; 234)
+ L_PAREN@[231; 232) "("
+ INT_NUMBER@[232; 233) "4"
+ R_PAREN@[233; 234) ")"
+ R_PAREN@[234; 235) ")"
+ R_BRACK@[235; 236) "]"
--- /dev/null
+extern crate foo;
+extern crate foo as bar;
+extern crate self as baz;
--- /dev/null
+SOURCE_FILE@[0; 69)
+ EXTERN_CRATE_ITEM@[0; 17)
+ EXTERN_KW@[0; 6) "extern"
+ WHITESPACE@[6; 7) " "
+ CRATE_KW@[7; 12) "crate"
+ WHITESPACE@[12; 13) " "
+ NAME_REF@[13; 16)
+ IDENT@[13; 16) "foo"
+ SEMI@[16; 17) ";"
+ WHITESPACE@[17; 18) "\n"
+ EXTERN_CRATE_ITEM@[18; 42)
+ EXTERN_KW@[18; 24) "extern"
+ WHITESPACE@[24; 25) " "
+ CRATE_KW@[25; 30) "crate"
+ WHITESPACE@[30; 31) " "
+ NAME_REF@[31; 34)
+ IDENT@[31; 34) "foo"
+ WHITESPACE@[34; 35) " "
+ ALIAS@[35; 41)
+ AS_KW@[35; 37) "as"
+ WHITESPACE@[37; 38) " "
+ NAME@[38; 41)
+ IDENT@[38; 41) "bar"
+ SEMI@[41; 42) ";"
+ WHITESPACE@[42; 43) "\n"
+ EXTERN_CRATE_ITEM@[43; 68)
+ EXTERN_KW@[43; 49) "extern"
+ WHITESPACE@[49; 50) " "
+ CRATE_KW@[50; 55) "crate"
+ WHITESPACE@[55; 56) " "
+ SELF_KW@[56; 60)
+ SELF_KW@[56; 60) "self"
+ WHITESPACE@[60; 61) " "
+ ALIAS@[61; 67)
+ AS_KW@[61; 63) "as"
+ WHITESPACE@[63; 64) " "
+ NAME@[64; 67)
+ IDENT@[64; 67) "baz"
+ SEMI@[67; 68) ";"
+ WHITESPACE@[68; 69) "\n"
--- /dev/null
+mod a;
+
+mod b {
+}
+
+mod c {
+ fn foo() {
+ }
+ struct S {}
+}
+
+mod d {
+ #![attr]
+ mod e;
+ mod f {
+ }
+}
\ No newline at end of file
--- /dev/null
+SOURCE_FILE@[0; 118)
+ MODULE@[0; 6)
+ MOD_KW@[0; 3) "mod"
+ WHITESPACE@[3; 4) " "
+ NAME@[4; 5)
+ IDENT@[4; 5) "a"
+ SEMI@[5; 6) ";"
+ WHITESPACE@[6; 8) "\n\n"
+ MODULE@[8; 17)
+ MOD_KW@[8; 11) "mod"
+ WHITESPACE@[11; 12) " "
+ NAME@[12; 13)
+ IDENT@[12; 13) "b"
+ WHITESPACE@[13; 14) " "
+ ITEM_LIST@[14; 17)
+ L_CURLY@[14; 15) "{"
+ WHITESPACE@[15; 16) "\n"
+ R_CURLY@[16; 17) "}"
+ WHITESPACE@[17; 19) "\n\n"
+ MODULE@[19; 65)
+ MOD_KW@[19; 22) "mod"
+ WHITESPACE@[22; 23) " "
+ NAME@[23; 24)
+ IDENT@[23; 24) "c"
+ WHITESPACE@[24; 25) " "
+ ITEM_LIST@[25; 65)
+ L_CURLY@[25; 26) "{"
+ WHITESPACE@[26; 31) "\n "
+ FN_DEF@[31; 47)
+ FN_KW@[31; 33) "fn"
+ WHITESPACE@[33; 34) " "
+ NAME@[34; 37)
+ IDENT@[34; 37) "foo"
+ PARAM_LIST@[37; 39)
+ L_PAREN@[37; 38) "("
+ R_PAREN@[38; 39) ")"
+ WHITESPACE@[39; 40) " "
+ BLOCK@[40; 47)
+ L_CURLY@[40; 41) "{"
+ WHITESPACE@[41; 46) "\n "
+ R_CURLY@[46; 47) "}"
+ WHITESPACE@[47; 52) "\n "
+ STRUCT_DEF@[52; 63)
+ STRUCT_KW@[52; 58) "struct"
+ WHITESPACE@[58; 59) " "
+ NAME@[59; 60)
+ IDENT@[59; 60) "S"
+ WHITESPACE@[60; 61) " "
+ NAMED_FIELD_DEF_LIST@[61; 63)
+ L_CURLY@[61; 62) "{"
+ R_CURLY@[62; 63) "}"
+ WHITESPACE@[63; 64) "\n"
+ R_CURLY@[64; 65) "}"
+ WHITESPACE@[65; 67) "\n\n"
+ MODULE@[67; 118)
+ MOD_KW@[67; 70) "mod"
+ WHITESPACE@[70; 71) " "
+ NAME@[71; 72)
+ IDENT@[71; 72) "d"
+ WHITESPACE@[72; 73) " "
+ ITEM_LIST@[73; 118)
+ L_CURLY@[73; 74) "{"
+ WHITESPACE@[74; 79) "\n "
+ ATTR@[79; 87)
+ POUND@[79; 80) "#"
+ EXCL@[80; 81) "!"
+ TOKEN_TREE@[81; 87)
+ L_BRACK@[81; 82) "["
+ IDENT@[82; 86) "attr"
+ R_BRACK@[86; 87) "]"
+ WHITESPACE@[87; 92) "\n "
+ MODULE@[92; 98)
+ MOD_KW@[92; 95) "mod"
+ WHITESPACE@[95; 96) " "
+ NAME@[96; 97)
+ IDENT@[96; 97) "e"
+ SEMI@[97; 98) ";"
+ WHITESPACE@[98; 103) "\n "
+ MODULE@[103; 116)
+ MOD_KW@[103; 106) "mod"
+ WHITESPACE@[106; 107) " "
+ NAME@[107; 108)
+ IDENT@[107; 108) "f"
+ WHITESPACE@[108; 109) " "
+ ITEM_LIST@[109; 116)
+ L_CURLY@[109; 110) "{"
+ WHITESPACE@[110; 115) "\n "
+ R_CURLY@[115; 116) "}"
+ WHITESPACE@[116; 117) "\n"
+ R_CURLY@[117; 118) "}"
--- /dev/null
+use foo;
+use ::bar;
\ No newline at end of file
--- /dev/null
+SOURCE_FILE@[0; 19)
+ USE_ITEM@[0; 8)
+ USE_KW@[0; 3) "use"
+ WHITESPACE@[3; 4) " "
+ USE_TREE@[4; 7)
+ PATH@[4; 7)
+ PATH_SEGMENT@[4; 7)
+ NAME_REF@[4; 7)
+ IDENT@[4; 7) "foo"
+ SEMI@[7; 8) ";"
+ WHITESPACE@[8; 9) "\n"
+ USE_ITEM@[9; 19)
+ USE_KW@[9; 12) "use"
+ WHITESPACE@[12; 13) " "
+ USE_TREE@[13; 18)
+ PATH@[13; 18)
+ PATH_SEGMENT@[13; 18)
+ COLONCOLON@[13; 15) "::"
+ NAME_REF@[15; 18)
+ IDENT@[15; 18) "bar"
+ SEMI@[18; 19) ";"
--- /dev/null
+use ::foo::bar::baz;
+use foo::bar::baz;
--- /dev/null
+SOURCE_FILE@[0; 40)
+ USE_ITEM@[0; 20)
+ USE_KW@[0; 3) "use"
+ WHITESPACE@[3; 4) " "
+ USE_TREE@[4; 19)
+ PATH@[4; 19)
+ PATH@[4; 14)
+ PATH@[4; 9)
+ PATH_SEGMENT@[4; 9)
+ COLONCOLON@[4; 6) "::"
+ NAME_REF@[6; 9)
+ IDENT@[6; 9) "foo"
+ COLONCOLON@[9; 11) "::"
+ PATH_SEGMENT@[11; 14)
+ NAME_REF@[11; 14)
+ IDENT@[11; 14) "bar"
+ COLONCOLON@[14; 16) "::"
+ PATH_SEGMENT@[16; 19)
+ NAME_REF@[16; 19)
+ IDENT@[16; 19) "baz"
+ SEMI@[19; 20) ";"
+ WHITESPACE@[20; 21) "\n"
+ USE_ITEM@[21; 39)
+ USE_KW@[21; 24) "use"
+ WHITESPACE@[24; 25) " "
+ USE_TREE@[25; 38)
+ PATH@[25; 38)
+ PATH@[25; 33)
+ PATH@[25; 28)
+ PATH_SEGMENT@[25; 28)
+ NAME_REF@[25; 28)
+ IDENT@[25; 28) "foo"
+ COLONCOLON@[28; 30) "::"
+ PATH_SEGMENT@[30; 33)
+ NAME_REF@[30; 33)
+ IDENT@[30; 33) "bar"
+ COLONCOLON@[33; 35) "::"
+ PATH_SEGMENT@[35; 38)
+ NAME_REF@[35; 38)
+ IDENT@[35; 38) "baz"
+ SEMI@[38; 39) ";"
+ WHITESPACE@[39; 40) "\n"
--- /dev/null
+#[cfg(test)]
+#[ignore]
+fn foo() {}
--- /dev/null
+SOURCE_FILE@[0; 35)
+ FN_DEF@[0; 34)
+ ATTR@[0; 12)
+ POUND@[0; 1) "#"
+ TOKEN_TREE@[1; 12)
+ L_BRACK@[1; 2) "["
+ IDENT@[2; 5) "cfg"
+ TOKEN_TREE@[5; 11)
+ L_PAREN@[5; 6) "("
+ IDENT@[6; 10) "test"
+ R_PAREN@[10; 11) ")"
+ R_BRACK@[11; 12) "]"
+ WHITESPACE@[12; 13) "\n"
+ ATTR@[13; 22)
+ POUND@[13; 14) "#"
+ TOKEN_TREE@[14; 22)
+ L_BRACK@[14; 15) "["
+ IDENT@[15; 21) "ignore"
+ R_BRACK@[21; 22) "]"
+ WHITESPACE@[22; 23) "\n"
+ FN_KW@[23; 25) "fn"
+ WHITESPACE@[25; 26) " "
+ NAME@[26; 29)
+ IDENT@[26; 29) "foo"
+ PARAM_LIST@[29; 31)
+ L_PAREN@[29; 30) "("
+ R_PAREN@[30; 31) ")"
+ WHITESPACE@[31; 32) " "
+ BLOCK@[32; 34)
+ L_CURLY@[32; 33) "{"
+ R_CURLY@[33; 34) "}"
+ WHITESPACE@[34; 35) "\n"
--- /dev/null
+fn a() {}
+pub fn b() {}
+pub(crate) fn c() {}
+pub(super) fn d() {}
+pub(in foo::bar::baz) fn e() {}
--- /dev/null
+SOURCE_FILE@[0; 98)
+ FN_DEF@[0; 9)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 4)
+ IDENT@[3; 4) "a"
+ PARAM_LIST@[4; 6)
+ L_PAREN@[4; 5) "("
+ R_PAREN@[5; 6) ")"
+ WHITESPACE@[6; 7) " "
+ BLOCK@[7; 9)
+ L_CURLY@[7; 8) "{"
+ R_CURLY@[8; 9) "}"
+ WHITESPACE@[9; 10) "\n"
+ FN_DEF@[10; 23)
+ VISIBILITY@[10; 13)
+ PUB_KW@[10; 13) "pub"
+ WHITESPACE@[13; 14) " "
+ FN_KW@[14; 16) "fn"
+ WHITESPACE@[16; 17) " "
+ NAME@[17; 18)
+ IDENT@[17; 18) "b"
+ PARAM_LIST@[18; 20)
+ L_PAREN@[18; 19) "("
+ R_PAREN@[19; 20) ")"
+ WHITESPACE@[20; 21) " "
+ BLOCK@[21; 23)
+ L_CURLY@[21; 22) "{"
+ R_CURLY@[22; 23) "}"
+ WHITESPACE@[23; 24) "\n"
+ FN_DEF@[24; 44)
+ VISIBILITY@[24; 34)
+ PUB_KW@[24; 27) "pub"
+ L_PAREN@[27; 28) "("
+ CRATE_KW@[28; 33) "crate"
+ R_PAREN@[33; 34) ")"
+ WHITESPACE@[34; 35) " "
+ FN_KW@[35; 37) "fn"
+ WHITESPACE@[37; 38) " "
+ NAME@[38; 39)
+ IDENT@[38; 39) "c"
+ PARAM_LIST@[39; 41)
+ L_PAREN@[39; 40) "("
+ R_PAREN@[40; 41) ")"
+ WHITESPACE@[41; 42) " "
+ BLOCK@[42; 44)
+ L_CURLY@[42; 43) "{"
+ R_CURLY@[43; 44) "}"
+ WHITESPACE@[44; 45) "\n"
+ FN_DEF@[45; 65)
+ VISIBILITY@[45; 55)
+ PUB_KW@[45; 48) "pub"
+ L_PAREN@[48; 49) "("
+ SUPER_KW@[49; 54) "super"
+ R_PAREN@[54; 55) ")"
+ WHITESPACE@[55; 56) " "
+ FN_KW@[56; 58) "fn"
+ WHITESPACE@[58; 59) " "
+ NAME@[59; 60)
+ IDENT@[59; 60) "d"
+ PARAM_LIST@[60; 62)
+ L_PAREN@[60; 61) "("
+ R_PAREN@[61; 62) ")"
+ WHITESPACE@[62; 63) " "
+ BLOCK@[63; 65)
+ L_CURLY@[63; 64) "{"
+ R_CURLY@[64; 65) "}"
+ WHITESPACE@[65; 66) "\n"
+ FN_DEF@[66; 97)
+ VISIBILITY@[66; 87)
+ PUB_KW@[66; 69) "pub"
+ L_PAREN@[69; 70) "("
+ IN_KW@[70; 72) "in"
+ WHITESPACE@[72; 73) " "
+ PATH@[73; 86)
+ PATH@[73; 81)
+ PATH@[73; 76)
+ PATH_SEGMENT@[73; 76)
+ NAME_REF@[73; 76)
+ IDENT@[73; 76) "foo"
+ COLONCOLON@[76; 78) "::"
+ PATH_SEGMENT@[78; 81)
+ NAME_REF@[78; 81)
+ IDENT@[78; 81) "bar"
+ COLONCOLON@[81; 83) "::"
+ PATH_SEGMENT@[83; 86)
+ NAME_REF@[83; 86)
+ IDENT@[83; 86) "baz"
+ R_PAREN@[86; 87) ")"
+ WHITESPACE@[87; 88) " "
+ FN_KW@[88; 90) "fn"
+ WHITESPACE@[90; 91) " "
+ NAME@[91; 92)
+ IDENT@[91; 92) "e"
+ PARAM_LIST@[92; 94)
+ L_PAREN@[92; 93) "("
+ R_PAREN@[93; 94) ")"
+ WHITESPACE@[94; 95) " "
+ BLOCK@[95; 97)
+ L_CURLY@[95; 96) "{"
+ R_CURLY@[96; 97) "}"
+ WHITESPACE@[97; 98) "\n"
--- /dev/null
+use self::foo;
+use super::super::bar;
+use ::self::a::super::bar;
--- /dev/null
+SOURCE_FILE@[0; 65)
+ USE_ITEM@[0; 14)
+ USE_KW@[0; 3) "use"
+ WHITESPACE@[3; 4) " "
+ USE_TREE@[4; 13)
+ PATH@[4; 13)
+ PATH@[4; 8)
+ PATH_SEGMENT@[4; 8)
+ SELF_KW@[4; 8) "self"
+ COLONCOLON@[8; 10) "::"
+ PATH_SEGMENT@[10; 13)
+ NAME_REF@[10; 13)
+ IDENT@[10; 13) "foo"
+ SEMI@[13; 14) ";"
+ WHITESPACE@[14; 15) "\n"
+ USE_ITEM@[15; 37)
+ USE_KW@[15; 18) "use"
+ WHITESPACE@[18; 19) " "
+ USE_TREE@[19; 36)
+ PATH@[19; 36)
+ PATH@[19; 31)
+ PATH@[19; 24)
+ PATH_SEGMENT@[19; 24)
+ SUPER_KW@[19; 24) "super"
+ COLONCOLON@[24; 26) "::"
+ PATH_SEGMENT@[26; 31)
+ SUPER_KW@[26; 31) "super"
+ COLONCOLON@[31; 33) "::"
+ PATH_SEGMENT@[33; 36)
+ NAME_REF@[33; 36)
+ IDENT@[33; 36) "bar"
+ SEMI@[36; 37) ";"
+ WHITESPACE@[37; 38) "\n"
+ USE_ITEM@[38; 64)
+ USE_KW@[38; 41) "use"
+ WHITESPACE@[41; 42) " "
+ USE_TREE@[42; 63)
+ PATH@[42; 63)
+ PATH@[42; 58)
+ PATH@[42; 51)
+ PATH@[42; 48)
+ PATH_SEGMENT@[42; 48)
+ COLONCOLON@[42; 44) "::"
+ SELF_KW@[44; 48) "self"
+ COLONCOLON@[48; 50) "::"
+ PATH_SEGMENT@[50; 51)
+ NAME_REF@[50; 51)
+ IDENT@[50; 51) "a"
+ COLONCOLON@[51; 53) "::"
+ PATH_SEGMENT@[53; 58)
+ SUPER_KW@[53; 58) "super"
+ COLONCOLON@[58; 60) "::"
+ PATH_SEGMENT@[60; 63)
+ NAME_REF@[60; 63)
+ IDENT@[60; 63) "bar"
+ SEMI@[63; 64) ";"
+ WHITESPACE@[64; 65) "\n"
--- /dev/null
+use *;
+use ::*;
+use ::{};
+use {};
+use foo::*;
+use foo::{};
+use ::foo::{a, b, c};
--- /dev/null
+SOURCE_FILE@[0; 81)
+ USE_ITEM@[0; 6)
+ USE_KW@[0; 3) "use"
+ WHITESPACE@[3; 4) " "
+ USE_TREE@[4; 5)
+ STAR@[4; 5) "*"
+ SEMI@[5; 6) ";"
+ WHITESPACE@[6; 7) "\n"
+ USE_ITEM@[7; 15)
+ USE_KW@[7; 10) "use"
+ WHITESPACE@[10; 11) " "
+ USE_TREE@[11; 14)
+ COLONCOLON@[11; 13) "::"
+ STAR@[13; 14) "*"
+ SEMI@[14; 15) ";"
+ WHITESPACE@[15; 16) "\n"
+ USE_ITEM@[16; 25)
+ USE_KW@[16; 19) "use"
+ WHITESPACE@[19; 20) " "
+ USE_TREE@[20; 24)
+ COLONCOLON@[20; 22) "::"
+ USE_TREE_LIST@[22; 24)
+ L_CURLY@[22; 23) "{"
+ R_CURLY@[23; 24) "}"
+ SEMI@[24; 25) ";"
+ WHITESPACE@[25; 26) "\n"
+ USE_ITEM@[26; 33)
+ USE_KW@[26; 29) "use"
+ WHITESPACE@[29; 30) " "
+ USE_TREE@[30; 32)
+ USE_TREE_LIST@[30; 32)
+ L_CURLY@[30; 31) "{"
+ R_CURLY@[31; 32) "}"
+ SEMI@[32; 33) ";"
+ WHITESPACE@[33; 34) "\n"
+ USE_ITEM@[34; 45)
+ USE_KW@[34; 37) "use"
+ WHITESPACE@[37; 38) " "
+ USE_TREE@[38; 44)
+ PATH@[38; 41)
+ PATH_SEGMENT@[38; 41)
+ NAME_REF@[38; 41)
+ IDENT@[38; 41) "foo"
+ COLONCOLON@[41; 43) "::"
+ STAR@[43; 44) "*"
+ SEMI@[44; 45) ";"
+ WHITESPACE@[45; 46) "\n"
+ USE_ITEM@[46; 58)
+ USE_KW@[46; 49) "use"
+ WHITESPACE@[49; 50) " "
+ USE_TREE@[50; 57)
+ PATH@[50; 53)
+ PATH_SEGMENT@[50; 53)
+ NAME_REF@[50; 53)
+ IDENT@[50; 53) "foo"
+ COLONCOLON@[53; 55) "::"
+ USE_TREE_LIST@[55; 57)
+ L_CURLY@[55; 56) "{"
+ R_CURLY@[56; 57) "}"
+ SEMI@[57; 58) ";"
+ WHITESPACE@[58; 59) "\n"
+ USE_ITEM@[59; 80)
+ USE_KW@[59; 62) "use"
+ WHITESPACE@[62; 63) " "
+ USE_TREE@[63; 79)
+ PATH@[63; 68)
+ PATH_SEGMENT@[63; 68)
+ COLONCOLON@[63; 65) "::"
+ NAME_REF@[65; 68)
+ IDENT@[65; 68) "foo"
+ COLONCOLON@[68; 70) "::"
+ USE_TREE_LIST@[70; 79)
+ L_CURLY@[70; 71) "{"
+ USE_TREE@[71; 72)
+ PATH@[71; 72)
+ PATH_SEGMENT@[71; 72)
+ NAME_REF@[71; 72)
+ IDENT@[71; 72) "a"
+ COMMA@[72; 73) ","
+ WHITESPACE@[73; 74) " "
+ USE_TREE@[74; 75)
+ PATH@[74; 75)
+ PATH_SEGMENT@[74; 75)
+ NAME_REF@[74; 75)
+ IDENT@[74; 75) "b"
+ COMMA@[75; 76) ","
+ WHITESPACE@[76; 77) " "
+ USE_TREE@[77; 78)
+ PATH@[77; 78)
+ PATH_SEGMENT@[77; 78)
+ NAME_REF@[77; 78)
+ IDENT@[77; 78) "c"
+ R_CURLY@[78; 79) "}"
+ SEMI@[79; 80) ";"
+ WHITESPACE@[80; 81) "\n"
--- /dev/null
+use foo as bar;
+use foo::{a as b, *, ::*, ::foo as x};
--- /dev/null
+SOURCE_FILE@[0; 55)
+ USE_ITEM@[0; 15)
+ USE_KW@[0; 3) "use"
+ WHITESPACE@[3; 4) " "
+ USE_TREE@[4; 14)
+ PATH@[4; 7)
+ PATH_SEGMENT@[4; 7)
+ NAME_REF@[4; 7)
+ IDENT@[4; 7) "foo"
+ WHITESPACE@[7; 8) " "
+ ALIAS@[8; 14)
+ AS_KW@[8; 10) "as"
+ WHITESPACE@[10; 11) " "
+ NAME@[11; 14)
+ IDENT@[11; 14) "bar"
+ SEMI@[14; 15) ";"
+ WHITESPACE@[15; 16) "\n"
+ USE_ITEM@[16; 54)
+ USE_KW@[16; 19) "use"
+ WHITESPACE@[19; 20) " "
+ USE_TREE@[20; 53)
+ PATH@[20; 23)
+ PATH_SEGMENT@[20; 23)
+ NAME_REF@[20; 23)
+ IDENT@[20; 23) "foo"
+ COLONCOLON@[23; 25) "::"
+ USE_TREE_LIST@[25; 53)
+ L_CURLY@[25; 26) "{"
+ USE_TREE@[26; 32)
+ PATH@[26; 27)
+ PATH_SEGMENT@[26; 27)
+ NAME_REF@[26; 27)
+ IDENT@[26; 27) "a"
+ WHITESPACE@[27; 28) " "
+ ALIAS@[28; 32)
+ AS_KW@[28; 30) "as"
+ WHITESPACE@[30; 31) " "
+ NAME@[31; 32)
+ IDENT@[31; 32) "b"
+ COMMA@[32; 33) ","
+ WHITESPACE@[33; 34) " "
+ USE_TREE@[34; 35)
+ STAR@[34; 35) "*"
+ COMMA@[35; 36) ","
+ WHITESPACE@[36; 37) " "
+ USE_TREE@[37; 40)
+ COLONCOLON@[37; 39) "::"
+ STAR@[39; 40) "*"
+ COMMA@[40; 41) ","
+ WHITESPACE@[41; 42) " "
+ USE_TREE@[42; 52)
+ PATH@[42; 47)
+ PATH_SEGMENT@[42; 47)
+ COLONCOLON@[42; 44) "::"
+ NAME_REF@[44; 47)
+ IDENT@[44; 47) "foo"
+ WHITESPACE@[47; 48) " "
+ ALIAS@[48; 52)
+ AS_KW@[48; 50) "as"
+ WHITESPACE@[50; 51) " "
+ NAME@[51; 52)
+ IDENT@[51; 52) "x"
+ R_CURLY@[52; 53) "}"
+ SEMI@[53; 54) ";"
+ WHITESPACE@[54; 55) "\n"
--- /dev/null
+struct A;
+struct B {}
+struct C();
+
+struct D {
+ a: u32,
+ pub b: u32
+}
+
+struct E(pub x, y,);
--- /dev/null
+SOURCE_FILE@[0; 97)
+ STRUCT_DEF@[0; 9)
+ STRUCT_KW@[0; 6) "struct"
+ WHITESPACE@[6; 7) " "
+ NAME@[7; 8)
+ IDENT@[7; 8) "A"
+ SEMI@[8; 9) ";"
+ WHITESPACE@[9; 10) "\n"
+ STRUCT_DEF@[10; 21)
+ STRUCT_KW@[10; 16) "struct"
+ WHITESPACE@[16; 17) " "
+ NAME@[17; 18)
+ IDENT@[17; 18) "B"
+ WHITESPACE@[18; 19) " "
+ NAMED_FIELD_DEF_LIST@[19; 21)
+ L_CURLY@[19; 20) "{"
+ R_CURLY@[20; 21) "}"
+ WHITESPACE@[21; 22) "\n"
+ STRUCT_DEF@[22; 33)
+ STRUCT_KW@[22; 28) "struct"
+ WHITESPACE@[28; 29) " "
+ NAME@[29; 30)
+ IDENT@[29; 30) "C"
+ POS_FIELD_DEF_LIST@[30; 32)
+ L_PAREN@[30; 31) "("
+ R_PAREN@[31; 32) ")"
+ SEMI@[32; 33) ";"
+ WHITESPACE@[33; 35) "\n\n"
+ STRUCT_DEF@[35; 74)
+ STRUCT_KW@[35; 41) "struct"
+ WHITESPACE@[41; 42) " "
+ NAME@[42; 43)
+ IDENT@[42; 43) "D"
+ WHITESPACE@[43; 44) " "
+ NAMED_FIELD_DEF_LIST@[44; 74)
+ L_CURLY@[44; 45) "{"
+ WHITESPACE@[45; 50) "\n "
+ NAMED_FIELD_DEF@[50; 56)
+ NAME@[50; 51)
+ IDENT@[50; 51) "a"
+ COLON@[51; 52) ":"
+ WHITESPACE@[52; 53) " "
+ PATH_TYPE@[53; 56)
+ PATH@[53; 56)
+ PATH_SEGMENT@[53; 56)
+ NAME_REF@[53; 56)
+ IDENT@[53; 56) "u32"
+ COMMA@[56; 57) ","
+ WHITESPACE@[57; 62) "\n "
+ NAMED_FIELD_DEF@[62; 72)
+ VISIBILITY@[62; 65)
+ PUB_KW@[62; 65) "pub"
+ WHITESPACE@[65; 66) " "
+ NAME@[66; 67)
+ IDENT@[66; 67) "b"
+ COLON@[67; 68) ":"
+ WHITESPACE@[68; 69) " "
+ PATH_TYPE@[69; 72)
+ PATH@[69; 72)
+ PATH_SEGMENT@[69; 72)
+ NAME_REF@[69; 72)
+ IDENT@[69; 72) "u32"
+ WHITESPACE@[72; 73) "\n"
+ R_CURLY@[73; 74) "}"
+ WHITESPACE@[74; 76) "\n\n"
+ STRUCT_DEF@[76; 96)
+ STRUCT_KW@[76; 82) "struct"
+ WHITESPACE@[82; 83) " "
+ NAME@[83; 84)
+ IDENT@[83; 84) "E"
+ POS_FIELD_DEF_LIST@[84; 95)
+ L_PAREN@[84; 85) "("
+ POS_FIELD_DEF@[85; 90)
+ VISIBILITY@[85; 88)
+ PUB_KW@[85; 88) "pub"
+ WHITESPACE@[88; 89) " "
+ PATH_TYPE@[89; 90)
+ PATH@[89; 90)
+ PATH_SEGMENT@[89; 90)
+ NAME_REF@[89; 90)
+ IDENT@[89; 90) "x"
+ COMMA@[90; 91) ","
+ WHITESPACE@[91; 92) " "
+ POS_FIELD_DEF@[92; 93)
+ PATH_TYPE@[92; 93)
+ PATH@[92; 93)
+ PATH_SEGMENT@[92; 93)
+ NAME_REF@[92; 93)
+ IDENT@[92; 93) "y"
+ COMMA@[93; 94) ","
+ R_PAREN@[94; 95) ")"
+ SEMI@[95; 96) ";"
+ WHITESPACE@[96; 97) "\n"
--- /dev/null
+#[foo(a,)]
+fn foo() {}
--- /dev/null
+SOURCE_FILE@[0; 23)
+ FN_DEF@[0; 22)
+ ATTR@[0; 10)
+ POUND@[0; 1) "#"
+ TOKEN_TREE@[1; 10)
+ L_BRACK@[1; 2) "["
+ IDENT@[2; 5) "foo"
+ TOKEN_TREE@[5; 9)
+ L_PAREN@[5; 6) "("
+ IDENT@[6; 7) "a"
+ COMMA@[7; 8) ","
+ R_PAREN@[8; 9) ")"
+ R_BRACK@[9; 10) "]"
+ WHITESPACE@[10; 11) "\n"
+ FN_KW@[11; 13) "fn"
+ WHITESPACE@[13; 14) " "
+ NAME@[14; 17)
+ IDENT@[14; 17) "foo"
+ PARAM_LIST@[17; 19)
+ L_PAREN@[17; 18) "("
+ R_PAREN@[18; 19) ")"
+ WHITESPACE@[19; 20) " "
+ BLOCK@[20; 22)
+ L_CURLY@[20; 21) "{"
+ R_CURLY@[21; 22) "}"
+ WHITESPACE@[22; 23) "\n"
--- /dev/null
+struct S1<T>;
+struct S2<T>(u32);
+struct S3<T> { u: u32 }
+
+struct S4<>;
+struct S5<'a>;
+struct S6<'a:>;
+struct S7<'a: 'b>;
+struct S8<'a: 'b + >;
+struct S9<'a: 'b + 'c>;
+struct S10<'a,>;
+struct S11<'a, 'b>;
+struct S12<'a: 'b+, 'b: 'c,>;
+
+struct S13<T>;
+struct S14<T, U>;
+struct S15<'a, T, U>;
--- /dev/null
+SOURCE_FILE@[0; 290)
+ STRUCT_DEF@[0; 13)
+ STRUCT_KW@[0; 6) "struct"
+ WHITESPACE@[6; 7) " "
+ NAME@[7; 9)
+ IDENT@[7; 9) "S1"
+ TYPE_PARAM_LIST@[9; 12)
+ L_ANGLE@[9; 10) "<"
+ TYPE_PARAM@[10; 11)
+ NAME@[10; 11)
+ IDENT@[10; 11) "T"
+ R_ANGLE@[11; 12) ">"
+ SEMI@[12; 13) ";"
+ WHITESPACE@[13; 14) "\n"
+ STRUCT_DEF@[14; 32)
+ STRUCT_KW@[14; 20) "struct"
+ WHITESPACE@[20; 21) " "
+ NAME@[21; 23)
+ IDENT@[21; 23) "S2"
+ TYPE_PARAM_LIST@[23; 26)
+ L_ANGLE@[23; 24) "<"
+ TYPE_PARAM@[24; 25)
+ NAME@[24; 25)
+ IDENT@[24; 25) "T"
+ R_ANGLE@[25; 26) ">"
+ POS_FIELD_DEF_LIST@[26; 31)
+ L_PAREN@[26; 27) "("
+ POS_FIELD_DEF@[27; 30)
+ PATH_TYPE@[27; 30)
+ PATH@[27; 30)
+ PATH_SEGMENT@[27; 30)
+ NAME_REF@[27; 30)
+ IDENT@[27; 30) "u32"
+ R_PAREN@[30; 31) ")"
+ SEMI@[31; 32) ";"
+ WHITESPACE@[32; 33) "\n"
+ STRUCT_DEF@[33; 56)
+ STRUCT_KW@[33; 39) "struct"
+ WHITESPACE@[39; 40) " "
+ NAME@[40; 42)
+ IDENT@[40; 42) "S3"
+ TYPE_PARAM_LIST@[42; 45)
+ L_ANGLE@[42; 43) "<"
+ TYPE_PARAM@[43; 44)
+ NAME@[43; 44)
+ IDENT@[43; 44) "T"
+ R_ANGLE@[44; 45) ">"
+ WHITESPACE@[45; 46) " "
+ NAMED_FIELD_DEF_LIST@[46; 56)
+ L_CURLY@[46; 47) "{"
+ WHITESPACE@[47; 48) " "
+ NAMED_FIELD_DEF@[48; 54)
+ NAME@[48; 49)
+ IDENT@[48; 49) "u"
+ COLON@[49; 50) ":"
+ WHITESPACE@[50; 51) " "
+ PATH_TYPE@[51; 54)
+ PATH@[51; 54)
+ PATH_SEGMENT@[51; 54)
+ NAME_REF@[51; 54)
+ IDENT@[51; 54) "u32"
+ WHITESPACE@[54; 55) " "
+ R_CURLY@[55; 56) "}"
+ WHITESPACE@[56; 58) "\n\n"
+ STRUCT_DEF@[58; 70)
+ STRUCT_KW@[58; 64) "struct"
+ WHITESPACE@[64; 65) " "
+ NAME@[65; 67)
+ IDENT@[65; 67) "S4"
+ TYPE_PARAM_LIST@[67; 69)
+ L_ANGLE@[67; 68) "<"
+ R_ANGLE@[68; 69) ">"
+ SEMI@[69; 70) ";"
+ WHITESPACE@[70; 71) "\n"
+ STRUCT_DEF@[71; 85)
+ STRUCT_KW@[71; 77) "struct"
+ WHITESPACE@[77; 78) " "
+ NAME@[78; 80)
+ IDENT@[78; 80) "S5"
+ TYPE_PARAM_LIST@[80; 84)
+ L_ANGLE@[80; 81) "<"
+ LIFETIME_PARAM@[81; 83)
+ LIFETIME@[81; 83) "\'a"
+ R_ANGLE@[83; 84) ">"
+ SEMI@[84; 85) ";"
+ WHITESPACE@[85; 86) "\n"
+ STRUCT_DEF@[86; 101)
+ STRUCT_KW@[86; 92) "struct"
+ WHITESPACE@[92; 93) " "
+ NAME@[93; 95)
+ IDENT@[93; 95) "S6"
+ TYPE_PARAM_LIST@[95; 100)
+ L_ANGLE@[95; 96) "<"
+ LIFETIME_PARAM@[96; 99)
+ LIFETIME@[96; 98) "\'a"
+ COLON@[98; 99) ":"
+ R_ANGLE@[99; 100) ">"
+ SEMI@[100; 101) ";"
+ WHITESPACE@[101; 102) "\n"
+ STRUCT_DEF@[102; 120)
+ STRUCT_KW@[102; 108) "struct"
+ WHITESPACE@[108; 109) " "
+ NAME@[109; 111)
+ IDENT@[109; 111) "S7"
+ TYPE_PARAM_LIST@[111; 119)
+ L_ANGLE@[111; 112) "<"
+ LIFETIME_PARAM@[112; 118)
+ LIFETIME@[112; 114) "\'a"
+ COLON@[114; 115) ":"
+ WHITESPACE@[115; 116) " "
+ LIFETIME@[116; 118) "\'b"
+ R_ANGLE@[118; 119) ">"
+ SEMI@[119; 120) ";"
+ WHITESPACE@[120; 121) "\n"
+ STRUCT_DEF@[121; 142)
+ STRUCT_KW@[121; 127) "struct"
+ WHITESPACE@[127; 128) " "
+ NAME@[128; 130)
+ IDENT@[128; 130) "S8"
+ TYPE_PARAM_LIST@[130; 141)
+ L_ANGLE@[130; 131) "<"
+ LIFETIME_PARAM@[131; 139)
+ LIFETIME@[131; 133) "\'a"
+ COLON@[133; 134) ":"
+ WHITESPACE@[134; 135) " "
+ LIFETIME@[135; 137) "\'b"
+ WHITESPACE@[137; 138) " "
+ PLUS@[138; 139) "+"
+ WHITESPACE@[139; 140) " "
+ R_ANGLE@[140; 141) ">"
+ SEMI@[141; 142) ";"
+ WHITESPACE@[142; 143) "\n"
+ STRUCT_DEF@[143; 166)
+ STRUCT_KW@[143; 149) "struct"
+ WHITESPACE@[149; 150) " "
+ NAME@[150; 152)
+ IDENT@[150; 152) "S9"
+ TYPE_PARAM_LIST@[152; 165)
+ L_ANGLE@[152; 153) "<"
+ LIFETIME_PARAM@[153; 164)
+ LIFETIME@[153; 155) "\'a"
+ COLON@[155; 156) ":"
+ WHITESPACE@[156; 157) " "
+ LIFETIME@[157; 159) "\'b"
+ WHITESPACE@[159; 160) " "
+ PLUS@[160; 161) "+"
+ WHITESPACE@[161; 162) " "
+ LIFETIME@[162; 164) "\'c"
+ R_ANGLE@[164; 165) ">"
+ SEMI@[165; 166) ";"
+ WHITESPACE@[166; 167) "\n"
+ STRUCT_DEF@[167; 183)
+ STRUCT_KW@[167; 173) "struct"
+ WHITESPACE@[173; 174) " "
+ NAME@[174; 177)
+ IDENT@[174; 177) "S10"
+ TYPE_PARAM_LIST@[177; 182)
+ L_ANGLE@[177; 178) "<"
+ LIFETIME_PARAM@[178; 180)
+ LIFETIME@[178; 180) "\'a"
+ COMMA@[180; 181) ","
+ R_ANGLE@[181; 182) ">"
+ SEMI@[182; 183) ";"
+ WHITESPACE@[183; 184) "\n"
+ STRUCT_DEF@[184; 203)
+ STRUCT_KW@[184; 190) "struct"
+ WHITESPACE@[190; 191) " "
+ NAME@[191; 194)
+ IDENT@[191; 194) "S11"
+ TYPE_PARAM_LIST@[194; 202)
+ L_ANGLE@[194; 195) "<"
+ LIFETIME_PARAM@[195; 197)
+ LIFETIME@[195; 197) "\'a"
+ COMMA@[197; 198) ","
+ WHITESPACE@[198; 199) " "
+ LIFETIME_PARAM@[199; 201)
+ LIFETIME@[199; 201) "\'b"
+ R_ANGLE@[201; 202) ">"
+ SEMI@[202; 203) ";"
+ WHITESPACE@[203; 204) "\n"
+ STRUCT_DEF@[204; 233)
+ STRUCT_KW@[204; 210) "struct"
+ WHITESPACE@[210; 211) " "
+ NAME@[211; 214)
+ IDENT@[211; 214) "S12"
+ TYPE_PARAM_LIST@[214; 232)
+ L_ANGLE@[214; 215) "<"
+ LIFETIME_PARAM@[215; 222)
+ LIFETIME@[215; 217) "\'a"
+ COLON@[217; 218) ":"
+ WHITESPACE@[218; 219) " "
+ LIFETIME@[219; 221) "\'b"
+ PLUS@[221; 222) "+"
+ COMMA@[222; 223) ","
+ WHITESPACE@[223; 224) " "
+ LIFETIME_PARAM@[224; 230)
+ LIFETIME@[224; 226) "\'b"
+ COLON@[226; 227) ":"
+ WHITESPACE@[227; 228) " "
+ LIFETIME@[228; 230) "\'c"
+ COMMA@[230; 231) ","
+ R_ANGLE@[231; 232) ">"
+ SEMI@[232; 233) ";"
+ WHITESPACE@[233; 235) "\n\n"
+ STRUCT_DEF@[235; 249)
+ STRUCT_KW@[235; 241) "struct"
+ WHITESPACE@[241; 242) " "
+ NAME@[242; 245)
+ IDENT@[242; 245) "S13"
+ TYPE_PARAM_LIST@[245; 248)
+ L_ANGLE@[245; 246) "<"
+ TYPE_PARAM@[246; 247)
+ NAME@[246; 247)
+ IDENT@[246; 247) "T"
+ R_ANGLE@[247; 248) ">"
+ SEMI@[248; 249) ";"
+ WHITESPACE@[249; 250) "\n"
+ STRUCT_DEF@[250; 267)
+ STRUCT_KW@[250; 256) "struct"
+ WHITESPACE@[256; 257) " "
+ NAME@[257; 260)
+ IDENT@[257; 260) "S14"
+ TYPE_PARAM_LIST@[260; 266)
+ L_ANGLE@[260; 261) "<"
+ TYPE_PARAM@[261; 262)
+ NAME@[261; 262)
+ IDENT@[261; 262) "T"
+ COMMA@[262; 263) ","
+ WHITESPACE@[263; 264) " "
+ TYPE_PARAM@[264; 265)
+ NAME@[264; 265)
+ IDENT@[264; 265) "U"
+ R_ANGLE@[265; 266) ">"
+ SEMI@[266; 267) ";"
+ WHITESPACE@[267; 268) "\n"
+ STRUCT_DEF@[268; 289)
+ STRUCT_KW@[268; 274) "struct"
+ WHITESPACE@[274; 275) " "
+ NAME@[275; 278)
+ IDENT@[275; 278) "S15"
+ TYPE_PARAM_LIST@[278; 288)
+ L_ANGLE@[278; 279) "<"
+ LIFETIME_PARAM@[279; 281)
+ LIFETIME@[279; 281) "\'a"
+ COMMA@[281; 282) ","
+ WHITESPACE@[282; 283) " "
+ TYPE_PARAM@[283; 284)
+ NAME@[283; 284)
+ IDENT@[283; 284) "T"
+ COMMA@[284; 285) ","
+ WHITESPACE@[285; 286) " "
+ TYPE_PARAM@[286; 287)
+ NAME@[286; 287)
+ IDENT@[286; 287) "U"
+ R_ANGLE@[287; 288) ">"
+ SEMI@[288; 289) ";"
+ WHITESPACE@[289; 290) "\n"
--- /dev/null
+enum E1 {
+}
+
+enum E2<T> {
+}
+
+enum E3 {
+ X
+}
+
+enum E4 {
+ X,
+}
+
+enum E5 {
+ A,
+ B = 92,
+ C {
+ a: u32,
+ pub b: f64,
+ },
+ F {},
+ D(u32,),
+ E(),
+}
--- /dev/null
+SOURCE_FILE@[0; 182)
+ ENUM_DEF@[0; 11)
+ ENUM_KW@[0; 4) "enum"
+ WHITESPACE@[4; 5) " "
+ NAME@[5; 7)
+ IDENT@[5; 7) "E1"
+ WHITESPACE@[7; 8) " "
+ ENUM_VARIANT_LIST@[8; 11)
+ L_CURLY@[8; 9) "{"
+ WHITESPACE@[9; 10) "\n"
+ R_CURLY@[10; 11) "}"
+ WHITESPACE@[11; 13) "\n\n"
+ ENUM_DEF@[13; 27)
+ ENUM_KW@[13; 17) "enum"
+ WHITESPACE@[17; 18) " "
+ NAME@[18; 20)
+ IDENT@[18; 20) "E2"
+ TYPE_PARAM_LIST@[20; 23)
+ L_ANGLE@[20; 21) "<"
+ TYPE_PARAM@[21; 22)
+ NAME@[21; 22)
+ IDENT@[21; 22) "T"
+ R_ANGLE@[22; 23) ">"
+ WHITESPACE@[23; 24) " "
+ ENUM_VARIANT_LIST@[24; 27)
+ L_CURLY@[24; 25) "{"
+ WHITESPACE@[25; 26) "\n"
+ R_CURLY@[26; 27) "}"
+ WHITESPACE@[27; 29) "\n\n"
+ ENUM_DEF@[29; 46)
+ ENUM_KW@[29; 33) "enum"
+ WHITESPACE@[33; 34) " "
+ NAME@[34; 36)
+ IDENT@[34; 36) "E3"
+ WHITESPACE@[36; 37) " "
+ ENUM_VARIANT_LIST@[37; 46)
+ L_CURLY@[37; 38) "{"
+ WHITESPACE@[38; 43) "\n "
+ ENUM_VARIANT@[43; 44)
+ NAME@[43; 44)
+ IDENT@[43; 44) "X"
+ WHITESPACE@[44; 45) "\n"
+ R_CURLY@[45; 46) "}"
+ WHITESPACE@[46; 48) "\n\n"
+ ENUM_DEF@[48; 66)
+ ENUM_KW@[48; 52) "enum"
+ WHITESPACE@[52; 53) " "
+ NAME@[53; 55)
+ IDENT@[53; 55) "E4"
+ WHITESPACE@[55; 56) " "
+ ENUM_VARIANT_LIST@[56; 66)
+ L_CURLY@[56; 57) "{"
+ WHITESPACE@[57; 62) "\n "
+ ENUM_VARIANT@[62; 63)
+ NAME@[62; 63)
+ IDENT@[62; 63) "X"
+ COMMA@[63; 64) ","
+ WHITESPACE@[64; 65) "\n"
+ R_CURLY@[65; 66) "}"
+ WHITESPACE@[66; 68) "\n\n"
+ ENUM_DEF@[68; 181)
+ ENUM_KW@[68; 72) "enum"
+ WHITESPACE@[72; 73) " "
+ NAME@[73; 75)
+ IDENT@[73; 75) "E5"
+ WHITESPACE@[75; 76) " "
+ ENUM_VARIANT_LIST@[76; 181)
+ L_CURLY@[76; 77) "{"
+ WHITESPACE@[77; 82) "\n "
+ ENUM_VARIANT@[82; 83)
+ NAME@[82; 83)
+ IDENT@[82; 83) "A"
+ COMMA@[83; 84) ","
+ WHITESPACE@[84; 89) "\n "
+ ENUM_VARIANT@[89; 95)
+ NAME@[89; 90)
+ IDENT@[89; 90) "B"
+ WHITESPACE@[90; 91) " "
+ EQ@[91; 92) "="
+ WHITESPACE@[92; 93) " "
+ LITERAL@[93; 95)
+ INT_NUMBER@[93; 95) "92"
+ COMMA@[95; 96) ","
+ WHITESPACE@[96; 101) "\n "
+ ENUM_VARIANT@[101; 146)
+ NAME@[101; 102)
+ IDENT@[101; 102) "C"
+ WHITESPACE@[102; 103) " "
+ NAMED_FIELD_DEF_LIST@[103; 146)
+ L_CURLY@[103; 104) "{"
+ WHITESPACE@[104; 113) "\n "
+ NAMED_FIELD_DEF@[113; 119)
+ NAME@[113; 114)
+ IDENT@[113; 114) "a"
+ COLON@[114; 115) ":"
+ WHITESPACE@[115; 116) " "
+ PATH_TYPE@[116; 119)
+ PATH@[116; 119)
+ PATH_SEGMENT@[116; 119)
+ NAME_REF@[116; 119)
+ IDENT@[116; 119) "u32"
+ COMMA@[119; 120) ","
+ WHITESPACE@[120; 129) "\n "
+ NAMED_FIELD_DEF@[129; 139)
+ VISIBILITY@[129; 132)
+ PUB_KW@[129; 132) "pub"
+ WHITESPACE@[132; 133) " "
+ NAME@[133; 134)
+ IDENT@[133; 134) "b"
+ COLON@[134; 135) ":"
+ WHITESPACE@[135; 136) " "
+ PATH_TYPE@[136; 139)
+ PATH@[136; 139)
+ PATH_SEGMENT@[136; 139)
+ NAME_REF@[136; 139)
+ IDENT@[136; 139) "f64"
+ COMMA@[139; 140) ","
+ WHITESPACE@[140; 145) "\n "
+ R_CURLY@[145; 146) "}"
+ COMMA@[146; 147) ","
+ WHITESPACE@[147; 152) "\n "
+ ENUM_VARIANT@[152; 156)
+ NAME@[152; 153)
+ IDENT@[152; 153) "F"
+ WHITESPACE@[153; 154) " "
+ NAMED_FIELD_DEF_LIST@[154; 156)
+ L_CURLY@[154; 155) "{"
+ R_CURLY@[155; 156) "}"
+ COMMA@[156; 157) ","
+ WHITESPACE@[157; 162) "\n "
+ ENUM_VARIANT@[162; 169)
+ NAME@[162; 163)
+ IDENT@[162; 163) "D"
+ POS_FIELD_DEF_LIST@[163; 169)
+ L_PAREN@[163; 164) "("
+ POS_FIELD_DEF@[164; 167)
+ PATH_TYPE@[164; 167)
+ PATH@[164; 167)
+ PATH_SEGMENT@[164; 167)
+ NAME_REF@[164; 167)
+ IDENT@[164; 167) "u32"
+ COMMA@[167; 168) ","
+ R_PAREN@[168; 169) ")"
+ COMMA@[169; 170) ","
+ WHITESPACE@[170; 175) "\n "
+ ENUM_VARIANT@[175; 178)
+ NAME@[175; 176)
+ IDENT@[175; 176) "E"
+ POS_FIELD_DEF_LIST@[176; 178)
+ L_PAREN@[176; 177) "("
+ R_PAREN@[177; 178) ")"
+ COMMA@[178; 179) ","
+ WHITESPACE@[179; 180) "\n"
+ R_CURLY@[180; 181) "}"
+ WHITESPACE@[181; 182) "\n"
--- /dev/null
+struct A<T>;
+struct B<T:>;
+struct C<T: 'a>;
+struct D<T: 'a + >;
+struct E<T: 'a + 'd >;
+struct F<T: 'a + 'd + Clone>;
+struct G<T: Clone + Copy>;
+struct H<T: ::Foo + self::Bar + 'a>;
+struct I<T:, U:,>;
+struct K<'a: 'd, 'd: 'a + 'b, T: 'a + 'd + Clone>;
\ No newline at end of file
--- /dev/null
+SOURCE_FILE@[0; 250)
+ STRUCT_DEF@[0; 12)
+ STRUCT_KW@[0; 6) "struct"
+ WHITESPACE@[6; 7) " "
+ NAME@[7; 8)
+ IDENT@[7; 8) "A"
+ TYPE_PARAM_LIST@[8; 11)
+ L_ANGLE@[8; 9) "<"
+ TYPE_PARAM@[9; 10)
+ NAME@[9; 10)
+ IDENT@[9; 10) "T"
+ R_ANGLE@[10; 11) ">"
+ SEMI@[11; 12) ";"
+ WHITESPACE@[12; 13) "\n"
+ STRUCT_DEF@[13; 26)
+ STRUCT_KW@[13; 19) "struct"
+ WHITESPACE@[19; 20) " "
+ NAME@[20; 21)
+ IDENT@[20; 21) "B"
+ TYPE_PARAM_LIST@[21; 25)
+ L_ANGLE@[21; 22) "<"
+ TYPE_PARAM@[22; 24)
+ NAME@[22; 23)
+ IDENT@[22; 23) "T"
+ COLON@[23; 24) ":"
+ TYPE_BOUND_LIST@[24; 24)
+ R_ANGLE@[24; 25) ">"
+ SEMI@[25; 26) ";"
+ WHITESPACE@[26; 27) "\n"
+ STRUCT_DEF@[27; 43)
+ STRUCT_KW@[27; 33) "struct"
+ WHITESPACE@[33; 34) " "
+ NAME@[34; 35)
+ IDENT@[34; 35) "C"
+ TYPE_PARAM_LIST@[35; 42)
+ L_ANGLE@[35; 36) "<"
+ TYPE_PARAM@[36; 41)
+ NAME@[36; 37)
+ IDENT@[36; 37) "T"
+ COLON@[37; 38) ":"
+ WHITESPACE@[38; 39) " "
+ TYPE_BOUND_LIST@[39; 41)
+ TYPE_BOUND@[39; 41)
+ LIFETIME@[39; 41) "\'a"
+ R_ANGLE@[41; 42) ">"
+ SEMI@[42; 43) ";"
+ WHITESPACE@[43; 44) "\n"
+ STRUCT_DEF@[44; 63)
+ STRUCT_KW@[44; 50) "struct"
+ WHITESPACE@[50; 51) " "
+ NAME@[51; 52)
+ IDENT@[51; 52) "D"
+ TYPE_PARAM_LIST@[52; 62)
+ L_ANGLE@[52; 53) "<"
+ TYPE_PARAM@[53; 60)
+ NAME@[53; 54)
+ IDENT@[53; 54) "T"
+ COLON@[54; 55) ":"
+ WHITESPACE@[55; 56) " "
+ TYPE_BOUND_LIST@[56; 60)
+ TYPE_BOUND@[56; 58)
+ LIFETIME@[56; 58) "\'a"
+ WHITESPACE@[58; 59) " "
+ PLUS@[59; 60) "+"
+ WHITESPACE@[60; 61) " "
+ R_ANGLE@[61; 62) ">"
+ SEMI@[62; 63) ";"
+ WHITESPACE@[63; 64) "\n"
+ STRUCT_DEF@[64; 86)
+ STRUCT_KW@[64; 70) "struct"
+ WHITESPACE@[70; 71) " "
+ NAME@[71; 72)
+ IDENT@[71; 72) "E"
+ TYPE_PARAM_LIST@[72; 85)
+ L_ANGLE@[72; 73) "<"
+ TYPE_PARAM@[73; 83)
+ NAME@[73; 74)
+ IDENT@[73; 74) "T"
+ COLON@[74; 75) ":"
+ WHITESPACE@[75; 76) " "
+ TYPE_BOUND_LIST@[76; 83)
+ TYPE_BOUND@[76; 78)
+ LIFETIME@[76; 78) "\'a"
+ WHITESPACE@[78; 79) " "
+ PLUS@[79; 80) "+"
+ WHITESPACE@[80; 81) " "
+ TYPE_BOUND@[81; 83)
+ LIFETIME@[81; 83) "\'d"
+ WHITESPACE@[83; 84) " "
+ R_ANGLE@[84; 85) ">"
+ SEMI@[85; 86) ";"
+ WHITESPACE@[86; 87) "\n"
+ STRUCT_DEF@[87; 116)
+ STRUCT_KW@[87; 93) "struct"
+ WHITESPACE@[93; 94) " "
+ NAME@[94; 95)
+ IDENT@[94; 95) "F"
+ TYPE_PARAM_LIST@[95; 115)
+ L_ANGLE@[95; 96) "<"
+ TYPE_PARAM@[96; 114)
+ NAME@[96; 97)
+ IDENT@[96; 97) "T"
+ COLON@[97; 98) ":"
+ WHITESPACE@[98; 99) " "
+ TYPE_BOUND_LIST@[99; 114)
+ TYPE_BOUND@[99; 101)
+ LIFETIME@[99; 101) "\'a"
+ WHITESPACE@[101; 102) " "
+ PLUS@[102; 103) "+"
+ WHITESPACE@[103; 104) " "
+ TYPE_BOUND@[104; 106)
+ LIFETIME@[104; 106) "\'d"
+ WHITESPACE@[106; 107) " "
+ PLUS@[107; 108) "+"
+ WHITESPACE@[108; 109) " "
+ TYPE_BOUND@[109; 114)
+ PATH_TYPE@[109; 114)
+ PATH@[109; 114)
+ PATH_SEGMENT@[109; 114)
+ NAME_REF@[109; 114)
+ IDENT@[109; 114) "Clone"
+ R_ANGLE@[114; 115) ">"
+ SEMI@[115; 116) ";"
+ WHITESPACE@[116; 117) "\n"
+ STRUCT_DEF@[117; 143)
+ STRUCT_KW@[117; 123) "struct"
+ WHITESPACE@[123; 124) " "
+ NAME@[124; 125)
+ IDENT@[124; 125) "G"
+ TYPE_PARAM_LIST@[125; 142)
+ L_ANGLE@[125; 126) "<"
+ TYPE_PARAM@[126; 141)
+ NAME@[126; 127)
+ IDENT@[126; 127) "T"
+ COLON@[127; 128) ":"
+ WHITESPACE@[128; 129) " "
+ TYPE_BOUND_LIST@[129; 141)
+ TYPE_BOUND@[129; 134)
+ PATH_TYPE@[129; 134)
+ PATH@[129; 134)
+ PATH_SEGMENT@[129; 134)
+ NAME_REF@[129; 134)
+ IDENT@[129; 134) "Clone"
+ WHITESPACE@[134; 135) " "
+ PLUS@[135; 136) "+"
+ WHITESPACE@[136; 137) " "
+ TYPE_BOUND@[137; 141)
+ PATH_TYPE@[137; 141)
+ PATH@[137; 141)
+ PATH_SEGMENT@[137; 141)
+ NAME_REF@[137; 141)
+ IDENT@[137; 141) "Copy"
+ R_ANGLE@[141; 142) ">"
+ SEMI@[142; 143) ";"
+ WHITESPACE@[143; 144) "\n"
+ STRUCT_DEF@[144; 180)
+ STRUCT_KW@[144; 150) "struct"
+ WHITESPACE@[150; 151) " "
+ NAME@[151; 152)
+ IDENT@[151; 152) "H"
+ TYPE_PARAM_LIST@[152; 179)
+ L_ANGLE@[152; 153) "<"
+ TYPE_PARAM@[153; 178)
+ NAME@[153; 154)
+ IDENT@[153; 154) "T"
+ COLON@[154; 155) ":"
+ WHITESPACE@[155; 156) " "
+ TYPE_BOUND_LIST@[156; 178)
+ TYPE_BOUND@[156; 161)
+ PATH_TYPE@[156; 161)
+ PATH@[156; 161)
+ PATH_SEGMENT@[156; 161)
+ COLONCOLON@[156; 158) "::"
+ NAME_REF@[158; 161)
+ IDENT@[158; 161) "Foo"
+ WHITESPACE@[161; 162) " "
+ PLUS@[162; 163) "+"
+ WHITESPACE@[163; 164) " "
+ TYPE_BOUND@[164; 173)
+ PATH_TYPE@[164; 173)
+ PATH@[164; 173)
+ PATH@[164; 168)
+ PATH_SEGMENT@[164; 168)
+ SELF_KW@[164; 168) "self"
+ COLONCOLON@[168; 170) "::"
+ PATH_SEGMENT@[170; 173)
+ NAME_REF@[170; 173)
+ IDENT@[170; 173) "Bar"
+ WHITESPACE@[173; 174) " "
+ PLUS@[174; 175) "+"
+ WHITESPACE@[175; 176) " "
+ TYPE_BOUND@[176; 178)
+ LIFETIME@[176; 178) "\'a"
+ R_ANGLE@[178; 179) ">"
+ SEMI@[179; 180) ";"
+ WHITESPACE@[180; 181) "\n"
+ STRUCT_DEF@[181; 199)
+ STRUCT_KW@[181; 187) "struct"
+ WHITESPACE@[187; 188) " "
+ NAME@[188; 189)
+ IDENT@[188; 189) "I"
+ TYPE_PARAM_LIST@[189; 198)
+ L_ANGLE@[189; 190) "<"
+ TYPE_PARAM@[190; 192)
+ NAME@[190; 191)
+ IDENT@[190; 191) "T"
+ COLON@[191; 192) ":"
+ TYPE_BOUND_LIST@[192; 192)
+ COMMA@[192; 193) ","
+ WHITESPACE@[193; 194) " "
+ TYPE_PARAM@[194; 196)
+ NAME@[194; 195)
+ IDENT@[194; 195) "U"
+ COLON@[195; 196) ":"
+ TYPE_BOUND_LIST@[196; 196)
+ COMMA@[196; 197) ","
+ R_ANGLE@[197; 198) ">"
+ SEMI@[198; 199) ";"
+ WHITESPACE@[199; 200) "\n"
+ STRUCT_DEF@[200; 250)
+ STRUCT_KW@[200; 206) "struct"
+ WHITESPACE@[206; 207) " "
+ NAME@[207; 208)
+ IDENT@[207; 208) "K"
+ TYPE_PARAM_LIST@[208; 249)
+ L_ANGLE@[208; 209) "<"
+ LIFETIME_PARAM@[209; 215)
+ LIFETIME@[209; 211) "\'a"
+ COLON@[211; 212) ":"
+ WHITESPACE@[212; 213) " "
+ LIFETIME@[213; 215) "\'d"
+ COMMA@[215; 216) ","
+ WHITESPACE@[216; 217) " "
+ LIFETIME_PARAM@[217; 228)
+ LIFETIME@[217; 219) "\'d"
+ COLON@[219; 220) ":"
+ WHITESPACE@[220; 221) " "
+ LIFETIME@[221; 223) "\'a"
+ WHITESPACE@[223; 224) " "
+ PLUS@[224; 225) "+"
+ WHITESPACE@[225; 226) " "
+ LIFETIME@[226; 228) "\'b"
+ COMMA@[228; 229) ","
+ WHITESPACE@[229; 230) " "
+ TYPE_PARAM@[230; 248)
+ NAME@[230; 231)
+ IDENT@[230; 231) "T"
+ COLON@[231; 232) ":"
+ WHITESPACE@[232; 233) " "
+ TYPE_BOUND_LIST@[233; 248)
+ TYPE_BOUND@[233; 235)
+ LIFETIME@[233; 235) "\'a"
+ WHITESPACE@[235; 236) " "
+ PLUS@[236; 237) "+"
+ WHITESPACE@[237; 238) " "
+ TYPE_BOUND@[238; 240)
+ LIFETIME@[238; 240) "\'d"
+ WHITESPACE@[240; 241) " "
+ PLUS@[241; 242) "+"
+ WHITESPACE@[242; 243) " "
+ TYPE_BOUND@[243; 248)
+ PATH_TYPE@[243; 248)
+ PATH@[243; 248)
+ PATH_SEGMENT@[243; 248)
+ NAME_REF@[243; 248)
+ IDENT@[243; 248) "Clone"
+ R_ANGLE@[248; 249) ">"
+ SEMI@[249; 250) ";"
--- /dev/null
+extern fn foo() {
+}
+
+extern "C" fn bar() {
+}
+
+extern r"D" fn baz() {
+}
--- /dev/null
+SOURCE_FILE@[0; 71)
+ FN_DEF@[0; 19)
+ ABI@[0; 6)
+ EXTERN_KW@[0; 6) "extern"
+ WHITESPACE@[6; 7) " "
+ FN_KW@[7; 9) "fn"
+ WHITESPACE@[9; 10) " "
+ NAME@[10; 13)
+ IDENT@[10; 13) "foo"
+ PARAM_LIST@[13; 15)
+ L_PAREN@[13; 14) "("
+ R_PAREN@[14; 15) ")"
+ WHITESPACE@[15; 16) " "
+ BLOCK@[16; 19)
+ L_CURLY@[16; 17) "{"
+ WHITESPACE@[17; 18) "\n"
+ R_CURLY@[18; 19) "}"
+ WHITESPACE@[19; 21) "\n\n"
+ FN_DEF@[21; 44)
+ ABI@[21; 31)
+ EXTERN_KW@[21; 27) "extern"
+ WHITESPACE@[27; 28) " "
+ STRING@[28; 31) "\"C\""
+ WHITESPACE@[31; 32) " "
+ FN_KW@[32; 34) "fn"
+ WHITESPACE@[34; 35) " "
+ NAME@[35; 38)
+ IDENT@[35; 38) "bar"
+ PARAM_LIST@[38; 40)
+ L_PAREN@[38; 39) "("
+ R_PAREN@[39; 40) ")"
+ WHITESPACE@[40; 41) " "
+ BLOCK@[41; 44)
+ L_CURLY@[41; 42) "{"
+ WHITESPACE@[42; 43) "\n"
+ R_CURLY@[43; 44) "}"
+ WHITESPACE@[44; 46) "\n\n"
+ FN_DEF@[46; 70)
+ ABI@[46; 57)
+ EXTERN_KW@[46; 52) "extern"
+ WHITESPACE@[52; 53) " "
+ RAW_STRING@[53; 57) "r\"D\""
+ WHITESPACE@[57; 58) " "
+ FN_KW@[58; 60) "fn"
+ WHITESPACE@[60; 61) " "
+ NAME@[61; 64)
+ IDENT@[61; 64) "baz"
+ PARAM_LIST@[64; 66)
+ L_PAREN@[64; 65) "("
+ R_PAREN@[65; 66) ")"
+ WHITESPACE@[66; 67) " "
+ BLOCK@[67; 70)
+ L_CURLY@[67; 68) "{"
+ WHITESPACE@[68; 69) "\n"
+ R_CURLY@[69; 70) "}"
+ WHITESPACE@[70; 71) "\n"
--- /dev/null
+extern {
+}
+
+extern "C" {
+}
--- /dev/null
+SOURCE_FILE@[0; 27)
+ EXTERN_BLOCK@[0; 10)
+ ABI@[0; 6)
+ EXTERN_KW@[0; 6) "extern"
+ WHITESPACE@[6; 7) " "
+ EXTERN_ITEM_LIST@[7; 10)
+ L_CURLY@[7; 8) "{"
+ WHITESPACE@[8; 9) "\n"
+ R_CURLY@[9; 10) "}"
+ WHITESPACE@[10; 12) "\n\n"
+ EXTERN_BLOCK@[12; 26)
+ ABI@[12; 22)
+ EXTERN_KW@[12; 18) "extern"
+ WHITESPACE@[18; 19) " "
+ STRING@[19; 22) "\"C\""
+ WHITESPACE@[22; 23) " "
+ EXTERN_ITEM_LIST@[23; 26)
+ L_CURLY@[23; 24) "{"
+ WHITESPACE@[24; 25) "\n"
+ R_CURLY@[25; 26) "}"
+ WHITESPACE@[26; 27) "\n"
--- /dev/null
+static FOO: u32 = 1;
+static mut BAR: i32 = 92;
--- /dev/null
+SOURCE_FILE@[0; 47)
+ STATIC_DEF@[0; 20)
+ STATIC_KW@[0; 6) "static"
+ WHITESPACE@[6; 7) " "
+ NAME@[7; 10)
+ IDENT@[7; 10) "FOO"
+ COLON@[10; 11) ":"
+ WHITESPACE@[11; 12) " "
+ PATH_TYPE@[12; 15)
+ PATH@[12; 15)
+ PATH_SEGMENT@[12; 15)
+ NAME_REF@[12; 15)
+ IDENT@[12; 15) "u32"
+ WHITESPACE@[15; 16) " "
+ EQ@[16; 17) "="
+ WHITESPACE@[17; 18) " "
+ LITERAL@[18; 19)
+ INT_NUMBER@[18; 19) "1"
+ SEMI@[19; 20) ";"
+ WHITESPACE@[20; 21) "\n"
+ STATIC_DEF@[21; 46)
+ STATIC_KW@[21; 27) "static"
+ WHITESPACE@[27; 28) " "
+ MUT_KW@[28; 31) "mut"
+ WHITESPACE@[31; 32) " "
+ NAME@[32; 35)
+ IDENT@[32; 35) "BAR"
+ COLON@[35; 36) ":"
+ WHITESPACE@[36; 37) " "
+ PATH_TYPE@[37; 40)
+ PATH@[37; 40)
+ PATH_SEGMENT@[37; 40)
+ NAME_REF@[37; 40)
+ IDENT@[37; 40) "i32"
+ WHITESPACE@[40; 41) " "
+ EQ@[41; 42) "="
+ WHITESPACE@[42; 43) " "
+ LITERAL@[43; 45)
+ INT_NUMBER@[43; 45) "92"
+ SEMI@[45; 46) ";"
+ WHITESPACE@[46; 47) "\n"
--- /dev/null
+const FOO: u32 = 92;
+const mut BAR: u32 = 62;
--- /dev/null
+SOURCE_FILE@[0; 46)
+ CONST_DEF@[0; 20)
+ CONST_KW@[0; 5) "const"
+ WHITESPACE@[5; 6) " "
+ NAME@[6; 9)
+ IDENT@[6; 9) "FOO"
+ COLON@[9; 10) ":"
+ WHITESPACE@[10; 11) " "
+ PATH_TYPE@[11; 14)
+ PATH@[11; 14)
+ PATH_SEGMENT@[11; 14)
+ NAME_REF@[11; 14)
+ IDENT@[11; 14) "u32"
+ WHITESPACE@[14; 15) " "
+ EQ@[15; 16) "="
+ WHITESPACE@[16; 17) " "
+ LITERAL@[17; 19)
+ INT_NUMBER@[17; 19) "92"
+ SEMI@[19; 20) ";"
+ WHITESPACE@[20; 21) "\n"
+ CONST_DEF@[21; 45)
+ CONST_KW@[21; 26) "const"
+ WHITESPACE@[26; 27) " "
+ MUT_KW@[27; 30) "mut"
+ WHITESPACE@[30; 31) " "
+ NAME@[31; 34)
+ IDENT@[31; 34) "BAR"
+ COLON@[34; 35) ":"
+ WHITESPACE@[35; 36) " "
+ PATH_TYPE@[36; 39)
+ PATH@[36; 39)
+ PATH_SEGMENT@[36; 39)
+ NAME_REF@[36; 39)
+ IDENT@[36; 39) "u32"
+ WHITESPACE@[39; 40) " "
+ EQ@[40; 41) "="
+ WHITESPACE@[41; 42) " "
+ LITERAL@[42; 44)
+ INT_NUMBER@[42; 44) "62"
+ SEMI@[44; 45) ";"
+ WHITESPACE@[45; 46) "\n"
--- /dev/null
+fn main() {
+ extern fn f() {}
+}
--- /dev/null
+SOURCE_FILE@[0; 35)
+ FN_DEF@[0; 34)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 7)
+ IDENT@[3; 7) "main"
+ PARAM_LIST@[7; 9)
+ L_PAREN@[7; 8) "("
+ R_PAREN@[8; 9) ")"
+ WHITESPACE@[9; 10) " "
+ BLOCK@[10; 34)
+ L_CURLY@[10; 11) "{"
+ WHITESPACE@[11; 16) "\n "
+ FN_DEF@[16; 32)
+ ABI@[16; 22)
+ EXTERN_KW@[16; 22) "extern"
+ WHITESPACE@[22; 23) " "
+ FN_KW@[23; 25) "fn"
+ WHITESPACE@[25; 26) " "
+ NAME@[26; 27)
+ IDENT@[26; 27) "f"
+ PARAM_LIST@[27; 29)
+ L_PAREN@[27; 28) "("
+ R_PAREN@[28; 29) ")"
+ WHITESPACE@[29; 30) " "
+ BLOCK@[30; 32)
+ L_CURLY@[30; 31) "{"
+ R_CURLY@[31; 32) "}"
+ WHITESPACE@[32; 33) "\n"
+ R_CURLY@[33; 34) "}"
+ WHITESPACE@[34; 35) "\n"
--- /dev/null
+fn main() {
+ const fn f() {}
+}
--- /dev/null
+SOURCE_FILE@[0; 34)
+ FN_DEF@[0; 33)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 7)
+ IDENT@[3; 7) "main"
+ PARAM_LIST@[7; 9)
+ L_PAREN@[7; 8) "("
+ R_PAREN@[8; 9) ")"
+ WHITESPACE@[9; 10) " "
+ BLOCK@[10; 33)
+ L_CURLY@[10; 11) "{"
+ WHITESPACE@[11; 16) "\n "
+ FN_DEF@[16; 31)
+ CONST_KW@[16; 21) "const"
+ WHITESPACE@[21; 22) " "
+ FN_KW@[22; 24) "fn"
+ WHITESPACE@[24; 25) " "
+ NAME@[25; 26)
+ IDENT@[25; 26) "f"
+ PARAM_LIST@[26; 28)
+ L_PAREN@[26; 27) "("
+ R_PAREN@[27; 28) ")"
+ WHITESPACE@[28; 29) " "
+ BLOCK@[29; 31)
+ L_CURLY@[29; 30) "{"
+ R_CURLY@[30; 31) "}"
+ WHITESPACE@[31; 32) "\n"
+ R_CURLY@[32; 33) "}"
+ WHITESPACE@[33; 34) "\n"
--- /dev/null
+fn main() {
+ unsafe fn f() {}
+ unsafe { 92 }
+}
--- /dev/null
+SOURCE_FILE@[0; 53)
+ FN_DEF@[0; 52)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 7)
+ IDENT@[3; 7) "main"
+ PARAM_LIST@[7; 9)
+ L_PAREN@[7; 8) "("
+ R_PAREN@[8; 9) ")"
+ WHITESPACE@[9; 10) " "
+ BLOCK@[10; 52)
+ L_CURLY@[10; 11) "{"
+ WHITESPACE@[11; 16) "\n "
+ FN_DEF@[16; 32)
+ UNSAFE_KW@[16; 22) "unsafe"
+ WHITESPACE@[22; 23) " "
+ FN_KW@[23; 25) "fn"
+ WHITESPACE@[25; 26) " "
+ NAME@[26; 27)
+ IDENT@[26; 27) "f"
+ PARAM_LIST@[27; 29)
+ L_PAREN@[27; 28) "("
+ R_PAREN@[28; 29) ")"
+ WHITESPACE@[29; 30) " "
+ BLOCK@[30; 32)
+ L_CURLY@[30; 31) "{"
+ R_CURLY@[31; 32) "}"
+ WHITESPACE@[32; 37) "\n "
+ BLOCK_EXPR@[37; 50)
+ UNSAFE_KW@[37; 43) "unsafe"
+ WHITESPACE@[43; 44) " "
+ BLOCK@[44; 50)
+ L_CURLY@[44; 45) "{"
+ WHITESPACE@[45; 46) " "
+ LITERAL@[46; 48)
+ INT_NUMBER@[46; 48) "92"
+ WHITESPACE@[48; 49) " "
+ R_CURLY@[49; 50) "}"
+ WHITESPACE@[50; 51) "\n"
+ R_CURLY@[51; 52) "}"
+ WHITESPACE@[52; 53) "\n"
--- /dev/null
+fn binding_power() {
+ let x = 1 + 2 * 3 % 4 - 5 / 6;
+ 1 + 2 * 3;
+ 1 << 2 + 3;
+ 1 & 2 >> 3;
+ 1 ^ 2 & 3;
+ 1 | 2 ^ 3;
+ 1 == 2 | 3;
+ 1 && 2 == 3;
+ //1 || 2 && 2;
+ //1 .. 2 || 3;
+ //1 = 2 .. 3;
+ //---&*1 - --2 * 9;
+}
--- /dev/null
+SOURCE_FILE@[0; 248)
+ FN_DEF@[0; 247)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 16)
+ IDENT@[3; 16) "binding_power"
+ PARAM_LIST@[16; 18)
+ L_PAREN@[16; 17) "("
+ R_PAREN@[17; 18) ")"
+ WHITESPACE@[18; 19) " "
+ BLOCK@[19; 247)
+ L_CURLY@[19; 20) "{"
+ WHITESPACE@[20; 25) "\n "
+ LET_STMT@[25; 55)
+ LET_KW@[25; 28) "let"
+ WHITESPACE@[28; 29) " "
+ BIND_PAT@[29; 30)
+ NAME@[29; 30)
+ IDENT@[29; 30) "x"
+ WHITESPACE@[30; 31) " "
+ EQ@[31; 32) "="
+ WHITESPACE@[32; 33) " "
+ BIN_EXPR@[33; 54)
+ BIN_EXPR@[33; 46)
+ LITERAL@[33; 34)
+ INT_NUMBER@[33; 34) "1"
+ WHITESPACE@[34; 35) " "
+ PLUS@[35; 36) "+"
+ WHITESPACE@[36; 37) " "
+ BIN_EXPR@[37; 46)
+ BIN_EXPR@[37; 42)
+ LITERAL@[37; 38)
+ INT_NUMBER@[37; 38) "2"
+ WHITESPACE@[38; 39) " "
+ STAR@[39; 40) "*"
+ WHITESPACE@[40; 41) " "
+ LITERAL@[41; 42)
+ INT_NUMBER@[41; 42) "3"
+ WHITESPACE@[42; 43) " "
+ PERCENT@[43; 44) "%"
+ WHITESPACE@[44; 45) " "
+ LITERAL@[45; 46)
+ INT_NUMBER@[45; 46) "4"
+ WHITESPACE@[46; 47) " "
+ MINUS@[47; 48) "-"
+ WHITESPACE@[48; 49) " "
+ BIN_EXPR@[49; 54)
+ LITERAL@[49; 50)
+ INT_NUMBER@[49; 50) "5"
+ WHITESPACE@[50; 51) " "
+ SLASH@[51; 52) "/"
+ WHITESPACE@[52; 53) " "
+ LITERAL@[53; 54)
+ INT_NUMBER@[53; 54) "6"
+ SEMI@[54; 55) ";"
+ WHITESPACE@[55; 60) "\n "
+ EXPR_STMT@[60; 70)
+ BIN_EXPR@[60; 69)
+ LITERAL@[60; 61)
+ INT_NUMBER@[60; 61) "1"
+ WHITESPACE@[61; 62) " "
+ PLUS@[62; 63) "+"
+ WHITESPACE@[63; 64) " "
+ BIN_EXPR@[64; 69)
+ LITERAL@[64; 65)
+ INT_NUMBER@[64; 65) "2"
+ WHITESPACE@[65; 66) " "
+ STAR@[66; 67) "*"
+ WHITESPACE@[67; 68) " "
+ LITERAL@[68; 69)
+ INT_NUMBER@[68; 69) "3"
+ SEMI@[69; 70) ";"
+ WHITESPACE@[70; 75) "\n "
+ EXPR_STMT@[75; 86)
+ BIN_EXPR@[75; 85)
+ LITERAL@[75; 76)
+ INT_NUMBER@[75; 76) "1"
+ WHITESPACE@[76; 77) " "
+ SHL@[77; 79) "<<"
+ WHITESPACE@[79; 80) " "
+ BIN_EXPR@[80; 85)
+ LITERAL@[80; 81)
+ INT_NUMBER@[80; 81) "2"
+ WHITESPACE@[81; 82) " "
+ PLUS@[82; 83) "+"
+ WHITESPACE@[83; 84) " "
+ LITERAL@[84; 85)
+ INT_NUMBER@[84; 85) "3"
+ SEMI@[85; 86) ";"
+ WHITESPACE@[86; 91) "\n "
+ EXPR_STMT@[91; 102)
+ BIN_EXPR@[91; 101)
+ LITERAL@[91; 92)
+ INT_NUMBER@[91; 92) "1"
+ WHITESPACE@[92; 93) " "
+ AMP@[93; 94) "&"
+ WHITESPACE@[94; 95) " "
+ BIN_EXPR@[95; 101)
+ LITERAL@[95; 96)
+ INT_NUMBER@[95; 96) "2"
+ WHITESPACE@[96; 97) " "
+ SHR@[97; 99) ">>"
+ WHITESPACE@[99; 100) " "
+ LITERAL@[100; 101)
+ INT_NUMBER@[100; 101) "3"
+ SEMI@[101; 102) ";"
+ WHITESPACE@[102; 107) "\n "
+ EXPR_STMT@[107; 117)
+ BIN_EXPR@[107; 116)
+ LITERAL@[107; 108)
+ INT_NUMBER@[107; 108) "1"
+ WHITESPACE@[108; 109) " "
+ CARET@[109; 110) "^"
+ WHITESPACE@[110; 111) " "
+ BIN_EXPR@[111; 116)
+ LITERAL@[111; 112)
+ INT_NUMBER@[111; 112) "2"
+ WHITESPACE@[112; 113) " "
+ AMP@[113; 114) "&"
+ WHITESPACE@[114; 115) " "
+ LITERAL@[115; 116)
+ INT_NUMBER@[115; 116) "3"
+ SEMI@[116; 117) ";"
+ WHITESPACE@[117; 122) "\n "
+ EXPR_STMT@[122; 132)
+ BIN_EXPR@[122; 131)
+ LITERAL@[122; 123)
+ INT_NUMBER@[122; 123) "1"
+ WHITESPACE@[123; 124) " "
+ PIPE@[124; 125) "|"
+ WHITESPACE@[125; 126) " "
+ BIN_EXPR@[126; 131)
+ LITERAL@[126; 127)
+ INT_NUMBER@[126; 127) "2"
+ WHITESPACE@[127; 128) " "
+ CARET@[128; 129) "^"
+ WHITESPACE@[129; 130) " "
+ LITERAL@[130; 131)
+ INT_NUMBER@[130; 131) "3"
+ SEMI@[131; 132) ";"
+ WHITESPACE@[132; 137) "\n "
+ EXPR_STMT@[137; 148)
+ BIN_EXPR@[137; 147)
+ LITERAL@[137; 138)
+ INT_NUMBER@[137; 138) "1"
+ WHITESPACE@[138; 139) " "
+ EQEQ@[139; 141) "=="
+ WHITESPACE@[141; 142) " "
+ BIN_EXPR@[142; 147)
+ LITERAL@[142; 143)
+ INT_NUMBER@[142; 143) "2"
+ WHITESPACE@[143; 144) " "
+ PIPE@[144; 145) "|"
+ WHITESPACE@[145; 146) " "
+ LITERAL@[146; 147)
+ INT_NUMBER@[146; 147) "3"
+ SEMI@[147; 148) ";"
+ WHITESPACE@[148; 153) "\n "
+ EXPR_STMT@[153; 165)
+ BIN_EXPR@[153; 164)
+ LITERAL@[153; 154)
+ INT_NUMBER@[153; 154) "1"
+ WHITESPACE@[154; 155) " "
+ AMPAMP@[155; 157) "&&"
+ WHITESPACE@[157; 158) " "
+ BIN_EXPR@[158; 164)
+ LITERAL@[158; 159)
+ INT_NUMBER@[158; 159) "2"
+ WHITESPACE@[159; 160) " "
+ EQEQ@[160; 162) "=="
+ WHITESPACE@[162; 163) " "
+ LITERAL@[163; 164)
+ INT_NUMBER@[163; 164) "3"
+ SEMI@[164; 165) ";"
+ WHITESPACE@[165; 170) "\n "
+ COMMENT@[170; 184) "//1 || 2 && 2;"
+ WHITESPACE@[184; 189) "\n "
+ COMMENT@[189; 203) "//1 .. 2 || 3;"
+ WHITESPACE@[203; 208) "\n "
+ COMMENT@[208; 221) "//1 = 2 .. 3;"
+ WHITESPACE@[221; 226) "\n "
+ COMMENT@[226; 245) "//---&*1 - --2 * 9;"
+ WHITESPACE@[245; 246) "\n"
+ R_CURLY@[246; 247) "}"
+ WHITESPACE@[247; 248) "\n"
--- /dev/null
+fn foo() {
+ ..1 + 1;
+ ..z = 2;
+ x = false..1 == 1;
+ let x = 1..;
+
+ ..=1 + 1;
+ ..=z = 2;
+ x = false..=1 == 1;
+ let x = 1..;
+}
--- /dev/null
+SOURCE_FILE@[0; 153)
+ FN_DEF@[0; 152)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 152)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ EXPR_STMT@[15; 23)
+ RANGE_EXPR@[15; 22)
+ DOTDOT@[15; 17) ".."
+ BIN_EXPR@[17; 22)
+ LITERAL@[17; 18)
+ INT_NUMBER@[17; 18) "1"
+ WHITESPACE@[18; 19) " "
+ PLUS@[19; 20) "+"
+ WHITESPACE@[20; 21) " "
+ LITERAL@[21; 22)
+ INT_NUMBER@[21; 22) "1"
+ SEMI@[22; 23) ";"
+ WHITESPACE@[23; 28) "\n "
+ EXPR_STMT@[28; 36)
+ BIN_EXPR@[28; 35)
+ RANGE_EXPR@[28; 31)
+ DOTDOT@[28; 30) ".."
+ PATH_EXPR@[30; 31)
+ PATH@[30; 31)
+ PATH_SEGMENT@[30; 31)
+ NAME_REF@[30; 31)
+ IDENT@[30; 31) "z"
+ WHITESPACE@[31; 32) " "
+ EQ@[32; 33) "="
+ WHITESPACE@[33; 34) " "
+ LITERAL@[34; 35)
+ INT_NUMBER@[34; 35) "2"
+ SEMI@[35; 36) ";"
+ WHITESPACE@[36; 41) "\n "
+ EXPR_STMT@[41; 59)
+ BIN_EXPR@[41; 58)
+ PATH_EXPR@[41; 42)
+ PATH@[41; 42)
+ PATH_SEGMENT@[41; 42)
+ NAME_REF@[41; 42)
+ IDENT@[41; 42) "x"
+ WHITESPACE@[42; 43) " "
+ EQ@[43; 44) "="
+ WHITESPACE@[44; 45) " "
+ RANGE_EXPR@[45; 58)
+ LITERAL@[45; 50)
+ FALSE_KW@[45; 50) "false"
+ DOTDOT@[50; 52) ".."
+ BIN_EXPR@[52; 58)
+ LITERAL@[52; 53)
+ INT_NUMBER@[52; 53) "1"
+ WHITESPACE@[53; 54) " "
+ EQEQ@[54; 56) "=="
+ WHITESPACE@[56; 57) " "
+ LITERAL@[57; 58)
+ INT_NUMBER@[57; 58) "1"
+ SEMI@[58; 59) ";"
+ WHITESPACE@[59; 64) "\n "
+ LET_STMT@[64; 76)
+ LET_KW@[64; 67) "let"
+ WHITESPACE@[67; 68) " "
+ BIND_PAT@[68; 69)
+ NAME@[68; 69)
+ IDENT@[68; 69) "x"
+ WHITESPACE@[69; 70) " "
+ EQ@[70; 71) "="
+ WHITESPACE@[71; 72) " "
+ RANGE_EXPR@[72; 75)
+ LITERAL@[72; 73)
+ INT_NUMBER@[72; 73) "1"
+ DOTDOT@[73; 75) ".."
+ SEMI@[75; 76) ";"
+ WHITESPACE@[76; 86) "\n \n "
+ EXPR_STMT@[86; 95)
+ RANGE_EXPR@[86; 94)
+ DOTDOTEQ@[86; 89) "..="
+ BIN_EXPR@[89; 94)
+ LITERAL@[89; 90)
+ INT_NUMBER@[89; 90) "1"
+ WHITESPACE@[90; 91) " "
+ PLUS@[91; 92) "+"
+ WHITESPACE@[92; 93) " "
+ LITERAL@[93; 94)
+ INT_NUMBER@[93; 94) "1"
+ SEMI@[94; 95) ";"
+ WHITESPACE@[95; 100) "\n "
+ EXPR_STMT@[100; 109)
+ BIN_EXPR@[100; 108)
+ RANGE_EXPR@[100; 104)
+ DOTDOTEQ@[100; 103) "..="
+ PATH_EXPR@[103; 104)
+ PATH@[103; 104)
+ PATH_SEGMENT@[103; 104)
+ NAME_REF@[103; 104)
+ IDENT@[103; 104) "z"
+ WHITESPACE@[104; 105) " "
+ EQ@[105; 106) "="
+ WHITESPACE@[106; 107) " "
+ LITERAL@[107; 108)
+ INT_NUMBER@[107; 108) "2"
+ SEMI@[108; 109) ";"
+ WHITESPACE@[109; 114) "\n "
+ EXPR_STMT@[114; 133)
+ BIN_EXPR@[114; 132)
+ PATH_EXPR@[114; 115)
+ PATH@[114; 115)
+ PATH_SEGMENT@[114; 115)
+ NAME_REF@[114; 115)
+ IDENT@[114; 115) "x"
+ WHITESPACE@[115; 116) " "
+ EQ@[116; 117) "="
+ WHITESPACE@[117; 118) " "
+ RANGE_EXPR@[118; 132)
+ LITERAL@[118; 123)
+ FALSE_KW@[118; 123) "false"
+ DOTDOTEQ@[123; 126) "..="
+ BIN_EXPR@[126; 132)
+ LITERAL@[126; 127)
+ INT_NUMBER@[126; 127) "1"
+ WHITESPACE@[127; 128) " "
+ EQEQ@[128; 130) "=="
+ WHITESPACE@[130; 131) " "
+ LITERAL@[131; 132)
+ INT_NUMBER@[131; 132) "1"
+ SEMI@[132; 133) ";"
+ WHITESPACE@[133; 138) "\n "
+ LET_STMT@[138; 150)
+ LET_KW@[138; 141) "let"
+ WHITESPACE@[141; 142) " "
+ BIND_PAT@[142; 143)
+ NAME@[142; 143)
+ IDENT@[142; 143) "x"
+ WHITESPACE@[143; 144) " "
+ EQ@[144; 145) "="
+ WHITESPACE@[145; 146) " "
+ RANGE_EXPR@[146; 149)
+ LITERAL@[146; 147)
+ INT_NUMBER@[146; 147) "1"
+ DOTDOT@[147; 149) ".."
+ SEMI@[149; 150) ";"
+ WHITESPACE@[150; 151) "\n"
+ R_CURLY@[151; 152) "}"
+ WHITESPACE@[152; 153) "\n"
--- /dev/null
+fn main() {
+ let _ = 'c'u32;
+ let _ = "string"invalid;
+ let _ = b'b'_suff;
+ let _ = b"bs"invalid;
+}
--- /dev/null
+SOURCE_FILE@[0; 112)
+ FN_DEF@[0; 111)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 7)
+ IDENT@[3; 7) "main"
+ PARAM_LIST@[7; 9)
+ L_PAREN@[7; 8) "("
+ R_PAREN@[8; 9) ")"
+ WHITESPACE@[9; 10) " "
+ BLOCK@[10; 111)
+ L_CURLY@[10; 11) "{"
+ WHITESPACE@[11; 16) "\n "
+ LET_STMT@[16; 31)
+ LET_KW@[16; 19) "let"
+ WHITESPACE@[19; 20) " "
+ PLACEHOLDER_PAT@[20; 21)
+ UNDERSCORE@[20; 21) "_"
+ WHITESPACE@[21; 22) " "
+ EQ@[22; 23) "="
+ WHITESPACE@[23; 24) " "
+ LITERAL@[24; 30)
+ CHAR@[24; 30) "\'c\'u32"
+ SEMI@[30; 31) ";"
+ WHITESPACE@[31; 36) "\n "
+ LET_STMT@[36; 60)
+ LET_KW@[36; 39) "let"
+ WHITESPACE@[39; 40) " "
+ PLACEHOLDER_PAT@[40; 41)
+ UNDERSCORE@[40; 41) "_"
+ WHITESPACE@[41; 42) " "
+ EQ@[42; 43) "="
+ WHITESPACE@[43; 44) " "
+ LITERAL@[44; 59)
+ STRING@[44; 59) "\"string\"invalid"
+ SEMI@[59; 60) ";"
+ WHITESPACE@[60; 65) "\n "
+ LET_STMT@[65; 83)
+ LET_KW@[65; 68) "let"
+ WHITESPACE@[68; 69) " "
+ PLACEHOLDER_PAT@[69; 70)
+ UNDERSCORE@[69; 70) "_"
+ WHITESPACE@[70; 71) " "
+ EQ@[71; 72) "="
+ WHITESPACE@[72; 73) " "
+ LITERAL@[73; 82)
+ BYTE@[73; 82) "b\'b\'_suff"
+ SEMI@[82; 83) ";"
+ WHITESPACE@[83; 88) "\n "
+ LET_STMT@[88; 109)
+ LET_KW@[88; 91) "let"
+ WHITESPACE@[91; 92) " "
+ PLACEHOLDER_PAT@[92; 93)
+ UNDERSCORE@[92; 93) "_"
+ WHITESPACE@[93; 94) " "
+ EQ@[94; 95) "="
+ WHITESPACE@[95; 96) " "
+ LITERAL@[96; 108)
+ BYTE_STRING@[96; 108) "b\"bs\"invalid"
+ SEMI@[108; 109) ";"
+ WHITESPACE@[109; 110) "\n"
+ R_CURLY@[110; 111) "}"
+ WHITESPACE@[111; 112) "\n"
--- /dev/null
+pub trait WriteMessage {
+ fn write_message(&FrontendMessage);
+}
+
+trait Runnable {
+ fn handler();
+}
+
+trait TraitWithExpr {
+ fn fn_with_expr(x: [i32; 1]);
+}
--- /dev/null
+SOURCE_FILE@[0; 164)
+ TRAIT_DEF@[0; 66)
+ VISIBILITY@[0; 3)
+ PUB_KW@[0; 3) "pub"
+ WHITESPACE@[3; 4) " "
+ TRAIT_KW@[4; 9) "trait"
+ WHITESPACE@[9; 10) " "
+ NAME@[10; 22)
+ IDENT@[10; 22) "WriteMessage"
+ WHITESPACE@[22; 23) " "
+ ITEM_LIST@[23; 66)
+ L_CURLY@[23; 24) "{"
+ WHITESPACE@[24; 29) "\n "
+ FN_DEF@[29; 64)
+ FN_KW@[29; 31) "fn"
+ WHITESPACE@[31; 32) " "
+ NAME@[32; 45)
+ IDENT@[32; 45) "write_message"
+ PARAM_LIST@[45; 63)
+ L_PAREN@[45; 46) "("
+ PARAM@[46; 62)
+ REFERENCE_TYPE@[46; 62)
+ AMP@[46; 47) "&"
+ PATH_TYPE@[47; 62)
+ PATH@[47; 62)
+ PATH_SEGMENT@[47; 62)
+ NAME_REF@[47; 62)
+ IDENT@[47; 62) "FrontendMessage"
+ R_PAREN@[62; 63) ")"
+ SEMI@[63; 64) ";"
+ WHITESPACE@[64; 65) "\n"
+ R_CURLY@[65; 66) "}"
+ WHITESPACE@[66; 68) "\n\n"
+ TRAIT_DEF@[68; 104)
+ TRAIT_KW@[68; 73) "trait"
+ WHITESPACE@[73; 74) " "
+ NAME@[74; 82)
+ IDENT@[74; 82) "Runnable"
+ WHITESPACE@[82; 83) " "
+ ITEM_LIST@[83; 104)
+ L_CURLY@[83; 84) "{"
+ WHITESPACE@[84; 89) "\n "
+ FN_DEF@[89; 102)
+ FN_KW@[89; 91) "fn"
+ WHITESPACE@[91; 92) " "
+ NAME@[92; 99)
+ IDENT@[92; 99) "handler"
+ PARAM_LIST@[99; 101)
+ L_PAREN@[99; 100) "("
+ R_PAREN@[100; 101) ")"
+ SEMI@[101; 102) ";"
+ WHITESPACE@[102; 103) "\n"
+ R_CURLY@[103; 104) "}"
+ WHITESPACE@[104; 106) "\n\n"
+ TRAIT_DEF@[106; 163)
+ TRAIT_KW@[106; 111) "trait"
+ WHITESPACE@[111; 112) " "
+ NAME@[112; 125)
+ IDENT@[112; 125) "TraitWithExpr"
+ WHITESPACE@[125; 126) " "
+ ITEM_LIST@[126; 163)
+ L_CURLY@[126; 127) "{"
+ WHITESPACE@[127; 132) "\n "
+ FN_DEF@[132; 161)
+ FN_KW@[132; 134) "fn"
+ WHITESPACE@[134; 135) " "
+ NAME@[135; 147)
+ IDENT@[135; 147) "fn_with_expr"
+ PARAM_LIST@[147; 160)
+ L_PAREN@[147; 148) "("
+ PARAM@[148; 159)
+ BIND_PAT@[148; 149)
+ NAME@[148; 149)
+ IDENT@[148; 149) "x"
+ COLON@[149; 150) ":"
+ WHITESPACE@[150; 151) " "
+ ARRAY_TYPE@[151; 159)
+ L_BRACK@[151; 152) "["
+ PATH_TYPE@[152; 155)
+ PATH@[152; 155)
+ PATH_SEGMENT@[152; 155)
+ NAME_REF@[152; 155)
+ IDENT@[152; 155) "i32"
+ SEMI@[155; 156) ";"
+ WHITESPACE@[156; 157) " "
+ LITERAL@[157; 158)
+ INT_NUMBER@[157; 158) "1"
+ R_BRACK@[158; 159) "]"
+ R_PAREN@[159; 160) ")"
+ SEMI@[160; 161) ";"
+ WHITESPACE@[161; 162) "\n"
+ R_CURLY@[162; 163) "}"
+ WHITESPACE@[163; 164) "\n"
--- /dev/null
+extern {
+ pub fn socket(domain: ::c_int, ty: ::c_int, protocol: ::c_int) -> ::c_int;
+ pub fn bind(fd: ::c_int, addr: *const sockaddr, len: socklen_t) -> ::c_int;
+ pub fn connect(socket: ::c_int, address: *const sockaddr,
+ len: socklen_t) -> ::c_int;
+ pub fn listen(socket: ::c_int, backlog: ::c_int) -> ::c_int;
+ pub fn getsockname(socket: ::c_int, address: *mut sockaddr,
+ address_len: *mut socklen_t) -> ::c_int;
+ pub fn getsockopt(sockfd: ::c_int,
+ level: ::c_int,
+ optname: ::c_int,
+ optval: *mut ::c_void,
+ optlen: *mut ::socklen_t) -> ::c_int;
+ pub fn setsockopt(socket: ::c_int, level: ::c_int, name: ::c_int,
+ value: *const ::c_void,
+ option_len: socklen_t) -> ::c_int;
+ pub fn getpeername(socket: ::c_int, address: *mut sockaddr,
+ address_len: *mut socklen_t) -> ::c_int;
+ pub fn sendto(socket: ::c_int, buf: *const ::c_void, len: ::size_t,
+ flags: ::c_int, addr: *const sockaddr,
+ addrlen: socklen_t) -> ::ssize_t;
+ pub fn send(socket: ::c_int, buf: *const ::c_void, len: ::size_t,
+ flags: ::c_int) -> ::ssize_t;
+ pub fn recvfrom(socket: ::c_int, buf: *mut ::c_void, len: ::size_t,
+ flags: ::c_int, addr: *mut ::sockaddr,
+ addrlen: *mut ::socklen_t) -> ::ssize_t;
+ pub fn recv(socket: ::c_int, buf: *mut ::c_void, len: ::size_t,
+ flags: ::c_int) -> ::ssize_t;
+}
--- /dev/null
+SOURCE_FILE@[0; 1598)
+ EXTERN_BLOCK@[0; 1597)
+ ABI@[0; 6)
+ EXTERN_KW@[0; 6) "extern"
+ WHITESPACE@[6; 7) " "
+ EXTERN_ITEM_LIST@[7; 1597)
+ L_CURLY@[7; 8) "{"
+ WHITESPACE@[8; 13) "\n "
+ FN_DEF@[13; 87)
+ VISIBILITY@[13; 16)
+ PUB_KW@[13; 16) "pub"
+ WHITESPACE@[16; 17) " "
+ FN_KW@[17; 19) "fn"
+ WHITESPACE@[19; 20) " "
+ NAME@[20; 26)
+ IDENT@[20; 26) "socket"
+ PARAM_LIST@[26; 75)
+ L_PAREN@[26; 27) "("
+ PARAM@[27; 42)
+ BIND_PAT@[27; 33)
+ NAME@[27; 33)
+ IDENT@[27; 33) "domain"
+ COLON@[33; 34) ":"
+ WHITESPACE@[34; 35) " "
+ PATH_TYPE@[35; 42)
+ PATH@[35; 42)
+ PATH_SEGMENT@[35; 42)
+ COLONCOLON@[35; 37) "::"
+ NAME_REF@[37; 42)
+ IDENT@[37; 42) "c_int"
+ COMMA@[42; 43) ","
+ WHITESPACE@[43; 44) " "
+ PARAM@[44; 55)
+ BIND_PAT@[44; 46)
+ NAME@[44; 46)
+ IDENT@[44; 46) "ty"
+ COLON@[46; 47) ":"
+ WHITESPACE@[47; 48) " "
+ PATH_TYPE@[48; 55)
+ PATH@[48; 55)
+ PATH_SEGMENT@[48; 55)
+ COLONCOLON@[48; 50) "::"
+ NAME_REF@[50; 55)
+ IDENT@[50; 55) "c_int"
+ COMMA@[55; 56) ","
+ WHITESPACE@[56; 57) " "
+ PARAM@[57; 74)
+ BIND_PAT@[57; 65)
+ NAME@[57; 65)
+ IDENT@[57; 65) "protocol"
+ COLON@[65; 66) ":"
+ WHITESPACE@[66; 67) " "
+ PATH_TYPE@[67; 74)
+ PATH@[67; 74)
+ PATH_SEGMENT@[67; 74)
+ COLONCOLON@[67; 69) "::"
+ NAME_REF@[69; 74)
+ IDENT@[69; 74) "c_int"
+ R_PAREN@[74; 75) ")"
+ WHITESPACE@[75; 76) " "
+ RET_TYPE@[76; 86)
+ THIN_ARROW@[76; 78) "->"
+ WHITESPACE@[78; 79) " "
+ PATH_TYPE@[79; 86)
+ PATH@[79; 86)
+ PATH_SEGMENT@[79; 86)
+ COLONCOLON@[79; 81) "::"
+ NAME_REF@[81; 86)
+ IDENT@[81; 86) "c_int"
+ SEMI@[86; 87) ";"
+ WHITESPACE@[87; 92) "\n "
+ FN_DEF@[92; 167)
+ VISIBILITY@[92; 95)
+ PUB_KW@[92; 95) "pub"
+ WHITESPACE@[95; 96) " "
+ FN_KW@[96; 98) "fn"
+ WHITESPACE@[98; 99) " "
+ NAME@[99; 103)
+ IDENT@[99; 103) "bind"
+ PARAM_LIST@[103; 155)
+ L_PAREN@[103; 104) "("
+ PARAM@[104; 115)
+ BIND_PAT@[104; 106)
+ NAME@[104; 106)
+ IDENT@[104; 106) "fd"
+ COLON@[106; 107) ":"
+ WHITESPACE@[107; 108) " "
+ PATH_TYPE@[108; 115)
+ PATH@[108; 115)
+ PATH_SEGMENT@[108; 115)
+ COLONCOLON@[108; 110) "::"
+ NAME_REF@[110; 115)
+ IDENT@[110; 115) "c_int"
+ COMMA@[115; 116) ","
+ WHITESPACE@[116; 117) " "
+ PARAM@[117; 138)
+ BIND_PAT@[117; 121)
+ NAME@[117; 121)
+ IDENT@[117; 121) "addr"
+ COLON@[121; 122) ":"
+ WHITESPACE@[122; 123) " "
+ POINTER_TYPE@[123; 138)
+ STAR@[123; 124) "*"
+ CONST_KW@[124; 129) "const"
+ WHITESPACE@[129; 130) " "
+ PATH_TYPE@[130; 138)
+ PATH@[130; 138)
+ PATH_SEGMENT@[130; 138)
+ NAME_REF@[130; 138)
+ IDENT@[130; 138) "sockaddr"
+ COMMA@[138; 139) ","
+ WHITESPACE@[139; 140) " "
+ PARAM@[140; 154)
+ BIND_PAT@[140; 143)
+ NAME@[140; 143)
+ IDENT@[140; 143) "len"
+ COLON@[143; 144) ":"
+ WHITESPACE@[144; 145) " "
+ PATH_TYPE@[145; 154)
+ PATH@[145; 154)
+ PATH_SEGMENT@[145; 154)
+ NAME_REF@[145; 154)
+ IDENT@[145; 154) "socklen_t"
+ R_PAREN@[154; 155) ")"
+ WHITESPACE@[155; 156) " "
+ RET_TYPE@[156; 166)
+ THIN_ARROW@[156; 158) "->"
+ WHITESPACE@[158; 159) " "
+ PATH_TYPE@[159; 166)
+ PATH@[159; 166)
+ PATH_SEGMENT@[159; 166)
+ COLONCOLON@[159; 161) "::"
+ NAME_REF@[161; 166)
+ IDENT@[161; 166) "c_int"
+ SEMI@[166; 167) ";"
+ WHITESPACE@[167; 172) "\n "
+ FN_DEF@[172; 276)
+ VISIBILITY@[172; 175)
+ PUB_KW@[172; 175) "pub"
+ WHITESPACE@[175; 176) " "
+ FN_KW@[176; 178) "fn"
+ WHITESPACE@[178; 179) " "
+ NAME@[179; 186)
+ IDENT@[179; 186) "connect"
+ PARAM_LIST@[186; 264)
+ L_PAREN@[186; 187) "("
+ PARAM@[187; 202)
+ BIND_PAT@[187; 193)
+ NAME@[187; 193)
+ IDENT@[187; 193) "socket"
+ COLON@[193; 194) ":"
+ WHITESPACE@[194; 195) " "
+ PATH_TYPE@[195; 202)
+ PATH@[195; 202)
+ PATH_SEGMENT@[195; 202)
+ COLONCOLON@[195; 197) "::"
+ NAME_REF@[197; 202)
+ IDENT@[197; 202) "c_int"
+ COMMA@[202; 203) ","
+ WHITESPACE@[203; 204) " "
+ PARAM@[204; 228)
+ BIND_PAT@[204; 211)
+ NAME@[204; 211)
+ IDENT@[204; 211) "address"
+ COLON@[211; 212) ":"
+ WHITESPACE@[212; 213) " "
+ POINTER_TYPE@[213; 228)
+ STAR@[213; 214) "*"
+ CONST_KW@[214; 219) "const"
+ WHITESPACE@[219; 220) " "
+ PATH_TYPE@[220; 228)
+ PATH@[220; 228)
+ PATH_SEGMENT@[220; 228)
+ NAME_REF@[220; 228)
+ IDENT@[220; 228) "sockaddr"
+ COMMA@[228; 229) ","
+ WHITESPACE@[229; 249) "\n "
+ PARAM@[249; 263)
+ BIND_PAT@[249; 252)
+ NAME@[249; 252)
+ IDENT@[249; 252) "len"
+ COLON@[252; 253) ":"
+ WHITESPACE@[253; 254) " "
+ PATH_TYPE@[254; 263)
+ PATH@[254; 263)
+ PATH_SEGMENT@[254; 263)
+ NAME_REF@[254; 263)
+ IDENT@[254; 263) "socklen_t"
+ R_PAREN@[263; 264) ")"
+ WHITESPACE@[264; 265) " "
+ RET_TYPE@[265; 275)
+ THIN_ARROW@[265; 267) "->"
+ WHITESPACE@[267; 268) " "
+ PATH_TYPE@[268; 275)
+ PATH@[268; 275)
+ PATH_SEGMENT@[268; 275)
+ COLONCOLON@[268; 270) "::"
+ NAME_REF@[270; 275)
+ IDENT@[270; 275) "c_int"
+ SEMI@[275; 276) ";"
+ WHITESPACE@[276; 281) "\n "
+ FN_DEF@[281; 341)
+ VISIBILITY@[281; 284)
+ PUB_KW@[281; 284) "pub"
+ WHITESPACE@[284; 285) " "
+ FN_KW@[285; 287) "fn"
+ WHITESPACE@[287; 288) " "
+ NAME@[288; 294)
+ IDENT@[288; 294) "listen"
+ PARAM_LIST@[294; 329)
+ L_PAREN@[294; 295) "("
+ PARAM@[295; 310)
+ BIND_PAT@[295; 301)
+ NAME@[295; 301)
+ IDENT@[295; 301) "socket"
+ COLON@[301; 302) ":"
+ WHITESPACE@[302; 303) " "
+ PATH_TYPE@[303; 310)
+ PATH@[303; 310)
+ PATH_SEGMENT@[303; 310)
+ COLONCOLON@[303; 305) "::"
+ NAME_REF@[305; 310)
+ IDENT@[305; 310) "c_int"
+ COMMA@[310; 311) ","
+ WHITESPACE@[311; 312) " "
+ PARAM@[312; 328)
+ BIND_PAT@[312; 319)
+ NAME@[312; 319)
+ IDENT@[312; 319) "backlog"
+ COLON@[319; 320) ":"
+ WHITESPACE@[320; 321) " "
+ PATH_TYPE@[321; 328)
+ PATH@[321; 328)
+ PATH_SEGMENT@[321; 328)
+ COLONCOLON@[321; 323) "::"
+ NAME_REF@[323; 328)
+ IDENT@[323; 328) "c_int"
+ R_PAREN@[328; 329) ")"
+ WHITESPACE@[329; 330) " "
+ RET_TYPE@[330; 340)
+ THIN_ARROW@[330; 332) "->"
+ WHITESPACE@[332; 333) " "
+ PATH_TYPE@[333; 340)
+ PATH@[333; 340)
+ PATH_SEGMENT@[333; 340)
+ COLONCOLON@[333; 335) "::"
+ NAME_REF@[335; 340)
+ IDENT@[335; 340) "c_int"
+ SEMI@[340; 341) ";"
+ WHITESPACE@[341; 346) "\n "
+ FN_DEF@[346; 469)
+ VISIBILITY@[346; 349)
+ PUB_KW@[346; 349) "pub"
+ WHITESPACE@[349; 350) " "
+ FN_KW@[350; 352) "fn"
+ WHITESPACE@[352; 353) " "
+ NAME@[353; 364)
+ IDENT@[353; 364) "getsockname"
+ PARAM_LIST@[364; 457)
+ L_PAREN@[364; 365) "("
+ PARAM@[365; 380)
+ BIND_PAT@[365; 371)
+ NAME@[365; 371)
+ IDENT@[365; 371) "socket"
+ COLON@[371; 372) ":"
+ WHITESPACE@[372; 373) " "
+ PATH_TYPE@[373; 380)
+ PATH@[373; 380)
+ PATH_SEGMENT@[373; 380)
+ COLONCOLON@[373; 375) "::"
+ NAME_REF@[375; 380)
+ IDENT@[375; 380) "c_int"
+ COMMA@[380; 381) ","
+ WHITESPACE@[381; 382) " "
+ PARAM@[382; 404)
+ BIND_PAT@[382; 389)
+ NAME@[382; 389)
+ IDENT@[382; 389) "address"
+ COLON@[389; 390) ":"
+ WHITESPACE@[390; 391) " "
+ POINTER_TYPE@[391; 404)
+ STAR@[391; 392) "*"
+ MUT_KW@[392; 395) "mut"
+ WHITESPACE@[395; 396) " "
+ PATH_TYPE@[396; 404)
+ PATH@[396; 404)
+ PATH_SEGMENT@[396; 404)
+ NAME_REF@[396; 404)
+ IDENT@[396; 404) "sockaddr"
+ COMMA@[404; 405) ","
+ WHITESPACE@[405; 429) "\n "
+ PARAM@[429; 456)
+ BIND_PAT@[429; 440)
+ NAME@[429; 440)
+ IDENT@[429; 440) "address_len"
+ COLON@[440; 441) ":"
+ WHITESPACE@[441; 442) " "
+ POINTER_TYPE@[442; 456)
+ STAR@[442; 443) "*"
+ MUT_KW@[443; 446) "mut"
+ WHITESPACE@[446; 447) " "
+ PATH_TYPE@[447; 456)
+ PATH@[447; 456)
+ PATH_SEGMENT@[447; 456)
+ NAME_REF@[447; 456)
+ IDENT@[447; 456) "socklen_t"
+ R_PAREN@[456; 457) ")"
+ WHITESPACE@[457; 458) " "
+ RET_TYPE@[458; 468)
+ THIN_ARROW@[458; 460) "->"
+ WHITESPACE@[460; 461) " "
+ PATH_TYPE@[461; 468)
+ PATH@[461; 468)
+ PATH_SEGMENT@[461; 468)
+ COLONCOLON@[461; 463) "::"
+ NAME_REF@[463; 468)
+ IDENT@[463; 468) "c_int"
+ SEMI@[468; 469) ";"
+ WHITESPACE@[469; 474) "\n "
+ FN_DEF@[474; 691)
+ VISIBILITY@[474; 477)
+ PUB_KW@[474; 477) "pub"
+ WHITESPACE@[477; 478) " "
+ FN_KW@[478; 480) "fn"
+ WHITESPACE@[480; 481) " "
+ NAME@[481; 491)
+ IDENT@[481; 491) "getsockopt"
+ PARAM_LIST@[491; 679)
+ L_PAREN@[491; 492) "("
+ PARAM@[492; 507)
+ BIND_PAT@[492; 498)
+ NAME@[492; 498)
+ IDENT@[492; 498) "sockfd"
+ COLON@[498; 499) ":"
+ WHITESPACE@[499; 500) " "
+ PATH_TYPE@[500; 507)
+ PATH@[500; 507)
+ PATH_SEGMENT@[500; 507)
+ COLONCOLON@[500; 502) "::"
+ NAME_REF@[502; 507)
+ IDENT@[502; 507) "c_int"
+ COMMA@[507; 508) ","
+ WHITESPACE@[508; 531) "\n "
+ PARAM@[531; 545)
+ BIND_PAT@[531; 536)
+ NAME@[531; 536)
+ IDENT@[531; 536) "level"
+ COLON@[536; 537) ":"
+ WHITESPACE@[537; 538) " "
+ PATH_TYPE@[538; 545)
+ PATH@[538; 545)
+ PATH_SEGMENT@[538; 545)
+ COLONCOLON@[538; 540) "::"
+ NAME_REF@[540; 545)
+ IDENT@[540; 545) "c_int"
+ COMMA@[545; 546) ","
+ WHITESPACE@[546; 569) "\n "
+ PARAM@[569; 585)
+ BIND_PAT@[569; 576)
+ NAME@[569; 576)
+ IDENT@[569; 576) "optname"
+ COLON@[576; 577) ":"
+ WHITESPACE@[577; 578) " "
+ PATH_TYPE@[578; 585)
+ PATH@[578; 585)
+ PATH_SEGMENT@[578; 585)
+ COLONCOLON@[578; 580) "::"
+ NAME_REF@[580; 585)
+ IDENT@[580; 585) "c_int"
+ COMMA@[585; 586) ","
+ WHITESPACE@[586; 609) "\n "
+ PARAM@[609; 630)
+ BIND_PAT@[609; 615)
+ NAME@[609; 615)
+ IDENT@[609; 615) "optval"
+ COLON@[615; 616) ":"
+ WHITESPACE@[616; 617) " "
+ POINTER_TYPE@[617; 630)
+ STAR@[617; 618) "*"
+ MUT_KW@[618; 621) "mut"
+ WHITESPACE@[621; 622) " "
+ PATH_TYPE@[622; 630)
+ PATH@[622; 630)
+ PATH_SEGMENT@[622; 630)
+ COLONCOLON@[622; 624) "::"
+ NAME_REF@[624; 630)
+ IDENT@[624; 630) "c_void"
+ COMMA@[630; 631) ","
+ WHITESPACE@[631; 654) "\n "
+ PARAM@[654; 678)
+ BIND_PAT@[654; 660)
+ NAME@[654; 660)
+ IDENT@[654; 660) "optlen"
+ COLON@[660; 661) ":"
+ WHITESPACE@[661; 662) " "
+ POINTER_TYPE@[662; 678)
+ STAR@[662; 663) "*"
+ MUT_KW@[663; 666) "mut"
+ WHITESPACE@[666; 667) " "
+ PATH_TYPE@[667; 678)
+ PATH@[667; 678)
+ PATH_SEGMENT@[667; 678)
+ COLONCOLON@[667; 669) "::"
+ NAME_REF@[669; 678)
+ IDENT@[669; 678) "socklen_t"
+ R_PAREN@[678; 679) ")"
+ WHITESPACE@[679; 680) " "
+ RET_TYPE@[680; 690)
+ THIN_ARROW@[680; 682) "->"
+ WHITESPACE@[682; 683) " "
+ PATH_TYPE@[683; 690)
+ PATH@[683; 690)
+ PATH_SEGMENT@[683; 690)
+ COLONCOLON@[683; 685) "::"
+ NAME_REF@[685; 690)
+ IDENT@[685; 690) "c_int"
+ SEMI@[690; 691) ";"
+ WHITESPACE@[691; 696) "\n "
+ FN_DEF@[696; 864)
+ VISIBILITY@[696; 699)
+ PUB_KW@[696; 699) "pub"
+ WHITESPACE@[699; 700) " "
+ FN_KW@[700; 702) "fn"
+ WHITESPACE@[702; 703) " "
+ NAME@[703; 713)
+ IDENT@[703; 713) "setsockopt"
+ PARAM_LIST@[713; 852)
+ L_PAREN@[713; 714) "("
+ PARAM@[714; 729)
+ BIND_PAT@[714; 720)
+ NAME@[714; 720)
+ IDENT@[714; 720) "socket"
+ COLON@[720; 721) ":"
+ WHITESPACE@[721; 722) " "
+ PATH_TYPE@[722; 729)
+ PATH@[722; 729)
+ PATH_SEGMENT@[722; 729)
+ COLONCOLON@[722; 724) "::"
+ NAME_REF@[724; 729)
+ IDENT@[724; 729) "c_int"
+ COMMA@[729; 730) ","
+ WHITESPACE@[730; 731) " "
+ PARAM@[731; 745)
+ BIND_PAT@[731; 736)
+ NAME@[731; 736)
+ IDENT@[731; 736) "level"
+ COLON@[736; 737) ":"
+ WHITESPACE@[737; 738) " "
+ PATH_TYPE@[738; 745)
+ PATH@[738; 745)
+ PATH_SEGMENT@[738; 745)
+ COLONCOLON@[738; 740) "::"
+ NAME_REF@[740; 745)
+ IDENT@[740; 745) "c_int"
+ COMMA@[745; 746) ","
+ WHITESPACE@[746; 747) " "
+ PARAM@[747; 760)
+ BIND_PAT@[747; 751)
+ NAME@[747; 751)
+ IDENT@[747; 751) "name"
+ COLON@[751; 752) ":"
+ WHITESPACE@[752; 753) " "
+ PATH_TYPE@[753; 760)
+ PATH@[753; 760)
+ PATH_SEGMENT@[753; 760)
+ COLONCOLON@[753; 755) "::"
+ NAME_REF@[755; 760)
+ IDENT@[755; 760) "c_int"
+ COMMA@[760; 761) ","
+ WHITESPACE@[761; 784) "\n "
+ PARAM@[784; 806)
+ BIND_PAT@[784; 789)
+ NAME@[784; 789)
+ IDENT@[784; 789) "value"
+ COLON@[789; 790) ":"
+ WHITESPACE@[790; 791) " "
+ POINTER_TYPE@[791; 806)
+ STAR@[791; 792) "*"
+ CONST_KW@[792; 797) "const"
+ WHITESPACE@[797; 798) " "
+ PATH_TYPE@[798; 806)
+ PATH@[798; 806)
+ PATH_SEGMENT@[798; 806)
+ COLONCOLON@[798; 800) "::"
+ NAME_REF@[800; 806)
+ IDENT@[800; 806) "c_void"
+ COMMA@[806; 807) ","
+ WHITESPACE@[807; 830) "\n "
+ PARAM@[830; 851)
+ BIND_PAT@[830; 840)
+ NAME@[830; 840)
+ IDENT@[830; 840) "option_len"
+ COLON@[840; 841) ":"
+ WHITESPACE@[841; 842) " "
+ PATH_TYPE@[842; 851)
+ PATH@[842; 851)
+ PATH_SEGMENT@[842; 851)
+ NAME_REF@[842; 851)
+ IDENT@[842; 851) "socklen_t"
+ R_PAREN@[851; 852) ")"
+ WHITESPACE@[852; 853) " "
+ RET_TYPE@[853; 863)
+ THIN_ARROW@[853; 855) "->"
+ WHITESPACE@[855; 856) " "
+ PATH_TYPE@[856; 863)
+ PATH@[856; 863)
+ PATH_SEGMENT@[856; 863)
+ COLONCOLON@[856; 858) "::"
+ NAME_REF@[858; 863)
+ IDENT@[858; 863) "c_int"
+ SEMI@[863; 864) ";"
+ WHITESPACE@[864; 869) "\n "
+ FN_DEF@[869; 992)
+ VISIBILITY@[869; 872)
+ PUB_KW@[869; 872) "pub"
+ WHITESPACE@[872; 873) " "
+ FN_KW@[873; 875) "fn"
+ WHITESPACE@[875; 876) " "
+ NAME@[876; 887)
+ IDENT@[876; 887) "getpeername"
+ PARAM_LIST@[887; 980)
+ L_PAREN@[887; 888) "("
+ PARAM@[888; 903)
+ BIND_PAT@[888; 894)
+ NAME@[888; 894)
+ IDENT@[888; 894) "socket"
+ COLON@[894; 895) ":"
+ WHITESPACE@[895; 896) " "
+ PATH_TYPE@[896; 903)
+ PATH@[896; 903)
+ PATH_SEGMENT@[896; 903)
+ COLONCOLON@[896; 898) "::"
+ NAME_REF@[898; 903)
+ IDENT@[898; 903) "c_int"
+ COMMA@[903; 904) ","
+ WHITESPACE@[904; 905) " "
+ PARAM@[905; 927)
+ BIND_PAT@[905; 912)
+ NAME@[905; 912)
+ IDENT@[905; 912) "address"
+ COLON@[912; 913) ":"
+ WHITESPACE@[913; 914) " "
+ POINTER_TYPE@[914; 927)
+ STAR@[914; 915) "*"
+ MUT_KW@[915; 918) "mut"
+ WHITESPACE@[918; 919) " "
+ PATH_TYPE@[919; 927)
+ PATH@[919; 927)
+ PATH_SEGMENT@[919; 927)
+ NAME_REF@[919; 927)
+ IDENT@[919; 927) "sockaddr"
+ COMMA@[927; 928) ","
+ WHITESPACE@[928; 952) "\n "
+ PARAM@[952; 979)
+ BIND_PAT@[952; 963)
+ NAME@[952; 963)
+ IDENT@[952; 963) "address_len"
+ COLON@[963; 964) ":"
+ WHITESPACE@[964; 965) " "
+ POINTER_TYPE@[965; 979)
+ STAR@[965; 966) "*"
+ MUT_KW@[966; 969) "mut"
+ WHITESPACE@[969; 970) " "
+ PATH_TYPE@[970; 979)
+ PATH@[970; 979)
+ PATH_SEGMENT@[970; 979)
+ NAME_REF@[970; 979)
+ IDENT@[970; 979) "socklen_t"
+ R_PAREN@[979; 980) ")"
+ WHITESPACE@[980; 981) " "
+ RET_TYPE@[981; 991)
+ THIN_ARROW@[981; 983) "->"
+ WHITESPACE@[983; 984) " "
+ PATH_TYPE@[984; 991)
+ PATH@[984; 991)
+ PATH_SEGMENT@[984; 991)
+ COLONCOLON@[984; 986) "::"
+ NAME_REF@[986; 991)
+ IDENT@[986; 991) "c_int"
+ SEMI@[991; 992) ";"
+ WHITESPACE@[992; 997) "\n "
+ FN_DEF@[997; 1173)
+ VISIBILITY@[997; 1000)
+ PUB_KW@[997; 1000) "pub"
+ WHITESPACE@[1000; 1001) " "
+ FN_KW@[1001; 1003) "fn"
+ WHITESPACE@[1003; 1004) " "
+ NAME@[1004; 1010)
+ IDENT@[1004; 1010) "sendto"
+ PARAM_LIST@[1010; 1159)
+ L_PAREN@[1010; 1011) "("
+ PARAM@[1011; 1026)
+ BIND_PAT@[1011; 1017)
+ NAME@[1011; 1017)
+ IDENT@[1011; 1017) "socket"
+ COLON@[1017; 1018) ":"
+ WHITESPACE@[1018; 1019) " "
+ PATH_TYPE@[1019; 1026)
+ PATH@[1019; 1026)
+ PATH_SEGMENT@[1019; 1026)
+ COLONCOLON@[1019; 1021) "::"
+ NAME_REF@[1021; 1026)
+ IDENT@[1021; 1026) "c_int"
+ COMMA@[1026; 1027) ","
+ WHITESPACE@[1027; 1028) " "
+ PARAM@[1028; 1048)
+ BIND_PAT@[1028; 1031)
+ NAME@[1028; 1031)
+ IDENT@[1028; 1031) "buf"
+ COLON@[1031; 1032) ":"
+ WHITESPACE@[1032; 1033) " "
+ POINTER_TYPE@[1033; 1048)
+ STAR@[1033; 1034) "*"
+ CONST_KW@[1034; 1039) "const"
+ WHITESPACE@[1039; 1040) " "
+ PATH_TYPE@[1040; 1048)
+ PATH@[1040; 1048)
+ PATH_SEGMENT@[1040; 1048)
+ COLONCOLON@[1040; 1042) "::"
+ NAME_REF@[1042; 1048)
+ IDENT@[1042; 1048) "c_void"
+ COMMA@[1048; 1049) ","
+ WHITESPACE@[1049; 1050) " "
+ PARAM@[1050; 1063)
+ BIND_PAT@[1050; 1053)
+ NAME@[1050; 1053)
+ IDENT@[1050; 1053) "len"
+ COLON@[1053; 1054) ":"
+ WHITESPACE@[1054; 1055) " "
+ PATH_TYPE@[1055; 1063)
+ PATH@[1055; 1063)
+ PATH_SEGMENT@[1055; 1063)
+ COLONCOLON@[1055; 1057) "::"
+ NAME_REF@[1057; 1063)
+ IDENT@[1057; 1063) "size_t"
+ COMMA@[1063; 1064) ","
+ WHITESPACE@[1064; 1083) "\n "
+ PARAM@[1083; 1097)
+ BIND_PAT@[1083; 1088)
+ NAME@[1083; 1088)
+ IDENT@[1083; 1088) "flags"
+ COLON@[1088; 1089) ":"
+ WHITESPACE@[1089; 1090) " "
+ PATH_TYPE@[1090; 1097)
+ PATH@[1090; 1097)
+ PATH_SEGMENT@[1090; 1097)
+ COLONCOLON@[1090; 1092) "::"
+ NAME_REF@[1092; 1097)
+ IDENT@[1092; 1097) "c_int"
+ COMMA@[1097; 1098) ","
+ WHITESPACE@[1098; 1099) " "
+ PARAM@[1099; 1120)
+ BIND_PAT@[1099; 1103)
+ NAME@[1099; 1103)
+ IDENT@[1099; 1103) "addr"
+ COLON@[1103; 1104) ":"
+ WHITESPACE@[1104; 1105) " "
+ POINTER_TYPE@[1105; 1120)
+ STAR@[1105; 1106) "*"
+ CONST_KW@[1106; 1111) "const"
+ WHITESPACE@[1111; 1112) " "
+ PATH_TYPE@[1112; 1120)
+ PATH@[1112; 1120)
+ PATH_SEGMENT@[1112; 1120)
+ NAME_REF@[1112; 1120)
+ IDENT@[1112; 1120) "sockaddr"
+ COMMA@[1120; 1121) ","
+ WHITESPACE@[1121; 1140) "\n "
+ PARAM@[1140; 1158)
+ BIND_PAT@[1140; 1147)
+ NAME@[1140; 1147)
+ IDENT@[1140; 1147) "addrlen"
+ COLON@[1147; 1148) ":"
+ WHITESPACE@[1148; 1149) " "
+ PATH_TYPE@[1149; 1158)
+ PATH@[1149; 1158)
+ PATH_SEGMENT@[1149; 1158)
+ NAME_REF@[1149; 1158)
+ IDENT@[1149; 1158) "socklen_t"
+ R_PAREN@[1158; 1159) ")"
+ WHITESPACE@[1159; 1160) " "
+ RET_TYPE@[1160; 1172)
+ THIN_ARROW@[1160; 1162) "->"
+ WHITESPACE@[1162; 1163) " "
+ PATH_TYPE@[1163; 1172)
+ PATH@[1163; 1172)
+ PATH_SEGMENT@[1163; 1172)
+ COLONCOLON@[1163; 1165) "::"
+ NAME_REF@[1165; 1172)
+ IDENT@[1165; 1172) "ssize_t"
+ SEMI@[1172; 1173) ";"
+ WHITESPACE@[1173; 1178) "\n "
+ FN_DEF@[1178; 1289)
+ VISIBILITY@[1178; 1181)
+ PUB_KW@[1178; 1181) "pub"
+ WHITESPACE@[1181; 1182) " "
+ FN_KW@[1182; 1184) "fn"
+ WHITESPACE@[1184; 1185) " "
+ NAME@[1185; 1189)
+ IDENT@[1185; 1189) "send"
+ PARAM_LIST@[1189; 1275)
+ L_PAREN@[1189; 1190) "("
+ PARAM@[1190; 1205)
+ BIND_PAT@[1190; 1196)
+ NAME@[1190; 1196)
+ IDENT@[1190; 1196) "socket"
+ COLON@[1196; 1197) ":"
+ WHITESPACE@[1197; 1198) " "
+ PATH_TYPE@[1198; 1205)
+ PATH@[1198; 1205)
+ PATH_SEGMENT@[1198; 1205)
+ COLONCOLON@[1198; 1200) "::"
+ NAME_REF@[1200; 1205)
+ IDENT@[1200; 1205) "c_int"
+ COMMA@[1205; 1206) ","
+ WHITESPACE@[1206; 1207) " "
+ PARAM@[1207; 1227)
+ BIND_PAT@[1207; 1210)
+ NAME@[1207; 1210)
+ IDENT@[1207; 1210) "buf"
+ COLON@[1210; 1211) ":"
+ WHITESPACE@[1211; 1212) " "
+ POINTER_TYPE@[1212; 1227)
+ STAR@[1212; 1213) "*"
+ CONST_KW@[1213; 1218) "const"
+ WHITESPACE@[1218; 1219) " "
+ PATH_TYPE@[1219; 1227)
+ PATH@[1219; 1227)
+ PATH_SEGMENT@[1219; 1227)
+ COLONCOLON@[1219; 1221) "::"
+ NAME_REF@[1221; 1227)
+ IDENT@[1221; 1227) "c_void"
+ COMMA@[1227; 1228) ","
+ WHITESPACE@[1228; 1229) " "
+ PARAM@[1229; 1242)
+ BIND_PAT@[1229; 1232)
+ NAME@[1229; 1232)
+ IDENT@[1229; 1232) "len"
+ COLON@[1232; 1233) ":"
+ WHITESPACE@[1233; 1234) " "
+ PATH_TYPE@[1234; 1242)
+ PATH@[1234; 1242)
+ PATH_SEGMENT@[1234; 1242)
+ COLONCOLON@[1234; 1236) "::"
+ NAME_REF@[1236; 1242)
+ IDENT@[1236; 1242) "size_t"
+ COMMA@[1242; 1243) ","
+ WHITESPACE@[1243; 1260) "\n "
+ PARAM@[1260; 1274)
+ BIND_PAT@[1260; 1265)
+ NAME@[1260; 1265)
+ IDENT@[1260; 1265) "flags"
+ COLON@[1265; 1266) ":"
+ WHITESPACE@[1266; 1267) " "
+ PATH_TYPE@[1267; 1274)
+ PATH@[1267; 1274)
+ PATH_SEGMENT@[1267; 1274)
+ COLONCOLON@[1267; 1269) "::"
+ NAME_REF@[1269; 1274)
+ IDENT@[1269; 1274) "c_int"
+ R_PAREN@[1274; 1275) ")"
+ WHITESPACE@[1275; 1276) " "
+ RET_TYPE@[1276; 1288)
+ THIN_ARROW@[1276; 1278) "->"
+ WHITESPACE@[1278; 1279) " "
+ PATH_TYPE@[1279; 1288)
+ PATH@[1279; 1288)
+ PATH_SEGMENT@[1279; 1288)
+ COLONCOLON@[1279; 1281) "::"
+ NAME_REF@[1281; 1288)
+ IDENT@[1281; 1288) "ssize_t"
+ SEMI@[1288; 1289) ";"
+ WHITESPACE@[1289; 1294) "\n "
+ FN_DEF@[1294; 1481)
+ VISIBILITY@[1294; 1297)
+ PUB_KW@[1294; 1297) "pub"
+ WHITESPACE@[1297; 1298) " "
+ FN_KW@[1298; 1300) "fn"
+ WHITESPACE@[1300; 1301) " "
+ NAME@[1301; 1309)
+ IDENT@[1301; 1309) "recvfrom"
+ PARAM_LIST@[1309; 1467)
+ L_PAREN@[1309; 1310) "("
+ PARAM@[1310; 1325)
+ BIND_PAT@[1310; 1316)
+ NAME@[1310; 1316)
+ IDENT@[1310; 1316) "socket"
+ COLON@[1316; 1317) ":"
+ WHITESPACE@[1317; 1318) " "
+ PATH_TYPE@[1318; 1325)
+ PATH@[1318; 1325)
+ PATH_SEGMENT@[1318; 1325)
+ COLONCOLON@[1318; 1320) "::"
+ NAME_REF@[1320; 1325)
+ IDENT@[1320; 1325) "c_int"
+ COMMA@[1325; 1326) ","
+ WHITESPACE@[1326; 1327) " "
+ PARAM@[1327; 1345)
+ BIND_PAT@[1327; 1330)
+ NAME@[1327; 1330)
+ IDENT@[1327; 1330) "buf"
+ COLON@[1330; 1331) ":"
+ WHITESPACE@[1331; 1332) " "
+ POINTER_TYPE@[1332; 1345)
+ STAR@[1332; 1333) "*"
+ MUT_KW@[1333; 1336) "mut"
+ WHITESPACE@[1336; 1337) " "
+ PATH_TYPE@[1337; 1345)
+ PATH@[1337; 1345)
+ PATH_SEGMENT@[1337; 1345)
+ COLONCOLON@[1337; 1339) "::"
+ NAME_REF@[1339; 1345)
+ IDENT@[1339; 1345) "c_void"
+ COMMA@[1345; 1346) ","
+ WHITESPACE@[1346; 1347) " "
+ PARAM@[1347; 1360)
+ BIND_PAT@[1347; 1350)
+ NAME@[1347; 1350)
+ IDENT@[1347; 1350) "len"
+ COLON@[1350; 1351) ":"
+ WHITESPACE@[1351; 1352) " "
+ PATH_TYPE@[1352; 1360)
+ PATH@[1352; 1360)
+ PATH_SEGMENT@[1352; 1360)
+ COLONCOLON@[1352; 1354) "::"
+ NAME_REF@[1354; 1360)
+ IDENT@[1354; 1360) "size_t"
+ COMMA@[1360; 1361) ","
+ WHITESPACE@[1361; 1382) "\n "
+ PARAM@[1382; 1396)
+ BIND_PAT@[1382; 1387)
+ NAME@[1382; 1387)
+ IDENT@[1382; 1387) "flags"
+ COLON@[1387; 1388) ":"
+ WHITESPACE@[1388; 1389) " "
+ PATH_TYPE@[1389; 1396)
+ PATH@[1389; 1396)
+ PATH_SEGMENT@[1389; 1396)
+ COLONCOLON@[1389; 1391) "::"
+ NAME_REF@[1391; 1396)
+ IDENT@[1391; 1396) "c_int"
+ COMMA@[1396; 1397) ","
+ WHITESPACE@[1397; 1398) " "
+ PARAM@[1398; 1419)
+ BIND_PAT@[1398; 1402)
+ NAME@[1398; 1402)
+ IDENT@[1398; 1402) "addr"
+ COLON@[1402; 1403) ":"
+ WHITESPACE@[1403; 1404) " "
+ POINTER_TYPE@[1404; 1419)
+ STAR@[1404; 1405) "*"
+ MUT_KW@[1405; 1408) "mut"
+ WHITESPACE@[1408; 1409) " "
+ PATH_TYPE@[1409; 1419)
+ PATH@[1409; 1419)
+ PATH_SEGMENT@[1409; 1419)
+ COLONCOLON@[1409; 1411) "::"
+ NAME_REF@[1411; 1419)
+ IDENT@[1411; 1419) "sockaddr"
+ COMMA@[1419; 1420) ","
+ WHITESPACE@[1420; 1441) "\n "
+ PARAM@[1441; 1466)
+ BIND_PAT@[1441; 1448)
+ NAME@[1441; 1448)
+ IDENT@[1441; 1448) "addrlen"
+ COLON@[1448; 1449) ":"
+ WHITESPACE@[1449; 1450) " "
+ POINTER_TYPE@[1450; 1466)
+ STAR@[1450; 1451) "*"
+ MUT_KW@[1451; 1454) "mut"
+ WHITESPACE@[1454; 1455) " "
+ PATH_TYPE@[1455; 1466)
+ PATH@[1455; 1466)
+ PATH_SEGMENT@[1455; 1466)
+ COLONCOLON@[1455; 1457) "::"
+ NAME_REF@[1457; 1466)
+ IDENT@[1457; 1466) "socklen_t"
+ R_PAREN@[1466; 1467) ")"
+ WHITESPACE@[1467; 1468) " "
+ RET_TYPE@[1468; 1480)
+ THIN_ARROW@[1468; 1470) "->"
+ WHITESPACE@[1470; 1471) " "
+ PATH_TYPE@[1471; 1480)
+ PATH@[1471; 1480)
+ PATH_SEGMENT@[1471; 1480)
+ COLONCOLON@[1471; 1473) "::"
+ NAME_REF@[1473; 1480)
+ IDENT@[1473; 1480) "ssize_t"
+ SEMI@[1480; 1481) ";"
+ WHITESPACE@[1481; 1486) "\n "
+ FN_DEF@[1486; 1595)
+ VISIBILITY@[1486; 1489)
+ PUB_KW@[1486; 1489) "pub"
+ WHITESPACE@[1489; 1490) " "
+ FN_KW@[1490; 1492) "fn"
+ WHITESPACE@[1492; 1493) " "
+ NAME@[1493; 1497)
+ IDENT@[1493; 1497) "recv"
+ PARAM_LIST@[1497; 1581)
+ L_PAREN@[1497; 1498) "("
+ PARAM@[1498; 1513)
+ BIND_PAT@[1498; 1504)
+ NAME@[1498; 1504)
+ IDENT@[1498; 1504) "socket"
+ COLON@[1504; 1505) ":"
+ WHITESPACE@[1505; 1506) " "
+ PATH_TYPE@[1506; 1513)
+ PATH@[1506; 1513)
+ PATH_SEGMENT@[1506; 1513)
+ COLONCOLON@[1506; 1508) "::"
+ NAME_REF@[1508; 1513)
+ IDENT@[1508; 1513) "c_int"
+ COMMA@[1513; 1514) ","
+ WHITESPACE@[1514; 1515) " "
+ PARAM@[1515; 1533)
+ BIND_PAT@[1515; 1518)
+ NAME@[1515; 1518)
+ IDENT@[1515; 1518) "buf"
+ COLON@[1518; 1519) ":"
+ WHITESPACE@[1519; 1520) " "
+ POINTER_TYPE@[1520; 1533)
+ STAR@[1520; 1521) "*"
+ MUT_KW@[1521; 1524) "mut"
+ WHITESPACE@[1524; 1525) " "
+ PATH_TYPE@[1525; 1533)
+ PATH@[1525; 1533)
+ PATH_SEGMENT@[1525; 1533)
+ COLONCOLON@[1525; 1527) "::"
+ NAME_REF@[1527; 1533)
+ IDENT@[1527; 1533) "c_void"
+ COMMA@[1533; 1534) ","
+ WHITESPACE@[1534; 1535) " "
+ PARAM@[1535; 1548)
+ BIND_PAT@[1535; 1538)
+ NAME@[1535; 1538)
+ IDENT@[1535; 1538) "len"
+ COLON@[1538; 1539) ":"
+ WHITESPACE@[1539; 1540) " "
+ PATH_TYPE@[1540; 1548)
+ PATH@[1540; 1548)
+ PATH_SEGMENT@[1540; 1548)
+ COLONCOLON@[1540; 1542) "::"
+ NAME_REF@[1542; 1548)
+ IDENT@[1542; 1548) "size_t"
+ COMMA@[1548; 1549) ","
+ WHITESPACE@[1549; 1566) "\n "
+ PARAM@[1566; 1580)
+ BIND_PAT@[1566; 1571)
+ NAME@[1566; 1571)
+ IDENT@[1566; 1571) "flags"
+ COLON@[1571; 1572) ":"
+ WHITESPACE@[1572; 1573) " "
+ PATH_TYPE@[1573; 1580)
+ PATH@[1573; 1580)
+ PATH_SEGMENT@[1573; 1580)
+ COLONCOLON@[1573; 1575) "::"
+ NAME_REF@[1575; 1580)
+ IDENT@[1575; 1580) "c_int"
+ R_PAREN@[1580; 1581) ")"
+ WHITESPACE@[1581; 1582) " "
+ RET_TYPE@[1582; 1594)
+ THIN_ARROW@[1582; 1584) "->"
+ WHITESPACE@[1584; 1585) " "
+ PATH_TYPE@[1585; 1594)
+ PATH@[1585; 1594)
+ PATH_SEGMENT@[1585; 1594)
+ COLONCOLON@[1585; 1587) "::"
+ NAME_REF@[1587; 1594)
+ IDENT@[1587; 1594) "ssize_t"
+ SEMI@[1594; 1595) ";"
+ WHITESPACE@[1595; 1596) "\n"
+ R_CURLY@[1596; 1597) "}"
+ WHITESPACE@[1597; 1598) "\n"
--- /dev/null
+fn test_serialization<SER>()
+where
+ SER: Serialize + for<'de> Deserialize<'de> + PartialEq + std::fmt::Debug,
+{}
--- /dev/null
+SOURCE_FILE@[0; 116)
+ FN_DEF@[0; 115)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 21)
+ IDENT@[3; 21) "test_serialization"
+ TYPE_PARAM_LIST@[21; 26)
+ L_ANGLE@[21; 22) "<"
+ TYPE_PARAM@[22; 25)
+ NAME@[22; 25)
+ IDENT@[22; 25) "SER"
+ R_ANGLE@[25; 26) ">"
+ PARAM_LIST@[26; 28)
+ L_PAREN@[26; 27) "("
+ R_PAREN@[27; 28) ")"
+ WHITESPACE@[28; 29) "\n"
+ WHERE_CLAUSE@[29; 112)
+ WHERE_KW@[29; 34) "where"
+ WHITESPACE@[34; 39) "\n "
+ WHERE_PRED@[39; 111)
+ PATH_TYPE@[39; 42)
+ PATH@[39; 42)
+ PATH_SEGMENT@[39; 42)
+ NAME_REF@[39; 42)
+ IDENT@[39; 42) "SER"
+ COLON@[42; 43) ":"
+ WHITESPACE@[43; 44) " "
+ TYPE_BOUND_LIST@[44; 111)
+ TYPE_BOUND@[44; 53)
+ PATH_TYPE@[44; 53)
+ PATH@[44; 53)
+ PATH_SEGMENT@[44; 53)
+ NAME_REF@[44; 53)
+ IDENT@[44; 53) "Serialize"
+ WHITESPACE@[53; 54) " "
+ PLUS@[54; 55) "+"
+ WHITESPACE@[55; 56) " "
+ TYPE_BOUND@[56; 81)
+ FOR_TYPE@[56; 81)
+ FOR_KW@[56; 59) "for"
+ TYPE_PARAM_LIST@[59; 64)
+ L_ANGLE@[59; 60) "<"
+ LIFETIME_PARAM@[60; 63)
+ LIFETIME@[60; 63) "\'de"
+ R_ANGLE@[63; 64) ">"
+ WHITESPACE@[64; 65) " "
+ PATH_TYPE@[65; 81)
+ PATH@[65; 81)
+ PATH_SEGMENT@[65; 81)
+ NAME_REF@[65; 76)
+ IDENT@[65; 76) "Deserialize"
+ TYPE_ARG_LIST@[76; 81)
+ L_ANGLE@[76; 77) "<"
+ LIFETIME_ARG@[77; 80)
+ LIFETIME@[77; 80) "\'de"
+ R_ANGLE@[80; 81) ">"
+ WHITESPACE@[81; 82) " "
+ PLUS@[82; 83) "+"
+ WHITESPACE@[83; 84) " "
+ TYPE_BOUND@[84; 93)
+ PATH_TYPE@[84; 93)
+ PATH@[84; 93)
+ PATH_SEGMENT@[84; 93)
+ NAME_REF@[84; 93)
+ IDENT@[84; 93) "PartialEq"
+ WHITESPACE@[93; 94) " "
+ PLUS@[94; 95) "+"
+ WHITESPACE@[95; 96) " "
+ TYPE_BOUND@[96; 111)
+ PATH_TYPE@[96; 111)
+ PATH@[96; 111)
+ PATH@[96; 104)
+ PATH@[96; 99)
+ PATH_SEGMENT@[96; 99)
+ NAME_REF@[96; 99)
+ IDENT@[96; 99) "std"
+ COLONCOLON@[99; 101) "::"
+ PATH_SEGMENT@[101; 104)
+ NAME_REF@[101; 104)
+ IDENT@[101; 104) "fmt"
+ COLONCOLON@[104; 106) "::"
+ PATH_SEGMENT@[106; 111)
+ NAME_REF@[106; 111)
+ IDENT@[106; 111) "Debug"
+ COMMA@[111; 112) ","
+ WHITESPACE@[112; 113) "\n"
+ BLOCK@[113; 115)
+ L_CURLY@[113; 114) "{"
+ R_CURLY@[114; 115) "}"
+ WHITESPACE@[115; 116) "\n"
--- /dev/null
+// format with label break value.
+fn main() {
+ 'empty_block: {}
+
+ 'block: {
+ do_thing();
+ if condition_not_met() {
+ break 'block;
+ }
+ do_next_thing();
+ if condition_not_met() {
+ break 'block;
+ }
+ do_last_thing();
+ }
+
+ let result = 'block: {
+ if foo() {
+ // comment
+ break 'block 1;
+ }
+ if bar() {
+ /* comment */
+ break 'block 2;
+ }
+ 3
+ };
+}
--- /dev/null
+SOURCE_FILE@[0; 506)
+ FN_DEF@[0; 505)
+ COMMENT@[0; 33) "// format with label ..."
+ WHITESPACE@[33; 34) "\n"
+ FN_KW@[34; 36) "fn"
+ WHITESPACE@[36; 37) " "
+ NAME@[37; 41)
+ IDENT@[37; 41) "main"
+ PARAM_LIST@[41; 43)
+ L_PAREN@[41; 42) "("
+ R_PAREN@[42; 43) ")"
+ WHITESPACE@[43; 44) " "
+ BLOCK@[44; 505)
+ L_CURLY@[44; 45) "{"
+ WHITESPACE@[45; 50) "\n "
+ EXPR_STMT@[50; 66)
+ BLOCK_EXPR@[50; 66)
+ LABEL@[50; 63)
+ LIFETIME@[50; 62) "\'empty_block"
+ COLON@[62; 63) ":"
+ WHITESPACE@[63; 64) " "
+ BLOCK@[64; 66)
+ L_CURLY@[64; 65) "{"
+ R_CURLY@[65; 66) "}"
+ WHITESPACE@[66; 72) "\n\n "
+ EXPR_STMT@[72; 295)
+ BLOCK_EXPR@[72; 295)
+ LABEL@[72; 79)
+ LIFETIME@[72; 78) "\'block"
+ COLON@[78; 79) ":"
+ WHITESPACE@[79; 80) " "
+ BLOCK@[80; 295)
+ L_CURLY@[80; 81) "{"
+ WHITESPACE@[81; 90) "\n "
+ EXPR_STMT@[90; 101)
+ CALL_EXPR@[90; 100)
+ PATH_EXPR@[90; 98)
+ PATH@[90; 98)
+ PATH_SEGMENT@[90; 98)
+ NAME_REF@[90; 98)
+ IDENT@[90; 98) "do_thing"
+ ARG_LIST@[98; 100)
+ L_PAREN@[98; 99) "("
+ R_PAREN@[99; 100) ")"
+ SEMI@[100; 101) ";"
+ WHITESPACE@[101; 110) "\n "
+ EXPR_STMT@[110; 170)
+ IF_EXPR@[110; 170)
+ IF_KW@[110; 112) "if"
+ WHITESPACE@[112; 113) " "
+ CONDITION@[113; 132)
+ CALL_EXPR@[113; 132)
+ PATH_EXPR@[113; 130)
+ PATH@[113; 130)
+ PATH_SEGMENT@[113; 130)
+ NAME_REF@[113; 130)
+ IDENT@[113; 130) "condition_not_met"
+ ARG_LIST@[130; 132)
+ L_PAREN@[130; 131) "("
+ R_PAREN@[131; 132) ")"
+ WHITESPACE@[132; 133) " "
+ BLOCK@[133; 170)
+ L_CURLY@[133; 134) "{"
+ WHITESPACE@[134; 147) "\n "
+ EXPR_STMT@[147; 160)
+ BREAK_EXPR@[147; 159)
+ BREAK_KW@[147; 152) "break"
+ WHITESPACE@[152; 153) " "
+ LIFETIME@[153; 159) "\'block"
+ SEMI@[159; 160) ";"
+ WHITESPACE@[160; 169) "\n "
+ R_CURLY@[169; 170) "}"
+ WHITESPACE@[170; 179) "\n "
+ EXPR_STMT@[179; 195)
+ CALL_EXPR@[179; 194)
+ PATH_EXPR@[179; 192)
+ PATH@[179; 192)
+ PATH_SEGMENT@[179; 192)
+ NAME_REF@[179; 192)
+ IDENT@[179; 192) "do_next_thing"
+ ARG_LIST@[192; 194)
+ L_PAREN@[192; 193) "("
+ R_PAREN@[193; 194) ")"
+ SEMI@[194; 195) ";"
+ WHITESPACE@[195; 204) "\n "
+ EXPR_STMT@[204; 264)
+ IF_EXPR@[204; 264)
+ IF_KW@[204; 206) "if"
+ WHITESPACE@[206; 207) " "
+ CONDITION@[207; 226)
+ CALL_EXPR@[207; 226)
+ PATH_EXPR@[207; 224)
+ PATH@[207; 224)
+ PATH_SEGMENT@[207; 224)
+ NAME_REF@[207; 224)
+ IDENT@[207; 224) "condition_not_met"
+ ARG_LIST@[224; 226)
+ L_PAREN@[224; 225) "("
+ R_PAREN@[225; 226) ")"
+ WHITESPACE@[226; 227) " "
+ BLOCK@[227; 264)
+ L_CURLY@[227; 228) "{"
+ WHITESPACE@[228; 241) "\n "
+ EXPR_STMT@[241; 254)
+ BREAK_EXPR@[241; 253)
+ BREAK_KW@[241; 246) "break"
+ WHITESPACE@[246; 247) " "
+ LIFETIME@[247; 253) "\'block"
+ SEMI@[253; 254) ";"
+ WHITESPACE@[254; 263) "\n "
+ R_CURLY@[263; 264) "}"
+ WHITESPACE@[264; 273) "\n "
+ EXPR_STMT@[273; 289)
+ CALL_EXPR@[273; 288)
+ PATH_EXPR@[273; 286)
+ PATH@[273; 286)
+ PATH_SEGMENT@[273; 286)
+ NAME_REF@[273; 286)
+ IDENT@[273; 286) "do_last_thing"
+ ARG_LIST@[286; 288)
+ L_PAREN@[286; 287) "("
+ R_PAREN@[287; 288) ")"
+ SEMI@[288; 289) ";"
+ WHITESPACE@[289; 294) "\n "
+ R_CURLY@[294; 295) "}"
+ WHITESPACE@[295; 301) "\n\n "
+ LET_STMT@[301; 503)
+ LET_KW@[301; 304) "let"
+ WHITESPACE@[304; 305) " "
+ BIND_PAT@[305; 311)
+ NAME@[305; 311)
+ IDENT@[305; 311) "result"
+ WHITESPACE@[311; 312) " "
+ EQ@[312; 313) "="
+ WHITESPACE@[313; 314) " "
+ BLOCK_EXPR@[314; 502)
+ LABEL@[314; 321)
+ LIFETIME@[314; 320) "\'block"
+ COLON@[320; 321) ":"
+ WHITESPACE@[321; 322) " "
+ BLOCK@[322; 502)
+ L_CURLY@[322; 323) "{"
+ WHITESPACE@[323; 332) "\n "
+ EXPR_STMT@[332; 403)
+ IF_EXPR@[332; 403)
+ IF_KW@[332; 334) "if"
+ WHITESPACE@[334; 335) " "
+ CONDITION@[335; 340)
+ CALL_EXPR@[335; 340)
+ PATH_EXPR@[335; 338)
+ PATH@[335; 338)
+ PATH_SEGMENT@[335; 338)
+ NAME_REF@[335; 338)
+ IDENT@[335; 338) "foo"
+ ARG_LIST@[338; 340)
+ L_PAREN@[338; 339) "("
+ R_PAREN@[339; 340) ")"
+ WHITESPACE@[340; 341) " "
+ BLOCK@[341; 403)
+ L_CURLY@[341; 342) "{"
+ WHITESPACE@[342; 355) "\n "
+ COMMENT@[355; 365) "// comment"
+ WHITESPACE@[365; 378) "\n "
+ EXPR_STMT@[378; 393)
+ BREAK_EXPR@[378; 392)
+ BREAK_KW@[378; 383) "break"
+ WHITESPACE@[383; 384) " "
+ LIFETIME@[384; 390) "\'block"
+ WHITESPACE@[390; 391) " "
+ LITERAL@[391; 392)
+ INT_NUMBER@[391; 392) "1"
+ SEMI@[392; 393) ";"
+ WHITESPACE@[393; 402) "\n "
+ R_CURLY@[402; 403) "}"
+ WHITESPACE@[403; 412) "\n "
+ EXPR_STMT@[412; 486)
+ IF_EXPR@[412; 486)
+ IF_KW@[412; 414) "if"
+ WHITESPACE@[414; 415) " "
+ CONDITION@[415; 420)
+ CALL_EXPR@[415; 420)
+ PATH_EXPR@[415; 418)
+ PATH@[415; 418)
+ PATH_SEGMENT@[415; 418)
+ NAME_REF@[415; 418)
+ IDENT@[415; 418) "bar"
+ ARG_LIST@[418; 420)
+ L_PAREN@[418; 419) "("
+ R_PAREN@[419; 420) ")"
+ WHITESPACE@[420; 421) " "
+ BLOCK@[421; 486)
+ L_CURLY@[421; 422) "{"
+ WHITESPACE@[422; 435) "\n "
+ COMMENT@[435; 448) "/* comment */"
+ WHITESPACE@[448; 461) "\n "
+ EXPR_STMT@[461; 476)
+ BREAK_EXPR@[461; 475)
+ BREAK_KW@[461; 466) "break"
+ WHITESPACE@[466; 467) " "
+ LIFETIME@[467; 473) "\'block"
+ WHITESPACE@[473; 474) " "
+ LITERAL@[474; 475)
+ INT_NUMBER@[474; 475) "2"
+ SEMI@[475; 476) ";"
+ WHITESPACE@[476; 485) "\n "
+ R_CURLY@[485; 486) "}"
+ WHITESPACE@[486; 495) "\n "
+ LITERAL@[495; 496)
+ INT_NUMBER@[495; 496) "3"
+ WHITESPACE@[496; 501) "\n "
+ R_CURLY@[501; 502) "}"
+ SEMI@[502; 503) ";"
+ WHITESPACE@[503; 504) "\n"
+ R_CURLY@[504; 505) "}"
+ WHITESPACE@[505; 506) "\n"
--- /dev/null
+fn main() {
+ make_query(crate::module_map::module_tree);
+}
--- /dev/null
+SOURCE_FILE@[0; 62)
+ FN_DEF@[0; 61)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 7)
+ IDENT@[3; 7) "main"
+ PARAM_LIST@[7; 9)
+ L_PAREN@[7; 8) "("
+ R_PAREN@[8; 9) ")"
+ WHITESPACE@[9; 10) " "
+ BLOCK@[10; 61)
+ L_CURLY@[10; 11) "{"
+ WHITESPACE@[11; 16) "\n "
+ EXPR_STMT@[16; 59)
+ CALL_EXPR@[16; 58)
+ PATH_EXPR@[16; 26)
+ PATH@[16; 26)
+ PATH_SEGMENT@[16; 26)
+ NAME_REF@[16; 26)
+ IDENT@[16; 26) "make_query"
+ ARG_LIST@[26; 58)
+ L_PAREN@[26; 27) "("
+ PATH_EXPR@[27; 57)
+ PATH@[27; 57)
+ PATH@[27; 44)
+ PATH@[27; 32)
+ PATH_SEGMENT@[27; 32)
+ CRATE_KW@[27; 32) "crate"
+ COLONCOLON@[32; 34) "::"
+ PATH_SEGMENT@[34; 44)
+ NAME_REF@[34; 44)
+ IDENT@[34; 44) "module_map"
+ COLONCOLON@[44; 46) "::"
+ PATH_SEGMENT@[46; 57)
+ NAME_REF@[46; 57)
+ IDENT@[46; 57) "module_tree"
+ R_PAREN@[57; 58) ")"
+ SEMI@[58; 59) ";"
+ WHITESPACE@[59; 60) "\n"
+ R_CURLY@[60; 61) "}"
+ WHITESPACE@[61; 62) "\n"
--- /dev/null
+//! Adapted from a `rustc` test, which can be found at
+//! https://github.com/rust-lang/rust/blob/6d34ec18c7d7e574553f6347ecf08e1e1c45c13d/src/test/run-pass/weird-exprs.rs.
+//!
+//! Reported to rust-analyzer in https://github.com/rust-analyzer/rust-analyzer/issues/290
+
+#![allow(non_camel_case_types)]
+#![allow(dead_code)]
+#![allow(unreachable_code)]
+#![allow(unused_parens)]
+
+#![recursion_limit = "128"]
+
+use std::cell::Cell;
+use std::mem::swap;
+
+// Just a grab bag of stuff that you wouldn't want to actually write.
+
+fn strange() -> bool { let _x: bool = return true; }
+
+fn funny() {
+ fn f(_x: ()) { }
+ f(return);
+}
+
+fn what() {
+ fn the(x: &Cell<bool>) {
+ return while !x.get() { x.set(true); };
+ }
+ let i = &Cell::new(false);
+ let dont = {||the(i)};
+ dont();
+ assert!((i.get()));
+}
+
+fn zombiejesus() {
+ loop {
+ while (return) {
+ if (return) {
+ match (return) {
+ 1 => {
+ if (return) {
+ return
+ } else {
+ return
+ }
+ }
+ _ => { return }
+ };
+ } else if (return) {
+ return;
+ }
+ }
+ if (return) { break; }
+ }
+}
+
+fn notsure() {
+ let mut _x: isize;
+ let mut _y = (_x = 0) == (_x = 0);
+ let mut _z = (_x = 0) < (_x = 0);
+ let _a = (_x += 0) == (_x = 0);
+ let _b = swap(&mut _y, &mut _z) == swap(&mut _y, &mut _z);
+}
+
+fn canttouchthis() -> usize {
+ fn p() -> bool { true }
+ let _a = (assert!((true)) == (assert!(p())));
+ let _c = (assert!((p())) == ());
+ let _b: bool = (println!("{}", 0) == (return 0));
+}
+
+fn angrydome() {
+ loop { if break { } }
+ let mut i = 0;
+ loop { i += 1; if i == 1 { match (continue) { 1 => { }, _ => panic!("wat") } }
+ break; }
+}
+
+fn evil_lincoln() { let _evil = println!("lincoln"); }
+
+fn dots() {
+ assert_eq!(String::from(".................................................."),
+ format!("{:?}", .. .. .. .. .. .. .. .. .. .. .. .. ..
+ .. .. .. .. .. .. .. .. .. .. .. ..));
+}
+
+fn u8(u8: u8) {
+ if u8 != 0u8 {
+ assert_eq!(8u8, {
+ macro_rules! u8 {
+ (u8) => {
+ mod u8 {
+ pub fn u8<'u8: 'u8 + 'u8>(u8: &'u8 u8) -> &'u8 u8 {
+ "u8";
+ u8
+ }
+ }
+ };
+ }
+
+ u8!(u8);
+ let &u8: &u8 = u8::u8(&8u8);
+ crate::u8(0u8);
+ u8
+ });
+ }
+}
+
+fn fishy() {
+ assert_eq!(String::from("><>"),
+ String::<>::from::<>("><>").chars::<>().rev::<>().collect::<String>());
+}
+
+fn union() {
+ union union<'union> { union: &'union union<'union>, }
+}
+
+fn special_characters() {
+ let val = !((|(..):(_,_),__@_|__)((&*"\\",'🤔')/**/,{})=={&[..=..][..];})//
+ ;
+ assert!(!val);
+}
+
+fn punch_card() -> impl std::fmt::Debug {
+ ..=..=.. .. .. .. .. .. .. .. .. .. .. ..=.. ..
+ ..=.. ..=.. .. .. .. .. .. .. .. .. ..=..=..=..
+ ..=.. ..=.. ..=.. ..=.. .. ..=..=.. .. ..=.. ..
+ ..=..=.. .. ..=.. ..=.. ..=.. .. .. .. ..=.. ..
+ ..=.. ..=.. ..=.. ..=.. .. ..=.. .. .. ..=.. ..
+ ..=.. ..=.. ..=.. ..=.. .. .. ..=.. .. ..=.. ..
+ ..=.. ..=.. .. ..=..=.. ..=..=.. .. .. ..=.. ..
+}
+
+fn ktulhu() {
+ ;;;();;;;;;;;;()
+}
+
+pub fn main() {
+ strange();
+ funny();
+ what();
+ zombiejesus();
+ notsure();
+ canttouchthis();
+ angrydome();
+ evil_lincoln();
+ dots();
+ u8(8u8);
+ fishy();
+ union();
+ special_characters();
+ punch_card();
+ ktulhu();
+}
--- /dev/null
+SOURCE_FILE@[0; 3813)
+ COMMENT@[0; 55) "//! Adapted from a `r ..."
+ WHITESPACE@[55; 56) "\n"
+ COMMENT@[56; 173) "//! https://github.co ..."
+ WHITESPACE@[173; 174) "\n"
+ COMMENT@[174; 178) "//! "
+ WHITESPACE@[178; 179) "\n"
+ COMMENT@[179; 269) "//! Reported to rust- ..."
+ WHITESPACE@[269; 271) "\n\n"
+ ATTR@[271; 302)
+ POUND@[271; 272) "#"
+ EXCL@[272; 273) "!"
+ TOKEN_TREE@[273; 302)
+ L_BRACK@[273; 274) "["
+ IDENT@[274; 279) "allow"
+ TOKEN_TREE@[279; 301)
+ L_PAREN@[279; 280) "("
+ IDENT@[280; 300) "non_camel_case_types"
+ R_PAREN@[300; 301) ")"
+ R_BRACK@[301; 302) "]"
+ WHITESPACE@[302; 303) "\n"
+ ATTR@[303; 323)
+ POUND@[303; 304) "#"
+ EXCL@[304; 305) "!"
+ TOKEN_TREE@[305; 323)
+ L_BRACK@[305; 306) "["
+ IDENT@[306; 311) "allow"
+ TOKEN_TREE@[311; 322)
+ L_PAREN@[311; 312) "("
+ IDENT@[312; 321) "dead_code"
+ R_PAREN@[321; 322) ")"
+ R_BRACK@[322; 323) "]"
+ WHITESPACE@[323; 324) "\n"
+ ATTR@[324; 351)
+ POUND@[324; 325) "#"
+ EXCL@[325; 326) "!"
+ TOKEN_TREE@[326; 351)
+ L_BRACK@[326; 327) "["
+ IDENT@[327; 332) "allow"
+ TOKEN_TREE@[332; 350)
+ L_PAREN@[332; 333) "("
+ IDENT@[333; 349) "unreachable_code"
+ R_PAREN@[349; 350) ")"
+ R_BRACK@[350; 351) "]"
+ WHITESPACE@[351; 352) "\n"
+ ATTR@[352; 376)
+ POUND@[352; 353) "#"
+ EXCL@[353; 354) "!"
+ TOKEN_TREE@[354; 376)
+ L_BRACK@[354; 355) "["
+ IDENT@[355; 360) "allow"
+ TOKEN_TREE@[360; 375)
+ L_PAREN@[360; 361) "("
+ IDENT@[361; 374) "unused_parens"
+ R_PAREN@[374; 375) ")"
+ R_BRACK@[375; 376) "]"
+ WHITESPACE@[376; 378) "\n\n"
+ ATTR@[378; 405)
+ POUND@[378; 379) "#"
+ EXCL@[379; 380) "!"
+ TOKEN_TREE@[380; 405)
+ L_BRACK@[380; 381) "["
+ IDENT@[381; 396) "recursion_limit"
+ WHITESPACE@[396; 397) " "
+ EQ@[397; 398) "="
+ WHITESPACE@[398; 399) " "
+ STRING@[399; 404) "\"128\""
+ R_BRACK@[404; 405) "]"
+ WHITESPACE@[405; 407) "\n\n"
+ USE_ITEM@[407; 427)
+ USE_KW@[407; 410) "use"
+ WHITESPACE@[410; 411) " "
+ USE_TREE@[411; 426)
+ PATH@[411; 426)
+ PATH@[411; 420)
+ PATH@[411; 414)
+ PATH_SEGMENT@[411; 414)
+ NAME_REF@[411; 414)
+ IDENT@[411; 414) "std"
+ COLONCOLON@[414; 416) "::"
+ PATH_SEGMENT@[416; 420)
+ NAME_REF@[416; 420)
+ IDENT@[416; 420) "cell"
+ COLONCOLON@[420; 422) "::"
+ PATH_SEGMENT@[422; 426)
+ NAME_REF@[422; 426)
+ IDENT@[422; 426) "Cell"
+ SEMI@[426; 427) ";"
+ WHITESPACE@[427; 428) "\n"
+ USE_ITEM@[428; 447)
+ USE_KW@[428; 431) "use"
+ WHITESPACE@[431; 432) " "
+ USE_TREE@[432; 446)
+ PATH@[432; 446)
+ PATH@[432; 440)
+ PATH@[432; 435)
+ PATH_SEGMENT@[432; 435)
+ NAME_REF@[432; 435)
+ IDENT@[432; 435) "std"
+ COLONCOLON@[435; 437) "::"
+ PATH_SEGMENT@[437; 440)
+ NAME_REF@[437; 440)
+ IDENT@[437; 440) "mem"
+ COLONCOLON@[440; 442) "::"
+ PATH_SEGMENT@[442; 446)
+ NAME_REF@[442; 446)
+ IDENT@[442; 446) "swap"
+ SEMI@[446; 447) ";"
+ WHITESPACE@[447; 449) "\n\n"
+ COMMENT@[449; 518) "// Just a grab bag of ..."
+ WHITESPACE@[518; 520) "\n\n"
+ FN_DEF@[520; 572)
+ FN_KW@[520; 522) "fn"
+ WHITESPACE@[522; 523) " "
+ NAME@[523; 530)
+ IDENT@[523; 530) "strange"
+ PARAM_LIST@[530; 532)
+ L_PAREN@[530; 531) "("
+ R_PAREN@[531; 532) ")"
+ WHITESPACE@[532; 533) " "
+ RET_TYPE@[533; 540)
+ THIN_ARROW@[533; 535) "->"
+ WHITESPACE@[535; 536) " "
+ PATH_TYPE@[536; 540)
+ PATH@[536; 540)
+ PATH_SEGMENT@[536; 540)
+ NAME_REF@[536; 540)
+ IDENT@[536; 540) "bool"
+ WHITESPACE@[540; 541) " "
+ BLOCK@[541; 572)
+ L_CURLY@[541; 542) "{"
+ WHITESPACE@[542; 543) " "
+ LET_STMT@[543; 570)
+ LET_KW@[543; 546) "let"
+ WHITESPACE@[546; 547) " "
+ BIND_PAT@[547; 549)
+ NAME@[547; 549)
+ IDENT@[547; 549) "_x"
+ COLON@[549; 550) ":"
+ WHITESPACE@[550; 551) " "
+ PATH_TYPE@[551; 555)
+ PATH@[551; 555)
+ PATH_SEGMENT@[551; 555)
+ NAME_REF@[551; 555)
+ IDENT@[551; 555) "bool"
+ WHITESPACE@[555; 556) " "
+ EQ@[556; 557) "="
+ WHITESPACE@[557; 558) " "
+ RETURN_EXPR@[558; 569)
+ RETURN_KW@[558; 564) "return"
+ WHITESPACE@[564; 565) " "
+ LITERAL@[565; 569)
+ TRUE_KW@[565; 569) "true"
+ SEMI@[569; 570) ";"
+ WHITESPACE@[570; 571) " "
+ R_CURLY@[571; 572) "}"
+ WHITESPACE@[572; 574) "\n\n"
+ FN_DEF@[574; 624)
+ FN_KW@[574; 576) "fn"
+ WHITESPACE@[576; 577) " "
+ NAME@[577; 582)
+ IDENT@[577; 582) "funny"
+ PARAM_LIST@[582; 584)
+ L_PAREN@[582; 583) "("
+ R_PAREN@[583; 584) ")"
+ WHITESPACE@[584; 585) " "
+ BLOCK@[585; 624)
+ L_CURLY@[585; 586) "{"
+ WHITESPACE@[586; 591) "\n "
+ FN_DEF@[591; 607)
+ FN_KW@[591; 593) "fn"
+ WHITESPACE@[593; 594) " "
+ NAME@[594; 595)
+ IDENT@[594; 595) "f"
+ PARAM_LIST@[595; 603)
+ L_PAREN@[595; 596) "("
+ PARAM@[596; 602)
+ BIND_PAT@[596; 598)
+ NAME@[596; 598)
+ IDENT@[596; 598) "_x"
+ COLON@[598; 599) ":"
+ WHITESPACE@[599; 600) " "
+ TUPLE_TYPE@[600; 602)
+ L_PAREN@[600; 601) "("
+ R_PAREN@[601; 602) ")"
+ R_PAREN@[602; 603) ")"
+ WHITESPACE@[603; 604) " "
+ BLOCK@[604; 607)
+ L_CURLY@[604; 605) "{"
+ WHITESPACE@[605; 606) " "
+ R_CURLY@[606; 607) "}"
+ WHITESPACE@[607; 612) "\n "
+ EXPR_STMT@[612; 622)
+ CALL_EXPR@[612; 621)
+ PATH_EXPR@[612; 613)
+ PATH@[612; 613)
+ PATH_SEGMENT@[612; 613)
+ NAME_REF@[612; 613)
+ IDENT@[612; 613) "f"
+ ARG_LIST@[613; 621)
+ L_PAREN@[613; 614) "("
+ RETURN_EXPR@[614; 620)
+ RETURN_KW@[614; 620) "return"
+ R_PAREN@[620; 621) ")"
+ SEMI@[621; 622) ";"
+ WHITESPACE@[622; 623) "\n"
+ R_CURLY@[623; 624) "}"
+ WHITESPACE@[624; 626) "\n\n"
+ FN_DEF@[626; 816)
+ FN_KW@[626; 628) "fn"
+ WHITESPACE@[628; 629) " "
+ NAME@[629; 633)
+ IDENT@[629; 633) "what"
+ PARAM_LIST@[633; 635)
+ L_PAREN@[633; 634) "("
+ R_PAREN@[634; 635) ")"
+ WHITESPACE@[635; 636) " "
+ BLOCK@[636; 816)
+ L_CURLY@[636; 637) "{"
+ WHITESPACE@[637; 642) "\n "
+ FN_DEF@[642; 720)
+ FN_KW@[642; 644) "fn"
+ WHITESPACE@[644; 645) " "
+ NAME@[645; 648)
+ IDENT@[645; 648) "the"
+ PARAM_LIST@[648; 664)
+ L_PAREN@[648; 649) "("
+ PARAM@[649; 663)
+ BIND_PAT@[649; 650)
+ NAME@[649; 650)
+ IDENT@[649; 650) "x"
+ COLON@[650; 651) ":"
+ WHITESPACE@[651; 652) " "
+ REFERENCE_TYPE@[652; 663)
+ AMP@[652; 653) "&"
+ PATH_TYPE@[653; 663)
+ PATH@[653; 663)
+ PATH_SEGMENT@[653; 663)
+ NAME_REF@[653; 657)
+ IDENT@[653; 657) "Cell"
+ TYPE_ARG_LIST@[657; 663)
+ L_ANGLE@[657; 658) "<"
+ TYPE_ARG@[658; 662)
+ PATH_TYPE@[658; 662)
+ PATH@[658; 662)
+ PATH_SEGMENT@[658; 662)
+ NAME_REF@[658; 662)
+ IDENT@[658; 662) "bool"
+ R_ANGLE@[662; 663) ">"
+ R_PAREN@[663; 664) ")"
+ WHITESPACE@[664; 665) " "
+ BLOCK@[665; 720)
+ L_CURLY@[665; 666) "{"
+ WHITESPACE@[666; 675) "\n "
+ EXPR_STMT@[675; 714)
+ RETURN_EXPR@[675; 713)
+ RETURN_KW@[675; 681) "return"
+ WHITESPACE@[681; 682) " "
+ WHILE_EXPR@[682; 713)
+ WHILE_KW@[682; 687) "while"
+ WHITESPACE@[687; 688) " "
+ CONDITION@[688; 696)
+ PREFIX_EXPR@[688; 696)
+ EXCL@[688; 689) "!"
+ METHOD_CALL_EXPR@[689; 696)
+ PATH_EXPR@[689; 690)
+ PATH@[689; 690)
+ PATH_SEGMENT@[689; 690)
+ NAME_REF@[689; 690)
+ IDENT@[689; 690) "x"
+ DOT@[690; 691) "."
+ NAME_REF@[691; 694)
+ IDENT@[691; 694) "get"
+ ARG_LIST@[694; 696)
+ L_PAREN@[694; 695) "("
+ R_PAREN@[695; 696) ")"
+ WHITESPACE@[696; 697) " "
+ BLOCK@[697; 713)
+ L_CURLY@[697; 698) "{"
+ WHITESPACE@[698; 699) " "
+ EXPR_STMT@[699; 711)
+ METHOD_CALL_EXPR@[699; 710)
+ PATH_EXPR@[699; 700)
+ PATH@[699; 700)
+ PATH_SEGMENT@[699; 700)
+ NAME_REF@[699; 700)
+ IDENT@[699; 700) "x"
+ DOT@[700; 701) "."
+ NAME_REF@[701; 704)
+ IDENT@[701; 704) "set"
+ ARG_LIST@[704; 710)
+ L_PAREN@[704; 705) "("
+ LITERAL@[705; 709)
+ TRUE_KW@[705; 709) "true"
+ R_PAREN@[709; 710) ")"
+ SEMI@[710; 711) ";"
+ WHITESPACE@[711; 712) " "
+ R_CURLY@[712; 713) "}"
+ SEMI@[713; 714) ";"
+ WHITESPACE@[714; 719) "\n "
+ R_CURLY@[719; 720) "}"
+ WHITESPACE@[720; 725) "\n "
+ LET_STMT@[725; 751)
+ LET_KW@[725; 728) "let"
+ WHITESPACE@[728; 729) " "
+ BIND_PAT@[729; 730)
+ NAME@[729; 730)
+ IDENT@[729; 730) "i"
+ WHITESPACE@[730; 731) " "
+ EQ@[731; 732) "="
+ WHITESPACE@[732; 733) " "
+ REF_EXPR@[733; 750)
+ AMP@[733; 734) "&"
+ CALL_EXPR@[734; 750)
+ PATH_EXPR@[734; 743)
+ PATH@[734; 743)
+ PATH@[734; 738)
+ PATH_SEGMENT@[734; 738)
+ NAME_REF@[734; 738)
+ IDENT@[734; 738) "Cell"
+ COLONCOLON@[738; 740) "::"
+ PATH_SEGMENT@[740; 743)
+ NAME_REF@[740; 743)
+ IDENT@[740; 743) "new"
+ ARG_LIST@[743; 750)
+ L_PAREN@[743; 744) "("
+ LITERAL@[744; 749)
+ FALSE_KW@[744; 749) "false"
+ R_PAREN@[749; 750) ")"
+ SEMI@[750; 751) ";"
+ WHITESPACE@[751; 756) "\n "
+ LET_STMT@[756; 778)
+ LET_KW@[756; 759) "let"
+ WHITESPACE@[759; 760) " "
+ BIND_PAT@[760; 764)
+ NAME@[760; 764)
+ IDENT@[760; 764) "dont"
+ WHITESPACE@[764; 765) " "
+ EQ@[765; 766) "="
+ WHITESPACE@[766; 767) " "
+ BLOCK_EXPR@[767; 777)
+ BLOCK@[767; 777)
+ L_CURLY@[767; 768) "{"
+ LAMBDA_EXPR@[768; 776)
+ PARAM_LIST@[768; 770)
+ PIPE@[768; 769) "|"
+ PIPE@[769; 770) "|"
+ CALL_EXPR@[770; 776)
+ PATH_EXPR@[770; 773)
+ PATH@[770; 773)
+ PATH_SEGMENT@[770; 773)
+ NAME_REF@[770; 773)
+ IDENT@[770; 773) "the"
+ ARG_LIST@[773; 776)
+ L_PAREN@[773; 774) "("
+ PATH_EXPR@[774; 775)
+ PATH@[774; 775)
+ PATH_SEGMENT@[774; 775)
+ NAME_REF@[774; 775)
+ IDENT@[774; 775) "i"
+ R_PAREN@[775; 776) ")"
+ R_CURLY@[776; 777) "}"
+ SEMI@[777; 778) ";"
+ WHITESPACE@[778; 783) "\n "
+ EXPR_STMT@[783; 790)
+ CALL_EXPR@[783; 789)
+ PATH_EXPR@[783; 787)
+ PATH@[783; 787)
+ PATH_SEGMENT@[783; 787)
+ NAME_REF@[783; 787)
+ IDENT@[783; 787) "dont"
+ ARG_LIST@[787; 789)
+ L_PAREN@[787; 788) "("
+ R_PAREN@[788; 789) ")"
+ SEMI@[789; 790) ";"
+ WHITESPACE@[790; 795) "\n "
+ EXPR_STMT@[795; 814)
+ MACRO_CALL@[795; 813)
+ PATH@[795; 801)
+ PATH_SEGMENT@[795; 801)
+ NAME_REF@[795; 801)
+ IDENT@[795; 801) "assert"
+ EXCL@[801; 802) "!"
+ TOKEN_TREE@[802; 813)
+ L_PAREN@[802; 803) "("
+ TOKEN_TREE@[803; 812)
+ L_PAREN@[803; 804) "("
+ IDENT@[804; 805) "i"
+ DOT@[805; 806) "."
+ IDENT@[806; 809) "get"
+ TOKEN_TREE@[809; 811)
+ L_PAREN@[809; 810) "("
+ R_PAREN@[810; 811) ")"
+ R_PAREN@[811; 812) ")"
+ R_PAREN@[812; 813) ")"
+ SEMI@[813; 814) ";"
+ WHITESPACE@[814; 815) "\n"
+ R_CURLY@[815; 816) "}"
+ WHITESPACE@[816; 818) "\n\n"
+ FN_DEF@[818; 1322)
+ FN_KW@[818; 820) "fn"
+ WHITESPACE@[820; 821) " "
+ NAME@[821; 832)
+ IDENT@[821; 832) "zombiejesus"
+ PARAM_LIST@[832; 834)
+ L_PAREN@[832; 833) "("
+ R_PAREN@[833; 834) ")"
+ WHITESPACE@[834; 835) " "
+ BLOCK@[835; 1322)
+ L_CURLY@[835; 836) "{"
+ WHITESPACE@[836; 841) "\n "
+ LOOP_EXPR@[841; 1320)
+ LOOP_KW@[841; 845) "loop"
+ WHITESPACE@[845; 846) " "
+ BLOCK@[846; 1320)
+ L_CURLY@[846; 847) "{"
+ WHITESPACE@[847; 856) "\n "
+ EXPR_STMT@[856; 1283)
+ WHILE_EXPR@[856; 1283)
+ WHILE_KW@[856; 861) "while"
+ WHITESPACE@[861; 862) " "
+ CONDITION@[862; 870)
+ PAREN_EXPR@[862; 870)
+ L_PAREN@[862; 863) "("
+ RETURN_EXPR@[863; 869)
+ RETURN_KW@[863; 869) "return"
+ R_PAREN@[869; 870) ")"
+ WHITESPACE@[870; 871) " "
+ BLOCK@[871; 1283)
+ L_CURLY@[871; 872) "{"
+ WHITESPACE@[872; 885) "\n "
+ IF_EXPR@[885; 1273)
+ IF_KW@[885; 887) "if"
+ WHITESPACE@[887; 888) " "
+ CONDITION@[888; 896)
+ PAREN_EXPR@[888; 896)
+ L_PAREN@[888; 889) "("
+ RETURN_EXPR@[889; 895)
+ RETURN_KW@[889; 895) "return"
+ R_PAREN@[895; 896) ")"
+ WHITESPACE@[896; 897) " "
+ BLOCK@[897; 1216)
+ L_CURLY@[897; 898) "{"
+ WHITESPACE@[898; 915) "\n "
+ EXPR_STMT@[915; 1202)
+ MATCH_EXPR@[915; 1201)
+ MATCH_KW@[915; 920) "match"
+ WHITESPACE@[920; 921) " "
+ PAREN_EXPR@[921; 929)
+ L_PAREN@[921; 922) "("
+ RETURN_EXPR@[922; 928)
+ RETURN_KW@[922; 928) "return"
+ R_PAREN@[928; 929) ")"
+ WHITESPACE@[929; 930) " "
+ MATCH_ARM_LIST@[930; 1201)
+ L_CURLY@[930; 931) "{"
+ WHITESPACE@[931; 952) "\n "
+ MATCH_ARM@[952; 1147)
+ LITERAL_PAT@[952; 953)
+ LITERAL@[952; 953)
+ INT_NUMBER@[952; 953) "1"
+ WHITESPACE@[953; 954) " "
+ FAT_ARROW@[954; 956) "=>"
+ WHITESPACE@[956; 957) " "
+ BLOCK_EXPR@[957; 1147)
+ BLOCK@[957; 1147)
+ L_CURLY@[957; 958) "{"
+ WHITESPACE@[958; 983) "\n ..."
+ IF_EXPR@[983; 1125)
+ IF_KW@[983; 985) "if"
+ WHITESPACE@[985; 986) " "
+ CONDITION@[986; 994)
+ PAREN_EXPR@[986; 994)
+ L_PAREN@[986; 987) "("
+ RETURN_EXPR@[987; 993)
+ RETURN_KW@[987; 993) "return"
+ R_PAREN@[993; 994) ")"
+ WHITESPACE@[994; 995) " "
+ BLOCK@[995; 1057)
+ L_CURLY@[995; 996) "{"
+ WHITESPACE@[996; 1025) "\n ..."
+ RETURN_EXPR@[1025; 1031)
+ RETURN_KW@[1025; 1031) "return"
+ WHITESPACE@[1031; 1056) "\n ..."
+ R_CURLY@[1056; 1057) "}"
+ WHITESPACE@[1057; 1058) " "
+ ELSE_KW@[1058; 1062) "else"
+ WHITESPACE@[1062; 1063) " "
+ BLOCK@[1063; 1125)
+ L_CURLY@[1063; 1064) "{"
+ WHITESPACE@[1064; 1093) "\n ..."
+ RETURN_EXPR@[1093; 1099)
+ RETURN_KW@[1093; 1099) "return"
+ WHITESPACE@[1099; 1124) "\n ..."
+ R_CURLY@[1124; 1125) "}"
+ WHITESPACE@[1125; 1146) "\n "
+ R_CURLY@[1146; 1147) "}"
+ WHITESPACE@[1147; 1168) "\n "
+ MATCH_ARM@[1168; 1183)
+ PLACEHOLDER_PAT@[1168; 1169)
+ UNDERSCORE@[1168; 1169) "_"
+ WHITESPACE@[1169; 1170) " "
+ FAT_ARROW@[1170; 1172) "=>"
+ WHITESPACE@[1172; 1173) " "
+ BLOCK_EXPR@[1173; 1183)
+ BLOCK@[1173; 1183)
+ L_CURLY@[1173; 1174) "{"
+ WHITESPACE@[1174; 1175) " "
+ RETURN_EXPR@[1175; 1181)
+ RETURN_KW@[1175; 1181) "return"
+ WHITESPACE@[1181; 1182) " "
+ R_CURLY@[1182; 1183) "}"
+ WHITESPACE@[1183; 1200) "\n "
+ R_CURLY@[1200; 1201) "}"
+ SEMI@[1201; 1202) ";"
+ WHITESPACE@[1202; 1215) "\n "
+ R_CURLY@[1215; 1216) "}"
+ WHITESPACE@[1216; 1217) " "
+ ELSE_KW@[1217; 1221) "else"
+ WHITESPACE@[1221; 1222) " "
+ IF_EXPR@[1222; 1273)
+ IF_KW@[1222; 1224) "if"
+ WHITESPACE@[1224; 1225) " "
+ CONDITION@[1225; 1233)
+ PAREN_EXPR@[1225; 1233)
+ L_PAREN@[1225; 1226) "("
+ RETURN_EXPR@[1226; 1232)
+ RETURN_KW@[1226; 1232) "return"
+ R_PAREN@[1232; 1233) ")"
+ WHITESPACE@[1233; 1234) " "
+ BLOCK@[1234; 1273)
+ L_CURLY@[1234; 1235) "{"
+ WHITESPACE@[1235; 1252) "\n "
+ EXPR_STMT@[1252; 1259)
+ RETURN_EXPR@[1252; 1258)
+ RETURN_KW@[1252; 1258) "return"
+ SEMI@[1258; 1259) ";"
+ WHITESPACE@[1259; 1272) "\n "
+ R_CURLY@[1272; 1273) "}"
+ WHITESPACE@[1273; 1282) "\n "
+ R_CURLY@[1282; 1283) "}"
+ WHITESPACE@[1283; 1292) "\n "
+ IF_EXPR@[1292; 1314)
+ IF_KW@[1292; 1294) "if"
+ WHITESPACE@[1294; 1295) " "
+ CONDITION@[1295; 1303)
+ PAREN_EXPR@[1295; 1303)
+ L_PAREN@[1295; 1296) "("
+ RETURN_EXPR@[1296; 1302)
+ RETURN_KW@[1296; 1302) "return"
+ R_PAREN@[1302; 1303) ")"
+ WHITESPACE@[1303; 1304) " "
+ BLOCK@[1304; 1314)
+ L_CURLY@[1304; 1305) "{"
+ WHITESPACE@[1305; 1306) " "
+ EXPR_STMT@[1306; 1312)
+ BREAK_EXPR@[1306; 1311)
+ BREAK_KW@[1306; 1311) "break"
+ SEMI@[1311; 1312) ";"
+ WHITESPACE@[1312; 1313) " "
+ R_CURLY@[1313; 1314) "}"
+ WHITESPACE@[1314; 1319) "\n "
+ R_CURLY@[1319; 1320) "}"
+ WHITESPACE@[1320; 1321) "\n"
+ R_CURLY@[1321; 1322) "}"
+ WHITESPACE@[1322; 1324) "\n\n"
+ FN_DEF@[1324; 1539)
+ FN_KW@[1324; 1326) "fn"
+ WHITESPACE@[1326; 1327) " "
+ NAME@[1327; 1334)
+ IDENT@[1327; 1334) "notsure"
+ PARAM_LIST@[1334; 1336)
+ L_PAREN@[1334; 1335) "("
+ R_PAREN@[1335; 1336) ")"
+ WHITESPACE@[1336; 1337) " "
+ BLOCK@[1337; 1539)
+ L_CURLY@[1337; 1338) "{"
+ WHITESPACE@[1338; 1343) "\n "
+ LET_STMT@[1343; 1361)
+ LET_KW@[1343; 1346) "let"
+ WHITESPACE@[1346; 1347) " "
+ BIND_PAT@[1347; 1353)
+ MUT_KW@[1347; 1350) "mut"
+ WHITESPACE@[1350; 1351) " "
+ NAME@[1351; 1353)
+ IDENT@[1351; 1353) "_x"
+ COLON@[1353; 1354) ":"
+ WHITESPACE@[1354; 1355) " "
+ PATH_TYPE@[1355; 1360)
+ PATH@[1355; 1360)
+ PATH_SEGMENT@[1355; 1360)
+ NAME_REF@[1355; 1360)
+ IDENT@[1355; 1360) "isize"
+ SEMI@[1360; 1361) ";"
+ WHITESPACE@[1361; 1366) "\n "
+ LET_STMT@[1366; 1400)
+ LET_KW@[1366; 1369) "let"
+ WHITESPACE@[1369; 1370) " "
+ BIND_PAT@[1370; 1376)
+ MUT_KW@[1370; 1373) "mut"
+ WHITESPACE@[1373; 1374) " "
+ NAME@[1374; 1376)
+ IDENT@[1374; 1376) "_y"
+ WHITESPACE@[1376; 1377) " "
+ EQ@[1377; 1378) "="
+ WHITESPACE@[1378; 1379) " "
+ BIN_EXPR@[1379; 1399)
+ PAREN_EXPR@[1379; 1387)
+ L_PAREN@[1379; 1380) "("
+ BIN_EXPR@[1380; 1386)
+ PATH_EXPR@[1380; 1382)
+ PATH@[1380; 1382)
+ PATH_SEGMENT@[1380; 1382)
+ NAME_REF@[1380; 1382)
+ IDENT@[1380; 1382) "_x"
+ WHITESPACE@[1382; 1383) " "
+ EQ@[1383; 1384) "="
+ WHITESPACE@[1384; 1385) " "
+ LITERAL@[1385; 1386)
+ INT_NUMBER@[1385; 1386) "0"
+ R_PAREN@[1386; 1387) ")"
+ WHITESPACE@[1387; 1388) " "
+ EQEQ@[1388; 1390) "=="
+ WHITESPACE@[1390; 1391) " "
+ PAREN_EXPR@[1391; 1399)
+ L_PAREN@[1391; 1392) "("
+ BIN_EXPR@[1392; 1398)
+ PATH_EXPR@[1392; 1394)
+ PATH@[1392; 1394)
+ PATH_SEGMENT@[1392; 1394)
+ NAME_REF@[1392; 1394)
+ IDENT@[1392; 1394) "_x"
+ WHITESPACE@[1394; 1395) " "
+ EQ@[1395; 1396) "="
+ WHITESPACE@[1396; 1397) " "
+ LITERAL@[1397; 1398)
+ INT_NUMBER@[1397; 1398) "0"
+ R_PAREN@[1398; 1399) ")"
+ SEMI@[1399; 1400) ";"
+ WHITESPACE@[1400; 1405) "\n "
+ LET_STMT@[1405; 1438)
+ LET_KW@[1405; 1408) "let"
+ WHITESPACE@[1408; 1409) " "
+ BIND_PAT@[1409; 1415)
+ MUT_KW@[1409; 1412) "mut"
+ WHITESPACE@[1412; 1413) " "
+ NAME@[1413; 1415)
+ IDENT@[1413; 1415) "_z"
+ WHITESPACE@[1415; 1416) " "
+ EQ@[1416; 1417) "="
+ WHITESPACE@[1417; 1418) " "
+ BIN_EXPR@[1418; 1437)
+ PAREN_EXPR@[1418; 1426)
+ L_PAREN@[1418; 1419) "("
+ BIN_EXPR@[1419; 1425)
+ PATH_EXPR@[1419; 1421)
+ PATH@[1419; 1421)
+ PATH_SEGMENT@[1419; 1421)
+ NAME_REF@[1419; 1421)
+ IDENT@[1419; 1421) "_x"
+ WHITESPACE@[1421; 1422) " "
+ EQ@[1422; 1423) "="
+ WHITESPACE@[1423; 1424) " "
+ LITERAL@[1424; 1425)
+ INT_NUMBER@[1424; 1425) "0"
+ R_PAREN@[1425; 1426) ")"
+ WHITESPACE@[1426; 1427) " "
+ L_ANGLE@[1427; 1428) "<"
+ WHITESPACE@[1428; 1429) " "
+ PAREN_EXPR@[1429; 1437)
+ L_PAREN@[1429; 1430) "("
+ BIN_EXPR@[1430; 1436)
+ PATH_EXPR@[1430; 1432)
+ PATH@[1430; 1432)
+ PATH_SEGMENT@[1430; 1432)
+ NAME_REF@[1430; 1432)
+ IDENT@[1430; 1432) "_x"
+ WHITESPACE@[1432; 1433) " "
+ EQ@[1433; 1434) "="
+ WHITESPACE@[1434; 1435) " "
+ LITERAL@[1435; 1436)
+ INT_NUMBER@[1435; 1436) "0"
+ R_PAREN@[1436; 1437) ")"
+ SEMI@[1437; 1438) ";"
+ WHITESPACE@[1438; 1443) "\n "
+ LET_STMT@[1443; 1474)
+ LET_KW@[1443; 1446) "let"
+ WHITESPACE@[1446; 1447) " "
+ BIND_PAT@[1447; 1449)
+ NAME@[1447; 1449)
+ IDENT@[1447; 1449) "_a"
+ WHITESPACE@[1449; 1450) " "
+ EQ@[1450; 1451) "="
+ WHITESPACE@[1451; 1452) " "
+ BIN_EXPR@[1452; 1473)
+ PAREN_EXPR@[1452; 1461)
+ L_PAREN@[1452; 1453) "("
+ BIN_EXPR@[1453; 1460)
+ PATH_EXPR@[1453; 1455)
+ PATH@[1453; 1455)
+ PATH_SEGMENT@[1453; 1455)
+ NAME_REF@[1453; 1455)
+ IDENT@[1453; 1455) "_x"
+ WHITESPACE@[1455; 1456) " "
+ PLUSEQ@[1456; 1458) "+="
+ WHITESPACE@[1458; 1459) " "
+ LITERAL@[1459; 1460)
+ INT_NUMBER@[1459; 1460) "0"
+ R_PAREN@[1460; 1461) ")"
+ WHITESPACE@[1461; 1462) " "
+ EQEQ@[1462; 1464) "=="
+ WHITESPACE@[1464; 1465) " "
+ PAREN_EXPR@[1465; 1473)
+ L_PAREN@[1465; 1466) "("
+ BIN_EXPR@[1466; 1472)
+ PATH_EXPR@[1466; 1468)
+ PATH@[1466; 1468)
+ PATH_SEGMENT@[1466; 1468)
+ NAME_REF@[1466; 1468)
+ IDENT@[1466; 1468) "_x"
+ WHITESPACE@[1468; 1469) " "
+ EQ@[1469; 1470) "="
+ WHITESPACE@[1470; 1471) " "
+ LITERAL@[1471; 1472)
+ INT_NUMBER@[1471; 1472) "0"
+ R_PAREN@[1472; 1473) ")"
+ SEMI@[1473; 1474) ";"
+ WHITESPACE@[1474; 1479) "\n "
+ LET_STMT@[1479; 1537)
+ LET_KW@[1479; 1482) "let"
+ WHITESPACE@[1482; 1483) " "
+ BIND_PAT@[1483; 1485)
+ NAME@[1483; 1485)
+ IDENT@[1483; 1485) "_b"
+ WHITESPACE@[1485; 1486) " "
+ EQ@[1486; 1487) "="
+ WHITESPACE@[1487; 1488) " "
+ BIN_EXPR@[1488; 1536)
+ CALL_EXPR@[1488; 1510)
+ PATH_EXPR@[1488; 1492)
+ PATH@[1488; 1492)
+ PATH_SEGMENT@[1488; 1492)
+ NAME_REF@[1488; 1492)
+ IDENT@[1488; 1492) "swap"
+ ARG_LIST@[1492; 1510)
+ L_PAREN@[1492; 1493) "("
+ REF_EXPR@[1493; 1500)
+ AMP@[1493; 1494) "&"
+ MUT_KW@[1494; 1497) "mut"
+ WHITESPACE@[1497; 1498) " "
+ PATH_EXPR@[1498; 1500)
+ PATH@[1498; 1500)
+ PATH_SEGMENT@[1498; 1500)
+ NAME_REF@[1498; 1500)
+ IDENT@[1498; 1500) "_y"
+ COMMA@[1500; 1501) ","
+ WHITESPACE@[1501; 1502) " "
+ REF_EXPR@[1502; 1509)
+ AMP@[1502; 1503) "&"
+ MUT_KW@[1503; 1506) "mut"
+ WHITESPACE@[1506; 1507) " "
+ PATH_EXPR@[1507; 1509)
+ PATH@[1507; 1509)
+ PATH_SEGMENT@[1507; 1509)
+ NAME_REF@[1507; 1509)
+ IDENT@[1507; 1509) "_z"
+ R_PAREN@[1509; 1510) ")"
+ WHITESPACE@[1510; 1511) " "
+ EQEQ@[1511; 1513) "=="
+ WHITESPACE@[1513; 1514) " "
+ CALL_EXPR@[1514; 1536)
+ PATH_EXPR@[1514; 1518)
+ PATH@[1514; 1518)
+ PATH_SEGMENT@[1514; 1518)
+ NAME_REF@[1514; 1518)
+ IDENT@[1514; 1518) "swap"
+ ARG_LIST@[1518; 1536)
+ L_PAREN@[1518; 1519) "("
+ REF_EXPR@[1519; 1526)
+ AMP@[1519; 1520) "&"
+ MUT_KW@[1520; 1523) "mut"
+ WHITESPACE@[1523; 1524) " "
+ PATH_EXPR@[1524; 1526)
+ PATH@[1524; 1526)
+ PATH_SEGMENT@[1524; 1526)
+ NAME_REF@[1524; 1526)
+ IDENT@[1524; 1526) "_y"
+ COMMA@[1526; 1527) ","
+ WHITESPACE@[1527; 1528) " "
+ REF_EXPR@[1528; 1535)
+ AMP@[1528; 1529) "&"
+ MUT_KW@[1529; 1532) "mut"
+ WHITESPACE@[1532; 1533) " "
+ PATH_EXPR@[1533; 1535)
+ PATH@[1533; 1535)
+ PATH_SEGMENT@[1533; 1535)
+ NAME_REF@[1533; 1535)
+ IDENT@[1533; 1535) "_z"
+ R_PAREN@[1535; 1536) ")"
+ SEMI@[1536; 1537) ";"
+ WHITESPACE@[1537; 1538) "\n"
+ R_CURLY@[1538; 1539) "}"
+ WHITESPACE@[1539; 1541) "\n\n"
+ FN_DEF@[1541; 1741)
+ FN_KW@[1541; 1543) "fn"
+ WHITESPACE@[1543; 1544) " "
+ NAME@[1544; 1557)
+ IDENT@[1544; 1557) "canttouchthis"
+ PARAM_LIST@[1557; 1559)
+ L_PAREN@[1557; 1558) "("
+ R_PAREN@[1558; 1559) ")"
+ WHITESPACE@[1559; 1560) " "
+ RET_TYPE@[1560; 1568)
+ THIN_ARROW@[1560; 1562) "->"
+ WHITESPACE@[1562; 1563) " "
+ PATH_TYPE@[1563; 1568)
+ PATH@[1563; 1568)
+ PATH_SEGMENT@[1563; 1568)
+ NAME_REF@[1563; 1568)
+ IDENT@[1563; 1568) "usize"
+ WHITESPACE@[1568; 1569) " "
+ BLOCK@[1569; 1741)
+ L_CURLY@[1569; 1570) "{"
+ WHITESPACE@[1570; 1575) "\n "
+ FN_DEF@[1575; 1598)
+ FN_KW@[1575; 1577) "fn"
+ WHITESPACE@[1577; 1578) " "
+ NAME@[1578; 1579)
+ IDENT@[1578; 1579) "p"
+ PARAM_LIST@[1579; 1581)
+ L_PAREN@[1579; 1580) "("
+ R_PAREN@[1580; 1581) ")"
+ WHITESPACE@[1581; 1582) " "
+ RET_TYPE@[1582; 1589)
+ THIN_ARROW@[1582; 1584) "->"
+ WHITESPACE@[1584; 1585) " "
+ PATH_TYPE@[1585; 1589)
+ PATH@[1585; 1589)
+ PATH_SEGMENT@[1585; 1589)
+ NAME_REF@[1585; 1589)
+ IDENT@[1585; 1589) "bool"
+ WHITESPACE@[1589; 1590) " "
+ BLOCK@[1590; 1598)
+ L_CURLY@[1590; 1591) "{"
+ WHITESPACE@[1591; 1592) " "
+ LITERAL@[1592; 1596)
+ TRUE_KW@[1592; 1596) "true"
+ WHITESPACE@[1596; 1597) " "
+ R_CURLY@[1597; 1598) "}"
+ WHITESPACE@[1598; 1603) "\n "
+ LET_STMT@[1603; 1648)
+ LET_KW@[1603; 1606) "let"
+ WHITESPACE@[1606; 1607) " "
+ BIND_PAT@[1607; 1609)
+ NAME@[1607; 1609)
+ IDENT@[1607; 1609) "_a"
+ WHITESPACE@[1609; 1610) " "
+ EQ@[1610; 1611) "="
+ WHITESPACE@[1611; 1612) " "
+ PAREN_EXPR@[1612; 1647)
+ L_PAREN@[1612; 1613) "("
+ BIN_EXPR@[1613; 1646)
+ MACRO_CALL@[1613; 1628)
+ PATH@[1613; 1619)
+ PATH_SEGMENT@[1613; 1619)
+ NAME_REF@[1613; 1619)
+ IDENT@[1613; 1619) "assert"
+ EXCL@[1619; 1620) "!"
+ TOKEN_TREE@[1620; 1628)
+ L_PAREN@[1620; 1621) "("
+ TOKEN_TREE@[1621; 1627)
+ L_PAREN@[1621; 1622) "("
+ TRUE_KW@[1622; 1626) "true"
+ R_PAREN@[1626; 1627) ")"
+ R_PAREN@[1627; 1628) ")"
+ WHITESPACE@[1628; 1629) " "
+ EQEQ@[1629; 1631) "=="
+ WHITESPACE@[1631; 1632) " "
+ PAREN_EXPR@[1632; 1646)
+ L_PAREN@[1632; 1633) "("
+ MACRO_CALL@[1633; 1645)
+ PATH@[1633; 1639)
+ PATH_SEGMENT@[1633; 1639)
+ NAME_REF@[1633; 1639)
+ IDENT@[1633; 1639) "assert"
+ EXCL@[1639; 1640) "!"
+ TOKEN_TREE@[1640; 1645)
+ L_PAREN@[1640; 1641) "("
+ IDENT@[1641; 1642) "p"
+ TOKEN_TREE@[1642; 1644)
+ L_PAREN@[1642; 1643) "("
+ R_PAREN@[1643; 1644) ")"
+ R_PAREN@[1644; 1645) ")"
+ R_PAREN@[1645; 1646) ")"
+ R_PAREN@[1646; 1647) ")"
+ SEMI@[1647; 1648) ";"
+ WHITESPACE@[1648; 1653) "\n "
+ LET_STMT@[1653; 1685)
+ LET_KW@[1653; 1656) "let"
+ WHITESPACE@[1656; 1657) " "
+ BIND_PAT@[1657; 1659)
+ NAME@[1657; 1659)
+ IDENT@[1657; 1659) "_c"
+ WHITESPACE@[1659; 1660) " "
+ EQ@[1660; 1661) "="
+ WHITESPACE@[1661; 1662) " "
+ PAREN_EXPR@[1662; 1684)
+ L_PAREN@[1662; 1663) "("
+ BIN_EXPR@[1663; 1683)
+ MACRO_CALL@[1663; 1677)
+ PATH@[1663; 1669)
+ PATH_SEGMENT@[1663; 1669)
+ NAME_REF@[1663; 1669)
+ IDENT@[1663; 1669) "assert"
+ EXCL@[1669; 1670) "!"
+ TOKEN_TREE@[1670; 1677)
+ L_PAREN@[1670; 1671) "("
+ TOKEN_TREE@[1671; 1676)
+ L_PAREN@[1671; 1672) "("
+ IDENT@[1672; 1673) "p"
+ TOKEN_TREE@[1673; 1675)
+ L_PAREN@[1673; 1674) "("
+ R_PAREN@[1674; 1675) ")"
+ R_PAREN@[1675; 1676) ")"
+ R_PAREN@[1676; 1677) ")"
+ WHITESPACE@[1677; 1678) " "
+ EQEQ@[1678; 1680) "=="
+ WHITESPACE@[1680; 1681) " "
+ TUPLE_EXPR@[1681; 1683)
+ L_PAREN@[1681; 1682) "("
+ R_PAREN@[1682; 1683) ")"
+ R_PAREN@[1683; 1684) ")"
+ SEMI@[1684; 1685) ";"
+ WHITESPACE@[1685; 1690) "\n "
+ LET_STMT@[1690; 1739)
+ LET_KW@[1690; 1693) "let"
+ WHITESPACE@[1693; 1694) " "
+ BIND_PAT@[1694; 1696)
+ NAME@[1694; 1696)
+ IDENT@[1694; 1696) "_b"
+ COLON@[1696; 1697) ":"
+ WHITESPACE@[1697; 1698) " "
+ PATH_TYPE@[1698; 1702)
+ PATH@[1698; 1702)
+ PATH_SEGMENT@[1698; 1702)
+ NAME_REF@[1698; 1702)
+ IDENT@[1698; 1702) "bool"
+ WHITESPACE@[1702; 1703) " "
+ EQ@[1703; 1704) "="
+ WHITESPACE@[1704; 1705) " "
+ PAREN_EXPR@[1705; 1738)
+ L_PAREN@[1705; 1706) "("
+ BIN_EXPR@[1706; 1737)
+ MACRO_CALL@[1706; 1723)
+ PATH@[1706; 1713)
+ PATH_SEGMENT@[1706; 1713)
+ NAME_REF@[1706; 1713)
+ IDENT@[1706; 1713) "println"
+ EXCL@[1713; 1714) "!"
+ TOKEN_TREE@[1714; 1723)
+ L_PAREN@[1714; 1715) "("
+ STRING@[1715; 1719) "\"{}\""
+ COMMA@[1719; 1720) ","
+ WHITESPACE@[1720; 1721) " "
+ INT_NUMBER@[1721; 1722) "0"
+ R_PAREN@[1722; 1723) ")"
+ WHITESPACE@[1723; 1724) " "
+ EQEQ@[1724; 1726) "=="
+ WHITESPACE@[1726; 1727) " "
+ PAREN_EXPR@[1727; 1737)
+ L_PAREN@[1727; 1728) "("
+ RETURN_EXPR@[1728; 1736)
+ RETURN_KW@[1728; 1734) "return"
+ WHITESPACE@[1734; 1735) " "
+ LITERAL@[1735; 1736)
+ INT_NUMBER@[1735; 1736) "0"
+ R_PAREN@[1736; 1737) ")"
+ R_PAREN@[1737; 1738) ")"
+ SEMI@[1738; 1739) ";"
+ WHITESPACE@[1739; 1740) "\n"
+ R_CURLY@[1740; 1741) "}"
+ WHITESPACE@[1741; 1743) "\n\n"
+ FN_DEF@[1743; 1904)
+ FN_KW@[1743; 1745) "fn"
+ WHITESPACE@[1745; 1746) " "
+ NAME@[1746; 1755)
+ IDENT@[1746; 1755) "angrydome"
+ PARAM_LIST@[1755; 1757)
+ L_PAREN@[1755; 1756) "("
+ R_PAREN@[1756; 1757) ")"
+ WHITESPACE@[1757; 1758) " "
+ BLOCK@[1758; 1904)
+ L_CURLY@[1758; 1759) "{"
+ WHITESPACE@[1759; 1764) "\n "
+ EXPR_STMT@[1764; 1785)
+ LOOP_EXPR@[1764; 1785)
+ LOOP_KW@[1764; 1768) "loop"
+ WHITESPACE@[1768; 1769) " "
+ BLOCK@[1769; 1785)
+ L_CURLY@[1769; 1770) "{"
+ WHITESPACE@[1770; 1771) " "
+ IF_EXPR@[1771; 1783)
+ IF_KW@[1771; 1773) "if"
+ WHITESPACE@[1773; 1774) " "
+ CONDITION@[1774; 1779)
+ BREAK_EXPR@[1774; 1779)
+ BREAK_KW@[1774; 1779) "break"
+ WHITESPACE@[1779; 1780) " "
+ BLOCK@[1780; 1783)
+ L_CURLY@[1780; 1781) "{"
+ WHITESPACE@[1781; 1782) " "
+ R_CURLY@[1782; 1783) "}"
+ WHITESPACE@[1783; 1784) " "
+ R_CURLY@[1784; 1785) "}"
+ WHITESPACE@[1785; 1790) "\n "
+ LET_STMT@[1790; 1804)
+ LET_KW@[1790; 1793) "let"
+ WHITESPACE@[1793; 1794) " "
+ BIND_PAT@[1794; 1799)
+ MUT_KW@[1794; 1797) "mut"
+ WHITESPACE@[1797; 1798) " "
+ NAME@[1798; 1799)
+ IDENT@[1798; 1799) "i"
+ WHITESPACE@[1799; 1800) " "
+ EQ@[1800; 1801) "="
+ WHITESPACE@[1801; 1802) " "
+ LITERAL@[1802; 1803)
+ INT_NUMBER@[1802; 1803) "0"
+ SEMI@[1803; 1804) ";"
+ WHITESPACE@[1804; 1809) "\n "
+ LOOP_EXPR@[1809; 1902)
+ LOOP_KW@[1809; 1813) "loop"
+ WHITESPACE@[1813; 1814) " "
+ BLOCK@[1814; 1902)
+ L_CURLY@[1814; 1815) "{"
+ WHITESPACE@[1815; 1816) " "
+ EXPR_STMT@[1816; 1823)
+ BIN_EXPR@[1816; 1822)
+ PATH_EXPR@[1816; 1817)
+ PATH@[1816; 1817)
+ PATH_SEGMENT@[1816; 1817)
+ NAME_REF@[1816; 1817)
+ IDENT@[1816; 1817) "i"
+ WHITESPACE@[1817; 1818) " "
+ PLUSEQ@[1818; 1820) "+="
+ WHITESPACE@[1820; 1821) " "
+ LITERAL@[1821; 1822)
+ INT_NUMBER@[1821; 1822) "1"
+ SEMI@[1822; 1823) ";"
+ WHITESPACE@[1823; 1824) " "
+ EXPR_STMT@[1824; 1887)
+ IF_EXPR@[1824; 1887)
+ IF_KW@[1824; 1826) "if"
+ WHITESPACE@[1826; 1827) " "
+ CONDITION@[1827; 1833)
+ BIN_EXPR@[1827; 1833)
+ PATH_EXPR@[1827; 1828)
+ PATH@[1827; 1828)
+ PATH_SEGMENT@[1827; 1828)
+ NAME_REF@[1827; 1828)
+ IDENT@[1827; 1828) "i"
+ WHITESPACE@[1828; 1829) " "
+ EQEQ@[1829; 1831) "=="
+ WHITESPACE@[1831; 1832) " "
+ LITERAL@[1832; 1833)
+ INT_NUMBER@[1832; 1833) "1"
+ WHITESPACE@[1833; 1834) " "
+ BLOCK@[1834; 1887)
+ L_CURLY@[1834; 1835) "{"
+ WHITESPACE@[1835; 1836) " "
+ MATCH_EXPR@[1836; 1885)
+ MATCH_KW@[1836; 1841) "match"
+ WHITESPACE@[1841; 1842) " "
+ PAREN_EXPR@[1842; 1852)
+ L_PAREN@[1842; 1843) "("
+ CONTINUE_EXPR@[1843; 1851)
+ CONTINUE_KW@[1843; 1851) "continue"
+ R_PAREN@[1851; 1852) ")"
+ WHITESPACE@[1852; 1853) " "
+ MATCH_ARM_LIST@[1853; 1885)
+ L_CURLY@[1853; 1854) "{"
+ WHITESPACE@[1854; 1855) " "
+ MATCH_ARM@[1855; 1863)
+ LITERAL_PAT@[1855; 1856)
+ LITERAL@[1855; 1856)
+ INT_NUMBER@[1855; 1856) "1"
+ WHITESPACE@[1856; 1857) " "
+ FAT_ARROW@[1857; 1859) "=>"
+ WHITESPACE@[1859; 1860) " "
+ BLOCK_EXPR@[1860; 1863)
+ BLOCK@[1860; 1863)
+ L_CURLY@[1860; 1861) "{"
+ WHITESPACE@[1861; 1862) " "
+ R_CURLY@[1862; 1863) "}"
+ COMMA@[1863; 1864) ","
+ WHITESPACE@[1864; 1865) " "
+ MATCH_ARM@[1865; 1883)
+ PLACEHOLDER_PAT@[1865; 1866)
+ UNDERSCORE@[1865; 1866) "_"
+ WHITESPACE@[1866; 1867) " "
+ FAT_ARROW@[1867; 1869) "=>"
+ WHITESPACE@[1869; 1870) " "
+ MACRO_CALL@[1870; 1883)
+ PATH@[1870; 1875)
+ PATH_SEGMENT@[1870; 1875)
+ NAME_REF@[1870; 1875)
+ IDENT@[1870; 1875) "panic"
+ EXCL@[1875; 1876) "!"
+ TOKEN_TREE@[1876; 1883)
+ L_PAREN@[1876; 1877) "("
+ STRING@[1877; 1882) "\"wat\""
+ R_PAREN@[1882; 1883) ")"
+ WHITESPACE@[1883; 1884) " "
+ R_CURLY@[1884; 1885) "}"
+ WHITESPACE@[1885; 1886) " "
+ R_CURLY@[1886; 1887) "}"
+ WHITESPACE@[1887; 1894) "\n "
+ EXPR_STMT@[1894; 1900)
+ BREAK_EXPR@[1894; 1899)
+ BREAK_KW@[1894; 1899) "break"
+ SEMI@[1899; 1900) ";"
+ WHITESPACE@[1900; 1901) " "
+ R_CURLY@[1901; 1902) "}"
+ WHITESPACE@[1902; 1903) "\n"
+ R_CURLY@[1903; 1904) "}"
+ WHITESPACE@[1904; 1906) "\n\n"
+ FN_DEF@[1906; 1960)
+ FN_KW@[1906; 1908) "fn"
+ WHITESPACE@[1908; 1909) " "
+ NAME@[1909; 1921)
+ IDENT@[1909; 1921) "evil_lincoln"
+ PARAM_LIST@[1921; 1923)
+ L_PAREN@[1921; 1922) "("
+ R_PAREN@[1922; 1923) ")"
+ WHITESPACE@[1923; 1924) " "
+ BLOCK@[1924; 1960)
+ L_CURLY@[1924; 1925) "{"
+ WHITESPACE@[1925; 1926) " "
+ LET_STMT@[1926; 1958)
+ LET_KW@[1926; 1929) "let"
+ WHITESPACE@[1929; 1930) " "
+ BIND_PAT@[1930; 1935)
+ NAME@[1930; 1935)
+ IDENT@[1930; 1935) "_evil"
+ WHITESPACE@[1935; 1936) " "
+ EQ@[1936; 1937) "="
+ WHITESPACE@[1937; 1938) " "
+ MACRO_CALL@[1938; 1957)
+ PATH@[1938; 1945)
+ PATH_SEGMENT@[1938; 1945)
+ NAME_REF@[1938; 1945)
+ IDENT@[1938; 1945) "println"
+ EXCL@[1945; 1946) "!"
+ TOKEN_TREE@[1946; 1957)
+ L_PAREN@[1946; 1947) "("
+ STRING@[1947; 1956) "\"lincoln\""
+ R_PAREN@[1956; 1957) ")"
+ SEMI@[1957; 1958) ";"
+ WHITESPACE@[1958; 1959) " "
+ R_CURLY@[1959; 1960) "}"
+ WHITESPACE@[1960; 1962) "\n\n"
+ FN_DEF@[1962; 2198)
+ FN_KW@[1962; 1964) "fn"
+ WHITESPACE@[1964; 1965) " "
+ NAME@[1965; 1969)
+ IDENT@[1965; 1969) "dots"
+ PARAM_LIST@[1969; 1971)
+ L_PAREN@[1969; 1970) "("
+ R_PAREN@[1970; 1971) ")"
+ WHITESPACE@[1971; 1972) " "
+ BLOCK@[1972; 2198)
+ L_CURLY@[1972; 1973) "{"
+ WHITESPACE@[1973; 1978) "\n "
+ EXPR_STMT@[1978; 2196)
+ MACRO_CALL@[1978; 2195)
+ PATH@[1978; 1987)
+ PATH_SEGMENT@[1978; 1987)
+ NAME_REF@[1978; 1987)
+ IDENT@[1978; 1987) "assert_eq"
+ EXCL@[1987; 1988) "!"
+ TOKEN_TREE@[1988; 2195)
+ L_PAREN@[1988; 1989) "("
+ IDENT@[1989; 1995) "String"
+ COLON@[1995; 1996) ":"
+ COLON@[1996; 1997) ":"
+ IDENT@[1997; 2001) "from"
+ TOKEN_TREE@[2001; 2055)
+ L_PAREN@[2001; 2002) "("
+ STRING@[2002; 2054) "\".................... ..."
+ R_PAREN@[2054; 2055) ")"
+ COMMA@[2055; 2056) ","
+ WHITESPACE@[2056; 2072) "\n "
+ IDENT@[2072; 2078) "format"
+ EXCL@[2078; 2079) "!"
+ TOKEN_TREE@[2079; 2194)
+ L_PAREN@[2079; 2080) "("
+ STRING@[2080; 2086) "\"{:?}\""
+ COMMA@[2086; 2087) ","
+ WHITESPACE@[2087; 2088) " "
+ DOT@[2088; 2089) "."
+ DOT@[2089; 2090) "."
+ WHITESPACE@[2090; 2091) " "
+ DOT@[2091; 2092) "."
+ DOT@[2092; 2093) "."
+ WHITESPACE@[2093; 2094) " "
+ DOT@[2094; 2095) "."
+ DOT@[2095; 2096) "."
+ WHITESPACE@[2096; 2097) " "
+ DOT@[2097; 2098) "."
+ DOT@[2098; 2099) "."
+ WHITESPACE@[2099; 2100) " "
+ DOT@[2100; 2101) "."
+ DOT@[2101; 2102) "."
+ WHITESPACE@[2102; 2103) " "
+ DOT@[2103; 2104) "."
+ DOT@[2104; 2105) "."
+ WHITESPACE@[2105; 2106) " "
+ DOT@[2106; 2107) "."
+ DOT@[2107; 2108) "."
+ WHITESPACE@[2108; 2109) " "
+ DOT@[2109; 2110) "."
+ DOT@[2110; 2111) "."
+ WHITESPACE@[2111; 2112) " "
+ DOT@[2112; 2113) "."
+ DOT@[2113; 2114) "."
+ WHITESPACE@[2114; 2115) " "
+ DOT@[2115; 2116) "."
+ DOT@[2116; 2117) "."
+ WHITESPACE@[2117; 2118) " "
+ DOT@[2118; 2119) "."
+ DOT@[2119; 2120) "."
+ WHITESPACE@[2120; 2121) " "
+ DOT@[2121; 2122) "."
+ DOT@[2122; 2123) "."
+ WHITESPACE@[2123; 2124) " "
+ DOT@[2124; 2125) "."
+ DOT@[2125; 2126) "."
+ WHITESPACE@[2126; 2158) "\n ..."
+ DOT@[2158; 2159) "."
+ DOT@[2159; 2160) "."
+ WHITESPACE@[2160; 2161) " "
+ DOT@[2161; 2162) "."
+ DOT@[2162; 2163) "."
+ WHITESPACE@[2163; 2164) " "
+ DOT@[2164; 2165) "."
+ DOT@[2165; 2166) "."
+ WHITESPACE@[2166; 2167) " "
+ DOT@[2167; 2168) "."
+ DOT@[2168; 2169) "."
+ WHITESPACE@[2169; 2170) " "
+ DOT@[2170; 2171) "."
+ DOT@[2171; 2172) "."
+ WHITESPACE@[2172; 2173) " "
+ DOT@[2173; 2174) "."
+ DOT@[2174; 2175) "."
+ WHITESPACE@[2175; 2176) " "
+ DOT@[2176; 2177) "."
+ DOT@[2177; 2178) "."
+ WHITESPACE@[2178; 2179) " "
+ DOT@[2179; 2180) "."
+ DOT@[2180; 2181) "."
+ WHITESPACE@[2181; 2182) " "
+ DOT@[2182; 2183) "."
+ DOT@[2183; 2184) "."
+ WHITESPACE@[2184; 2185) " "
+ DOT@[2185; 2186) "."
+ DOT@[2186; 2187) "."
+ WHITESPACE@[2187; 2188) " "
+ DOT@[2188; 2189) "."
+ DOT@[2189; 2190) "."
+ WHITESPACE@[2190; 2191) " "
+ DOT@[2191; 2192) "."
+ DOT@[2192; 2193) "."
+ R_PAREN@[2193; 2194) ")"
+ R_PAREN@[2194; 2195) ")"
+ SEMI@[2195; 2196) ";"
+ WHITESPACE@[2196; 2197) "\n"
+ R_CURLY@[2197; 2198) "}"
+ WHITESPACE@[2198; 2200) "\n\n"
+ FN_DEF@[2200; 2693)
+ FN_KW@[2200; 2202) "fn"
+ WHITESPACE@[2202; 2203) " "
+ NAME@[2203; 2205)
+ IDENT@[2203; 2205) "u8"
+ PARAM_LIST@[2205; 2213)
+ L_PAREN@[2205; 2206) "("
+ PARAM@[2206; 2212)
+ BIND_PAT@[2206; 2208)
+ NAME@[2206; 2208)
+ IDENT@[2206; 2208) "u8"
+ COLON@[2208; 2209) ":"
+ WHITESPACE@[2209; 2210) " "
+ PATH_TYPE@[2210; 2212)
+ PATH@[2210; 2212)
+ PATH_SEGMENT@[2210; 2212)
+ NAME_REF@[2210; 2212)
+ IDENT@[2210; 2212) "u8"
+ R_PAREN@[2212; 2213) ")"
+ WHITESPACE@[2213; 2214) " "
+ BLOCK@[2214; 2693)
+ L_CURLY@[2214; 2215) "{"
+ WHITESPACE@[2215; 2220) "\n "
+ IF_EXPR@[2220; 2691)
+ IF_KW@[2220; 2222) "if"
+ WHITESPACE@[2222; 2223) " "
+ CONDITION@[2223; 2232)
+ BIN_EXPR@[2223; 2232)
+ PATH_EXPR@[2223; 2225)
+ PATH@[2223; 2225)
+ PATH_SEGMENT@[2223; 2225)
+ NAME_REF@[2223; 2225)
+ IDENT@[2223; 2225) "u8"
+ WHITESPACE@[2225; 2226) " "
+ NEQ@[2226; 2228) "!="
+ WHITESPACE@[2228; 2229) " "
+ LITERAL@[2229; 2232)
+ INT_NUMBER@[2229; 2232) "0u8"
+ WHITESPACE@[2232; 2233) " "
+ BLOCK@[2233; 2691)
+ L_CURLY@[2233; 2234) "{"
+ WHITESPACE@[2234; 2243) "\n "
+ EXPR_STMT@[2243; 2685)
+ MACRO_CALL@[2243; 2684)
+ PATH@[2243; 2252)
+ PATH_SEGMENT@[2243; 2252)
+ NAME_REF@[2243; 2252)
+ IDENT@[2243; 2252) "assert_eq"
+ EXCL@[2252; 2253) "!"
+ TOKEN_TREE@[2253; 2684)
+ L_PAREN@[2253; 2254) "("
+ INT_NUMBER@[2254; 2257) "8u8"
+ COMMA@[2257; 2258) ","
+ WHITESPACE@[2258; 2259) " "
+ TOKEN_TREE@[2259; 2683)
+ L_CURLY@[2259; 2260) "{"
+ WHITESPACE@[2260; 2273) "\n "
+ IDENT@[2273; 2284) "macro_rules"
+ EXCL@[2284; 2285) "!"
+ WHITESPACE@[2285; 2286) " "
+ IDENT@[2286; 2288) "u8"
+ WHITESPACE@[2288; 2289) " "
+ TOKEN_TREE@[2289; 2567)
+ L_CURLY@[2289; 2290) "{"
+ WHITESPACE@[2290; 2307) "\n "
+ TOKEN_TREE@[2307; 2311)
+ L_PAREN@[2307; 2308) "("
+ IDENT@[2308; 2310) "u8"
+ R_PAREN@[2310; 2311) ")"
+ WHITESPACE@[2311; 2312) " "
+ EQ@[2312; 2313) "="
+ R_ANGLE@[2313; 2314) ">"
+ WHITESPACE@[2314; 2315) " "
+ TOKEN_TREE@[2315; 2552)
+ L_CURLY@[2315; 2316) "{"
+ WHITESPACE@[2316; 2337) "\n "
+ MOD_KW@[2337; 2340) "mod"
+ WHITESPACE@[2340; 2341) " "
+ IDENT@[2341; 2343) "u8"
+ WHITESPACE@[2343; 2344) " "
+ TOKEN_TREE@[2344; 2534)
+ L_CURLY@[2344; 2345) "{"
+ WHITESPACE@[2345; 2370) "\n ..."
+ PUB_KW@[2370; 2373) "pub"
+ WHITESPACE@[2373; 2374) " "
+ FN_KW@[2374; 2376) "fn"
+ WHITESPACE@[2376; 2377) " "
+ IDENT@[2377; 2379) "u8"
+ L_ANGLE@[2379; 2380) "<"
+ LIFETIME@[2380; 2383) "\'u8"
+ COLON@[2383; 2384) ":"
+ WHITESPACE@[2384; 2385) " "
+ LIFETIME@[2385; 2388) "\'u8"
+ WHITESPACE@[2388; 2389) " "
+ PLUS@[2389; 2390) "+"
+ WHITESPACE@[2390; 2391) " "
+ LIFETIME@[2391; 2394) "\'u8"
+ R_ANGLE@[2394; 2395) ">"
+ TOKEN_TREE@[2395; 2408)
+ L_PAREN@[2395; 2396) "("
+ IDENT@[2396; 2398) "u8"
+ COLON@[2398; 2399) ":"
+ WHITESPACE@[2399; 2400) " "
+ AMP@[2400; 2401) "&"
+ LIFETIME@[2401; 2404) "\'u8"
+ WHITESPACE@[2404; 2405) " "
+ IDENT@[2405; 2407) "u8"
+ R_PAREN@[2407; 2408) ")"
+ WHITESPACE@[2408; 2409) " "
+ MINUS@[2409; 2410) "-"
+ R_ANGLE@[2410; 2411) ">"
+ WHITESPACE@[2411; 2412) " "
+ AMP@[2412; 2413) "&"
+ LIFETIME@[2413; 2416) "\'u8"
+ WHITESPACE@[2416; 2417) " "
+ IDENT@[2417; 2419) "u8"
+ WHITESPACE@[2419; 2420) " "
+ TOKEN_TREE@[2420; 2512)
+ L_CURLY@[2420; 2421) "{"
+ WHITESPACE@[2421; 2450) "\n ..."
+ STRING@[2450; 2454) "\"u8\""
+ SEMI@[2454; 2455) ";"
+ WHITESPACE@[2455; 2484) "\n ..."
+ IDENT@[2484; 2486) "u8"
+ WHITESPACE@[2486; 2511) "\n ..."
+ R_CURLY@[2511; 2512) "}"
+ WHITESPACE@[2512; 2533) "\n "
+ R_CURLY@[2533; 2534) "}"
+ WHITESPACE@[2534; 2551) "\n "
+ R_CURLY@[2551; 2552) "}"
+ SEMI@[2552; 2553) ";"
+ WHITESPACE@[2553; 2566) "\n "
+ R_CURLY@[2566; 2567) "}"
+ WHITESPACE@[2567; 2581) "\n\n "
+ IDENT@[2581; 2583) "u8"
+ EXCL@[2583; 2584) "!"
+ TOKEN_TREE@[2584; 2588)
+ L_PAREN@[2584; 2585) "("
+ IDENT@[2585; 2587) "u8"
+ R_PAREN@[2587; 2588) ")"
+ SEMI@[2588; 2589) ";"
+ WHITESPACE@[2589; 2602) "\n "
+ LET_KW@[2602; 2605) "let"
+ WHITESPACE@[2605; 2606) " "
+ AMP@[2606; 2607) "&"
+ IDENT@[2607; 2609) "u8"
+ COLON@[2609; 2610) ":"
+ WHITESPACE@[2610; 2611) " "
+ AMP@[2611; 2612) "&"
+ IDENT@[2612; 2614) "u8"
+ WHITESPACE@[2614; 2615) " "
+ EQ@[2615; 2616) "="
+ WHITESPACE@[2616; 2617) " "
+ IDENT@[2617; 2619) "u8"
+ COLON@[2619; 2620) ":"
+ COLON@[2620; 2621) ":"
+ IDENT@[2621; 2623) "u8"
+ TOKEN_TREE@[2623; 2629)
+ L_PAREN@[2623; 2624) "("
+ AMP@[2624; 2625) "&"
+ INT_NUMBER@[2625; 2628) "8u8"
+ R_PAREN@[2628; 2629) ")"
+ SEMI@[2629; 2630) ";"
+ WHITESPACE@[2630; 2643) "\n "
+ CRATE_KW@[2643; 2648) "crate"
+ COLON@[2648; 2649) ":"
+ COLON@[2649; 2650) ":"
+ IDENT@[2650; 2652) "u8"
+ TOKEN_TREE@[2652; 2657)
+ L_PAREN@[2652; 2653) "("
+ INT_NUMBER@[2653; 2656) "0u8"
+ R_PAREN@[2656; 2657) ")"
+ SEMI@[2657; 2658) ";"
+ WHITESPACE@[2658; 2671) "\n "
+ IDENT@[2671; 2673) "u8"
+ WHITESPACE@[2673; 2682) "\n "
+ R_CURLY@[2682; 2683) "}"
+ R_PAREN@[2683; 2684) ")"
+ SEMI@[2684; 2685) ";"
+ WHITESPACE@[2685; 2690) "\n "
+ R_CURLY@[2690; 2691) "}"
+ WHITESPACE@[2691; 2692) "\n"
+ R_CURLY@[2692; 2693) "}"
+ WHITESPACE@[2693; 2695) "\n\n"
+ FN_DEF@[2695; 2832)
+ FN_KW@[2695; 2697) "fn"
+ WHITESPACE@[2697; 2698) " "
+ NAME@[2698; 2703)
+ IDENT@[2698; 2703) "fishy"
+ PARAM_LIST@[2703; 2705)
+ L_PAREN@[2703; 2704) "("
+ R_PAREN@[2704; 2705) ")"
+ WHITESPACE@[2705; 2706) " "
+ BLOCK@[2706; 2832)
+ L_CURLY@[2706; 2707) "{"
+ WHITESPACE@[2707; 2712) "\n "
+ EXPR_STMT@[2712; 2830)
+ MACRO_CALL@[2712; 2829)
+ PATH@[2712; 2721)
+ PATH_SEGMENT@[2712; 2721)
+ NAME_REF@[2712; 2721)
+ IDENT@[2712; 2721) "assert_eq"
+ EXCL@[2721; 2722) "!"
+ TOKEN_TREE@[2722; 2829)
+ L_PAREN@[2722; 2723) "("
+ IDENT@[2723; 2729) "String"
+ COLON@[2729; 2730) ":"
+ COLON@[2730; 2731) ":"
+ IDENT@[2731; 2735) "from"
+ TOKEN_TREE@[2735; 2742)
+ L_PAREN@[2735; 2736) "("
+ STRING@[2736; 2741) "\"><>\""
+ R_PAREN@[2741; 2742) ")"
+ COMMA@[2742; 2743) ","
+ WHITESPACE@[2743; 2759) "\n "
+ IDENT@[2759; 2765) "String"
+ COLON@[2765; 2766) ":"
+ COLON@[2766; 2767) ":"
+ L_ANGLE@[2767; 2768) "<"
+ R_ANGLE@[2768; 2769) ">"
+ COLON@[2769; 2770) ":"
+ COLON@[2770; 2771) ":"
+ IDENT@[2771; 2775) "from"
+ COLON@[2775; 2776) ":"
+ COLON@[2776; 2777) ":"
+ L_ANGLE@[2777; 2778) "<"
+ R_ANGLE@[2778; 2779) ">"
+ TOKEN_TREE@[2779; 2786)
+ L_PAREN@[2779; 2780) "("
+ STRING@[2780; 2785) "\"><>\""
+ R_PAREN@[2785; 2786) ")"
+ DOT@[2786; 2787) "."
+ IDENT@[2787; 2792) "chars"
+ COLON@[2792; 2793) ":"
+ COLON@[2793; 2794) ":"
+ L_ANGLE@[2794; 2795) "<"
+ R_ANGLE@[2795; 2796) ">"
+ TOKEN_TREE@[2796; 2798)
+ L_PAREN@[2796; 2797) "("
+ R_PAREN@[2797; 2798) ")"
+ DOT@[2798; 2799) "."
+ IDENT@[2799; 2802) "rev"
+ COLON@[2802; 2803) ":"
+ COLON@[2803; 2804) ":"
+ L_ANGLE@[2804; 2805) "<"
+ R_ANGLE@[2805; 2806) ">"
+ TOKEN_TREE@[2806; 2808)
+ L_PAREN@[2806; 2807) "("
+ R_PAREN@[2807; 2808) ")"
+ DOT@[2808; 2809) "."
+ IDENT@[2809; 2816) "collect"
+ COLON@[2816; 2817) ":"
+ COLON@[2817; 2818) ":"
+ L_ANGLE@[2818; 2819) "<"
+ IDENT@[2819; 2825) "String"
+ R_ANGLE@[2825; 2826) ">"
+ TOKEN_TREE@[2826; 2828)
+ L_PAREN@[2826; 2827) "("
+ R_PAREN@[2827; 2828) ")"
+ R_PAREN@[2828; 2829) ")"
+ SEMI@[2829; 2830) ";"
+ WHITESPACE@[2830; 2831) "\n"
+ R_CURLY@[2831; 2832) "}"
+ WHITESPACE@[2832; 2834) "\n\n"
+ FN_DEF@[2834; 2906)
+ FN_KW@[2834; 2836) "fn"
+ WHITESPACE@[2836; 2837) " "
+ NAME@[2837; 2842)
+ IDENT@[2837; 2842) "union"
+ PARAM_LIST@[2842; 2844)
+ L_PAREN@[2842; 2843) "("
+ R_PAREN@[2843; 2844) ")"
+ WHITESPACE@[2844; 2845) " "
+ BLOCK@[2845; 2906)
+ L_CURLY@[2845; 2846) "{"
+ WHITESPACE@[2846; 2851) "\n "
+ STRUCT_DEF@[2851; 2904)
+ UNION_KW@[2851; 2856) "union"
+ WHITESPACE@[2856; 2857) " "
+ NAME@[2857; 2862)
+ IDENT@[2857; 2862) "union"
+ TYPE_PARAM_LIST@[2862; 2870)
+ L_ANGLE@[2862; 2863) "<"
+ LIFETIME_PARAM@[2863; 2869)
+ LIFETIME@[2863; 2869) "\'union"
+ R_ANGLE@[2869; 2870) ">"
+ WHITESPACE@[2870; 2871) " "
+ NAMED_FIELD_DEF_LIST@[2871; 2904)
+ L_CURLY@[2871; 2872) "{"
+ WHITESPACE@[2872; 2873) " "
+ NAMED_FIELD_DEF@[2873; 2901)
+ NAME@[2873; 2878)
+ IDENT@[2873; 2878) "union"
+ COLON@[2878; 2879) ":"
+ WHITESPACE@[2879; 2880) " "
+ REFERENCE_TYPE@[2880; 2901)
+ AMP@[2880; 2881) "&"
+ LIFETIME@[2881; 2887) "\'union"
+ WHITESPACE@[2887; 2888) " "
+ PATH_TYPE@[2888; 2901)
+ PATH@[2888; 2901)
+ PATH_SEGMENT@[2888; 2901)
+ NAME_REF@[2888; 2893)
+ IDENT@[2888; 2893) "union"
+ TYPE_ARG_LIST@[2893; 2901)
+ L_ANGLE@[2893; 2894) "<"
+ LIFETIME_ARG@[2894; 2900)
+ LIFETIME@[2894; 2900) "\'union"
+ R_ANGLE@[2900; 2901) ">"
+ COMMA@[2901; 2902) ","
+ WHITESPACE@[2902; 2903) " "
+ R_CURLY@[2903; 2904) "}"
+ WHITESPACE@[2904; 2905) "\n"
+ R_CURLY@[2905; 2906) "}"
+ WHITESPACE@[2906; 2908) "\n\n"
+ FN_DEF@[2908; 3042)
+ FN_KW@[2908; 2910) "fn"
+ WHITESPACE@[2910; 2911) " "
+ NAME@[2911; 2929)
+ IDENT@[2911; 2929) "special_characters"
+ PARAM_LIST@[2929; 2931)
+ L_PAREN@[2929; 2930) "("
+ R_PAREN@[2930; 2931) ")"
+ WHITESPACE@[2931; 2932) " "
+ BLOCK@[2932; 3042)
+ L_CURLY@[2932; 2933) "{"
+ WHITESPACE@[2933; 2938) "\n "
+ LET_STMT@[2938; 3021)
+ LET_KW@[2938; 2941) "let"
+ WHITESPACE@[2941; 2942) " "
+ BIND_PAT@[2942; 2945)
+ NAME@[2942; 2945)
+ IDENT@[2942; 2945) "val"
+ WHITESPACE@[2945; 2946) " "
+ EQ@[2946; 2947) "="
+ WHITESPACE@[2947; 2948) " "
+ PREFIX_EXPR@[2948; 3013)
+ EXCL@[2948; 2949) "!"
+ PAREN_EXPR@[2949; 3013)
+ L_PAREN@[2949; 2950) "("
+ BIN_EXPR@[2950; 3012)
+ CALL_EXPR@[2950; 2995)
+ PAREN_EXPR@[2950; 2971)
+ L_PAREN@[2950; 2951) "("
+ LAMBDA_EXPR@[2951; 2970)
+ PARAM_LIST@[2951; 2968)
+ PIPE@[2951; 2952) "|"
+ PARAM@[2952; 2962)
+ TUPLE_PAT@[2952; 2956)
+ L_PAREN@[2952; 2953) "("
+ DOTDOT@[2953; 2955) ".."
+ R_PAREN@[2955; 2956) ")"
+ COLON@[2956; 2957) ":"
+ TUPLE_TYPE@[2957; 2962)
+ L_PAREN@[2957; 2958) "("
+ PLACEHOLDER_TYPE@[2958; 2959)
+ UNDERSCORE@[2958; 2959) "_"
+ COMMA@[2959; 2960) ","
+ PLACEHOLDER_TYPE@[2960; 2961)
+ UNDERSCORE@[2960; 2961) "_"
+ R_PAREN@[2961; 2962) ")"
+ COMMA@[2962; 2963) ","
+ PARAM@[2963; 2967)
+ BIND_PAT@[2963; 2967)
+ NAME@[2963; 2965)
+ IDENT@[2963; 2965) "__"
+ AT@[2965; 2966) "@"
+ PLACEHOLDER_PAT@[2966; 2967)
+ UNDERSCORE@[2966; 2967) "_"
+ PIPE@[2967; 2968) "|"
+ PATH_EXPR@[2968; 2970)
+ PATH@[2968; 2970)
+ PATH_SEGMENT@[2968; 2970)
+ NAME_REF@[2968; 2970)
+ IDENT@[2968; 2970) "__"
+ R_PAREN@[2970; 2971) ")"
+ ARG_LIST@[2971; 2995)
+ L_PAREN@[2971; 2972) "("
+ TUPLE_EXPR@[2972; 2987)
+ L_PAREN@[2972; 2973) "("
+ REF_EXPR@[2973; 2979)
+ AMP@[2973; 2974) "&"
+ PREFIX_EXPR@[2974; 2979)
+ STAR@[2974; 2975) "*"
+ LITERAL@[2975; 2979)
+ STRING@[2975; 2979) "\"\\\\\""
+ COMMA@[2979; 2980) ","
+ LITERAL@[2980; 2986)
+ CHAR@[2980; 2986) "\'🤔\'"
+ R_PAREN@[2986; 2987) ")"
+ COMMENT@[2987; 2991) "/**/"
+ COMMA@[2991; 2992) ","
+ BLOCK_EXPR@[2992; 2994)
+ BLOCK@[2992; 2994)
+ L_CURLY@[2992; 2993) "{"
+ R_CURLY@[2993; 2994) "}"
+ R_PAREN@[2994; 2995) ")"
+ EQEQ@[2995; 2997) "=="
+ BLOCK_EXPR@[2997; 3012)
+ BLOCK@[2997; 3012)
+ L_CURLY@[2997; 2998) "{"
+ EXPR_STMT@[2998; 3011)
+ REF_EXPR@[2998; 3010)
+ AMP@[2998; 2999) "&"
+ INDEX_EXPR@[2999; 3010)
+ ARRAY_EXPR@[2999; 3006)
+ L_BRACK@[2999; 3000) "["
+ RANGE_EXPR@[3000; 3005)
+ DOTDOTEQ@[3000; 3003) "..="
+ RANGE_EXPR@[3003; 3005)
+ DOTDOT@[3003; 3005) ".."
+ R_BRACK@[3005; 3006) "]"
+ L_BRACK@[3006; 3007) "["
+ RANGE_EXPR@[3007; 3009)
+ DOTDOT@[3007; 3009) ".."
+ R_BRACK@[3009; 3010) "]"
+ SEMI@[3010; 3011) ";"
+ R_CURLY@[3011; 3012) "}"
+ R_PAREN@[3012; 3013) ")"
+ COMMENT@[3013; 3015) "//"
+ WHITESPACE@[3015; 3020) "\n "
+ SEMI@[3020; 3021) ";"
+ WHITESPACE@[3021; 3026) "\n "
+ EXPR_STMT@[3026; 3040)
+ MACRO_CALL@[3026; 3039)
+ PATH@[3026; 3032)
+ PATH_SEGMENT@[3026; 3032)
+ NAME_REF@[3026; 3032)
+ IDENT@[3026; 3032) "assert"
+ EXCL@[3032; 3033) "!"
+ TOKEN_TREE@[3033; 3039)
+ L_PAREN@[3033; 3034) "("
+ EXCL@[3034; 3035) "!"
+ IDENT@[3035; 3038) "val"
+ R_PAREN@[3038; 3039) ")"
+ SEMI@[3039; 3040) ";"
+ WHITESPACE@[3040; 3041) "\n"
+ R_CURLY@[3041; 3042) "}"
+ WHITESPACE@[3042; 3044) "\n\n"
+ FN_DEF@[3044; 3514)
+ FN_KW@[3044; 3046) "fn"
+ WHITESPACE@[3046; 3047) " "
+ NAME@[3047; 3057)
+ IDENT@[3047; 3057) "punch_card"
+ PARAM_LIST@[3057; 3059)
+ L_PAREN@[3057; 3058) "("
+ R_PAREN@[3058; 3059) ")"
+ WHITESPACE@[3059; 3060) " "
+ RET_TYPE@[3060; 3083)
+ THIN_ARROW@[3060; 3062) "->"
+ WHITESPACE@[3062; 3063) " "
+ IMPL_TRAIT_TYPE@[3063; 3083)
+ IMPL_KW@[3063; 3067) "impl"
+ WHITESPACE@[3067; 3068) " "
+ TYPE_BOUND_LIST@[3068; 3083)
+ TYPE_BOUND@[3068; 3083)
+ PATH_TYPE@[3068; 3083)
+ PATH@[3068; 3083)
+ PATH@[3068; 3076)
+ PATH@[3068; 3071)
+ PATH_SEGMENT@[3068; 3071)
+ NAME_REF@[3068; 3071)
+ IDENT@[3068; 3071) "std"
+ COLONCOLON@[3071; 3073) "::"
+ PATH_SEGMENT@[3073; 3076)
+ NAME_REF@[3073; 3076)
+ IDENT@[3073; 3076) "fmt"
+ COLONCOLON@[3076; 3078) "::"
+ PATH_SEGMENT@[3078; 3083)
+ NAME_REF@[3078; 3083)
+ IDENT@[3078; 3083) "Debug"
+ WHITESPACE@[3083; 3084) " "
+ BLOCK@[3084; 3514)
+ L_CURLY@[3084; 3085) "{"
+ WHITESPACE@[3085; 3090) "\n "
+ RANGE_EXPR@[3090; 3512)
+ DOTDOTEQ@[3090; 3093) "..="
+ RANGE_EXPR@[3093; 3512)
+ DOTDOTEQ@[3093; 3096) "..="
+ RANGE_EXPR@[3096; 3512)
+ DOTDOT@[3096; 3098) ".."
+ WHITESPACE@[3098; 3099) " "
+ RANGE_EXPR@[3099; 3512)
+ DOTDOT@[3099; 3101) ".."
+ WHITESPACE@[3101; 3105) " "
+ RANGE_EXPR@[3105; 3512)
+ DOTDOT@[3105; 3107) ".."
+ WHITESPACE@[3107; 3108) " "
+ RANGE_EXPR@[3108; 3512)
+ DOTDOT@[3108; 3110) ".."
+ WHITESPACE@[3110; 3111) " "
+ RANGE_EXPR@[3111; 3512)
+ DOTDOT@[3111; 3113) ".."
+ WHITESPACE@[3113; 3114) " "
+ RANGE_EXPR@[3114; 3512)
+ DOTDOT@[3114; 3116) ".."
+ WHITESPACE@[3116; 3120) " "
+ RANGE_EXPR@[3120; 3512)
+ DOTDOT@[3120; 3122) ".."
+ WHITESPACE@[3122; 3123) " "
+ RANGE_EXPR@[3123; 3512)
+ DOTDOT@[3123; 3125) ".."
+ WHITESPACE@[3125; 3126) " "
+ RANGE_EXPR@[3126; 3512)
+ DOTDOT@[3126; 3128) ".."
+ WHITESPACE@[3128; 3129) " "
+ RANGE_EXPR@[3129; 3512)
+ DOTDOT@[3129; 3131) ".."
+ WHITESPACE@[3131; 3135) " "
+ RANGE_EXPR@[3135; 3512)
+ DOTDOT@[3135; 3137) ".."
+ WHITESPACE@[3137; 3138) " "
+ RANGE_EXPR@[3138; 3512)
+ DOTDOTEQ@[3138; 3141) "..="
+ RANGE_EXPR@[3141; 3512)
+ DOTDOT@[3141; 3143) ".."
+ WHITESPACE@[3143; 3144) " "
+ RANGE_EXPR@[3144; 3512)
+ DOTDOT@[3144; 3146) ".."
+ WHITESPACE@[3146; 3151) "\n "
+ RANGE_EXPR@[3151; 3512)
+ DOTDOTEQ@[3151; 3154) "..="
+ RANGE_EXPR@[3154; 3512)
+ DOTDOT@[3154; 3156) ".."
+ WHITESPACE@[3156; 3157) " "
+ RANGE_EXPR@[3157; 3512)
+ DOTDOTEQ@[3157; 3160) "..="
+ RANGE_EXPR@[3160; 3512)
+ DOTDOT@[3160; 3162) ".."
+ WHITESPACE@[3162; 3166) " "
+ RANGE_EXPR@[3166; 3512)
+ DOTDOT@[3166; 3168) ".."
+ WHITESPACE@[3168; 3169) " "
+ RANGE_EXPR@[3169; 3512)
+ DOTDOT@[3169; 3171) ".."
+ WHITESPACE@[3171; 3172) " "
+ RANGE_EXPR@[3172; 3512)
+ DOTDOT@[3172; 3174) ".."
+ WHITESPACE@[3174; 3175) " "
+ RANGE_EXPR@[3175; 3512)
+ DOTDOT@[3175; 3177) ".."
+ WHITESPACE@[3177; 3181) " "
+ RANGE_EXPR@[3181; 3512)
+ DOTDOT@[3181; 3183) ".."
+ WHITESPACE@[3183; 3184) " "
+ RANGE_EXPR@[3184; 3512)
+ DOTDOT@[3184; 3186) ".."
+ WHITESPACE@[3186; 3187) " "
+ RANGE_EXPR@[3187; 3512)
+ DOTDOT@[3187; 3189) ".."
+ WHITESPACE@[3189; 3190) " "
+ RANGE_EXPR@[3190; 3512)
+ DOTDOT@[3190; 3192) ".."
+ WHITESPACE@[3192; 3196) " "
+ RANGE_EXPR@[3196; 3512)
+ DOTDOTEQ@[3196; 3199) "..="
+ RANGE_EXPR@[3199; 3512)
+ DOTDOTEQ@[3199; 3202) "..="
+ RANGE_EXPR@[3202; 3512)
+ DOTDOTEQ@[3202; 3205) "..="
+ RANGE_EXPR@[3205; 3512)
+ DOTDOT@[3205; 3207) ".."
+ WHITESPACE@[3207; 3212) "\n "
+ RANGE_EXPR@[3212; 3512)
+ DOTDOTEQ@[3212; 3215) "..="
+ RANGE_EXPR@[3215; 3512)
+ DOTDOT@[3215; 3217) ".."
+ WHITESPACE@[3217; 3218) " "
+ RANGE_EXPR@[3218; 3512)
+ DOTDOTEQ@[3218; 3221) "..="
+ RANGE_EXPR@[3221; 3512)
+ DOTDOT@[3221; 3223) ".."
+ WHITESPACE@[3223; 3227) " "
+ RANGE_EXPR@[3227; 3512)
+ DOTDOTEQ@[3227; 3230) "..="
+ RANGE_EXPR@[3230; 3512)
+ DOTDOT@[3230; 3232) ".."
+ WHITESPACE@[3232; 3233) " "
+ RANGE_EXPR@[3233; 3512)
+ DOTDOTEQ@[3233; 3236) "..="
+ RANGE_EXPR@[3236; 3512)
+ DOTDOT@[3236; 3238) ".."
+ WHITESPACE@[3238; 3242) " "
+ RANGE_EXPR@[3242; 3512)
+ DOTDOT@[3242; 3244) ".."
+ WHITESPACE@[3244; 3245) " "
+ RANGE_EXPR@[3245; 3512)
+ DOTDOTEQ@[3245; 3248) "..="
+ RANGE_EXPR@[3248; 3512)
+ DOTDOTEQ@[3248; 3251) "..="
+ RANGE_EXPR@[3251; 3512)
+ DOTDOT@[3251; 3253) ".."
+ WHITESPACE@[3253; 3257) " "
+ RANGE_EXPR@[3257; 3512)
+ DOTDOT@[3257; 3259) ".."
+ WHITESPACE@[3259; 3260) " "
+ RANGE_EXPR@[3260; 3512)
+ DOTDOTEQ@[3260; 3263) "..="
+ RANGE_EXPR@[3263; 3512)
+ DOTDOT@[3263; 3265) ".."
+ WHITESPACE@[3265; 3266) " "
+ RANGE_EXPR@[3266; 3512)
+ DOTDOT@[3266; 3268) ".."
+ WHITESPACE@[3268; 3273) "\n "
+ RANGE_EXPR@[3273; 3512)
+ DOTDOTEQ@[3273; 3276) "..="
+ RANGE_EXPR@[3276; 3512)
+ DOTDOTEQ@[3276; 3279) "..="
+ RANGE_EXPR@[3279; 3512)
+ DOTDOT@[3279; 3281) ".."
+ WHITESPACE@[3281; 3282) " "
+ RANGE_EXPR@[3282; 3512)
+ DOTDOT@[3282; 3284) ".."
+ WHITESPACE@[3284; 3288) " "
+ RANGE_EXPR@[3288; 3512)
+ DOTDOTEQ@[3288; 3291) "..="
+ RANGE_EXPR@[3291; 3512)
+ DOTDOT@[3291; 3293) ".."
+ WHITESPACE@[3293; 3294) " "
+ RANGE_EXPR@[3294; 3512)
+ DOTDOTEQ@[3294; 3297) "..="
+ RANGE_EXPR@[3297; 3512)
+ DOTDOT@[3297; 3299) ".."
+ WHITESPACE@[3299; 3303) " "
+ RANGE_EXPR@[3303; 3512)
+ DOTDOTEQ@[3303; 3306) "..="
+ RANGE_EXPR@[3306; 3512)
+ DOTDOT@[3306; 3308) ".."
+ WHITESPACE@[3308; 3309) " "
+ RANGE_EXPR@[3309; 3512)
+ DOTDOT@[3309; 3311) ".."
+ WHITESPACE@[3311; 3312) " "
+ RANGE_EXPR@[3312; 3512)
+ DOTDOT@[3312; 3314) ".."
+ WHITESPACE@[3314; 3318) " "
+ RANGE_EXPR@[3318; 3512)
+ DOTDOT@[3318; 3320) ".."
+ WHITESPACE@[3320; 3321) " "
+ RANGE_EXPR@[3321; 3512)
+ DOTDOTEQ@[3321; 3324) "..="
+ RANGE_EXPR@[3324; 3512)
+ DOTDOT@[3324; 3326) ".."
+ WHITESPACE@[3326; 3327) " "
+ RANGE_EXPR@[3327; 3512)
+ DOTDOT@[3327; 3329) ".."
+ WHITESPACE@[3329; 3334) "\n "
+ RANGE_EXPR@[3334; 3512)
+ DOTDOTEQ@[3334; 3337) "..="
+ RANGE_EXPR@[3337; 3512)
+ DOTDOT@[3337; 3339) ".."
+ WHITESPACE@[3339; 3340) " "
+ RANGE_EXPR@[3340; 3512)
+ DOTDOTEQ@[3340; 3343) "..="
+ RANGE_EXPR@[3343; 3512)
+ DOTDOT@[3343; 3345) ".."
+ WHITESPACE@[3345; 3349) " "
+ RANGE_EXPR@[3349; 3512)
+ DOTDOTEQ@[3349; 3352) "..="
+ RANGE_EXPR@[3352; 3512)
+ DOTDOT@[3352; 3354) ".."
+ WHITESPACE@[3354; 3355) " "
+ RANGE_EXPR@[3355; 3512)
+ DOTDOTEQ@[3355; 3358) "..="
+ RANGE_EXPR@[3358; 3512)
+ DOTDOT@[3358; 3360) ".."
+ WHITESPACE@[3360; 3364) " "
+ RANGE_EXPR@[3364; 3512)
+ DOTDOT@[3364; 3366) ".."
+ WHITESPACE@[3366; 3367) " "
+ RANGE_EXPR@[3367; 3512)
+ DOTDOTEQ@[3367; 3370) "..="
+ RANGE_EXPR@[3370; 3512)
+ DOTDOT@[3370; 3372) ".."
+ WHITESPACE@[3372; 3373) " "
+ RANGE_EXPR@[3373; 3512)
+ DOTDOT@[3373; 3375) ".."
+ WHITESPACE@[3375; 3379) " "
+ RANGE_EXPR@[3379; 3512)
+ DOTDOT@[3379; 3381) ".."
+ WHITESPACE@[3381; 3382) " "
+ RANGE_EXPR@[3382; 3512)
+ DOTDOTEQ@[3382; 3385) "..="
+ RANGE_EXPR@[3385; 3512)
+ DOTDOT@[3385; 3387) ".."
+ WHITESPACE@[3387; 3388) " "
+ RANGE_EXPR@[3388; 3512)
+ DOTDOT@[3388; 3390) ".."
+ WHITESPACE@[3390; 3395) "\n "
+ RANGE_EXPR@[3395; 3512)
+ DOTDOTEQ@[3395; 3398) "..="
+ RANGE_EXPR@[3398; 3512)
+ DOTDOT@[3398; 3400) ".."
+ WHITESPACE@[3400; 3401) " "
+ RANGE_EXPR@[3401; 3512)
+ DOTDOTEQ@[3401; 3404) "..="
+ RANGE_EXPR@[3404; 3512)
+ DOTDOT@[3404; 3406) ".."
+ WHITESPACE@[3406; 3410) " "
+ RANGE_EXPR@[3410; 3512)
+ DOTDOTEQ@[3410; 3413) "..="
+ RANGE_EXPR@[3413; 3512)
+ DOTDOT@[3413; 3415) ".."
+ WHITESPACE@[3415; 3416) " "
+ RANGE_EXPR@[3416; 3512)
+ DOTDOTEQ@[3416; 3419) "..="
+ RANGE_EXPR@[3419; 3512)
+ DOTDOT@[3419; 3421) ".."
+ WHITESPACE@[3421; 3425) " "
+ RANGE_EXPR@[3425; 3512)
+ DOTDOT@[3425; 3427) ".."
+ WHITESPACE@[3427; 3428) " "
+ RANGE_EXPR@[3428; 3512)
+ DOTDOT@[3428; 3430) ".."
+ WHITESPACE@[3430; 3431) " "
+ RANGE_EXPR@[3431; 3512)
+ DOTDOTEQ@[3431; 3434) "..="
+ RANGE_EXPR@[3434; 3512)
+ DOTDOT@[3434; 3436) ".."
+ WHITESPACE@[3436; 3440) " "
+ RANGE_EXPR@[3440; 3512)
+ DOTDOT@[3440; 3442) ".."
+ WHITESPACE@[3442; 3443) " "
+ RANGE_EXPR@[3443; 3512)
+ DOTDOTEQ@[3443; 3446) "..="
+ RANGE_EXPR@[3446; 3512)
+ DOTDOT@[3446; 3448) ".."
+ WHITESPACE@[3448; 3449) " "
+ RANGE_EXPR@[3449; 3512)
+ DOTDOT@[3449; 3451) ".."
+ WHITESPACE@[3451; 3456) "\n "
+ RANGE_EXPR@[3456; 3512)
+ DOTDOTEQ@[3456; 3459) "..="
+ RANGE_EXPR@[3459; 3512)
+ DOTDOT@[3459; 3461) ".."
+ WHITESPACE@[3461; 3462) " "
+ RANGE_EXPR@[3462; 3512)
+ DOTDOTEQ@[3462; 3465) "..="
+ RANGE_EXPR@[3465; 3512)
+ DOTDOT@[3465; 3467) ".."
+ WHITESPACE@[3467; 3471) " "
+ RANGE_EXPR@[3471; 3512)
+ DOTDOT@[3471; 3473) ".."
+ WHITESPACE@[3473; 3474) " "
+ RANGE_EXPR@[3474; 3512)
+ DOTDOTEQ@[3474; 3477) "..="
+ RANGE_EXPR@[3477; 3512)
+ DOTDOTEQ@[3477; 3480) "..="
+ RANGE_EXPR@[3480; 3512)
+ DOTDOT@[3480; 3482) ".."
+ WHITESPACE@[3482; 3486) " "
+ RANGE_EXPR@[3486; 3512)
+ DOTDOTEQ@[3486; 3489) "..="
+ RANGE_EXPR@[3489; 3512)
+ DOTDOTEQ@[3489; 3492) "..="
+ RANGE_EXPR@[3492; 3512)
+ DOTDOT@[3492; 3494) ".."
+ WHITESPACE@[3494; 3495) " "
+ RANGE_EXPR@[3495; 3512)
+ DOTDOT@[3495; 3497) ".."
+ WHITESPACE@[3497; 3501) " "
+ RANGE_EXPR@[3501; 3512)
+ DOTDOT@[3501; 3503) ".."
+ WHITESPACE@[3503; 3504) " "
+ RANGE_EXPR@[3504; 3512)
+ DOTDOTEQ@[3504; 3507) "..="
+ RANGE_EXPR@[3507; 3512)
+ DOTDOT@[3507; 3509) ".."
+ WHITESPACE@[3509; 3510) " "
+ RANGE_EXPR@[3510; 3512)
+ DOTDOT@[3510; 3512) ".."
+ WHITESPACE@[3512; 3513) "\n"
+ R_CURLY@[3513; 3514) "}"
+ WHITESPACE@[3514; 3516) "\n\n"
+ FN_DEF@[3516; 3552)
+ FN_KW@[3516; 3518) "fn"
+ WHITESPACE@[3518; 3519) " "
+ NAME@[3519; 3525)
+ IDENT@[3519; 3525) "ktulhu"
+ PARAM_LIST@[3525; 3527)
+ L_PAREN@[3525; 3526) "("
+ R_PAREN@[3526; 3527) ")"
+ WHITESPACE@[3527; 3528) " "
+ BLOCK@[3528; 3552)
+ L_CURLY@[3528; 3529) "{"
+ WHITESPACE@[3529; 3534) "\n "
+ SEMI@[3534; 3535) ";"
+ SEMI@[3535; 3536) ";"
+ SEMI@[3536; 3537) ";"
+ EXPR_STMT@[3537; 3540)
+ TUPLE_EXPR@[3537; 3539)
+ L_PAREN@[3537; 3538) "("
+ R_PAREN@[3538; 3539) ")"
+ SEMI@[3539; 3540) ";"
+ SEMI@[3540; 3541) ";"
+ SEMI@[3541; 3542) ";"
+ SEMI@[3542; 3543) ";"
+ SEMI@[3543; 3544) ";"
+ SEMI@[3544; 3545) ";"
+ SEMI@[3545; 3546) ";"
+ SEMI@[3546; 3547) ";"
+ SEMI@[3547; 3548) ";"
+ TUPLE_EXPR@[3548; 3550)
+ L_PAREN@[3548; 3549) "("
+ R_PAREN@[3549; 3550) ")"
+ WHITESPACE@[3550; 3551) "\n"
+ R_CURLY@[3551; 3552) "}"
+ WHITESPACE@[3552; 3554) "\n\n"
+ FN_DEF@[3554; 3812)
+ VISIBILITY@[3554; 3557)
+ PUB_KW@[3554; 3557) "pub"
+ WHITESPACE@[3557; 3558) " "
+ FN_KW@[3558; 3560) "fn"
+ WHITESPACE@[3560; 3561) " "
+ NAME@[3561; 3565)
+ IDENT@[3561; 3565) "main"
+ PARAM_LIST@[3565; 3567)
+ L_PAREN@[3565; 3566) "("
+ R_PAREN@[3566; 3567) ")"
+ WHITESPACE@[3567; 3568) " "
+ BLOCK@[3568; 3812)
+ L_CURLY@[3568; 3569) "{"
+ WHITESPACE@[3569; 3574) "\n "
+ EXPR_STMT@[3574; 3584)
+ CALL_EXPR@[3574; 3583)
+ PATH_EXPR@[3574; 3581)
+ PATH@[3574; 3581)
+ PATH_SEGMENT@[3574; 3581)
+ NAME_REF@[3574; 3581)
+ IDENT@[3574; 3581) "strange"
+ ARG_LIST@[3581; 3583)
+ L_PAREN@[3581; 3582) "("
+ R_PAREN@[3582; 3583) ")"
+ SEMI@[3583; 3584) ";"
+ WHITESPACE@[3584; 3589) "\n "
+ EXPR_STMT@[3589; 3597)
+ CALL_EXPR@[3589; 3596)
+ PATH_EXPR@[3589; 3594)
+ PATH@[3589; 3594)
+ PATH_SEGMENT@[3589; 3594)
+ NAME_REF@[3589; 3594)
+ IDENT@[3589; 3594) "funny"
+ ARG_LIST@[3594; 3596)
+ L_PAREN@[3594; 3595) "("
+ R_PAREN@[3595; 3596) ")"
+ SEMI@[3596; 3597) ";"
+ WHITESPACE@[3597; 3602) "\n "
+ EXPR_STMT@[3602; 3609)
+ CALL_EXPR@[3602; 3608)
+ PATH_EXPR@[3602; 3606)
+ PATH@[3602; 3606)
+ PATH_SEGMENT@[3602; 3606)
+ NAME_REF@[3602; 3606)
+ IDENT@[3602; 3606) "what"
+ ARG_LIST@[3606; 3608)
+ L_PAREN@[3606; 3607) "("
+ R_PAREN@[3607; 3608) ")"
+ SEMI@[3608; 3609) ";"
+ WHITESPACE@[3609; 3614) "\n "
+ EXPR_STMT@[3614; 3628)
+ CALL_EXPR@[3614; 3627)
+ PATH_EXPR@[3614; 3625)
+ PATH@[3614; 3625)
+ PATH_SEGMENT@[3614; 3625)
+ NAME_REF@[3614; 3625)
+ IDENT@[3614; 3625) "zombiejesus"
+ ARG_LIST@[3625; 3627)
+ L_PAREN@[3625; 3626) "("
+ R_PAREN@[3626; 3627) ")"
+ SEMI@[3627; 3628) ";"
+ WHITESPACE@[3628; 3633) "\n "
+ EXPR_STMT@[3633; 3643)
+ CALL_EXPR@[3633; 3642)
+ PATH_EXPR@[3633; 3640)
+ PATH@[3633; 3640)
+ PATH_SEGMENT@[3633; 3640)
+ NAME_REF@[3633; 3640)
+ IDENT@[3633; 3640) "notsure"
+ ARG_LIST@[3640; 3642)
+ L_PAREN@[3640; 3641) "("
+ R_PAREN@[3641; 3642) ")"
+ SEMI@[3642; 3643) ";"
+ WHITESPACE@[3643; 3648) "\n "
+ EXPR_STMT@[3648; 3664)
+ CALL_EXPR@[3648; 3663)
+ PATH_EXPR@[3648; 3661)
+ PATH@[3648; 3661)
+ PATH_SEGMENT@[3648; 3661)
+ NAME_REF@[3648; 3661)
+ IDENT@[3648; 3661) "canttouchthis"
+ ARG_LIST@[3661; 3663)
+ L_PAREN@[3661; 3662) "("
+ R_PAREN@[3662; 3663) ")"
+ SEMI@[3663; 3664) ";"
+ WHITESPACE@[3664; 3669) "\n "
+ EXPR_STMT@[3669; 3681)
+ CALL_EXPR@[3669; 3680)
+ PATH_EXPR@[3669; 3678)
+ PATH@[3669; 3678)
+ PATH_SEGMENT@[3669; 3678)
+ NAME_REF@[3669; 3678)
+ IDENT@[3669; 3678) "angrydome"
+ ARG_LIST@[3678; 3680)
+ L_PAREN@[3678; 3679) "("
+ R_PAREN@[3679; 3680) ")"
+ SEMI@[3680; 3681) ";"
+ WHITESPACE@[3681; 3686) "\n "
+ EXPR_STMT@[3686; 3701)
+ CALL_EXPR@[3686; 3700)
+ PATH_EXPR@[3686; 3698)
+ PATH@[3686; 3698)
+ PATH_SEGMENT@[3686; 3698)
+ NAME_REF@[3686; 3698)
+ IDENT@[3686; 3698) "evil_lincoln"
+ ARG_LIST@[3698; 3700)
+ L_PAREN@[3698; 3699) "("
+ R_PAREN@[3699; 3700) ")"
+ SEMI@[3700; 3701) ";"
+ WHITESPACE@[3701; 3706) "\n "
+ EXPR_STMT@[3706; 3713)
+ CALL_EXPR@[3706; 3712)
+ PATH_EXPR@[3706; 3710)
+ PATH@[3706; 3710)
+ PATH_SEGMENT@[3706; 3710)
+ NAME_REF@[3706; 3710)
+ IDENT@[3706; 3710) "dots"
+ ARG_LIST@[3710; 3712)
+ L_PAREN@[3710; 3711) "("
+ R_PAREN@[3711; 3712) ")"
+ SEMI@[3712; 3713) ";"
+ WHITESPACE@[3713; 3718) "\n "
+ EXPR_STMT@[3718; 3726)
+ CALL_EXPR@[3718; 3725)
+ PATH_EXPR@[3718; 3720)
+ PATH@[3718; 3720)
+ PATH_SEGMENT@[3718; 3720)
+ NAME_REF@[3718; 3720)
+ IDENT@[3718; 3720) "u8"
+ ARG_LIST@[3720; 3725)
+ L_PAREN@[3720; 3721) "("
+ LITERAL@[3721; 3724)
+ INT_NUMBER@[3721; 3724) "8u8"
+ R_PAREN@[3724; 3725) ")"
+ SEMI@[3725; 3726) ";"
+ WHITESPACE@[3726; 3731) "\n "
+ EXPR_STMT@[3731; 3739)
+ CALL_EXPR@[3731; 3738)
+ PATH_EXPR@[3731; 3736)
+ PATH@[3731; 3736)
+ PATH_SEGMENT@[3731; 3736)
+ NAME_REF@[3731; 3736)
+ IDENT@[3731; 3736) "fishy"
+ ARG_LIST@[3736; 3738)
+ L_PAREN@[3736; 3737) "("
+ R_PAREN@[3737; 3738) ")"
+ SEMI@[3738; 3739) ";"
+ WHITESPACE@[3739; 3744) "\n "
+ EXPR_STMT@[3744; 3752)
+ CALL_EXPR@[3744; 3751)
+ PATH_EXPR@[3744; 3749)
+ PATH@[3744; 3749)
+ PATH_SEGMENT@[3744; 3749)
+ NAME_REF@[3744; 3749)
+ IDENT@[3744; 3749) "union"
+ ARG_LIST@[3749; 3751)
+ L_PAREN@[3749; 3750) "("
+ R_PAREN@[3750; 3751) ")"
+ SEMI@[3751; 3752) ";"
+ WHITESPACE@[3752; 3757) "\n "
+ EXPR_STMT@[3757; 3778)
+ CALL_EXPR@[3757; 3777)
+ PATH_EXPR@[3757; 3775)
+ PATH@[3757; 3775)
+ PATH_SEGMENT@[3757; 3775)
+ NAME_REF@[3757; 3775)
+ IDENT@[3757; 3775) "special_characters"
+ ARG_LIST@[3775; 3777)
+ L_PAREN@[3775; 3776) "("
+ R_PAREN@[3776; 3777) ")"
+ SEMI@[3777; 3778) ";"
+ WHITESPACE@[3778; 3783) "\n "
+ EXPR_STMT@[3783; 3796)
+ CALL_EXPR@[3783; 3795)
+ PATH_EXPR@[3783; 3793)
+ PATH@[3783; 3793)
+ PATH_SEGMENT@[3783; 3793)
+ NAME_REF@[3783; 3793)
+ IDENT@[3783; 3793) "punch_card"
+ ARG_LIST@[3793; 3795)
+ L_PAREN@[3793; 3794) "("
+ R_PAREN@[3794; 3795) ")"
+ SEMI@[3795; 3796) ";"
+ WHITESPACE@[3796; 3801) "\n "
+ EXPR_STMT@[3801; 3810)
+ CALL_EXPR@[3801; 3809)
+ PATH_EXPR@[3801; 3807)
+ PATH@[3801; 3807)
+ PATH_SEGMENT@[3801; 3807)
+ NAME_REF@[3801; 3807)
+ IDENT@[3801; 3807) "ktulhu"
+ ARG_LIST@[3807; 3809)
+ L_PAREN@[3807; 3808) "("
+ R_PAREN@[3808; 3809) ")"
+ SEMI@[3809; 3810) ";"
+ WHITESPACE@[3810; 3811) "\n"
+ R_CURLY@[3811; 3812) "}"
+ WHITESPACE@[3812; 3813) "\n"
--- /dev/null
+// https://github.com/rust-analyzer/rust-analyzer/issues/311
+
+pub fn foo<S: Iterator>() -> String
+where
+ <S as Iterator>::Item: Eq,
+{
+ "".to_owned()
+}
--- /dev/null
+SOURCE_FILE@[0; 157)
+ COMMENT@[0; 60) "// https://github.com ..."
+ WHITESPACE@[60; 62) "\n\n"
+ FN_DEF@[62; 156)
+ VISIBILITY@[62; 65)
+ PUB_KW@[62; 65) "pub"
+ WHITESPACE@[65; 66) " "
+ FN_KW@[66; 68) "fn"
+ WHITESPACE@[68; 69) " "
+ NAME@[69; 72)
+ IDENT@[69; 72) "foo"
+ TYPE_PARAM_LIST@[72; 85)
+ L_ANGLE@[72; 73) "<"
+ TYPE_PARAM@[73; 84)
+ NAME@[73; 74)
+ IDENT@[73; 74) "S"
+ COLON@[74; 75) ":"
+ WHITESPACE@[75; 76) " "
+ TYPE_BOUND_LIST@[76; 84)
+ TYPE_BOUND@[76; 84)
+ PATH_TYPE@[76; 84)
+ PATH@[76; 84)
+ PATH_SEGMENT@[76; 84)
+ NAME_REF@[76; 84)
+ IDENT@[76; 84) "Iterator"
+ R_ANGLE@[84; 85) ">"
+ PARAM_LIST@[85; 87)
+ L_PAREN@[85; 86) "("
+ R_PAREN@[86; 87) ")"
+ WHITESPACE@[87; 88) " "
+ RET_TYPE@[88; 97)
+ THIN_ARROW@[88; 90) "->"
+ WHITESPACE@[90; 91) " "
+ PATH_TYPE@[91; 97)
+ PATH@[91; 97)
+ PATH_SEGMENT@[91; 97)
+ NAME_REF@[91; 97)
+ IDENT@[91; 97) "String"
+ WHITESPACE@[97; 98) "\n"
+ WHERE_CLAUSE@[98; 134)
+ WHERE_KW@[98; 103) "where"
+ WHITESPACE@[103; 108) "\n "
+ WHERE_PRED@[108; 133)
+ PATH_TYPE@[108; 129)
+ PATH@[108; 129)
+ PATH@[108; 123)
+ PATH_SEGMENT@[108; 123)
+ L_ANGLE@[108; 109) "<"
+ PATH_TYPE@[109; 110)
+ PATH@[109; 110)
+ PATH_SEGMENT@[109; 110)
+ NAME_REF@[109; 110)
+ IDENT@[109; 110) "S"
+ WHITESPACE@[110; 111) " "
+ AS_KW@[111; 113) "as"
+ WHITESPACE@[113; 114) " "
+ PATH_TYPE@[114; 122)
+ PATH@[114; 122)
+ PATH_SEGMENT@[114; 122)
+ NAME_REF@[114; 122)
+ IDENT@[114; 122) "Iterator"
+ R_ANGLE@[122; 123) ">"
+ COLONCOLON@[123; 125) "::"
+ PATH_SEGMENT@[125; 129)
+ NAME_REF@[125; 129)
+ IDENT@[125; 129) "Item"
+ COLON@[129; 130) ":"
+ WHITESPACE@[130; 131) " "
+ TYPE_BOUND_LIST@[131; 133)
+ TYPE_BOUND@[131; 133)
+ PATH_TYPE@[131; 133)
+ PATH@[131; 133)
+ PATH_SEGMENT@[131; 133)
+ NAME_REF@[131; 133)
+ IDENT@[131; 133) "Eq"
+ COMMA@[133; 134) ","
+ WHITESPACE@[134; 135) "\n"
+ BLOCK@[135; 156)
+ L_CURLY@[135; 136) "{"
+ WHITESPACE@[136; 141) "\n "
+ METHOD_CALL_EXPR@[141; 154)
+ LITERAL@[141; 143)
+ STRING@[141; 143) "\"\""
+ DOT@[143; 144) "."
+ NAME_REF@[144; 152)
+ IDENT@[144; 152) "to_owned"
+ ARG_LIST@[152; 154)
+ L_PAREN@[152; 153) "("
+ R_PAREN@[153; 154) ")"
+ WHITESPACE@[154; 155) "\n"
+ R_CURLY@[155; 156) "}"
+ WHITESPACE@[156; 157) "\n"
--- /dev/null
+// https://github.com/rust-analyzer/rust-analyzer/issues/357
+
+//! docs
+// non-docs
+mod foo {}
\ No newline at end of file
--- /dev/null
+SOURCE_FILE@[0; 93)
+ COMMENT@[0; 60) "// https://github.com ..."
+ WHITESPACE@[60; 62) "\n\n"
+ MODULE@[62; 93)
+ COMMENT@[62; 70) "//! docs"
+ WHITESPACE@[70; 71) "\n"
+ COMMENT@[71; 82) "// non-docs"
+ WHITESPACE@[82; 83) "\n"
+ MOD_KW@[83; 86) "mod"
+ WHITESPACE@[86; 87) " "
+ NAME@[87; 90)
+ IDENT@[87; 90) "foo"
+ WHITESPACE@[90; 91) " "
+ ITEM_LIST@[91; 93)
+ L_CURLY@[91; 92) "{"
+ R_CURLY@[92; 93) "}"
--- /dev/null
+fn test() where (u64, u64): Foo {}
\ No newline at end of file
--- /dev/null
+SOURCE_FILE@[0; 34)
+ FN_DEF@[0; 34)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 7)
+ IDENT@[3; 7) "test"
+ PARAM_LIST@[7; 9)
+ L_PAREN@[7; 8) "("
+ R_PAREN@[8; 9) ")"
+ WHITESPACE@[9; 10) " "
+ WHERE_CLAUSE@[10; 31)
+ WHERE_KW@[10; 15) "where"
+ WHITESPACE@[15; 16) " "
+ WHERE_PRED@[16; 31)
+ TUPLE_TYPE@[16; 26)
+ L_PAREN@[16; 17) "("
+ PATH_TYPE@[17; 20)
+ PATH@[17; 20)
+ PATH_SEGMENT@[17; 20)
+ NAME_REF@[17; 20)
+ IDENT@[17; 20) "u64"
+ COMMA@[20; 21) ","
+ WHITESPACE@[21; 22) " "
+ PATH_TYPE@[22; 25)
+ PATH@[22; 25)
+ PATH_SEGMENT@[22; 25)
+ NAME_REF@[22; 25)
+ IDENT@[22; 25) "u64"
+ R_PAREN@[25; 26) ")"
+ COLON@[26; 27) ":"
+ WHITESPACE@[27; 28) " "
+ TYPE_BOUND_LIST@[28; 31)
+ TYPE_BOUND@[28; 31)
+ PATH_TYPE@[28; 31)
+ PATH@[28; 31)
+ PATH_SEGMENT@[28; 31)
+ NAME_REF@[28; 31)
+ IDENT@[28; 31) "Foo"
+ WHITESPACE@[31; 32) " "
+ BLOCK@[32; 34)
+ L_CURLY@[32; 33) "{"
+ R_CURLY@[33; 34) "}"
--- /dev/null
+fn r#foo() {
+}
--- /dev/null
+SOURCE_FILE@[0; 15)
+ FN_DEF@[0; 14)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 8)
+ IDENT@[3; 8) "r#foo"
+ PARAM_LIST@[8; 10)
+ L_PAREN@[8; 9) "("
+ R_PAREN@[9; 10) ")"
+ WHITESPACE@[10; 11) " "
+ BLOCK@[11; 14)
+ L_CURLY@[11; 12) "{"
+ WHITESPACE@[12; 13) "\n"
+ R_CURLY@[13; 14) "}"
+ WHITESPACE@[14; 15) "\n"
--- /dev/null
+struct S {
+ r#foo: u32
+}
\ No newline at end of file
--- /dev/null
+SOURCE_FILE@[0; 27)
+ STRUCT_DEF@[0; 27)
+ STRUCT_KW@[0; 6) "struct"
+ WHITESPACE@[6; 7) " "
+ NAME@[7; 8)
+ IDENT@[7; 8) "S"
+ WHITESPACE@[8; 9) " "
+ NAMED_FIELD_DEF_LIST@[9; 27)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ NAMED_FIELD_DEF@[15; 25)
+ NAME@[15; 20)
+ IDENT@[15; 20) "r#foo"
+ COLON@[20; 21) ":"
+ WHITESPACE@[21; 22) " "
+ PATH_TYPE@[22; 25)
+ PATH@[22; 25)
+ PATH_SEGMENT@[22; 25)
+ NAME_REF@[22; 25)
+ IDENT@[22; 25) "u32"
+ WHITESPACE@[25; 26) "\n"
+ R_CURLY@[26; 27) "}"
--- /dev/null
+fn foo() { let r#struct = 92; let r#trait = r#struct * 2; }
\ No newline at end of file
--- /dev/null
+SOURCE_FILE@[0; 59)
+ FN_DEF@[0; 59)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 59)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 11) " "
+ LET_STMT@[11; 29)
+ LET_KW@[11; 14) "let"
+ WHITESPACE@[14; 15) " "
+ BIND_PAT@[15; 23)
+ NAME@[15; 23)
+ IDENT@[15; 23) "r#struct"
+ WHITESPACE@[23; 24) " "
+ EQ@[24; 25) "="
+ WHITESPACE@[25; 26) " "
+ LITERAL@[26; 28)
+ INT_NUMBER@[26; 28) "92"
+ SEMI@[28; 29) ";"
+ WHITESPACE@[29; 30) " "
+ LET_STMT@[30; 57)
+ LET_KW@[30; 33) "let"
+ WHITESPACE@[33; 34) " "
+ BIND_PAT@[34; 41)
+ NAME@[34; 41)
+ IDENT@[34; 41) "r#trait"
+ WHITESPACE@[41; 42) " "
+ EQ@[42; 43) "="
+ WHITESPACE@[43; 44) " "
+ BIN_EXPR@[44; 56)
+ PATH_EXPR@[44; 52)
+ PATH@[44; 52)
+ PATH_SEGMENT@[44; 52)
+ NAME_REF@[44; 52)
+ IDENT@[44; 52) "r#struct"
+ WHITESPACE@[52; 53) " "
+ STAR@[53; 54) "*"
+ WHITESPACE@[54; 55) " "
+ LITERAL@[55; 56)
+ INT_NUMBER@[55; 56) "2"
+ SEMI@[56; 57) ";"
+ WHITESPACE@[57; 58) " "
+ R_CURLY@[58; 59) "}"
--- /dev/null
+// https://github.com/rust-analyzer/rust-analyzer/issues/596
+
+struct Foo;
+
+impl Foo {
+ fn bar() -> bool {
+ unimplemented!()
+ }
+}
+
+fn baz(_: bool) {}
+
+fn main() {
+ baz(<Foo>::bar())
+}
--- /dev/null
+SOURCE_FILE@[0; 199)
+ COMMENT@[0; 60) "// https://github.com ..."
+ WHITESPACE@[60; 62) "\n\n"
+ STRUCT_DEF@[62; 73)
+ STRUCT_KW@[62; 68) "struct"
+ WHITESPACE@[68; 69) " "
+ NAME@[69; 72)
+ IDENT@[69; 72) "Foo"
+ SEMI@[72; 73) ";"
+ WHITESPACE@[73; 75) "\n\n"
+ IMPL_BLOCK@[75; 141)
+ IMPL_KW@[75; 79) "impl"
+ WHITESPACE@[79; 80) " "
+ PATH_TYPE@[80; 83)
+ PATH@[80; 83)
+ PATH_SEGMENT@[80; 83)
+ NAME_REF@[80; 83)
+ IDENT@[80; 83) "Foo"
+ WHITESPACE@[83; 84) " "
+ ITEM_LIST@[84; 141)
+ L_CURLY@[84; 85) "{"
+ WHITESPACE@[85; 90) "\n "
+ FN_DEF@[90; 139)
+ FN_KW@[90; 92) "fn"
+ WHITESPACE@[92; 93) " "
+ NAME@[93; 96)
+ IDENT@[93; 96) "bar"
+ PARAM_LIST@[96; 98)
+ L_PAREN@[96; 97) "("
+ R_PAREN@[97; 98) ")"
+ WHITESPACE@[98; 99) " "
+ RET_TYPE@[99; 106)
+ THIN_ARROW@[99; 101) "->"
+ WHITESPACE@[101; 102) " "
+ PATH_TYPE@[102; 106)
+ PATH@[102; 106)
+ PATH_SEGMENT@[102; 106)
+ NAME_REF@[102; 106)
+ IDENT@[102; 106) "bool"
+ WHITESPACE@[106; 107) " "
+ BLOCK@[107; 139)
+ L_CURLY@[107; 108) "{"
+ WHITESPACE@[108; 117) "\n "
+ MACRO_CALL@[117; 133)
+ PATH@[117; 130)
+ PATH_SEGMENT@[117; 130)
+ NAME_REF@[117; 130)
+ IDENT@[117; 130) "unimplemented"
+ EXCL@[130; 131) "!"
+ TOKEN_TREE@[131; 133)
+ L_PAREN@[131; 132) "("
+ R_PAREN@[132; 133) ")"
+ WHITESPACE@[133; 138) "\n "
+ R_CURLY@[138; 139) "}"
+ WHITESPACE@[139; 140) "\n"
+ R_CURLY@[140; 141) "}"
+ WHITESPACE@[141; 143) "\n\n"
+ FN_DEF@[143; 161)
+ FN_KW@[143; 145) "fn"
+ WHITESPACE@[145; 146) " "
+ NAME@[146; 149)
+ IDENT@[146; 149) "baz"
+ PARAM_LIST@[149; 158)
+ L_PAREN@[149; 150) "("
+ PARAM@[150; 157)
+ PLACEHOLDER_PAT@[150; 151)
+ UNDERSCORE@[150; 151) "_"
+ COLON@[151; 152) ":"
+ WHITESPACE@[152; 153) " "
+ PATH_TYPE@[153; 157)
+ PATH@[153; 157)
+ PATH_SEGMENT@[153; 157)
+ NAME_REF@[153; 157)
+ IDENT@[153; 157) "bool"
+ R_PAREN@[157; 158) ")"
+ WHITESPACE@[158; 159) " "
+ BLOCK@[159; 161)
+ L_CURLY@[159; 160) "{"
+ R_CURLY@[160; 161) "}"
+ WHITESPACE@[161; 163) "\n\n"
+ FN_DEF@[163; 198)
+ FN_KW@[163; 165) "fn"
+ WHITESPACE@[165; 166) " "
+ NAME@[166; 170)
+ IDENT@[166; 170) "main"
+ PARAM_LIST@[170; 172)
+ L_PAREN@[170; 171) "("
+ R_PAREN@[171; 172) ")"
+ WHITESPACE@[172; 173) " "
+ BLOCK@[173; 198)
+ L_CURLY@[173; 174) "{"
+ WHITESPACE@[174; 179) "\n "
+ CALL_EXPR@[179; 196)
+ PATH_EXPR@[179; 182)
+ PATH@[179; 182)
+ PATH_SEGMENT@[179; 182)
+ NAME_REF@[179; 182)
+ IDENT@[179; 182) "baz"
+ ARG_LIST@[182; 196)
+ L_PAREN@[182; 183) "("
+ CALL_EXPR@[183; 195)
+ PATH_EXPR@[183; 193)
+ PATH@[183; 193)
+ PATH@[183; 188)
+ PATH_SEGMENT@[183; 188)
+ L_ANGLE@[183; 184) "<"
+ PATH_TYPE@[184; 187)
+ PATH@[184; 187)
+ PATH_SEGMENT@[184; 187)
+ NAME_REF@[184; 187)
+ IDENT@[184; 187) "Foo"
+ R_ANGLE@[187; 188) ">"
+ COLONCOLON@[188; 190) "::"
+ PATH_SEGMENT@[190; 193)
+ NAME_REF@[190; 193)
+ IDENT@[190; 193) "bar"
+ ARG_LIST@[193; 195)
+ L_PAREN@[193; 194) "("
+ R_PAREN@[194; 195) ")"
+ R_PAREN@[195; 196) ")"
+ WHITESPACE@[196; 197) "\n"
+ R_CURLY@[197; 198) "}"
+ WHITESPACE@[198; 199) "\n"
--- /dev/null
+// https://github.com/rust-analyzer/rust-analyzer/issues/674
+
+struct Repr { raw: [u8; 1] }
+
+fn abc() {
+ Repr { raw: [0] }.raw[0] = 0;
+ Repr{raw:[0]}();
+}
--- /dev/null
+SOURCE_FILE@[0; 160)
+ COMMENT@[0; 60) "// https://github.com ..."
+ WHITESPACE@[60; 62) "\n\n"
+ STRUCT_DEF@[62; 90)
+ STRUCT_KW@[62; 68) "struct"
+ WHITESPACE@[68; 69) " "
+ NAME@[69; 73)
+ IDENT@[69; 73) "Repr"
+ WHITESPACE@[73; 74) " "
+ NAMED_FIELD_DEF_LIST@[74; 90)
+ L_CURLY@[74; 75) "{"
+ WHITESPACE@[75; 76) " "
+ NAMED_FIELD_DEF@[76; 88)
+ NAME@[76; 79)
+ IDENT@[76; 79) "raw"
+ COLON@[79; 80) ":"
+ WHITESPACE@[80; 81) " "
+ ARRAY_TYPE@[81; 88)
+ L_BRACK@[81; 82) "["
+ PATH_TYPE@[82; 84)
+ PATH@[82; 84)
+ PATH_SEGMENT@[82; 84)
+ NAME_REF@[82; 84)
+ IDENT@[82; 84) "u8"
+ SEMI@[84; 85) ";"
+ WHITESPACE@[85; 86) " "
+ LITERAL@[86; 87)
+ INT_NUMBER@[86; 87) "1"
+ R_BRACK@[87; 88) "]"
+ WHITESPACE@[88; 89) " "
+ R_CURLY@[89; 90) "}"
+ WHITESPACE@[90; 92) "\n\n"
+ FN_DEF@[92; 159)
+ FN_KW@[92; 94) "fn"
+ WHITESPACE@[94; 95) " "
+ NAME@[95; 98)
+ IDENT@[95; 98) "abc"
+ PARAM_LIST@[98; 100)
+ L_PAREN@[98; 99) "("
+ R_PAREN@[99; 100) ")"
+ WHITESPACE@[100; 101) " "
+ BLOCK@[101; 159)
+ L_CURLY@[101; 102) "{"
+ WHITESPACE@[102; 107) "\n "
+ EXPR_STMT@[107; 136)
+ BIN_EXPR@[107; 135)
+ INDEX_EXPR@[107; 131)
+ FIELD_EXPR@[107; 128)
+ STRUCT_LIT@[107; 124)
+ PATH@[107; 111)
+ PATH_SEGMENT@[107; 111)
+ NAME_REF@[107; 111)
+ IDENT@[107; 111) "Repr"
+ WHITESPACE@[111; 112) " "
+ NAMED_FIELD_LIST@[112; 124)
+ L_CURLY@[112; 113) "{"
+ WHITESPACE@[113; 114) " "
+ NAMED_FIELD@[114; 122)
+ NAME_REF@[114; 117)
+ IDENT@[114; 117) "raw"
+ COLON@[117; 118) ":"
+ WHITESPACE@[118; 119) " "
+ ARRAY_EXPR@[119; 122)
+ L_BRACK@[119; 120) "["
+ LITERAL@[120; 121)
+ INT_NUMBER@[120; 121) "0"
+ R_BRACK@[121; 122) "]"
+ WHITESPACE@[122; 123) " "
+ R_CURLY@[123; 124) "}"
+ DOT@[124; 125) "."
+ NAME_REF@[125; 128)
+ IDENT@[125; 128) "raw"
+ L_BRACK@[128; 129) "["
+ LITERAL@[129; 130)
+ INT_NUMBER@[129; 130) "0"
+ R_BRACK@[130; 131) "]"
+ WHITESPACE@[131; 132) " "
+ EQ@[132; 133) "="
+ WHITESPACE@[133; 134) " "
+ LITERAL@[134; 135)
+ INT_NUMBER@[134; 135) "0"
+ SEMI@[135; 136) ";"
+ WHITESPACE@[136; 141) "\n "
+ EXPR_STMT@[141; 157)
+ CALL_EXPR@[141; 156)
+ STRUCT_LIT@[141; 154)
+ PATH@[141; 145)
+ PATH_SEGMENT@[141; 145)
+ NAME_REF@[141; 145)
+ IDENT@[141; 145) "Repr"
+ NAMED_FIELD_LIST@[145; 154)
+ L_CURLY@[145; 146) "{"
+ NAMED_FIELD@[146; 153)
+ NAME_REF@[146; 149)
+ IDENT@[146; 149) "raw"
+ COLON@[149; 150) ":"
+ ARRAY_EXPR@[150; 153)
+ L_BRACK@[150; 151) "["
+ LITERAL@[151; 152)
+ INT_NUMBER@[151; 152) "0"
+ R_BRACK@[152; 153) "]"
+ R_CURLY@[153; 154) "}"
+ ARG_LIST@[154; 156)
+ L_PAREN@[154; 155) "("
+ R_PAREN@[155; 156) ")"
+ SEMI@[156; 157) ";"
+ WHITESPACE@[157; 158) "\n"
+ R_CURLY@[158; 159) "}"
+ WHITESPACE@[159; 160) "\n"
--- /dev/null
+// https://github.com/rust-analyzer/rust-analyzer/issues/677
+fn main() {
+ #[cfg(feature = "backtrace")]
+ let exit_code = panic::catch_unwind(move || main());
+}
--- /dev/null
+SOURCE_FILE@[0; 166)
+ FN_DEF@[0; 165)
+ COMMENT@[0; 60) "// https://github.com ..."
+ WHITESPACE@[60; 61) "\n"
+ FN_KW@[61; 63) "fn"
+ WHITESPACE@[63; 64) " "
+ NAME@[64; 68)
+ IDENT@[64; 68) "main"
+ PARAM_LIST@[68; 70)
+ L_PAREN@[68; 69) "("
+ R_PAREN@[69; 70) ")"
+ WHITESPACE@[70; 71) " "
+ BLOCK@[71; 165)
+ L_CURLY@[71; 72) "{"
+ WHITESPACE@[72; 77) "\n "
+ LET_STMT@[77; 163)
+ ATTR@[77; 106)
+ POUND@[77; 78) "#"
+ TOKEN_TREE@[78; 106)
+ L_BRACK@[78; 79) "["
+ IDENT@[79; 82) "cfg"
+ TOKEN_TREE@[82; 105)
+ L_PAREN@[82; 83) "("
+ IDENT@[83; 90) "feature"
+ WHITESPACE@[90; 91) " "
+ EQ@[91; 92) "="
+ WHITESPACE@[92; 93) " "
+ STRING@[93; 104) "\"backtrace\""
+ R_PAREN@[104; 105) ")"
+ R_BRACK@[105; 106) "]"
+ WHITESPACE@[106; 111) "\n "
+ LET_KW@[111; 114) "let"
+ WHITESPACE@[114; 115) " "
+ BIND_PAT@[115; 124)
+ NAME@[115; 124)
+ IDENT@[115; 124) "exit_code"
+ WHITESPACE@[124; 125) " "
+ EQ@[125; 126) "="
+ WHITESPACE@[126; 127) " "
+ CALL_EXPR@[127; 162)
+ PATH_EXPR@[127; 146)
+ PATH@[127; 146)
+ PATH@[127; 132)
+ PATH_SEGMENT@[127; 132)
+ NAME_REF@[127; 132)
+ IDENT@[127; 132) "panic"
+ COLONCOLON@[132; 134) "::"
+ PATH_SEGMENT@[134; 146)
+ NAME_REF@[134; 146)
+ IDENT@[134; 146) "catch_unwind"
+ ARG_LIST@[146; 162)
+ L_PAREN@[146; 147) "("
+ LAMBDA_EXPR@[147; 161)
+ MOVE_KW@[147; 151) "move"
+ WHITESPACE@[151; 152) " "
+ PARAM_LIST@[152; 154)
+ PIPE@[152; 153) "|"
+ PIPE@[153; 154) "|"
+ WHITESPACE@[154; 155) " "
+ CALL_EXPR@[155; 161)
+ PATH_EXPR@[155; 159)
+ PATH@[155; 159)
+ PATH_SEGMENT@[155; 159)
+ NAME_REF@[155; 159)
+ IDENT@[155; 159) "main"
+ ARG_LIST@[159; 161)
+ L_PAREN@[159; 160) "("
+ R_PAREN@[160; 161) ")"
+ R_PAREN@[161; 162) ")"
+ SEMI@[162; 163) ";"
+ WHITESPACE@[163; 164) "\n"
+ R_CURLY@[164; 165) "}"
+ WHITESPACE@[165; 166) "\n"
--- /dev/null
+fn block() {
+ #![doc("Inner attributes allowed here")]
+ //! As are ModuleDoc style comments
+ {
+ #![doc("Inner attributes are allowed in blocks used as statements")]
+ #![doc("Being validated is not affected by duplcates")]
+ //! As are ModuleDoc style comments
+ };
+ {
+ #![doc("Inner attributes are allowed in blocks when they are the last statement of another block")]
+ //! As are ModuleDoc style comments
+ }
+}
+
+// https://github.com/rust-analyzer/rust-analyzer/issues/689
+impl Whatever {
+ fn salsa_event(&self, event_fn: impl Fn() -> Event<Self>) {
+ #![allow(unused_variables)] // this is `inner_attr` of the block
+ }
+}
--- /dev/null
+SOURCE_FILE@[0; 686)
+ FN_DEF@[0; 461)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 8)
+ IDENT@[3; 8) "block"
+ PARAM_LIST@[8; 10)
+ L_PAREN@[8; 9) "("
+ R_PAREN@[9; 10) ")"
+ WHITESPACE@[10; 11) " "
+ BLOCK@[11; 461)
+ L_CURLY@[11; 12) "{"
+ WHITESPACE@[12; 17) "\n "
+ ATTR@[17; 57)
+ POUND@[17; 18) "#"
+ EXCL@[18; 19) "!"
+ TOKEN_TREE@[19; 57)
+ L_BRACK@[19; 20) "["
+ IDENT@[20; 23) "doc"
+ TOKEN_TREE@[23; 56)
+ L_PAREN@[23; 24) "("
+ STRING@[24; 55) "\"Inner attributes all ..."
+ R_PAREN@[55; 56) ")"
+ R_BRACK@[56; 57) "]"
+ WHITESPACE@[57; 62) "\n "
+ COMMENT@[62; 97) "//! As are ModuleDoc ..."
+ WHITESPACE@[97; 102) "\n "
+ EXPR_STMT@[102; 295)
+ BLOCK_EXPR@[102; 294)
+ BLOCK@[102; 294)
+ L_CURLY@[102; 103) "{"
+ WHITESPACE@[103; 112) "\n "
+ ATTR@[112; 180)
+ POUND@[112; 113) "#"
+ EXCL@[113; 114) "!"
+ TOKEN_TREE@[114; 180)
+ L_BRACK@[114; 115) "["
+ IDENT@[115; 118) "doc"
+ TOKEN_TREE@[118; 179)
+ L_PAREN@[118; 119) "("
+ STRING@[119; 178) "\"Inner attributes are ..."
+ R_PAREN@[178; 179) ")"
+ R_BRACK@[179; 180) "]"
+ WHITESPACE@[180; 189) "\n "
+ ATTR@[189; 244)
+ POUND@[189; 190) "#"
+ EXCL@[190; 191) "!"
+ TOKEN_TREE@[191; 244)
+ L_BRACK@[191; 192) "["
+ IDENT@[192; 195) "doc"
+ TOKEN_TREE@[195; 243)
+ L_PAREN@[195; 196) "("
+ STRING@[196; 242) "\"Being validated is n ..."
+ R_PAREN@[242; 243) ")"
+ R_BRACK@[243; 244) "]"
+ WHITESPACE@[244; 253) "\n "
+ COMMENT@[253; 288) "//! As are ModuleDoc ..."
+ WHITESPACE@[288; 293) "\n "
+ R_CURLY@[293; 294) "}"
+ SEMI@[294; 295) ";"
+ WHITESPACE@[295; 300) "\n "
+ BLOCK_EXPR@[300; 459)
+ BLOCK@[300; 459)
+ L_CURLY@[300; 301) "{"
+ WHITESPACE@[301; 310) "\n "
+ ATTR@[310; 409)
+ POUND@[310; 311) "#"
+ EXCL@[311; 312) "!"
+ TOKEN_TREE@[312; 409)
+ L_BRACK@[312; 313) "["
+ IDENT@[313; 316) "doc"
+ TOKEN_TREE@[316; 408)
+ L_PAREN@[316; 317) "("
+ STRING@[317; 407) "\"Inner attributes are ..."
+ R_PAREN@[407; 408) ")"
+ R_BRACK@[408; 409) "]"
+ WHITESPACE@[409; 418) "\n "
+ COMMENT@[418; 453) "//! As are ModuleDoc ..."
+ WHITESPACE@[453; 458) "\n "
+ R_CURLY@[458; 459) "}"
+ WHITESPACE@[459; 460) "\n"
+ R_CURLY@[460; 461) "}"
+ WHITESPACE@[461; 463) "\n\n"
+ COMMENT@[463; 523) "// https://github.com ..."
+ WHITESPACE@[523; 524) "\n"
+ IMPL_BLOCK@[524; 685)
+ IMPL_KW@[524; 528) "impl"
+ WHITESPACE@[528; 529) " "
+ PATH_TYPE@[529; 537)
+ PATH@[529; 537)
+ PATH_SEGMENT@[529; 537)
+ NAME_REF@[529; 537)
+ IDENT@[529; 537) "Whatever"
+ WHITESPACE@[537; 538) " "
+ ITEM_LIST@[538; 685)
+ L_CURLY@[538; 539) "{"
+ WHITESPACE@[539; 544) "\n "
+ FN_DEF@[544; 683)
+ FN_KW@[544; 546) "fn"
+ WHITESPACE@[546; 547) " "
+ NAME@[547; 558)
+ IDENT@[547; 558) "salsa_event"
+ PARAM_LIST@[558; 601)
+ L_PAREN@[558; 559) "("
+ SELF_PARAM@[559; 564)
+ AMP@[559; 560) "&"
+ SELF_KW@[560; 564) "self"
+ COMMA@[564; 565) ","
+ WHITESPACE@[565; 566) " "
+ PARAM@[566; 600)
+ BIND_PAT@[566; 574)
+ NAME@[566; 574)
+ IDENT@[566; 574) "event_fn"
+ COLON@[574; 575) ":"
+ WHITESPACE@[575; 576) " "
+ IMPL_TRAIT_TYPE@[576; 600)
+ IMPL_KW@[576; 580) "impl"
+ WHITESPACE@[580; 581) " "
+ TYPE_BOUND_LIST@[581; 600)
+ TYPE_BOUND@[581; 600)
+ PATH_TYPE@[581; 600)
+ PATH@[581; 600)
+ PATH_SEGMENT@[581; 600)
+ NAME_REF@[581; 583)
+ IDENT@[581; 583) "Fn"
+ PARAM_LIST@[583; 585)
+ L_PAREN@[583; 584) "("
+ R_PAREN@[584; 585) ")"
+ WHITESPACE@[585; 586) " "
+ RET_TYPE@[586; 600)
+ THIN_ARROW@[586; 588) "->"
+ WHITESPACE@[588; 589) " "
+ PATH_TYPE@[589; 600)
+ PATH@[589; 600)
+ PATH_SEGMENT@[589; 600)
+ NAME_REF@[589; 594)
+ IDENT@[589; 594) "Event"
+ TYPE_ARG_LIST@[594; 600)
+ L_ANGLE@[594; 595) "<"
+ TYPE_ARG@[595; 599)
+ PATH_TYPE@[595; 599)
+ PATH@[595; 599)
+ PATH_SEGMENT@[595; 599)
+ NAME_REF@[595; 599)
+ IDENT@[595; 599) "Self"
+ R_ANGLE@[599; 600) ">"
+ R_PAREN@[600; 601) ")"
+ WHITESPACE@[601; 602) " "
+ BLOCK@[602; 683)
+ L_CURLY@[602; 603) "{"
+ WHITESPACE@[603; 612) "\n "
+ ATTR@[612; 639)
+ POUND@[612; 613) "#"
+ EXCL@[613; 614) "!"
+ TOKEN_TREE@[614; 639)
+ L_BRACK@[614; 615) "["
+ IDENT@[615; 620) "allow"
+ TOKEN_TREE@[620; 638)
+ L_PAREN@[620; 621) "("
+ IDENT@[621; 637) "unused_variables"
+ R_PAREN@[637; 638) ")"
+ R_BRACK@[638; 639) "]"
+ WHITESPACE@[639; 640) " "
+ COMMENT@[640; 677) "// this is `inner_at ..."
+ WHITESPACE@[677; 682) "\n "
+ R_CURLY@[682; 683) "}"
+ WHITESPACE@[683; 684) "\n"
+ R_CURLY@[684; 685) "}"
+ WHITESPACE@[685; 686) "\n"
--- /dev/null
+extern "C" {
+ //! This is a doc comment
+ #![doc("This is also a doc comment")]
+}
--- /dev/null
+SOURCE_FILE@[0; 87)
+ EXTERN_BLOCK@[0; 86)
+ ABI@[0; 10)
+ EXTERN_KW@[0; 6) "extern"
+ WHITESPACE@[6; 7) " "
+ STRING@[7; 10) "\"C\""
+ WHITESPACE@[10; 11) " "
+ EXTERN_ITEM_LIST@[11; 86)
+ L_CURLY@[11; 12) "{"
+ WHITESPACE@[12; 17) "\n "
+ COMMENT@[17; 42) "//! This is a doc com ..."
+ WHITESPACE@[42; 47) "\n "
+ ATTR@[47; 84)
+ POUND@[47; 48) "#"
+ EXCL@[48; 49) "!"
+ TOKEN_TREE@[49; 84)
+ L_BRACK@[49; 50) "["
+ IDENT@[50; 53) "doc"
+ TOKEN_TREE@[53; 83)
+ L_PAREN@[53; 54) "("
+ STRING@[54; 82) "\"This is also a doc c ..."
+ R_PAREN@[82; 83) ")"
+ R_BRACK@[83; 84) "]"
+ WHITESPACE@[84; 85) "\n"
+ R_CURLY@[85; 86) "}"
+ WHITESPACE@[86; 87) "\n"
--- /dev/null
+// https://github.com/rust-analyzer/rust-analyzer/issues/972
+
+fn main() {
+ match Some(-1) {
+ Some(-1) => (),
+ _ => (),
+ }
+
+ match Some((-1, -1)) {
+ Some((-1, -1)) => (),
+ _ => (),
+ }
+
+ match A::B(-1, -1) {
+ A::B(-1, -1) => (),
+ _ => (),
+ }
+
+ if let Some(-1) = Some(-1) {
+ }
+}
+
+enum A {
+ B(i8, i8)
+}
+
+fn foo(-128..=127: i8) {}
--- /dev/null
+SOURCE_FILE@[0; 395)
+ COMMENT@[0; 60) "// https://github.com ..."
+ WHITESPACE@[60; 62) "\n\n"
+ FN_DEF@[62; 341)
+ FN_KW@[62; 64) "fn"
+ WHITESPACE@[64; 65) " "
+ NAME@[65; 69)
+ IDENT@[65; 69) "main"
+ PARAM_LIST@[69; 71)
+ L_PAREN@[69; 70) "("
+ R_PAREN@[70; 71) ")"
+ WHITESPACE@[71; 72) " "
+ BLOCK@[72; 341)
+ L_CURLY@[72; 73) "{"
+ WHITESPACE@[73; 78) "\n "
+ EXPR_STMT@[78; 141)
+ MATCH_EXPR@[78; 141)
+ MATCH_KW@[78; 83) "match"
+ WHITESPACE@[83; 84) " "
+ CALL_EXPR@[84; 92)
+ PATH_EXPR@[84; 88)
+ PATH@[84; 88)
+ PATH_SEGMENT@[84; 88)
+ NAME_REF@[84; 88)
+ IDENT@[84; 88) "Some"
+ ARG_LIST@[88; 92)
+ L_PAREN@[88; 89) "("
+ PREFIX_EXPR@[89; 91)
+ MINUS@[89; 90) "-"
+ LITERAL@[90; 91)
+ INT_NUMBER@[90; 91) "1"
+ R_PAREN@[91; 92) ")"
+ WHITESPACE@[92; 93) " "
+ MATCH_ARM_LIST@[93; 141)
+ L_CURLY@[93; 94) "{"
+ WHITESPACE@[94; 103) "\n "
+ MATCH_ARM@[103; 117)
+ TUPLE_STRUCT_PAT@[103; 111)
+ PATH@[103; 107)
+ PATH_SEGMENT@[103; 107)
+ NAME_REF@[103; 107)
+ IDENT@[103; 107) "Some"
+ L_PAREN@[107; 108) "("
+ LITERAL_PAT@[108; 110)
+ MINUS@[108; 109) "-"
+ LITERAL@[109; 110)
+ INT_NUMBER@[109; 110) "1"
+ R_PAREN@[110; 111) ")"
+ WHITESPACE@[111; 112) " "
+ FAT_ARROW@[112; 114) "=>"
+ WHITESPACE@[114; 115) " "
+ TUPLE_EXPR@[115; 117)
+ L_PAREN@[115; 116) "("
+ R_PAREN@[116; 117) ")"
+ COMMA@[117; 118) ","
+ WHITESPACE@[118; 127) "\n "
+ MATCH_ARM@[127; 134)
+ PLACEHOLDER_PAT@[127; 128)
+ UNDERSCORE@[127; 128) "_"
+ WHITESPACE@[128; 129) " "
+ FAT_ARROW@[129; 131) "=>"
+ WHITESPACE@[131; 132) " "
+ TUPLE_EXPR@[132; 134)
+ L_PAREN@[132; 133) "("
+ R_PAREN@[133; 134) ")"
+ COMMA@[134; 135) ","
+ WHITESPACE@[135; 140) "\n "
+ R_CURLY@[140; 141) "}"
+ WHITESPACE@[141; 147) "\n\n "
+ EXPR_STMT@[147; 222)
+ MATCH_EXPR@[147; 222)
+ MATCH_KW@[147; 152) "match"
+ WHITESPACE@[152; 153) " "
+ CALL_EXPR@[153; 167)
+ PATH_EXPR@[153; 157)
+ PATH@[153; 157)
+ PATH_SEGMENT@[153; 157)
+ NAME_REF@[153; 157)
+ IDENT@[153; 157) "Some"
+ ARG_LIST@[157; 167)
+ L_PAREN@[157; 158) "("
+ TUPLE_EXPR@[158; 166)
+ L_PAREN@[158; 159) "("
+ PREFIX_EXPR@[159; 161)
+ MINUS@[159; 160) "-"
+ LITERAL@[160; 161)
+ INT_NUMBER@[160; 161) "1"
+ COMMA@[161; 162) ","
+ WHITESPACE@[162; 163) " "
+ PREFIX_EXPR@[163; 165)
+ MINUS@[163; 164) "-"
+ LITERAL@[164; 165)
+ INT_NUMBER@[164; 165) "1"
+ R_PAREN@[165; 166) ")"
+ R_PAREN@[166; 167) ")"
+ WHITESPACE@[167; 168) " "
+ MATCH_ARM_LIST@[168; 222)
+ L_CURLY@[168; 169) "{"
+ WHITESPACE@[169; 178) "\n "
+ MATCH_ARM@[178; 198)
+ TUPLE_STRUCT_PAT@[178; 192)
+ PATH@[178; 182)
+ PATH_SEGMENT@[178; 182)
+ NAME_REF@[178; 182)
+ IDENT@[178; 182) "Some"
+ L_PAREN@[182; 183) "("
+ TUPLE_PAT@[183; 191)
+ L_PAREN@[183; 184) "("
+ LITERAL_PAT@[184; 186)
+ MINUS@[184; 185) "-"
+ LITERAL@[185; 186)
+ INT_NUMBER@[185; 186) "1"
+ COMMA@[186; 187) ","
+ WHITESPACE@[187; 188) " "
+ LITERAL_PAT@[188; 190)
+ MINUS@[188; 189) "-"
+ LITERAL@[189; 190)
+ INT_NUMBER@[189; 190) "1"
+ R_PAREN@[190; 191) ")"
+ R_PAREN@[191; 192) ")"
+ WHITESPACE@[192; 193) " "
+ FAT_ARROW@[193; 195) "=>"
+ WHITESPACE@[195; 196) " "
+ TUPLE_EXPR@[196; 198)
+ L_PAREN@[196; 197) "("
+ R_PAREN@[197; 198) ")"
+ COMMA@[198; 199) ","
+ WHITESPACE@[199; 208) "\n "
+ MATCH_ARM@[208; 215)
+ PLACEHOLDER_PAT@[208; 209)
+ UNDERSCORE@[208; 209) "_"
+ WHITESPACE@[209; 210) " "
+ FAT_ARROW@[210; 212) "=>"
+ WHITESPACE@[212; 213) " "
+ TUPLE_EXPR@[213; 215)
+ L_PAREN@[213; 214) "("
+ R_PAREN@[214; 215) ")"
+ COMMA@[215; 216) ","
+ WHITESPACE@[216; 221) "\n "
+ R_CURLY@[221; 222) "}"
+ WHITESPACE@[222; 228) "\n\n "
+ EXPR_STMT@[228; 299)
+ MATCH_EXPR@[228; 299)
+ MATCH_KW@[228; 233) "match"
+ WHITESPACE@[233; 234) " "
+ CALL_EXPR@[234; 246)
+ PATH_EXPR@[234; 238)
+ PATH@[234; 238)
+ PATH@[234; 235)
+ PATH_SEGMENT@[234; 235)
+ NAME_REF@[234; 235)
+ IDENT@[234; 235) "A"
+ COLONCOLON@[235; 237) "::"
+ PATH_SEGMENT@[237; 238)
+ NAME_REF@[237; 238)
+ IDENT@[237; 238) "B"
+ ARG_LIST@[238; 246)
+ L_PAREN@[238; 239) "("
+ PREFIX_EXPR@[239; 241)
+ MINUS@[239; 240) "-"
+ LITERAL@[240; 241)
+ INT_NUMBER@[240; 241) "1"
+ COMMA@[241; 242) ","
+ WHITESPACE@[242; 243) " "
+ PREFIX_EXPR@[243; 245)
+ MINUS@[243; 244) "-"
+ LITERAL@[244; 245)
+ INT_NUMBER@[244; 245) "1"
+ R_PAREN@[245; 246) ")"
+ WHITESPACE@[246; 247) " "
+ MATCH_ARM_LIST@[247; 299)
+ L_CURLY@[247; 248) "{"
+ WHITESPACE@[248; 257) "\n "
+ MATCH_ARM@[257; 275)
+ TUPLE_STRUCT_PAT@[257; 269)
+ PATH@[257; 261)
+ PATH@[257; 258)
+ PATH_SEGMENT@[257; 258)
+ NAME_REF@[257; 258)
+ IDENT@[257; 258) "A"
+ COLONCOLON@[258; 260) "::"
+ PATH_SEGMENT@[260; 261)
+ NAME_REF@[260; 261)
+ IDENT@[260; 261) "B"
+ L_PAREN@[261; 262) "("
+ LITERAL_PAT@[262; 264)
+ MINUS@[262; 263) "-"
+ LITERAL@[263; 264)
+ INT_NUMBER@[263; 264) "1"
+ COMMA@[264; 265) ","
+ WHITESPACE@[265; 266) " "
+ LITERAL_PAT@[266; 268)
+ MINUS@[266; 267) "-"
+ LITERAL@[267; 268)
+ INT_NUMBER@[267; 268) "1"
+ R_PAREN@[268; 269) ")"
+ WHITESPACE@[269; 270) " "
+ FAT_ARROW@[270; 272) "=>"
+ WHITESPACE@[272; 273) " "
+ TUPLE_EXPR@[273; 275)
+ L_PAREN@[273; 274) "("
+ R_PAREN@[274; 275) ")"
+ COMMA@[275; 276) ","
+ WHITESPACE@[276; 285) "\n "
+ MATCH_ARM@[285; 292)
+ PLACEHOLDER_PAT@[285; 286)
+ UNDERSCORE@[285; 286) "_"
+ WHITESPACE@[286; 287) " "
+ FAT_ARROW@[287; 289) "=>"
+ WHITESPACE@[289; 290) " "
+ TUPLE_EXPR@[290; 292)
+ L_PAREN@[290; 291) "("
+ R_PAREN@[291; 292) ")"
+ COMMA@[292; 293) ","
+ WHITESPACE@[293; 298) "\n "
+ R_CURLY@[298; 299) "}"
+ WHITESPACE@[299; 305) "\n\n "
+ IF_EXPR@[305; 339)
+ IF_KW@[305; 307) "if"
+ WHITESPACE@[307; 308) " "
+ CONDITION@[308; 331)
+ LET_KW@[308; 311) "let"
+ WHITESPACE@[311; 312) " "
+ TUPLE_STRUCT_PAT@[312; 320)
+ PATH@[312; 316)
+ PATH_SEGMENT@[312; 316)
+ NAME_REF@[312; 316)
+ IDENT@[312; 316) "Some"
+ L_PAREN@[316; 317) "("
+ LITERAL_PAT@[317; 319)
+ MINUS@[317; 318) "-"
+ LITERAL@[318; 319)
+ INT_NUMBER@[318; 319) "1"
+ R_PAREN@[319; 320) ")"
+ WHITESPACE@[320; 321) " "
+ EQ@[321; 322) "="
+ WHITESPACE@[322; 323) " "
+ CALL_EXPR@[323; 331)
+ PATH_EXPR@[323; 327)
+ PATH@[323; 327)
+ PATH_SEGMENT@[323; 327)
+ NAME_REF@[323; 327)
+ IDENT@[323; 327) "Some"
+ ARG_LIST@[327; 331)
+ L_PAREN@[327; 328) "("
+ PREFIX_EXPR@[328; 330)
+ MINUS@[328; 329) "-"
+ LITERAL@[329; 330)
+ INT_NUMBER@[329; 330) "1"
+ R_PAREN@[330; 331) ")"
+ WHITESPACE@[331; 332) " "
+ BLOCK@[332; 339)
+ L_CURLY@[332; 333) "{"
+ WHITESPACE@[333; 338) "\n "
+ R_CURLY@[338; 339) "}"
+ WHITESPACE@[339; 340) "\n"
+ R_CURLY@[340; 341) "}"
+ WHITESPACE@[341; 343) "\n\n"
+ ENUM_DEF@[343; 367)
+ ENUM_KW@[343; 347) "enum"
+ WHITESPACE@[347; 348) " "
+ NAME@[348; 349)
+ IDENT@[348; 349) "A"
+ WHITESPACE@[349; 350) " "
+ ENUM_VARIANT_LIST@[350; 367)
+ L_CURLY@[350; 351) "{"
+ WHITESPACE@[351; 356) "\n "
+ ENUM_VARIANT@[356; 365)
+ NAME@[356; 357)
+ IDENT@[356; 357) "B"
+ POS_FIELD_DEF_LIST@[357; 365)
+ L_PAREN@[357; 358) "("
+ POS_FIELD_DEF@[358; 360)
+ PATH_TYPE@[358; 360)
+ PATH@[358; 360)
+ PATH_SEGMENT@[358; 360)
+ NAME_REF@[358; 360)
+ IDENT@[358; 360) "i8"
+ COMMA@[360; 361) ","
+ WHITESPACE@[361; 362) " "
+ POS_FIELD_DEF@[362; 364)
+ PATH_TYPE@[362; 364)
+ PATH@[362; 364)
+ PATH_SEGMENT@[362; 364)
+ NAME_REF@[362; 364)
+ IDENT@[362; 364) "i8"
+ R_PAREN@[364; 365) ")"
+ WHITESPACE@[365; 366) "\n"
+ R_CURLY@[366; 367) "}"
+ WHITESPACE@[367; 369) "\n\n"
+ FN_DEF@[369; 394)
+ FN_KW@[369; 371) "fn"
+ WHITESPACE@[371; 372) " "
+ NAME@[372; 375)
+ IDENT@[372; 375) "foo"
+ PARAM_LIST@[375; 391)
+ L_PAREN@[375; 376) "("
+ PARAM@[376; 390)
+ RANGE_PAT@[376; 386)
+ LITERAL_PAT@[376; 380)
+ MINUS@[376; 377) "-"
+ LITERAL@[377; 380)
+ INT_NUMBER@[377; 380) "128"
+ DOTDOTEQ@[380; 383) "..="
+ LITERAL_PAT@[383; 386)
+ LITERAL@[383; 386)
+ INT_NUMBER@[383; 386) "127"
+ COLON@[386; 387) ":"
+ WHITESPACE@[387; 388) " "
+ PATH_TYPE@[388; 390)
+ PATH@[388; 390)
+ PATH_SEGMENT@[388; 390)
+ NAME_REF@[388; 390)
+ IDENT@[388; 390) "i8"
+ R_PAREN@[390; 391) ")"
+ WHITESPACE@[391; 392) " "
+ BLOCK@[392; 394)
+ L_CURLY@[392; 393) "{"
+ R_CURLY@[393; 394) "}"
+ WHITESPACE@[394; 395) "\n"
--- /dev/null
+// https://github.com/rust-analyzer/rust-analyzer/pull/983
+
+fn compound_assignment() {
+ let mut a = 0;
+ a += 1;
+ a -= 2;
+ a *= 3;
+ a %= 4;
+ a /= 5;
+ a |= 6;
+ a &= 7;
+ a ^= 8;
+ a <= 9;
+ a >= 10;
+ a >>= 11;
+ a <<= 12;
+}
--- /dev/null
+SOURCE_FILE@[0; 257)
+ COMMENT@[0; 58) "// https://github.com ..."
+ WHITESPACE@[58; 60) "\n\n"
+ FN_DEF@[60; 256)
+ FN_KW@[60; 62) "fn"
+ WHITESPACE@[62; 63) " "
+ NAME@[63; 82)
+ IDENT@[63; 82) "compound_assignment"
+ PARAM_LIST@[82; 84)
+ L_PAREN@[82; 83) "("
+ R_PAREN@[83; 84) ")"
+ WHITESPACE@[84; 85) " "
+ BLOCK@[85; 256)
+ L_CURLY@[85; 86) "{"
+ WHITESPACE@[86; 91) "\n "
+ LET_STMT@[91; 105)
+ LET_KW@[91; 94) "let"
+ WHITESPACE@[94; 95) " "
+ BIND_PAT@[95; 100)
+ MUT_KW@[95; 98) "mut"
+ WHITESPACE@[98; 99) " "
+ NAME@[99; 100)
+ IDENT@[99; 100) "a"
+ WHITESPACE@[100; 101) " "
+ EQ@[101; 102) "="
+ WHITESPACE@[102; 103) " "
+ LITERAL@[103; 104)
+ INT_NUMBER@[103; 104) "0"
+ SEMI@[104; 105) ";"
+ WHITESPACE@[105; 110) "\n "
+ EXPR_STMT@[110; 117)
+ BIN_EXPR@[110; 116)
+ PATH_EXPR@[110; 111)
+ PATH@[110; 111)
+ PATH_SEGMENT@[110; 111)
+ NAME_REF@[110; 111)
+ IDENT@[110; 111) "a"
+ WHITESPACE@[111; 112) " "
+ PLUSEQ@[112; 114) "+="
+ WHITESPACE@[114; 115) " "
+ LITERAL@[115; 116)
+ INT_NUMBER@[115; 116) "1"
+ SEMI@[116; 117) ";"
+ WHITESPACE@[117; 122) "\n "
+ EXPR_STMT@[122; 129)
+ BIN_EXPR@[122; 128)
+ PATH_EXPR@[122; 123)
+ PATH@[122; 123)
+ PATH_SEGMENT@[122; 123)
+ NAME_REF@[122; 123)
+ IDENT@[122; 123) "a"
+ WHITESPACE@[123; 124) " "
+ MINUSEQ@[124; 126) "-="
+ WHITESPACE@[126; 127) " "
+ LITERAL@[127; 128)
+ INT_NUMBER@[127; 128) "2"
+ SEMI@[128; 129) ";"
+ WHITESPACE@[129; 134) "\n "
+ EXPR_STMT@[134; 141)
+ BIN_EXPR@[134; 140)
+ PATH_EXPR@[134; 135)
+ PATH@[134; 135)
+ PATH_SEGMENT@[134; 135)
+ NAME_REF@[134; 135)
+ IDENT@[134; 135) "a"
+ WHITESPACE@[135; 136) " "
+ STAREQ@[136; 138) "*="
+ WHITESPACE@[138; 139) " "
+ LITERAL@[139; 140)
+ INT_NUMBER@[139; 140) "3"
+ SEMI@[140; 141) ";"
+ WHITESPACE@[141; 146) "\n "
+ EXPR_STMT@[146; 153)
+ BIN_EXPR@[146; 152)
+ PATH_EXPR@[146; 147)
+ PATH@[146; 147)
+ PATH_SEGMENT@[146; 147)
+ NAME_REF@[146; 147)
+ IDENT@[146; 147) "a"
+ WHITESPACE@[147; 148) " "
+ PERCENTEQ@[148; 150) "%="
+ WHITESPACE@[150; 151) " "
+ LITERAL@[151; 152)
+ INT_NUMBER@[151; 152) "4"
+ SEMI@[152; 153) ";"
+ WHITESPACE@[153; 158) "\n "
+ EXPR_STMT@[158; 165)
+ BIN_EXPR@[158; 164)
+ PATH_EXPR@[158; 159)
+ PATH@[158; 159)
+ PATH_SEGMENT@[158; 159)
+ NAME_REF@[158; 159)
+ IDENT@[158; 159) "a"
+ WHITESPACE@[159; 160) " "
+ SLASHEQ@[160; 162) "/="
+ WHITESPACE@[162; 163) " "
+ LITERAL@[163; 164)
+ INT_NUMBER@[163; 164) "5"
+ SEMI@[164; 165) ";"
+ WHITESPACE@[165; 170) "\n "
+ EXPR_STMT@[170; 177)
+ BIN_EXPR@[170; 176)
+ PATH_EXPR@[170; 171)
+ PATH@[170; 171)
+ PATH_SEGMENT@[170; 171)
+ NAME_REF@[170; 171)
+ IDENT@[170; 171) "a"
+ WHITESPACE@[171; 172) " "
+ PIPEEQ@[172; 174) "|="
+ WHITESPACE@[174; 175) " "
+ LITERAL@[175; 176)
+ INT_NUMBER@[175; 176) "6"
+ SEMI@[176; 177) ";"
+ WHITESPACE@[177; 182) "\n "
+ EXPR_STMT@[182; 189)
+ BIN_EXPR@[182; 188)
+ PATH_EXPR@[182; 183)
+ PATH@[182; 183)
+ PATH_SEGMENT@[182; 183)
+ NAME_REF@[182; 183)
+ IDENT@[182; 183) "a"
+ WHITESPACE@[183; 184) " "
+ AMPEQ@[184; 186) "&="
+ WHITESPACE@[186; 187) " "
+ LITERAL@[187; 188)
+ INT_NUMBER@[187; 188) "7"
+ SEMI@[188; 189) ";"
+ WHITESPACE@[189; 194) "\n "
+ EXPR_STMT@[194; 201)
+ BIN_EXPR@[194; 200)
+ PATH_EXPR@[194; 195)
+ PATH@[194; 195)
+ PATH_SEGMENT@[194; 195)
+ NAME_REF@[194; 195)
+ IDENT@[194; 195) "a"
+ WHITESPACE@[195; 196) " "
+ CARETEQ@[196; 198) "^="
+ WHITESPACE@[198; 199) " "
+ LITERAL@[199; 200)
+ INT_NUMBER@[199; 200) "8"
+ SEMI@[200; 201) ";"
+ WHITESPACE@[201; 206) "\n "
+ EXPR_STMT@[206; 213)
+ BIN_EXPR@[206; 212)
+ PATH_EXPR@[206; 207)
+ PATH@[206; 207)
+ PATH_SEGMENT@[206; 207)
+ NAME_REF@[206; 207)
+ IDENT@[206; 207) "a"
+ WHITESPACE@[207; 208) " "
+ LTEQ@[208; 210) "<="
+ WHITESPACE@[210; 211) " "
+ LITERAL@[211; 212)
+ INT_NUMBER@[211; 212) "9"
+ SEMI@[212; 213) ";"
+ WHITESPACE@[213; 218) "\n "
+ EXPR_STMT@[218; 226)
+ BIN_EXPR@[218; 225)
+ PATH_EXPR@[218; 219)
+ PATH@[218; 219)
+ PATH_SEGMENT@[218; 219)
+ NAME_REF@[218; 219)
+ IDENT@[218; 219) "a"
+ WHITESPACE@[219; 220) " "
+ GTEQ@[220; 222) ">="
+ WHITESPACE@[222; 223) " "
+ LITERAL@[223; 225)
+ INT_NUMBER@[223; 225) "10"
+ SEMI@[225; 226) ";"
+ WHITESPACE@[226; 231) "\n "
+ EXPR_STMT@[231; 240)
+ BIN_EXPR@[231; 239)
+ PATH_EXPR@[231; 232)
+ PATH@[231; 232)
+ PATH_SEGMENT@[231; 232)
+ NAME_REF@[231; 232)
+ IDENT@[231; 232) "a"
+ WHITESPACE@[232; 233) " "
+ SHREQ@[233; 236) ">>="
+ WHITESPACE@[236; 237) " "
+ LITERAL@[237; 239)
+ INT_NUMBER@[237; 239) "11"
+ SEMI@[239; 240) ";"
+ WHITESPACE@[240; 245) "\n "
+ EXPR_STMT@[245; 254)
+ BIN_EXPR@[245; 253)
+ PATH_EXPR@[245; 246)
+ PATH@[245; 246)
+ PATH_SEGMENT@[245; 246)
+ NAME_REF@[245; 246)
+ IDENT@[245; 246) "a"
+ WHITESPACE@[246; 247) " "
+ SHLEQ@[247; 250) "<<="
+ WHITESPACE@[250; 251) " "
+ LITERAL@[251; 253)
+ INT_NUMBER@[251; 253) "12"
+ SEMI@[253; 254) ";"
+ WHITESPACE@[254; 255) "\n"
+ R_CURLY@[255; 256) "}"
+ WHITESPACE@[256; 257) "\n"
--- /dev/null
+fn foo() {
+ async {};
+ async move {};
+}
+
--- /dev/null
+SOURCE_FILE@[0; 47)
+ FN_DEF@[0; 45)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 8)
+ L_PAREN@[6; 7) "("
+ R_PAREN@[7; 8) ")"
+ WHITESPACE@[8; 9) " "
+ BLOCK@[9; 45)
+ L_CURLY@[9; 10) "{"
+ WHITESPACE@[10; 15) "\n "
+ EXPR_STMT@[15; 24)
+ BLOCK_EXPR@[15; 23)
+ ASYNC_KW@[15; 20) "async"
+ WHITESPACE@[20; 21) " "
+ BLOCK@[21; 23)
+ L_CURLY@[21; 22) "{"
+ R_CURLY@[22; 23) "}"
+ SEMI@[23; 24) ";"
+ WHITESPACE@[24; 29) "\n "
+ EXPR_STMT@[29; 43)
+ BLOCK_EXPR@[29; 42)
+ ASYNC_KW@[29; 34) "async"
+ WHITESPACE@[34; 35) " "
+ MOVE_KW@[35; 39) "move"
+ WHITESPACE@[39; 40) " "
+ BLOCK@[40; 42)
+ L_CURLY@[40; 41) "{"
+ R_CURLY@[41; 42) "}"
+ SEMI@[42; 43) ";"
+ WHITESPACE@[43; 44) "\n"
+ R_CURLY@[44; 45) "}"
+ WHITESPACE@[45; 47) "\n\n"
--- /dev/null
+fn foo(x: impl std::future::Future<Output = i32>) {}
+
+fn main() {
+ foo(async move { 12 })
+}
--- /dev/null
+SOURCE_FILE@[0; 95)
+ FN_DEF@[0; 52)
+ FN_KW@[0; 2) "fn"
+ WHITESPACE@[2; 3) " "
+ NAME@[3; 6)
+ IDENT@[3; 6) "foo"
+ PARAM_LIST@[6; 49)
+ L_PAREN@[6; 7) "("
+ PARAM@[7; 48)
+ BIND_PAT@[7; 8)
+ NAME@[7; 8)
+ IDENT@[7; 8) "x"
+ COLON@[8; 9) ":"
+ WHITESPACE@[9; 10) " "
+ IMPL_TRAIT_TYPE@[10; 48)
+ IMPL_KW@[10; 14) "impl"
+ WHITESPACE@[14; 15) " "
+ TYPE_BOUND_LIST@[15; 48)
+ TYPE_BOUND@[15; 48)
+ PATH_TYPE@[15; 48)
+ PATH@[15; 48)
+ PATH@[15; 26)
+ PATH@[15; 18)
+ PATH_SEGMENT@[15; 18)
+ NAME_REF@[15; 18)
+ IDENT@[15; 18) "std"
+ COLONCOLON@[18; 20) "::"
+ PATH_SEGMENT@[20; 26)
+ NAME_REF@[20; 26)
+ IDENT@[20; 26) "future"
+ COLONCOLON@[26; 28) "::"
+ PATH_SEGMENT@[28; 48)
+ NAME_REF@[28; 34)
+ IDENT@[28; 34) "Future"
+ TYPE_ARG_LIST@[34; 48)
+ L_ANGLE@[34; 35) "<"
+ ASSOC_TYPE_ARG@[35; 47)
+ NAME_REF@[35; 41)
+ IDENT@[35; 41) "Output"
+ WHITESPACE@[41; 42) " "
+ EQ@[42; 43) "="
+ WHITESPACE@[43; 44) " "
+ PATH_TYPE@[44; 47)
+ PATH@[44; 47)
+ PATH_SEGMENT@[44; 47)
+ NAME_REF@[44; 47)
+ IDENT@[44; 47) "i32"
+ R_ANGLE@[47; 48) ">"
+ R_PAREN@[48; 49) ")"
+ WHITESPACE@[49; 50) " "
+ BLOCK@[50; 52)
+ L_CURLY@[50; 51) "{"
+ R_CURLY@[51; 52) "}"
+ WHITESPACE@[52; 54) "\n\n"
+ FN_DEF@[54; 94)
+ FN_KW@[54; 56) "fn"
+ WHITESPACE@[56; 57) " "
+ NAME@[57; 61)
+ IDENT@[57; 61) "main"
+ PARAM_LIST@[61; 63)
+ L_PAREN@[61; 62) "("
+ R_PAREN@[62; 63) ")"
+ WHITESPACE@[63; 64) " "
+ BLOCK@[64; 94)
+ L_CURLY@[64; 65) "{"
+ WHITESPACE@[65; 70) "\n "
+ CALL_EXPR@[70; 92)
+ PATH_EXPR@[70; 73)
+ PATH@[70; 73)
+ PATH_SEGMENT@[70; 73)
+ NAME_REF@[70; 73)
+ IDENT@[70; 73) "foo"
+ ARG_LIST@[73; 92)
+ L_PAREN@[73; 74) "("
+ BLOCK_EXPR@[74; 91)
+ ASYNC_KW@[74; 79) "async"
+ WHITESPACE@[79; 80) " "
+ MOVE_KW@[80; 84) "move"
+ WHITESPACE@[84; 85) " "
+ BLOCK@[85; 91)
+ L_CURLY@[85; 86) "{"
+ WHITESPACE@[86; 87) " "
+ LITERAL@[87; 89)
+ INT_NUMBER@[87; 89) "12"
+ WHITESPACE@[89; 90) " "
+ R_CURLY@[90; 91) "}"
+ R_PAREN@[91; 92) ")"
+ WHITESPACE@[92; 93) "\n"
+ R_CURLY@[93; 94) "}"
+ WHITESPACE@[94; 95) "\n"
--- /dev/null
+0
+1
+
+
+
+0
\ No newline at end of file
--- /dev/null
+0
+1
+
+bb"
\ No newline at end of file
--- /dev/null
+1
+1
+
+""!
\ No newline at end of file
--- /dev/null
+0
+0
+}
+{;
\ No newline at end of file
--- /dev/null
+05
+1
+
+
+
+b'\ 1
+
\ No newline at end of file
+++ /dev/null
-/* */
-/**/
-/* /* */ */
-/*
+++ /dev/null
-COMMENT 5 "/* */"
-WHITESPACE 1 "\n"
-COMMENT 4 "/**/"
-WHITESPACE 1 "\n"
-COMMENT 11 "/* /* */ */"
-WHITESPACE 1 "\n"
-COMMENT 3 "/*\n"
+++ /dev/null
-hello world
\ No newline at end of file
+++ /dev/null
-IDENT 5 "hello"
-WHITESPACE 1 " "
-IDENT 5 "world"
+++ /dev/null
-a b c
-d
-
-e f
+++ /dev/null
-IDENT 1 "a"
-WHITESPACE 1 " "
-IDENT 1 "b"
-WHITESPACE 2 " "
-IDENT 1 "c"
-WHITESPACE 1 "\n"
-IDENT 1 "d"
-WHITESPACE 2 "\n\n"
-IDENT 1 "e"
-WHITESPACE 1 "\t"
-IDENT 1 "f"
-WHITESPACE 1 "\n"
+++ /dev/null
-foo foo_ _foo _ __ x привет
+++ /dev/null
-IDENT 3 "foo"
-WHITESPACE 1 " "
-IDENT 4 "foo_"
-WHITESPACE 1 " "
-IDENT 4 "_foo"
-WHITESPACE 1 " "
-UNDERSCORE 1 "_"
-WHITESPACE 1 " "
-IDENT 2 "__"
-WHITESPACE 1 " "
-IDENT 1 "x"
-WHITESPACE 1 " "
-IDENT 12 "привет"
-WHITESPACE 1 "\n"
+++ /dev/null
-0 0b 0o 0x 00 0_ 0. 0e 0E 0z
-01790 0b1790 0o1790 0x1790aAbBcCdDeEfF 001279 0_1279 0.1279 0e1279 0E1279
-0..2
-0.foo()
-0e+1
-0.e+1
-0.0E-2
-0___0.10000____0000e+111__
-1i64 92.0f32 11__s
\ No newline at end of file
+++ /dev/null
-INT_NUMBER 1 "0"
-WHITESPACE 1 " "
-INT_NUMBER 2 "0b"
-WHITESPACE 1 " "
-INT_NUMBER 2 "0o"
-WHITESPACE 1 " "
-INT_NUMBER 2 "0x"
-WHITESPACE 1 " "
-INT_NUMBER 2 "00"
-WHITESPACE 1 " "
-INT_NUMBER 2 "0_"
-WHITESPACE 1 " "
-FLOAT_NUMBER 2 "0."
-WHITESPACE 1 " "
-FLOAT_NUMBER 2 "0e"
-WHITESPACE 1 " "
-FLOAT_NUMBER 2 "0E"
-WHITESPACE 1 " "
-INT_NUMBER 2 "0z"
-WHITESPACE 1 "\n"
-INT_NUMBER 5 "01790"
-WHITESPACE 1 " "
-INT_NUMBER 6 "0b1790"
-WHITESPACE 1 " "
-INT_NUMBER 6 "0o1790"
-WHITESPACE 1 " "
-INT_NUMBER 18 "0x1790aAbBcCdDeEfF"
-WHITESPACE 1 " "
-INT_NUMBER 6 "001279"
-WHITESPACE 1 " "
-INT_NUMBER 6 "0_1279"
-WHITESPACE 1 " "
-FLOAT_NUMBER 6 "0.1279"
-WHITESPACE 1 " "
-FLOAT_NUMBER 6 "0e1279"
-WHITESPACE 1 " "
-FLOAT_NUMBER 6 "0E1279"
-WHITESPACE 1 "\n"
-INT_NUMBER 1 "0"
-DOT 1 "."
-DOT 1 "."
-INT_NUMBER 1 "2"
-WHITESPACE 1 "\n"
-INT_NUMBER 1 "0"
-DOT 1 "."
-IDENT 3 "foo"
-L_PAREN 1 "("
-R_PAREN 1 ")"
-WHITESPACE 1 "\n"
-FLOAT_NUMBER 4 "0e+1"
-WHITESPACE 1 "\n"
-INT_NUMBER 1 "0"
-DOT 1 "."
-IDENT 1 "e"
-PLUS 1 "+"
-INT_NUMBER 1 "1"
-WHITESPACE 1 "\n"
-FLOAT_NUMBER 6 "0.0E-2"
-WHITESPACE 1 "\n"
-FLOAT_NUMBER 26 "0___0.10000____0000e+111__"
-WHITESPACE 1 "\n"
-INT_NUMBER 4 "1i64"
-WHITESPACE 1 " "
-FLOAT_NUMBER 7 "92.0f32"
-WHITESPACE 1 " "
-INT_NUMBER 5 "11__s"
+++ /dev/null
-; , ( ) { } [ ] < > @ # ~ ? $ & | + * / ^ %
-. .. ... ..=
-: ::
-= =>
-! !=
-- ->
+++ /dev/null
-SEMI 1 ";"
-WHITESPACE 1 " "
-COMMA 1 ","
-WHITESPACE 1 " "
-L_PAREN 1 "("
-WHITESPACE 1 " "
-R_PAREN 1 ")"
-WHITESPACE 1 " "
-L_CURLY 1 "{"
-WHITESPACE 1 " "
-R_CURLY 1 "}"
-WHITESPACE 1 " "
-L_BRACK 1 "["
-WHITESPACE 1 " "
-R_BRACK 1 "]"
-WHITESPACE 1 " "
-L_ANGLE 1 "<"
-WHITESPACE 1 " "
-R_ANGLE 1 ">"
-WHITESPACE 1 " "
-AT 1 "@"
-WHITESPACE 1 " "
-POUND 1 "#"
-WHITESPACE 1 " "
-TILDE 1 "~"
-WHITESPACE 1 " "
-QUESTION 1 "?"
-WHITESPACE 1 " "
-DOLLAR 1 "$"
-WHITESPACE 1 " "
-AMP 1 "&"
-WHITESPACE 1 " "
-PIPE 1 "|"
-WHITESPACE 1 " "
-PLUS 1 "+"
-WHITESPACE 1 " "
-STAR 1 "*"
-WHITESPACE 1 " "
-SLASH 1 "/"
-WHITESPACE 1 " "
-CARET 1 "^"
-WHITESPACE 1 " "
-PERCENT 1 "%"
-WHITESPACE 1 "\n"
-DOT 1 "."
-WHITESPACE 1 " "
-DOT 1 "."
-DOT 1 "."
-WHITESPACE 1 " "
-DOT 1 "."
-DOT 1 "."
-DOT 1 "."
-WHITESPACE 1 " "
-DOT 1 "."
-DOT 1 "."
-EQ 1 "="
-WHITESPACE 1 "\n"
-COLON 1 ":"
-WHITESPACE 1 " "
-COLON 1 ":"
-COLON 1 ":"
-WHITESPACE 1 "\n"
-EQ 1 "="
-WHITESPACE 1 " "
-EQ 1 "="
-R_ANGLE 1 ">"
-WHITESPACE 1 "\n"
-EXCL 1 "!"
-WHITESPACE 1 " "
-EXCL 1 "!"
-EQ 1 "="
-WHITESPACE 1 "\n"
-MINUS 1 "-"
-WHITESPACE 1 " "
-MINUS 1 "-"
-R_ANGLE 1 ">"
-WHITESPACE 1 "\n"
+++ /dev/null
-'x' ' ' '0' 'hello' '\x7f' '\n' '\\' '\''
+++ /dev/null
-CHAR 3 "\'x\'"
-WHITESPACE 1 " "
-CHAR 3 "\' \'"
-WHITESPACE 1 " "
-CHAR 3 "\'0\'"
-WHITESPACE 1 " "
-CHAR 7 "\'hello\'"
-WHITESPACE 1 " "
-CHAR 6 "\'\\x7f\'"
-WHITESPACE 1 " "
-CHAR 4 "\'\\n\'"
-WHITESPACE 1 " "
-CHAR 4 "\'\\\\\'"
-WHITESPACE 1 " "
-CHAR 4 "\'\\\'\'"
-WHITESPACE 1 "\n"
+++ /dev/null
-'a 'foo 'foo_bar_baz '_
+++ /dev/null
-LIFETIME 2 "\'a"
-WHITESPACE 1 " "
-LIFETIME 4 "\'foo"
-WHITESPACE 1 " "
-LIFETIME 12 "\'foo_bar_baz"
-WHITESPACE 1 " "
-LIFETIME 2 "\'_"
-WHITESPACE 1 "\n"
+++ /dev/null
-b'' b'x' b"foo" br""
-b''suf b""ix br""br
-b'\n' b'\\' b'\'' b'hello'
+++ /dev/null
-BYTE 3 "b\'\'"
-WHITESPACE 1 " "
-BYTE 4 "b\'x\'"
-WHITESPACE 1 " "
-BYTE_STRING 6 "b\"foo\""
-WHITESPACE 1 " "
-RAW_BYTE_STRING 4 "br\"\""
-WHITESPACE 1 "\n"
-BYTE 6 "b\'\'suf"
-WHITESPACE 1 " "
-BYTE_STRING 5 "b\"\"ix"
-WHITESPACE 1 " "
-RAW_BYTE_STRING 6 "br\"\"br"
-WHITESPACE 1 "\n"
-BYTE 5 "b\'\\n\'"
-WHITESPACE 1 " "
-BYTE 5 "b\'\\\\\'"
-WHITESPACE 1 " "
-BYTE 5 "b\'\\\'\'"
-WHITESPACE 1 " "
-BYTE 8 "b\'hello\'"
-WHITESPACE 1 "\n"
+++ /dev/null
-"hello" r"world" "\n\"\\no escape" "multi
-line"
+++ /dev/null
-STRING 7 "\"hello\""
-WHITESPACE 1 " "
-RAW_STRING 8 "r\"world\""
-WHITESPACE 1 " "
-STRING 17 "\"\\n\\\"\\\\no escape\""
-WHITESPACE 1 " "
-STRING 12 "\"multi\nline\""
-WHITESPACE 1 "\n"
+++ /dev/null
-#!/usr/bin/env bash
-// hello
-//! World
+++ /dev/null
-SHEBANG 19 "#!/usr/bin/env bash"
-WHITESPACE 1 "\n"
-COMMENT 8 "// hello"
-WHITESPACE 1 "\n"
-COMMENT 9 "//! World"
-WHITESPACE 1 "\n"
+++ /dev/null
-async fn use struct trait enum impl true false as extern crate
-mod pub self super in where for loop while if match const
-static mut type ref let else move return
+++ /dev/null
-ASYNC_KW 5 "async"
-WHITESPACE 1 " "
-FN_KW 2 "fn"
-WHITESPACE 1 " "
-USE_KW 3 "use"
-WHITESPACE 1 " "
-STRUCT_KW 6 "struct"
-WHITESPACE 1 " "
-TRAIT_KW 5 "trait"
-WHITESPACE 1 " "
-ENUM_KW 4 "enum"
-WHITESPACE 1 " "
-IMPL_KW 4 "impl"
-WHITESPACE 1 " "
-TRUE_KW 4 "true"
-WHITESPACE 1 " "
-FALSE_KW 5 "false"
-WHITESPACE 1 " "
-AS_KW 2 "as"
-WHITESPACE 1 " "
-EXTERN_KW 6 "extern"
-WHITESPACE 1 " "
-CRATE_KW 5 "crate"
-WHITESPACE 1 "\n"
-MOD_KW 3 "mod"
-WHITESPACE 1 " "
-PUB_KW 3 "pub"
-WHITESPACE 1 " "
-SELF_KW 4 "self"
-WHITESPACE 1 " "
-SUPER_KW 5 "super"
-WHITESPACE 1 " "
-IN_KW 2 "in"
-WHITESPACE 1 " "
-WHERE_KW 5 "where"
-WHITESPACE 1 " "
-FOR_KW 3 "for"
-WHITESPACE 1 " "
-LOOP_KW 4 "loop"
-WHITESPACE 1 " "
-WHILE_KW 5 "while"
-WHITESPACE 1 " "
-IF_KW 2 "if"
-WHITESPACE 1 " "
-MATCH_KW 5 "match"
-WHITESPACE 1 " "
-CONST_KW 5 "const"
-WHITESPACE 1 "\n"
-STATIC_KW 6 "static"
-WHITESPACE 1 " "
-MUT_KW 3 "mut"
-WHITESPACE 1 " "
-TYPE_KW 4 "type"
-WHITESPACE 1 " "
-REF_KW 3 "ref"
-WHITESPACE 1 " "
-LET_KW 3 "let"
-WHITESPACE 1 " "
-ELSE_KW 4 "else"
-WHITESPACE 1 " "
-MOVE_KW 4 "move"
-WHITESPACE 1 " "
-RETURN_KW 6 "return"
-WHITESPACE 1 "\n"
+++ /dev/null
-r###"this is a r##"raw"## string"###
+++ /dev/null
-RAW_STRING 36 "r###\"this is a r##\"raw\"## string\"###"
-WHITESPACE 1 "\n"
+++ /dev/null
-'1
\ No newline at end of file
+++ /dev/null
-LIFETIME 2 "\'1"
+++ /dev/null
-STRING 7 "\"hello\n"
+++ /dev/null
-r#raw_ident
+++ /dev/null
-IDENT 11 "r#raw_ident"
-WHITESPACE 1 "\n"
+++ /dev/null
-struct S {
- a: u32
- b: u32
-}
\ No newline at end of file
+++ /dev/null
-SOURCE_FILE@[0; 34)
- STRUCT_DEF@[0; 34)
- STRUCT_KW@[0; 6) "struct"
- WHITESPACE@[6; 7) " "
- NAME@[7; 8)
- IDENT@[7; 8) "S"
- WHITESPACE@[8; 9) " "
- NAMED_FIELD_DEF_LIST@[9; 34)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- NAMED_FIELD_DEF@[15; 21)
- NAME@[15; 16)
- IDENT@[15; 16) "a"
- COLON@[16; 17) ":"
- WHITESPACE@[17; 18) " "
- PATH_TYPE@[18; 21)
- PATH@[18; 21)
- PATH_SEGMENT@[18; 21)
- NAME_REF@[18; 21)
- IDENT@[18; 21) "u32"
- WHITESPACE@[21; 26) "\n "
- NAMED_FIELD_DEF@[26; 32)
- NAME@[26; 27)
- IDENT@[26; 27) "b"
- COLON@[27; 28) ":"
- WHITESPACE@[28; 29) " "
- PATH_TYPE@[29; 32)
- PATH@[29; 32)
- PATH_SEGMENT@[29; 32)
- NAME_REF@[29; 32)
- IDENT@[29; 32) "u32"
- WHITESPACE@[32; 33) "\n"
- R_CURLY@[33; 34) "}"
-error 21: expected COMMA
+++ /dev/null
-if match
-
-struct S {}
\ No newline at end of file
+++ /dev/null
-SOURCE_FILE@[0; 21)
- ERROR@[0; 2)
- IF_KW@[0; 2) "if"
- WHITESPACE@[2; 3) " "
- ERROR@[3; 8)
- MATCH_KW@[3; 8) "match"
- WHITESPACE@[8; 10) "\n\n"
- STRUCT_DEF@[10; 21)
- STRUCT_KW@[10; 16) "struct"
- WHITESPACE@[16; 17) " "
- NAME@[17; 18)
- IDENT@[17; 18) "S"
- WHITESPACE@[18; 19) " "
- NAMED_FIELD_DEF_LIST@[19; 21)
- L_CURLY@[19; 20) "{"
- R_CURLY@[20; 21) "}"
-error 0: expected an item
-error 3: expected an item
+++ /dev/null
-#!/use/bin/env rusti
-#!/use/bin/env rusti
+++ /dev/null
-SOURCE_FILE@[0; 42)
- SHEBANG@[0; 20) "#!/use/bin/env rusti"
- WHITESPACE@[20; 21) "\n"
- ATTR@[21; 23)
- POUND@[21; 22) "#"
- EXCL@[22; 23) "!"
- ERROR@[23; 24)
- SLASH@[23; 24) "/"
- USE_ITEM@[24; 28)
- USE_KW@[24; 27) "use"
- ERROR@[27; 28)
- SLASH@[27; 28) "/"
- MACRO_CALL@[28; 31)
- PATH@[28; 31)
- PATH_SEGMENT@[28; 31)
- NAME_REF@[28; 31)
- IDENT@[28; 31) "bin"
- ERROR@[31; 32)
- SLASH@[31; 32) "/"
- MACRO_CALL@[32; 41)
- PATH@[32; 35)
- PATH_SEGMENT@[32; 35)
- NAME_REF@[32; 35)
- IDENT@[32; 35) "env"
- WHITESPACE@[35; 36) " "
- NAME@[36; 41)
- IDENT@[36; 41) "rusti"
- WHITESPACE@[41; 42) "\n"
-error 23: expected `[`
-error 23: expected an item
-error 27: expected one of `*`, `::`, `{`, `self`, `super` or an indentifier
-error 28: expected SEMI
-error 31: expected EXCL
-error 31: expected `{`, `[`, `(`
-error 31: expected SEMI
-error 31: expected an item
-error 35: expected EXCL
-error 41: expected `{`, `[`, `(`
-error 41: expected SEMI
+++ /dev/null
-struct S {
- a: i32,
- b: String,
-};
\ No newline at end of file
+++ /dev/null
-SOURCE_FILE@[0; 40)
- STRUCT_DEF@[0; 39)
- STRUCT_KW@[0; 6) "struct"
- WHITESPACE@[6; 7) " "
- NAME@[7; 8)
- IDENT@[7; 8) "S"
- WHITESPACE@[8; 9) " "
- NAMED_FIELD_DEF_LIST@[9; 39)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- NAMED_FIELD_DEF@[15; 21)
- NAME@[15; 16)
- IDENT@[15; 16) "a"
- COLON@[16; 17) ":"
- WHITESPACE@[17; 18) " "
- PATH_TYPE@[18; 21)
- PATH@[18; 21)
- PATH_SEGMENT@[18; 21)
- NAME_REF@[18; 21)
- IDENT@[18; 21) "i32"
- COMMA@[21; 22) ","
- WHITESPACE@[22; 27) "\n "
- NAMED_FIELD_DEF@[27; 36)
- NAME@[27; 28)
- IDENT@[27; 28) "b"
- COLON@[28; 29) ":"
- WHITESPACE@[29; 30) " "
- PATH_TYPE@[30; 36)
- PATH@[30; 36)
- PATH_SEGMENT@[30; 36)
- NAME_REF@[30; 36)
- IDENT@[30; 36) "String"
- COMMA@[36; 37) ","
- WHITESPACE@[37; 38) "\n"
- R_CURLY@[38; 39) "}"
- ERROR@[39; 40)
- SEMI@[39; 40) ";"
-error 39: expected item, found `;`
-consider removing this semicolon
+++ /dev/null
-use foo::92;
\ No newline at end of file
+++ /dev/null
-SOURCE_FILE@[0; 12)
- USE_ITEM@[0; 12)
- USE_KW@[0; 3) "use"
- WHITESPACE@[3; 4) " "
- USE_TREE@[4; 11)
- PATH@[4; 11)
- PATH@[4; 7)
- PATH_SEGMENT@[4; 7)
- NAME_REF@[4; 7)
- IDENT@[4; 7) "foo"
- COLONCOLON@[7; 9) "::"
- PATH_SEGMENT@[9; 11)
- ERROR@[9; 11)
- INT_NUMBER@[9; 11) "92"
- SEMI@[11; 12) ";"
-error 9: expected identifier
+++ /dev/null
-#[foo(foo, +, 92)]
-fn foo() {
-}
-
-
-#[foo(
-fn foo() {
-}
+++ /dev/null
-SOURCE_FILE@[0; 54)
- FN_DEF@[0; 31)
- ATTR@[0; 18)
- POUND@[0; 1) "#"
- TOKEN_TREE@[1; 18)
- L_BRACK@[1; 2) "["
- IDENT@[2; 5) "foo"
- TOKEN_TREE@[5; 17)
- L_PAREN@[5; 6) "("
- IDENT@[6; 9) "foo"
- COMMA@[9; 10) ","
- WHITESPACE@[10; 11) " "
- PLUS@[11; 12) "+"
- COMMA@[12; 13) ","
- WHITESPACE@[13; 14) " "
- INT_NUMBER@[14; 16) "92"
- R_PAREN@[16; 17) ")"
- R_BRACK@[17; 18) "]"
- WHITESPACE@[18; 19) "\n"
- FN_KW@[19; 21) "fn"
- WHITESPACE@[21; 22) " "
- NAME@[22; 25)
- IDENT@[22; 25) "foo"
- PARAM_LIST@[25; 27)
- L_PAREN@[25; 26) "("
- R_PAREN@[26; 27) ")"
- WHITESPACE@[27; 28) " "
- BLOCK@[28; 31)
- L_CURLY@[28; 29) "{"
- WHITESPACE@[29; 30) "\n"
- R_CURLY@[30; 31) "}"
- WHITESPACE@[31; 34) "\n\n\n"
- ATTR@[34; 53)
- POUND@[34; 35) "#"
- TOKEN_TREE@[35; 53)
- L_BRACK@[35; 36) "["
- IDENT@[36; 39) "foo"
- TOKEN_TREE@[39; 53)
- L_PAREN@[39; 40) "("
- WHITESPACE@[40; 41) "\n"
- FN_KW@[41; 43) "fn"
- WHITESPACE@[43; 44) " "
- IDENT@[44; 47) "foo"
- TOKEN_TREE@[47; 49)
- L_PAREN@[47; 48) "("
- R_PAREN@[48; 49) ")"
- WHITESPACE@[49; 50) " "
- TOKEN_TREE@[50; 53)
- L_CURLY@[50; 51) "{"
- WHITESPACE@[51; 52) "\n"
- R_CURLY@[52; 53) "}"
- WHITESPACE@[53; 54) "\n"
-error 53: expected R_PAREN
-error 53: expected R_BRACK
-error 53: expected an item
+++ /dev/null
-struct S {
- f: u32,
- pub 92
- + - *
- pub x: u32,
- z: f64,
-}
+++ /dev/null
-SOURCE_FILE@[0; 74)
- STRUCT_DEF@[0; 73)
- STRUCT_KW@[0; 6) "struct"
- WHITESPACE@[6; 7) " "
- NAME@[7; 8)
- IDENT@[7; 8) "S"
- WHITESPACE@[8; 9) " "
- NAMED_FIELD_DEF_LIST@[9; 73)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- NAMED_FIELD_DEF@[15; 21)
- NAME@[15; 16)
- IDENT@[15; 16) "f"
- COLON@[16; 17) ":"
- WHITESPACE@[17; 18) " "
- PATH_TYPE@[18; 21)
- PATH@[18; 21)
- PATH_SEGMENT@[18; 21)
- NAME_REF@[18; 21)
- IDENT@[18; 21) "u32"
- COMMA@[21; 22) ","
- WHITESPACE@[22; 27) "\n "
- VISIBILITY@[27; 30)
- PUB_KW@[27; 30) "pub"
- WHITESPACE@[30; 31) " "
- ERROR@[31; 33)
- INT_NUMBER@[31; 33) "92"
- WHITESPACE@[33; 38) "\n "
- ERROR@[38; 39)
- PLUS@[38; 39) "+"
- WHITESPACE@[39; 40) " "
- ERROR@[40; 41)
- MINUS@[40; 41) "-"
- WHITESPACE@[41; 42) " "
- ERROR@[42; 43)
- STAR@[42; 43) "*"
- WHITESPACE@[43; 48) "\n "
- NAMED_FIELD_DEF@[48; 58)
- VISIBILITY@[48; 51)
- PUB_KW@[48; 51) "pub"
- WHITESPACE@[51; 52) " "
- NAME@[52; 53)
- IDENT@[52; 53) "x"
- COLON@[53; 54) ":"
- WHITESPACE@[54; 55) " "
- PATH_TYPE@[55; 58)
- PATH@[55; 58)
- PATH_SEGMENT@[55; 58)
- NAME_REF@[55; 58)
- IDENT@[55; 58) "u32"
- COMMA@[58; 59) ","
- WHITESPACE@[59; 64) "\n "
- NAMED_FIELD_DEF@[64; 70)
- NAME@[64; 65)
- IDENT@[64; 65) "z"
- COLON@[65; 66) ":"
- WHITESPACE@[66; 67) " "
- PATH_TYPE@[67; 70)
- PATH@[67; 70)
- PATH_SEGMENT@[67; 70)
- NAME_REF@[67; 70)
- IDENT@[67; 70) "f64"
- COMMA@[70; 71) ","
- WHITESPACE@[71; 72) "\n"
- R_CURLY@[72; 73) "}"
- WHITESPACE@[73; 74) "\n"
-error 31: expected field declaration
-error 33: expected COMMA
-error 38: expected field declaration
-error 39: expected COMMA
-error 40: expected field declaration
-error 41: expected COMMA
-error 42: expected field declaration
-error 43: expected COMMA
+++ /dev/null
-}
-
-struct S;
-
-}
-
-fn foo(){}
-
-}
+++ /dev/null
-SOURCE_FILE@[0; 31)
- ERROR@[0; 1)
- R_CURLY@[0; 1) "}"
- WHITESPACE@[1; 3) "\n\n"
- STRUCT_DEF@[3; 12)
- STRUCT_KW@[3; 9) "struct"
- WHITESPACE@[9; 10) " "
- NAME@[10; 11)
- IDENT@[10; 11) "S"
- SEMI@[11; 12) ";"
- WHITESPACE@[12; 14) "\n\n"
- ERROR@[14; 15)
- R_CURLY@[14; 15) "}"
- WHITESPACE@[15; 17) "\n\n"
- FN_DEF@[17; 27)
- FN_KW@[17; 19) "fn"
- WHITESPACE@[19; 20) " "
- NAME@[20; 23)
- IDENT@[20; 23) "foo"
- PARAM_LIST@[23; 25)
- L_PAREN@[23; 24) "("
- R_PAREN@[24; 25) ")"
- BLOCK@[25; 27)
- L_CURLY@[25; 26) "{"
- R_CURLY@[26; 27) "}"
- WHITESPACE@[27; 29) "\n\n"
- ERROR@[29; 30)
- R_CURLY@[29; 30) "}"
- WHITESPACE@[30; 31) "\n"
-error 0: unmatched `}`
-error 14: unmatched `}`
-error 29: unmatched `}`
+++ /dev/null
-fn foo() {
-}
-
-bar() {
- if true {
- 1
- } else {
- 2 + 3
- }
-}
-
-fn baz() {
-}
+++ /dev/null
-SOURCE_FILE@[0; 95)
- FN_DEF@[0; 12)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 12)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 11) "\n"
- R_CURLY@[11; 12) "}"
- WHITESPACE@[12; 14) "\n\n"
- MACRO_CALL@[14; 19)
- PATH@[14; 17)
- PATH_SEGMENT@[14; 17)
- NAME_REF@[14; 17)
- IDENT@[14; 17) "bar"
- TOKEN_TREE@[17; 19)
- L_PAREN@[17; 18) "("
- R_PAREN@[18; 19) ")"
- WHITESPACE@[19; 20) " "
- ERROR@[20; 80)
- L_CURLY@[20; 21) "{"
- WHITESPACE@[21; 26) "\n "
- IF_EXPR@[26; 78)
- IF_KW@[26; 28) "if"
- WHITESPACE@[28; 29) " "
- CONDITION@[29; 33)
- LITERAL@[29; 33)
- TRUE_KW@[29; 33) "true"
- WHITESPACE@[33; 34) " "
- BLOCK@[34; 51)
- L_CURLY@[34; 35) "{"
- WHITESPACE@[35; 44) "\n "
- LITERAL@[44; 45)
- INT_NUMBER@[44; 45) "1"
- WHITESPACE@[45; 50) "\n "
- R_CURLY@[50; 51) "}"
- WHITESPACE@[51; 52) " "
- ELSE_KW@[52; 56) "else"
- WHITESPACE@[56; 57) " "
- BLOCK@[57; 78)
- L_CURLY@[57; 58) "{"
- WHITESPACE@[58; 67) "\n "
- BIN_EXPR@[67; 72)
- LITERAL@[67; 68)
- INT_NUMBER@[67; 68) "2"
- WHITESPACE@[68; 69) " "
- PLUS@[69; 70) "+"
- WHITESPACE@[70; 71) " "
- LITERAL@[71; 72)
- INT_NUMBER@[71; 72) "3"
- WHITESPACE@[72; 77) "\n "
- R_CURLY@[77; 78) "}"
- WHITESPACE@[78; 79) "\n"
- R_CURLY@[79; 80) "}"
- WHITESPACE@[80; 82) "\n\n"
- FN_DEF@[82; 94)
- FN_KW@[82; 84) "fn"
- WHITESPACE@[84; 85) " "
- NAME@[85; 88)
- IDENT@[85; 88) "baz"
- PARAM_LIST@[88; 90)
- L_PAREN@[88; 89) "("
- R_PAREN@[89; 90) ")"
- WHITESPACE@[90; 91) " "
- BLOCK@[91; 94)
- L_CURLY@[91; 92) "{"
- WHITESPACE@[92; 93) "\n"
- R_CURLY@[93; 94) "}"
- WHITESPACE@[94; 95) "\n"
-error 17: expected EXCL
-error 19: expected SEMI
-error 20: expected an item
+++ /dev/null
-struct S<90 + 2> {
- f: u32
-}
-
-struct T;
+++ /dev/null
-SOURCE_FILE@[0; 43)
- STRUCT_DEF@[0; 11)
- STRUCT_KW@[0; 6) "struct"
- WHITESPACE@[6; 7) " "
- NAME@[7; 8)
- IDENT@[7; 8) "S"
- TYPE_PARAM_LIST@[8; 11)
- L_ANGLE@[8; 9) "<"
- ERROR@[9; 11)
- INT_NUMBER@[9; 11) "90"
- WHITESPACE@[11; 12) " "
- ERROR@[12; 13)
- PLUS@[12; 13) "+"
- WHITESPACE@[13; 14) " "
- ERROR@[14; 15)
- INT_NUMBER@[14; 15) "2"
- ERROR@[15; 16)
- R_ANGLE@[15; 16) ">"
- WHITESPACE@[16; 17) " "
- ERROR@[17; 31)
- L_CURLY@[17; 18) "{"
- WHITESPACE@[18; 23) "\n "
- EXPR_STMT@[23; 24)
- PATH_EXPR@[23; 24)
- PATH@[23; 24)
- PATH_SEGMENT@[23; 24)
- NAME_REF@[23; 24)
- IDENT@[23; 24) "f"
- EXPR_STMT@[24; 25)
- ERROR@[24; 25)
- COLON@[24; 25) ":"
- WHITESPACE@[25; 26) " "
- PATH_EXPR@[26; 29)
- PATH@[26; 29)
- PATH_SEGMENT@[26; 29)
- NAME_REF@[26; 29)
- IDENT@[26; 29) "u32"
- WHITESPACE@[29; 30) "\n"
- R_CURLY@[30; 31) "}"
- WHITESPACE@[31; 33) "\n\n"
- STRUCT_DEF@[33; 42)
- STRUCT_KW@[33; 39) "struct"
- WHITESPACE@[39; 40) " "
- NAME@[40; 41)
- IDENT@[40; 41) "T"
- SEMI@[41; 42) ";"
- WHITESPACE@[42; 43) "\n"
-error 9: expected type parameter
-error 11: expected COMMA
-error 11: expected R_ANGLE
-error 11: expected `;`, `{`, or `(`
-error 12: expected an item
-error 14: expected an item
-error 15: expected an item
-error 17: expected an item
-error 24: expected SEMI
-error 24: expected expression
-error 25: expected SEMI
+++ /dev/null
-fn main() {
- || -> () unsafe { () };
-}
+++ /dev/null
-SOURCE_FILE@[0; 42)
- FN_DEF@[0; 41)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 7)
- IDENT@[3; 7) "main"
- PARAM_LIST@[7; 9)
- L_PAREN@[7; 8) "("
- R_PAREN@[8; 9) ")"
- WHITESPACE@[9; 10) " "
- BLOCK@[10; 41)
- L_CURLY@[10; 11) "{"
- WHITESPACE@[11; 16) "\n "
- EXPR_STMT@[16; 39)
- LAMBDA_EXPR@[16; 38)
- PARAM_LIST@[16; 18)
- PIPE@[16; 17) "|"
- PIPE@[17; 18) "|"
- WHITESPACE@[18; 19) " "
- RET_TYPE@[19; 24)
- THIN_ARROW@[19; 21) "->"
- WHITESPACE@[21; 22) " "
- TUPLE_TYPE@[22; 24)
- L_PAREN@[22; 23) "("
- R_PAREN@[23; 24) ")"
- WHITESPACE@[24; 25) " "
- BLOCK_EXPR@[25; 38)
- UNSAFE_KW@[25; 31) "unsafe"
- WHITESPACE@[31; 32) " "
- BLOCK@[32; 38)
- L_CURLY@[32; 33) "{"
- WHITESPACE@[33; 34) " "
- TUPLE_EXPR@[34; 36)
- L_PAREN@[34; 35) "("
- R_PAREN@[35; 36) ")"
- WHITESPACE@[36; 37) " "
- R_CURLY@[37; 38) "}"
- SEMI@[38; 39) ";"
- WHITESPACE@[39; 40) "\n"
- R_CURLY@[40; 41) "}"
- WHITESPACE@[41; 42) "\n"
-error 24: expected `{`
+++ /dev/null
-extern struct Foo;
+++ /dev/null
-SOURCE_FILE@[0; 19)
- ERROR@[0; 6)
- ABI@[0; 6)
- EXTERN_KW@[0; 6) "extern"
- WHITESPACE@[6; 7) " "
- STRUCT_DEF@[7; 18)
- STRUCT_KW@[7; 13) "struct"
- WHITESPACE@[13; 14) " "
- NAME@[14; 17)
- IDENT@[14; 17) "Foo"
- SEMI@[17; 18) ";"
- WHITESPACE@[18; 19) "\n"
-error 6: expected existential, fn, trait or impl
+++ /dev/null
-SOURCE_FILE@[0; 389)
- FN_DEF@[0; 389)
- VISIBILITY@[0; 10)
- PUB_KW@[0; 3)
- L_PAREN@[3; 4)
- SUPER_KW@[4; 9)
- R_PAREN@[9; 10)
- WHITESPACE@[10; 11)
- FN_KW@[11; 13)
- WHITESPACE@[13; 14)
- NAME@[14; 21)
- IDENT@[14; 21) "process"
- TYPE_PARAM_LIST@[21; 38)
- L_ANGLE@[21; 22)
- LIFETIME_PARAM@[22; 24)
- LIFETIME@[22; 24) "'a"
- COMMA@[24; 25)
- WHITESPACE@[25; 26)
- TYPE_PARAM@[26; 37)
- NAME@[26; 27)
- IDENT@[26; 27) "S"
- COLON@[27; 28)
- WHITESPACE@[28; 29)
- PATH@[29; 37)
- PATH_SEGMENT@[29; 37)
- NAME_REF@[29; 33)
- IDENT@[29; 33) "Sink"
- TYPE_ARG_LIST@[33; 37)
- L_ANGLE@[33; 34)
- LIFETIME_ARG@[34; 36)
- LIFETIME@[34; 36) "'a"
- R_ANGLE@[36; 37)
- R_ANGLE@[37; 38)
- PARAM_LIST@[38; 93)
- L_PAREN@[38; 39)
- PARAM@[39; 54)
- BIND_PAT@[39; 46)
- NAME@[39; 46)
- IDENT@[39; 46) "builder"
- COLON@[46; 47)
- WHITESPACE@[47; 48)
- REFERENCE_TYPE@[48; 54)
- AMP@[48; 49)
- MUT_KW@[49; 52)
- WHITESPACE@[52; 53)
- PATH_TYPE@[53; 54)
- PATH@[53; 54)
- PATH_SEGMENT@[53; 54)
- NAME_REF@[53; 54)
- IDENT@[53; 54) "S"
- COMMA@[54; 55)
- WHITESPACE@[55; 56)
- PARAM@[56; 72)
- BIND_PAT@[56; 62)
- NAME@[56; 62)
- IDENT@[56; 62) "tokens"
- COLON@[62; 63)
- WHITESPACE@[63; 64)
- REFERENCE_TYPE@[64; 72)
- AMP@[64; 65)
- SLICE_TYPE@[65; 72)
- L_BRACK@[65; 66)
- PATH_TYPE@[66; 71)
- PATH@[66; 71)
- PATH_SEGMENT@[66; 71)
- NAME_REF@[66; 71)
- IDENT@[66; 71) "Token"
- R_BRACK@[71; 72)
- COMMA@[72; 73)
- WHITESPACE@[73; 74)
- PARAM@[74; 92)
- BIND_PAT@[74; 80)
- NAME@[74; 80)
- IDENT@[74; 80) "events"
- COLON@[80; 81)
- WHITESPACE@[81; 82)
- PATH_TYPE@[82; 92)
- PATH@[82; 92)
- PATH_SEGMENT@[82; 92)
- NAME_REF@[82; 85)
- IDENT@[82; 85) "Vec"
- TYPE_ARG_LIST@[85; 92)
- L_ANGLE@[85; 86)
- TYPE_ARG@[86; 91)
- PATH_TYPE@[86; 91)
- PATH@[86; 91)
- PATH_SEGMENT@[86; 91)
- NAME_REF@[86; 91)
- IDENT@[86; 91) "Event"
- R_ANGLE@[91; 92)
- R_PAREN@[92; 93)
- WHITESPACE@[93; 94)
- BLOCK_EXPR@[94; 389)
- L_CURLY@[94; 95)
- WHITESPACE@[95; 100)
- LET_STMT@[100; 125)
- LET_KW@[100; 103)
- WHITESPACE@[103; 104)
- BIND_PAT@[104; 120)
- MUT_KW@[104; 107)
- WHITESPACE@[107; 108)
- NAME@[108; 120)
- IDENT@[108; 120) "next_tok_idx"
- WHITESPACE@[120; 121)
- EQ@[121; 122)
- WHITESPACE@[122; 123)
- LITERAL@[123; 124)
- INT_NUMBER@[123; 124) "0"
- SEMI@[124; 125)
- WHITESPACE@[125; 130)
- LET_STMT@[130; 389)
- LET_KW@[130; 133)
- WHITESPACE@[133; 134)
- BIND_PAT@[134; 140)
- NAME@[134; 140)
- IDENT@[134; 140) "eat_ws"
- WHITESPACE@[140; 141)
- EQ@[141; 142)
- WHITESPACE@[142; 143)
- LAMBDA_EXPR@[143; 389)
- PARAM_LIST@[143; 388)
- PIPE@[143; 144)
- PARAM@[144; 159)
- BIND_PAT@[144; 147)
- NAME@[144; 147)
- IDENT@[144; 147) "idx"
- COLON@[147; 148)
- WHITESPACE@[148; 149)
- REFERENCE_TYPE@[149; 159)
- AMP@[149; 150)
- MUT_KW@[150; 153)
- WHITESPACE@[153; 154)
- PATH_TYPE@[154; 159)
- PATH@[154; 159)
- PATH_SEGMENT@[154; 159)
- NAME_REF@[154; 159)
- IDENT@[154; 159) "usize"
- COMMA@[159; 160)
- WHITESPACE@[160; 161)
- PARAM@[161; 167)
- REF_PAT@[161; 167)
- AMP@[161; 162)
- MUT_KW@[162; 165)
- WHITESPACE@[165; 166)
- err: `expected pattern`
- ERROR@[166; 167)
- PIPE@[166; 167)
- err: `expected COMMA`
- WHITESPACE@[167; 168)
- err: `expected pattern`
- PARAM@[168; 169)
- ERROR@[168; 169)
- L_CURLY@[168; 169)
- err: `expected COMMA`
- WHITESPACE@[169; 178)
- err: `expected pattern`
- PARAM@[178; 183)
- ERROR@[178; 183)
- WHILE_KW@[178; 183)
- err: `expected COMMA`
- WHITESPACE@[183; 184)
- err: `expected pattern`
- PARAM@[184; 187)
- ERROR@[184; 187)
- LET_KW@[184; 187)
- err: `expected COMMA`
- WHITESPACE@[187; 188)
- PARAM@[188; 199)
- TUPLE_STRUCT_PAT@[188; 199)
- PATH@[188; 192)
- PATH_SEGMENT@[188; 192)
- NAME_REF@[188; 192)
- IDENT@[188; 192) "Some"
- L_PAREN@[192; 193)
- BIND_PAT@[193; 198)
- NAME@[193; 198)
- IDENT@[193; 198) "token"
- R_PAREN@[198; 199)
- err: `expected COMMA`
- WHITESPACE@[199; 200)
- err: `expected pattern`
- PARAM@[200; 201)
- ERROR@[200; 201)
- EQ@[200; 201)
- err: `expected COMMA`
- WHITESPACE@[201; 202)
- PARAM@[202; 208)
- BIND_PAT@[202; 208)
- NAME@[202; 208)
- IDENT@[202; 208) "tokens"
- err: `expected COMMA`
- err: `expected pattern`
- PARAM@[208; 209)
- ERROR@[208; 209)
- DOT@[208; 209)
- err: `expected COMMA`
- PARAM@[209; 218)
- TUPLE_STRUCT_PAT@[209; 218)
- PATH@[209; 212)
- PATH_SEGMENT@[209; 212)
- NAME_REF@[209; 212)
- IDENT@[209; 212) "get"
- L_PAREN@[212; 213)
- err: `expected pattern`
- ERROR@[213; 214)
- STAR@[213; 214)
- err: `expected COMMA`
- BIND_PAT@[214; 217)
- NAME@[214; 217)
- IDENT@[214; 217) "idx"
- R_PAREN@[217; 218)
- err: `expected COMMA`
- WHITESPACE@[218; 219)
- err: `expected pattern`
- PARAM@[219; 220)
- ERROR@[219; 220)
- L_CURLY@[219; 220)
- err: `expected COMMA`
- WHITESPACE@[220; 233)
- err: `expected pattern`
- PARAM@[233; 235)
- ERROR@[233; 235)
- IF_KW@[233; 235)
- err: `expected COMMA`
- WHITESPACE@[235; 236)
- err: `expected pattern`
- PARAM@[236; 237)
- ERROR@[236; 237)
- EXCL@[236; 237)
- err: `expected COMMA`
- PARAM@[237; 242)
- BIND_PAT@[237; 242)
- NAME@[237; 242)
- IDENT@[237; 242) "token"
- err: `expected COMMA`
- err: `expected pattern`
- PARAM@[242; 243)
- ERROR@[242; 243)
- DOT@[242; 243)
- err: `expected COMMA`
- PARAM@[243; 247)
- BIND_PAT@[243; 247)
- NAME@[243; 247)
- IDENT@[243; 247) "kind"
- err: `expected COMMA`
- err: `expected pattern`
- PARAM@[247; 248)
- ERROR@[247; 248)
- DOT@[247; 248)
- err: `expected COMMA`
- PARAM@[248; 259)
- TUPLE_STRUCT_PAT@[248; 259)
- PATH@[248; 257)
- PATH_SEGMENT@[248; 257)
- NAME_REF@[248; 257)
- IDENT@[248; 257) "is_trivia"
- L_PAREN@[257; 258)
- R_PAREN@[258; 259)
- err: `expected COMMA`
- WHITESPACE@[259; 260)
- err: `expected pattern`
- PARAM@[260; 261)
- ERROR@[260; 261)
- L_CURLY@[260; 261)
- err: `expected COMMA`
- WHITESPACE@[261; 278)
- PARAM@[278; 283)
- BIND_PAT@[278; 283)
- NAME@[278; 283)
- IDENT@[278; 283) "break"
- err: `expected COMMA`
- err: `expected pattern`
- PARAM@[283; 284)
- ERROR@[283; 284)
- SEMI@[283; 284)
- err: `expected COMMA`
- WHITESPACE@[284; 297)
- err: `expected pattern`
- PARAM@[297; 298)
- ERROR@[297; 298)
- R_CURLY@[297; 298)
- err: `expected COMMA`
- WHITESPACE@[298; 311)
- PARAM@[311; 318)
- BIND_PAT@[311; 318)
- NAME@[311; 318)
- IDENT@[311; 318) "builder"
- err: `expected COMMA`
- err: `expected pattern`
- PARAM@[318; 319)
- ERROR@[318; 319)
- DOT@[318; 319)
- err: `expected COMMA`
- PARAM@[319; 346)
- TUPLE_STRUCT_PAT@[319; 346)
- PATH@[319; 323)
- PATH_SEGMENT@[319; 323)
- NAME_REF@[319; 323)
- IDENT@[319; 323) "leaf"
- L_PAREN@[323; 324)
- BIND_PAT@[324; 329)
- NAME@[324; 329)
- IDENT@[324; 329) "token"
- err: `expected COMMA`
- err: `expected pattern`
- ERROR@[329; 330)
- DOT@[329; 330)
- err: `expected COMMA`
- BIND_PAT@[330; 334)
- NAME@[330; 334)
- IDENT@[330; 334) "kind"
- COMMA@[334; 335)
- WHITESPACE@[335; 336)
- BIND_PAT@[336; 341)
- NAME@[336; 341)
- IDENT@[336; 341) "token"
- err: `expected COMMA`
- err: `expected pattern`
- ERROR@[341; 342)
- DOT@[341; 342)
- err: `expected COMMA`
- BIND_PAT@[342; 345)
- NAME@[342; 345)
- IDENT@[342; 345) "len"
- R_PAREN@[345; 346)
- err: `expected COMMA`
- err: `expected pattern`
- PARAM@[346; 347)
- ERROR@[346; 347)
- SEMI@[346; 347)
- err: `expected COMMA`
- WHITESPACE@[347; 360)
- err: `expected pattern`
- PARAM@[360; 361)
- ERROR@[360; 361)
- STAR@[360; 361)
- err: `expected COMMA`
- PARAM@[361; 364)
- BIND_PAT@[361; 364)
- NAME@[361; 364)
- IDENT@[361; 364) "idx"
- err: `expected COMMA`
- WHITESPACE@[364; 365)
- err: `expected pattern`
- PARAM@[365; 366)
- ERROR@[365; 366)
- PLUS@[365; 366)
- err: `expected COMMA`
- err: `expected pattern`
- PARAM@[366; 367)
- ERROR@[366; 367)
- EQ@[366; 367)
- err: `expected COMMA`
- WHITESPACE@[367; 368)
- PARAM@[368; 369)
- LITERAL@[368; 369)
- INT_NUMBER@[368; 369) "1"
- err: `expected COMMA`
- WHITESPACE@[369; 378)
- err: `expected pattern`
- PARAM@[378; 379)
- ERROR@[378; 379)
- R_CURLY@[378; 379)
- err: `expected COMMA`
- WHITESPACE@[379; 384)
- err: `expected pattern`
- PARAM@[384; 385)
- ERROR@[384; 385)
- R_CURLY@[384; 385)
- err: `expected COMMA`
- err: `expected pattern`
- PARAM@[385; 386)
- ERROR@[385; 386)
- SEMI@[385; 386)
- err: `expected COMMA`
- WHITESPACE@[386; 387)
- err: `expected pattern`
- PARAM@[387; 388)
- ERROR@[387; 388)
- R_CURLY@[387; 388)
- err: `expected COMMA`
- err: `expected PIPE`
- WHITESPACE@[388; 389)
- err: `expected expression`
- err: `expected SEMI`
- err: `expected R_CURLY`
- ERROR@[389; 389)
+++ /dev/null
-pub struct Cache(
- RefCell<HashMap<
- TypeId,
- Box<@ Any>,
- >>
-);
-
+++ /dev/null
-SOURCE_FILE@[0; 86)
- STRUCT_DEF@[0; 72)
- VISIBILITY@[0; 3)
- PUB_KW@[0; 3) "pub"
- WHITESPACE@[3; 4) " "
- STRUCT_KW@[4; 10) "struct"
- WHITESPACE@[10; 11) " "
- NAME@[11; 16)
- IDENT@[11; 16) "Cache"
- POS_FIELD_DEF_LIST@[16; 72)
- L_PAREN@[16; 17) "("
- WHITESPACE@[17; 22) "\n "
- POS_FIELD_DEF@[22; 68)
- PATH_TYPE@[22; 68)
- PATH@[22; 68)
- PATH_SEGMENT@[22; 68)
- NAME_REF@[22; 29)
- IDENT@[22; 29) "RefCell"
- TYPE_ARG_LIST@[29; 68)
- L_ANGLE@[29; 30) "<"
- TYPE_ARG@[30; 68)
- PATH_TYPE@[30; 68)
- PATH@[30; 68)
- PATH_SEGMENT@[30; 68)
- NAME_REF@[30; 37)
- IDENT@[30; 37) "HashMap"
- TYPE_ARG_LIST@[37; 68)
- L_ANGLE@[37; 38) "<"
- WHITESPACE@[38; 47) "\n "
- TYPE_ARG@[47; 53)
- PATH_TYPE@[47; 53)
- PATH@[47; 53)
- PATH_SEGMENT@[47; 53)
- NAME_REF@[47; 53)
- IDENT@[47; 53) "TypeId"
- COMMA@[53; 54) ","
- WHITESPACE@[54; 63) "\n "
- TYPE_ARG@[63; 68)
- PATH_TYPE@[63; 68)
- PATH@[63; 68)
- PATH_SEGMENT@[63; 68)
- NAME_REF@[63; 66)
- IDENT@[63; 66) "Box"
- TYPE_ARG_LIST@[66; 68)
- L_ANGLE@[66; 67) "<"
- TYPE_ARG@[67; 68)
- ERROR@[67; 68)
- AT@[67; 68) "@"
- WHITESPACE@[68; 69) " "
- POS_FIELD_DEF@[69; 72)
- PATH_TYPE@[69; 72)
- PATH@[69; 72)
- PATH_SEGMENT@[69; 72)
- NAME_REF@[69; 72)
- IDENT@[69; 72) "Any"
- ERROR@[72; 72)
- ERROR@[72; 73)
- R_ANGLE@[72; 73) ">"
- ERROR@[73; 74)
- COMMA@[73; 74) ","
- WHITESPACE@[74; 79) "\n "
- ERROR@[79; 80)
- R_ANGLE@[79; 80) ">"
- ERROR@[80; 81)
- R_ANGLE@[80; 81) ">"
- WHITESPACE@[81; 82) "\n"
- ERROR@[82; 83)
- R_PAREN@[82; 83) ")"
- ERROR@[83; 84)
- SEMI@[83; 84) ";"
- WHITESPACE@[84; 86) "\n\n"
-error 67: expected type
-error 68: expected COMMA
-error 68: expected R_ANGLE
-error 68: expected COMMA
-error 68: expected R_ANGLE
-error 68: expected COMMA
-error 68: expected R_ANGLE
-error 68: expected COMMA
-error 72: expected COMMA
-error 72: expected a type
-error 72: expected R_PAREN
-error 72: expected SEMI
-error 72: expected an item
-error 73: expected an item
-error 79: expected an item
-error 80: expected an item
-error 82: expected an item
-error 83: expected an item
+++ /dev/null
-fn foo<T>() where T {}
+++ /dev/null
-SOURCE_FILE@[0; 23)
- FN_DEF@[0; 22)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- TYPE_PARAM_LIST@[6; 9)
- L_ANGLE@[6; 7) "<"
- TYPE_PARAM@[7; 8)
- NAME@[7; 8)
- IDENT@[7; 8) "T"
- R_ANGLE@[8; 9) ">"
- PARAM_LIST@[9; 11)
- L_PAREN@[9; 10) "("
- R_PAREN@[10; 11) ")"
- WHITESPACE@[11; 12) " "
- WHERE_CLAUSE@[12; 19)
- WHERE_KW@[12; 17) "where"
- WHITESPACE@[17; 18) " "
- WHERE_PRED@[18; 19)
- PATH_TYPE@[18; 19)
- PATH@[18; 19)
- PATH_SEGMENT@[18; 19)
- NAME_REF@[18; 19)
- IDENT@[18; 19) "T"
- WHITESPACE@[19; 20) " "
- BLOCK@[20; 22)
- L_CURLY@[20; 21) "{"
- R_CURLY@[21; 22) "}"
- WHITESPACE@[22; 23) "\n"
-error 19: expected colon
+++ /dev/null
-fn foo(}) {
-}
+++ /dev/null
-SOURCE_FILE@[0; 14)
- FN_DEF@[0; 7)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 7)
- L_PAREN@[6; 7) "("
- ERROR@[7; 8)
- R_CURLY@[7; 8) "}"
- ERROR@[8; 9)
- R_PAREN@[8; 9) ")"
- WHITESPACE@[9; 10) " "
- ERROR@[10; 13)
- L_CURLY@[10; 11) "{"
- WHITESPACE@[11; 12) "\n"
- R_CURLY@[12; 13) "}"
- WHITESPACE@[13; 14) "\n"
-error 7: expected value parameter
-error 7: expected R_PAREN
-error 7: expected a block
-error 7: unmatched `}`
-error 8: expected an item
-error 10: expected an item
+++ /dev/null
-fn foo() {
- foo(
- 1, 2
- )
- return 92;
-}
+++ /dev/null
-SOURCE_FILE@[0; 56)
- FN_DEF@[0; 55)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 55)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- EXPR_STMT@[15; 38)
- CALL_EXPR@[15; 38)
- PATH_EXPR@[15; 18)
- PATH@[15; 18)
- PATH_SEGMENT@[15; 18)
- NAME_REF@[15; 18)
- IDENT@[15; 18) "foo"
- ARG_LIST@[18; 38)
- L_PAREN@[18; 19) "("
- WHITESPACE@[19; 28) "\n "
- LITERAL@[28; 29)
- INT_NUMBER@[28; 29) "1"
- COMMA@[29; 30) ","
- WHITESPACE@[30; 31) " "
- LITERAL@[31; 32)
- INT_NUMBER@[31; 32) "2"
- WHITESPACE@[32; 37) "\n "
- R_PAREN@[37; 38) ")"
- WHITESPACE@[38; 43) "\n "
- EXPR_STMT@[43; 53)
- RETURN_EXPR@[43; 52)
- RETURN_KW@[43; 49) "return"
- WHITESPACE@[49; 50) " "
- LITERAL@[50; 52)
- INT_NUMBER@[50; 52) "92"
- SEMI@[52; 53) ";"
- WHITESPACE@[53; 54) "\n"
- R_CURLY@[54; 55) "}"
- WHITESPACE@[55; 56) "\n"
-error 38: expected SEMI
+++ /dev/null
-fn foo(foo: i32) {
- let bar = 92;
- 1 +
-}
+++ /dev/null
-SOURCE_FILE@[0; 47)
- FN_DEF@[0; 46)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 16)
- L_PAREN@[6; 7) "("
- PARAM@[7; 15)
- BIND_PAT@[7; 10)
- NAME@[7; 10)
- IDENT@[7; 10) "foo"
- COLON@[10; 11) ":"
- WHITESPACE@[11; 12) " "
- PATH_TYPE@[12; 15)
- PATH@[12; 15)
- PATH_SEGMENT@[12; 15)
- NAME_REF@[12; 15)
- IDENT@[12; 15) "i32"
- R_PAREN@[15; 16) ")"
- WHITESPACE@[16; 17) " "
- BLOCK@[17; 46)
- L_CURLY@[17; 18) "{"
- WHITESPACE@[18; 23) "\n "
- LET_STMT@[23; 36)
- LET_KW@[23; 26) "let"
- WHITESPACE@[26; 27) " "
- BIND_PAT@[27; 30)
- NAME@[27; 30)
- IDENT@[27; 30) "bar"
- WHITESPACE@[30; 31) " "
- EQ@[31; 32) "="
- WHITESPACE@[32; 33) " "
- LITERAL@[33; 35)
- INT_NUMBER@[33; 35) "92"
- SEMI@[35; 36) ";"
- WHITESPACE@[36; 41) "\n "
- BIN_EXPR@[41; 44)
- LITERAL@[41; 42)
- INT_NUMBER@[41; 42) "1"
- WHITESPACE@[42; 43) " "
- PLUS@[43; 44) "+"
- WHITESPACE@[44; 45) "\n"
- R_CURLY@[45; 46) "}"
- WHITESPACE@[46; 47) "\n"
-error 44: expected expression
+++ /dev/null
-impl FnScopes {
- fn new_scope(&) -> ScopeId {
- let res = self.scopes.len();
- self.scopes.push(ScopeData { parent: None, entries: vec![] })
- }
-
- fn set_parent
-}
+++ /dev/null
-SOURCE_FILE@[0; 183)
- IMPL_BLOCK@[0; 182)
- IMPL_KW@[0; 4) "impl"
- WHITESPACE@[4; 5) " "
- PATH_TYPE@[5; 13)
- PATH@[5; 13)
- PATH_SEGMENT@[5; 13)
- NAME_REF@[5; 13)
- IDENT@[5; 13) "FnScopes"
- WHITESPACE@[13; 14) " "
- ITEM_LIST@[14; 182)
- L_CURLY@[14; 15) "{"
- WHITESPACE@[15; 20) "\n "
- FN_DEF@[20; 161)
- FN_KW@[20; 22) "fn"
- WHITESPACE@[22; 23) " "
- NAME@[23; 32)
- IDENT@[23; 32) "new_scope"
- PARAM_LIST@[32; 35)
- L_PAREN@[32; 33) "("
- PARAM@[33; 34)
- REF_PAT@[33; 34)
- AMP@[33; 34) "&"
- R_PAREN@[34; 35) ")"
- WHITESPACE@[35; 36) " "
- RET_TYPE@[36; 46)
- THIN_ARROW@[36; 38) "->"
- WHITESPACE@[38; 39) " "
- PATH_TYPE@[39; 46)
- PATH@[39; 46)
- PATH_SEGMENT@[39; 46)
- NAME_REF@[39; 46)
- IDENT@[39; 46) "ScopeId"
- WHITESPACE@[46; 47) " "
- BLOCK@[47; 161)
- L_CURLY@[47; 48) "{"
- WHITESPACE@[48; 57) "\n "
- LET_STMT@[57; 85)
- LET_KW@[57; 60) "let"
- WHITESPACE@[60; 61) " "
- BIND_PAT@[61; 64)
- NAME@[61; 64)
- IDENT@[61; 64) "res"
- WHITESPACE@[64; 65) " "
- EQ@[65; 66) "="
- WHITESPACE@[66; 67) " "
- METHOD_CALL_EXPR@[67; 84)
- FIELD_EXPR@[67; 78)
- PATH_EXPR@[67; 71)
- PATH@[67; 71)
- PATH_SEGMENT@[67; 71)
- SELF_KW@[67; 71) "self"
- DOT@[71; 72) "."
- NAME_REF@[72; 78)
- IDENT@[72; 78) "scopes"
- DOT@[78; 79) "."
- NAME_REF@[79; 82)
- IDENT@[79; 82) "len"
- ARG_LIST@[82; 84)
- L_PAREN@[82; 83) "("
- R_PAREN@[83; 84) ")"
- SEMI@[84; 85) ";"
- WHITESPACE@[85; 94) "\n "
- METHOD_CALL_EXPR@[94; 155)
- FIELD_EXPR@[94; 105)
- PATH_EXPR@[94; 98)
- PATH@[94; 98)
- PATH_SEGMENT@[94; 98)
- SELF_KW@[94; 98) "self"
- DOT@[98; 99) "."
- NAME_REF@[99; 105)
- IDENT@[99; 105) "scopes"
- DOT@[105; 106) "."
- NAME_REF@[106; 110)
- IDENT@[106; 110) "push"
- ARG_LIST@[110; 155)
- L_PAREN@[110; 111) "("
- STRUCT_LIT@[111; 154)
- PATH@[111; 120)
- PATH_SEGMENT@[111; 120)
- NAME_REF@[111; 120)
- IDENT@[111; 120) "ScopeData"
- WHITESPACE@[120; 121) " "
- NAMED_FIELD_LIST@[121; 154)
- L_CURLY@[121; 122) "{"
- WHITESPACE@[122; 123) " "
- NAMED_FIELD@[123; 135)
- NAME_REF@[123; 129)
- IDENT@[123; 129) "parent"
- COLON@[129; 130) ":"
- WHITESPACE@[130; 131) " "
- PATH_EXPR@[131; 135)
- PATH@[131; 135)
- PATH_SEGMENT@[131; 135)
- NAME_REF@[131; 135)
- IDENT@[131; 135) "None"
- COMMA@[135; 136) ","
- WHITESPACE@[136; 137) " "
- NAMED_FIELD@[137; 152)
- NAME_REF@[137; 144)
- IDENT@[137; 144) "entries"
- COLON@[144; 145) ":"
- WHITESPACE@[145; 146) " "
- MACRO_CALL@[146; 152)
- PATH@[146; 149)
- PATH_SEGMENT@[146; 149)
- NAME_REF@[146; 149)
- IDENT@[146; 149) "vec"
- EXCL@[149; 150) "!"
- TOKEN_TREE@[150; 152)
- L_BRACK@[150; 151) "["
- R_BRACK@[151; 152) "]"
- WHITESPACE@[152; 153) " "
- R_CURLY@[153; 154) "}"
- R_PAREN@[154; 155) ")"
- WHITESPACE@[155; 160) "\n "
- R_CURLY@[160; 161) "}"
- WHITESPACE@[161; 167) "\n\n "
- FN_DEF@[167; 180)
- FN_KW@[167; 169) "fn"
- WHITESPACE@[169; 170) " "
- NAME@[170; 180)
- IDENT@[170; 180) "set_parent"
- WHITESPACE@[180; 181) "\n"
- R_CURLY@[181; 182) "}"
- WHITESPACE@[182; 183) "\n"
-error 34: expected pattern
-error 34: expected COLON
-error 34: expected type
-error 180: expected function arguments
-error 180: expected a block
+++ /dev/null
-fn foo() {
- let foo =
- let bar = 1;
- let
- let baz = 92;
- let
- if true {}
- let
- while true {}
- let
- loop {}
-}
+++ /dev/null
-SOURCE_FILE@[0; 139)
- FN_DEF@[0; 138)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 138)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- LET_STMT@[15; 24)
- LET_KW@[15; 18) "let"
- WHITESPACE@[18; 19) " "
- BIND_PAT@[19; 22)
- NAME@[19; 22)
- IDENT@[19; 22) "foo"
- WHITESPACE@[22; 23) " "
- EQ@[23; 24) "="
- WHITESPACE@[24; 29) "\n "
- LET_STMT@[29; 41)
- LET_KW@[29; 32) "let"
- WHITESPACE@[32; 33) " "
- BIND_PAT@[33; 36)
- NAME@[33; 36)
- IDENT@[33; 36) "bar"
- WHITESPACE@[36; 37) " "
- EQ@[37; 38) "="
- WHITESPACE@[38; 39) " "
- LITERAL@[39; 40)
- INT_NUMBER@[39; 40) "1"
- SEMI@[40; 41) ";"
- WHITESPACE@[41; 46) "\n "
- LET_STMT@[46; 49)
- LET_KW@[46; 49) "let"
- WHITESPACE@[49; 54) "\n "
- LET_STMT@[54; 67)
- LET_KW@[54; 57) "let"
- WHITESPACE@[57; 58) " "
- BIND_PAT@[58; 61)
- NAME@[58; 61)
- IDENT@[58; 61) "baz"
- WHITESPACE@[61; 62) " "
- EQ@[62; 63) "="
- WHITESPACE@[63; 64) " "
- LITERAL@[64; 66)
- INT_NUMBER@[64; 66) "92"
- SEMI@[66; 67) ";"
- WHITESPACE@[67; 72) "\n "
- LET_STMT@[72; 75)
- LET_KW@[72; 75) "let"
- WHITESPACE@[75; 80) "\n "
- EXPR_STMT@[80; 90)
- IF_EXPR@[80; 90)
- IF_KW@[80; 82) "if"
- WHITESPACE@[82; 83) " "
- CONDITION@[83; 87)
- LITERAL@[83; 87)
- TRUE_KW@[83; 87) "true"
- WHITESPACE@[87; 88) " "
- BLOCK@[88; 90)
- L_CURLY@[88; 89) "{"
- R_CURLY@[89; 90) "}"
- WHITESPACE@[90; 95) "\n "
- LET_STMT@[95; 98)
- LET_KW@[95; 98) "let"
- WHITESPACE@[98; 103) "\n "
- EXPR_STMT@[103; 116)
- WHILE_EXPR@[103; 116)
- WHILE_KW@[103; 108) "while"
- WHITESPACE@[108; 109) " "
- CONDITION@[109; 113)
- LITERAL@[109; 113)
- TRUE_KW@[109; 113) "true"
- WHITESPACE@[113; 114) " "
- BLOCK@[114; 116)
- L_CURLY@[114; 115) "{"
- R_CURLY@[115; 116) "}"
- WHITESPACE@[116; 121) "\n "
- LET_STMT@[121; 124)
- LET_KW@[121; 124) "let"
- WHITESPACE@[124; 129) "\n "
- LOOP_EXPR@[129; 136)
- LOOP_KW@[129; 133) "loop"
- WHITESPACE@[133; 134) " "
- BLOCK@[134; 136)
- L_CURLY@[134; 135) "{"
- R_CURLY@[135; 136) "}"
- WHITESPACE@[136; 137) "\n"
- R_CURLY@[137; 138) "}"
- WHITESPACE@[138; 139) "\n"
-error 24: expected expression
-error 24: expected SEMI
-error 49: expected pattern
-error 49: expected SEMI
-error 75: expected pattern
-error 75: expected SEMI
-error 98: expected pattern
-error 98: expected SEMI
-error 124: expected pattern
-error 124: expected SEMI
+++ /dev/null
-fn
-
-fn foo() {}
+++ /dev/null
-SOURCE_FILE@[0; 16)
- FN_DEF@[0; 2)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 4) "\n\n"
- FN_DEF@[4; 15)
- FN_KW@[4; 6) "fn"
- WHITESPACE@[6; 7) " "
- NAME@[7; 10)
- IDENT@[7; 10) "foo"
- PARAM_LIST@[10; 12)
- L_PAREN@[10; 11) "("
- R_PAREN@[11; 12) ")"
- WHITESPACE@[12; 13) " "
- BLOCK@[13; 15)
- L_CURLY@[13; 14) "{"
- R_CURLY@[14; 15) "}"
- WHITESPACE@[15; 16) "\n"
-error 2: expected a name
-error 2: expected function arguments
-error 2: expected a block
+++ /dev/null
-fn foo(x: i32, y) {
-}
+++ /dev/null
-SOURCE_FILE@[0; 22)
- FN_DEF@[0; 21)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 17)
- L_PAREN@[6; 7) "("
- PARAM@[7; 13)
- BIND_PAT@[7; 8)
- NAME@[7; 8)
- IDENT@[7; 8) "x"
- COLON@[8; 9) ":"
- WHITESPACE@[9; 10) " "
- PATH_TYPE@[10; 13)
- PATH@[10; 13)
- PATH_SEGMENT@[10; 13)
- NAME_REF@[10; 13)
- IDENT@[10; 13) "i32"
- COMMA@[13; 14) ","
- WHITESPACE@[14; 15) " "
- PARAM@[15; 16)
- BIND_PAT@[15; 16)
- NAME@[15; 16)
- IDENT@[15; 16) "y"
- R_PAREN@[16; 17) ")"
- WHITESPACE@[17; 18) " "
- BLOCK@[18; 21)
- L_CURLY@[18; 19) "{"
- WHITESPACE@[19; 20) "\n"
- R_CURLY@[20; 21) "}"
- WHITESPACE@[21; 22) "\n"
-error 16: expected COLON
-error 16: expected type
+++ /dev/null
-fn a() { [1, 2, @, struct, let] }
-fn b() { foo(1, 2, @, impl, let) }
-fn c() { foo.bar(1, 2, @, ], trait, let) }
+++ /dev/null
-SOURCE_FILE@[0; 112)
- FN_DEF@[0; 33)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 4)
- IDENT@[3; 4) "a"
- PARAM_LIST@[4; 6)
- L_PAREN@[4; 5) "("
- R_PAREN@[5; 6) ")"
- WHITESPACE@[6; 7) " "
- BLOCK@[7; 33)
- L_CURLY@[7; 8) "{"
- WHITESPACE@[8; 9) " "
- EXPR_STMT@[9; 15)
- ARRAY_EXPR@[9; 15)
- L_BRACK@[9; 10) "["
- LITERAL@[10; 11)
- INT_NUMBER@[10; 11) "1"
- COMMA@[11; 12) ","
- WHITESPACE@[12; 13) " "
- LITERAL@[13; 14)
- INT_NUMBER@[13; 14) "2"
- COMMA@[14; 15) ","
- WHITESPACE@[15; 16) " "
- EXPR_STMT@[16; 17)
- ERROR@[16; 17)
- AT@[16; 17) "@"
- EXPR_STMT@[17; 18)
- ERROR@[17; 18)
- COMMA@[17; 18) ","
- WHITESPACE@[18; 19) " "
- STRUCT_DEF@[19; 26)
- STRUCT_KW@[19; 25) "struct"
- ERROR@[25; 26)
- COMMA@[25; 26) ","
- WHITESPACE@[26; 27) " "
- LET_STMT@[27; 31)
- LET_KW@[27; 30) "let"
- ERROR@[30; 31)
- R_BRACK@[30; 31) "]"
- WHITESPACE@[31; 32) " "
- R_CURLY@[32; 33) "}"
- WHITESPACE@[33; 34) "\n"
- FN_DEF@[34; 68)
- FN_KW@[34; 36) "fn"
- WHITESPACE@[36; 37) " "
- NAME@[37; 38)
- IDENT@[37; 38) "b"
- PARAM_LIST@[38; 40)
- L_PAREN@[38; 39) "("
- R_PAREN@[39; 40) ")"
- WHITESPACE@[40; 41) " "
- BLOCK@[41; 68)
- L_CURLY@[41; 42) "{"
- WHITESPACE@[42; 43) " "
- EXPR_STMT@[43; 52)
- CALL_EXPR@[43; 52)
- PATH_EXPR@[43; 46)
- PATH@[43; 46)
- PATH_SEGMENT@[43; 46)
- NAME_REF@[43; 46)
- IDENT@[43; 46) "foo"
- ARG_LIST@[46; 52)
- L_PAREN@[46; 47) "("
- LITERAL@[47; 48)
- INT_NUMBER@[47; 48) "1"
- COMMA@[48; 49) ","
- WHITESPACE@[49; 50) " "
- LITERAL@[50; 51)
- INT_NUMBER@[50; 51) "2"
- COMMA@[51; 52) ","
- WHITESPACE@[52; 53) " "
- EXPR_STMT@[53; 54)
- ERROR@[53; 54)
- AT@[53; 54) "@"
- EXPR_STMT@[54; 55)
- ERROR@[54; 55)
- COMMA@[54; 55) ","
- WHITESPACE@[55; 56) " "
- IMPL_BLOCK@[56; 60)
- IMPL_KW@[56; 60) "impl"
- EXPR_STMT@[60; 61)
- ERROR@[60; 61)
- COMMA@[60; 61) ","
- WHITESPACE@[61; 62) " "
- LET_STMT@[62; 65)
- LET_KW@[62; 65) "let"
- ERROR@[65; 66)
- R_PAREN@[65; 66) ")"
- WHITESPACE@[66; 67) " "
- R_CURLY@[67; 68) "}"
- WHITESPACE@[68; 69) "\n"
- FN_DEF@[69; 111)
- FN_KW@[69; 71) "fn"
- WHITESPACE@[71; 72) " "
- NAME@[72; 73)
- IDENT@[72; 73) "c"
- PARAM_LIST@[73; 75)
- L_PAREN@[73; 74) "("
- R_PAREN@[74; 75) ")"
- WHITESPACE@[75; 76) " "
- BLOCK@[76; 111)
- L_CURLY@[76; 77) "{"
- WHITESPACE@[77; 78) " "
- EXPR_STMT@[78; 91)
- METHOD_CALL_EXPR@[78; 91)
- PATH_EXPR@[78; 81)
- PATH@[78; 81)
- PATH_SEGMENT@[78; 81)
- NAME_REF@[78; 81)
- IDENT@[78; 81) "foo"
- DOT@[81; 82) "."
- NAME_REF@[82; 85)
- IDENT@[82; 85) "bar"
- ARG_LIST@[85; 91)
- L_PAREN@[85; 86) "("
- LITERAL@[86; 87)
- INT_NUMBER@[86; 87) "1"
- COMMA@[87; 88) ","
- WHITESPACE@[88; 89) " "
- LITERAL@[89; 90)
- INT_NUMBER@[89; 90) "2"
- COMMA@[90; 91) ","
- WHITESPACE@[91; 92) " "
- EXPR_STMT@[92; 93)
- ERROR@[92; 93)
- AT@[92; 93) "@"
- EXPR_STMT@[93; 94)
- ERROR@[93; 94)
- COMMA@[93; 94) ","
- WHITESPACE@[94; 95) " "
- EXPR_STMT@[95; 96)
- ERROR@[95; 96)
- R_BRACK@[95; 96) "]"
- EXPR_STMT@[96; 97)
- ERROR@[96; 97)
- COMMA@[96; 97) ","
- WHITESPACE@[97; 98) " "
- TRAIT_DEF@[98; 104)
- TRAIT_KW@[98; 103) "trait"
- ERROR@[103; 104)
- COMMA@[103; 104) ","
- WHITESPACE@[104; 105) " "
- LET_STMT@[105; 108)
- LET_KW@[105; 108) "let"
- ERROR@[108; 109)
- R_PAREN@[108; 109) ")"
- WHITESPACE@[109; 110) " "
- R_CURLY@[110; 111) "}"
- WHITESPACE@[111; 112) "\n"
-error 15: expected expression
-error 15: expected R_BRACK
-error 15: expected SEMI
-error 16: expected expression
-error 17: expected SEMI
-error 17: expected expression
-error 18: expected SEMI
-error 25: expected a name
-error 26: expected `;`, `{`, or `(`
-error 30: expected pattern
-error 31: expected SEMI
-error 52: expected expression
-error 52: expected SEMI
-error 53: expected expression
-error 54: expected SEMI
-error 54: expected expression
-error 55: expected SEMI
-error 60: expected type
-error 60: expected `{`
-error 60: expected expression
-error 61: expected SEMI
-error 65: expected pattern
-error 65: expected SEMI
-error 65: expected expression
-error 91: expected expression
-error 91: expected SEMI
-error 92: expected expression
-error 93: expected SEMI
-error 93: expected expression
-error 94: expected SEMI
-error 95: expected expression
-error 96: expected SEMI
-error 96: expected expression
-error 97: expected SEMI
-error 103: expected a name
-error 104: expected `{`
-error 108: expected pattern
-error 108: expected SEMI
-error 108: expected expression
+++ /dev/null
-fn main() {
- foo! (
- bar, "baz", 1, 2.0
- } //~ ERROR incorrect close delimiter
-}
+++ /dev/null
-SOURCE_FILE@[0; 94)
- FN_DEF@[0; 55)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 7)
- IDENT@[3; 7) "main"
- PARAM_LIST@[7; 9)
- L_PAREN@[7; 8) "("
- R_PAREN@[8; 9) ")"
- WHITESPACE@[9; 10) " "
- BLOCK@[10; 55)
- L_CURLY@[10; 11) "{"
- WHITESPACE@[11; 16) "\n "
- MACRO_CALL@[16; 49)
- PATH@[16; 19)
- PATH_SEGMENT@[16; 19)
- NAME_REF@[16; 19)
- IDENT@[16; 19) "foo"
- EXCL@[19; 20) "!"
- WHITESPACE@[20; 21) " "
- TOKEN_TREE@[21; 49)
- L_PAREN@[21; 22) "("
- WHITESPACE@[22; 31) "\n "
- IDENT@[31; 34) "bar"
- COMMA@[34; 35) ","
- WHITESPACE@[35; 36) " "
- STRING@[36; 41) "\"baz\""
- COMMA@[41; 42) ","
- WHITESPACE@[42; 43) " "
- INT_NUMBER@[43; 44) "1"
- COMMA@[44; 45) ","
- WHITESPACE@[45; 46) " "
- FLOAT_NUMBER@[46; 49) "2.0"
- WHITESPACE@[49; 54) "\n "
- R_CURLY@[54; 55) "}"
- WHITESPACE@[55; 56) " "
- COMMENT@[56; 91) "//~ ERROR incorrect c ..."
- WHITESPACE@[91; 92) "\n"
- ERROR@[92; 93)
- R_CURLY@[92; 93) "}"
- WHITESPACE@[93; 94) "\n"
-error 49: unmatched `}`
-error 92: unmatched `}`
+++ /dev/null
-fn f<T: (Copy) + (?Sized) + (for<'a> Trait<'a>)>() {}
-
-fn main() {
- let _: Box<(Copy) + (?Sized) + (for<'a> Trait<'a>)>;
- let _: Box<(?Sized) + (for<'a> Trait<'a>) + (Copy)>;
- let _: Box<(for<'a> Trait<'a>) + (Copy) + (?Sized)>;
-}
+++ /dev/null
-SOURCE_FILE@[0; 240)
- FN_DEF@[0; 53)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 4)
- IDENT@[3; 4) "f"
- TYPE_PARAM_LIST@[4; 48)
- L_ANGLE@[4; 5) "<"
- TYPE_PARAM@[5; 47)
- NAME@[5; 6)
- IDENT@[5; 6) "T"
- COLON@[6; 7) ":"
- WHITESPACE@[7; 8) " "
- TYPE_BOUND_LIST@[8; 47)
- TYPE_BOUND@[8; 14)
- L_PAREN@[8; 9) "("
- PATH_TYPE@[9; 13)
- PATH@[9; 13)
- PATH_SEGMENT@[9; 13)
- NAME_REF@[9; 13)
- IDENT@[9; 13) "Copy"
- R_PAREN@[13; 14) ")"
- WHITESPACE@[14; 15) " "
- PLUS@[15; 16) "+"
- WHITESPACE@[16; 17) " "
- TYPE_BOUND@[17; 25)
- L_PAREN@[17; 18) "("
- QUESTION@[18; 19) "?"
- PATH_TYPE@[19; 24)
- PATH@[19; 24)
- PATH_SEGMENT@[19; 24)
- NAME_REF@[19; 24)
- IDENT@[19; 24) "Sized"
- R_PAREN@[24; 25) ")"
- WHITESPACE@[25; 26) " "
- PLUS@[26; 27) "+"
- WHITESPACE@[27; 28) " "
- TYPE_BOUND@[28; 47)
- L_PAREN@[28; 29) "("
- FOR_TYPE@[29; 46)
- FOR_KW@[29; 32) "for"
- TYPE_PARAM_LIST@[32; 36)
- L_ANGLE@[32; 33) "<"
- LIFETIME_PARAM@[33; 35)
- LIFETIME@[33; 35) "\'a"
- R_ANGLE@[35; 36) ">"
- WHITESPACE@[36; 37) " "
- PATH_TYPE@[37; 46)
- PATH@[37; 46)
- PATH_SEGMENT@[37; 46)
- NAME_REF@[37; 42)
- IDENT@[37; 42) "Trait"
- TYPE_ARG_LIST@[42; 46)
- L_ANGLE@[42; 43) "<"
- LIFETIME_ARG@[43; 45)
- LIFETIME@[43; 45) "\'a"
- R_ANGLE@[45; 46) ">"
- R_PAREN@[46; 47) ")"
- R_ANGLE@[47; 48) ">"
- PARAM_LIST@[48; 50)
- L_PAREN@[48; 49) "("
- R_PAREN@[49; 50) ")"
- WHITESPACE@[50; 51) " "
- BLOCK@[51; 53)
- L_CURLY@[51; 52) "{"
- R_CURLY@[52; 53) "}"
- WHITESPACE@[53; 55) "\n\n"
- FN_DEF@[55; 239)
- FN_KW@[55; 57) "fn"
- WHITESPACE@[57; 58) " "
- NAME@[58; 62)
- IDENT@[58; 62) "main"
- PARAM_LIST@[62; 64)
- L_PAREN@[62; 63) "("
- R_PAREN@[63; 64) ")"
- WHITESPACE@[64; 65) " "
- BLOCK@[65; 239)
- L_CURLY@[65; 66) "{"
- WHITESPACE@[66; 71) "\n "
- LET_STMT@[71; 121)
- LET_KW@[71; 74) "let"
- WHITESPACE@[74; 75) " "
- PLACEHOLDER_PAT@[75; 76)
- UNDERSCORE@[75; 76) "_"
- COLON@[76; 77) ":"
- WHITESPACE@[77; 78) " "
- DYN_TRAIT_TYPE@[78; 121)
- TYPE_BOUND_LIST@[78; 121)
- TYPE_BOUND@[78; 88)
- PATH_TYPE@[78; 88)
- PATH@[78; 88)
- PATH_SEGMENT@[78; 88)
- NAME_REF@[78; 81)
- IDENT@[78; 81) "Box"
- TYPE_ARG_LIST@[81; 88)
- L_ANGLE@[81; 82) "<"
- TYPE_ARG@[82; 88)
- PAREN_TYPE@[82; 88)
- L_PAREN@[82; 83) "("
- PATH_TYPE@[83; 87)
- PATH@[83; 87)
- PATH_SEGMENT@[83; 87)
- NAME_REF@[83; 87)
- IDENT@[83; 87) "Copy"
- R_PAREN@[87; 88) ")"
- WHITESPACE@[88; 89) " "
- PLUS@[89; 90) "+"
- WHITESPACE@[90; 91) " "
- TYPE_BOUND@[91; 99)
- L_PAREN@[91; 92) "("
- QUESTION@[92; 93) "?"
- PATH_TYPE@[93; 98)
- PATH@[93; 98)
- PATH_SEGMENT@[93; 98)
- NAME_REF@[93; 98)
- IDENT@[93; 98) "Sized"
- R_PAREN@[98; 99) ")"
- WHITESPACE@[99; 100) " "
- PLUS@[100; 101) "+"
- WHITESPACE@[101; 102) " "
- TYPE_BOUND@[102; 121)
- L_PAREN@[102; 103) "("
- FOR_TYPE@[103; 120)
- FOR_KW@[103; 106) "for"
- TYPE_PARAM_LIST@[106; 110)
- L_ANGLE@[106; 107) "<"
- LIFETIME_PARAM@[107; 109)
- LIFETIME@[107; 109) "\'a"
- R_ANGLE@[109; 110) ">"
- WHITESPACE@[110; 111) " "
- PATH_TYPE@[111; 120)
- PATH@[111; 120)
- PATH_SEGMENT@[111; 120)
- NAME_REF@[111; 116)
- IDENT@[111; 116) "Trait"
- TYPE_ARG_LIST@[116; 120)
- L_ANGLE@[116; 117) "<"
- LIFETIME_ARG@[117; 119)
- LIFETIME@[117; 119) "\'a"
- R_ANGLE@[119; 120) ">"
- R_PAREN@[120; 121) ")"
- EXPR_STMT@[121; 123)
- ERROR@[121; 122)
- R_ANGLE@[121; 122) ">"
- SEMI@[122; 123) ";"
- WHITESPACE@[123; 128) "\n "
- LET_STMT@[128; 141)
- LET_KW@[128; 131) "let"
- WHITESPACE@[131; 132) " "
- PLACEHOLDER_PAT@[132; 133)
- UNDERSCORE@[132; 133) "_"
- COLON@[133; 134) ":"
- WHITESPACE@[134; 135) " "
- PATH_TYPE@[135; 141)
- PATH@[135; 141)
- PATH_SEGMENT@[135; 141)
- NAME_REF@[135; 138)
- IDENT@[135; 138) "Box"
- TYPE_ARG_LIST@[138; 141)
- L_ANGLE@[138; 139) "<"
- TYPE_ARG@[139; 141)
- PAREN_TYPE@[139; 141)
- L_PAREN@[139; 140) "("
- ERROR@[140; 141)
- QUESTION@[140; 141) "?"
- EXPR_STMT@[141; 146)
- PATH_EXPR@[141; 146)
- PATH@[141; 146)
- PATH_SEGMENT@[141; 146)
- NAME_REF@[141; 146)
- IDENT@[141; 146) "Sized"
- EXPR_STMT@[146; 147)
- ERROR@[146; 147)
- R_PAREN@[146; 147) ")"
- WHITESPACE@[147; 148) " "
- EXPR_STMT@[148; 149)
- ERROR@[148; 149)
- PLUS@[148; 149) "+"
- WHITESPACE@[149; 150) " "
- EXPR_STMT@[150; 151)
- PAREN_EXPR@[150; 151)
- L_PAREN@[150; 151) "("
- EXPR_STMT@[151; 157)
- FOR_EXPR@[151; 157)
- FOR_KW@[151; 154) "for"
- ERROR@[154; 155)
- L_ANGLE@[154; 155) "<"
- ERROR@[155; 157)
- LIFETIME@[155; 157) "\'a"
- EXPR_STMT@[157; 158)
- ERROR@[157; 158)
- R_ANGLE@[157; 158) ">"
- WHITESPACE@[158; 159) " "
- EXPR_STMT@[159; 180)
- BIN_EXPR@[159; 180)
- BIN_EXPR@[159; 178)
- BIN_EXPR@[159; 169)
- BIN_EXPR@[159; 167)
- PATH_EXPR@[159; 164)
- PATH@[159; 164)
- PATH_SEGMENT@[159; 164)
- NAME_REF@[159; 164)
- IDENT@[159; 164) "Trait"
- L_ANGLE@[164; 165) "<"
- ERROR@[165; 167)
- LIFETIME@[165; 167) "\'a"
- R_ANGLE@[167; 168) ">"
- ERROR@[168; 169)
- R_PAREN@[168; 169) ")"
- WHITESPACE@[169; 170) " "
- PLUS@[170; 171) "+"
- WHITESPACE@[171; 172) " "
- PAREN_EXPR@[172; 178)
- L_PAREN@[172; 173) "("
- PATH_EXPR@[173; 177)
- PATH@[173; 177)
- PATH_SEGMENT@[173; 177)
- NAME_REF@[173; 177)
- IDENT@[173; 177) "Copy"
- R_PAREN@[177; 178) ")"
- R_ANGLE@[178; 179) ">"
- ERROR@[179; 180)
- SEMI@[179; 180) ";"
- WHITESPACE@[180; 185) "\n "
- LET_STMT@[185; 235)
- LET_KW@[185; 188) "let"
- WHITESPACE@[188; 189) " "
- PLACEHOLDER_PAT@[189; 190)
- UNDERSCORE@[189; 190) "_"
- COLON@[190; 191) ":"
- WHITESPACE@[191; 192) " "
- DYN_TRAIT_TYPE@[192; 235)
- TYPE_BOUND_LIST@[192; 235)
- TYPE_BOUND@[192; 215)
- PATH_TYPE@[192; 215)
- PATH@[192; 215)
- PATH_SEGMENT@[192; 215)
- NAME_REF@[192; 195)
- IDENT@[192; 195) "Box"
- TYPE_ARG_LIST@[195; 215)
- L_ANGLE@[195; 196) "<"
- TYPE_ARG@[196; 215)
- PAREN_TYPE@[196; 215)
- L_PAREN@[196; 197) "("
- FOR_TYPE@[197; 214)
- FOR_KW@[197; 200) "for"
- TYPE_PARAM_LIST@[200; 204)
- L_ANGLE@[200; 201) "<"
- LIFETIME_PARAM@[201; 203)
- LIFETIME@[201; 203) "\'a"
- R_ANGLE@[203; 204) ">"
- WHITESPACE@[204; 205) " "
- PATH_TYPE@[205; 214)
- PATH@[205; 214)
- PATH_SEGMENT@[205; 214)
- NAME_REF@[205; 210)
- IDENT@[205; 210) "Trait"
- TYPE_ARG_LIST@[210; 214)
- L_ANGLE@[210; 211) "<"
- LIFETIME_ARG@[211; 213)
- LIFETIME@[211; 213) "\'a"
- R_ANGLE@[213; 214) ">"
- R_PAREN@[214; 215) ")"
- WHITESPACE@[215; 216) " "
- PLUS@[216; 217) "+"
- WHITESPACE@[217; 218) " "
- TYPE_BOUND@[218; 224)
- L_PAREN@[218; 219) "("
- PATH_TYPE@[219; 223)
- PATH@[219; 223)
- PATH_SEGMENT@[219; 223)
- NAME_REF@[219; 223)
- IDENT@[219; 223) "Copy"
- R_PAREN@[223; 224) ")"
- WHITESPACE@[224; 225) " "
- PLUS@[225; 226) "+"
- WHITESPACE@[226; 227) " "
- TYPE_BOUND@[227; 235)
- L_PAREN@[227; 228) "("
- QUESTION@[228; 229) "?"
- PATH_TYPE@[229; 234)
- PATH@[229; 234)
- PATH_SEGMENT@[229; 234)
- NAME_REF@[229; 234)
- IDENT@[229; 234) "Sized"
- R_PAREN@[234; 235) ")"
- EXPR_STMT@[235; 237)
- ERROR@[235; 236)
- R_ANGLE@[235; 236) ">"
- SEMI@[236; 237) ";"
- WHITESPACE@[237; 238) "\n"
- R_CURLY@[238; 239) "}"
- WHITESPACE@[239; 240) "\n"
-error 88: expected COMMA
-error 88: expected R_ANGLE
-error 121: expected SEMI
-error 121: expected expression
-error 140: expected type
-error 141: expected R_PAREN
-error 141: expected COMMA
-error 141: expected R_ANGLE
-error 141: expected SEMI
-error 146: expected SEMI
-error 146: expected expression
-error 147: expected SEMI
-error 148: expected expression
-error 149: expected SEMI
-error 151: expected expression
-error 151: expected R_PAREN
-error 151: expected SEMI
-error 154: expected pattern
-error 155: expected IN_KW
-error 155: expected expression
-error 157: expected a block
-error 157: expected expression
-error 158: expected SEMI
-error 165: expected expression
-error 168: expected expression
-error 179: expected expression
-error 180: expected SEMI
-error 215: expected COMMA
-error 215: expected R_ANGLE
-error 235: expected SEMI
-error 235: expected expression
+++ /dev/null
-fn main() {
- enum Test {
- Var1,
- Var2(String),
- Var3 {
- abc: {}, //~ ERROR: expected type, found `{`
- },
- }
-
- // recover...
- let a = 1;
- enum Test2 {
- Fine,
- }
-
- enum Test3 {
- StillFine {
- def: i32,
- },
- }
-
- {
- // fail again
- enum Test4 {
- Nope(i32 {}) //~ ERROR: found `{`
- //~^ ERROR: found `{`
- }
- }
- // still recover later
- let bad_syntax = _; //~ ERROR: expected expression, found reserved identifier `_`
-}
+++ /dev/null
-SOURCE_FILE@[0; 575)
- FN_DEF@[0; 574)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 7)
- IDENT@[3; 7) "main"
- PARAM_LIST@[7; 9)
- L_PAREN@[7; 8) "("
- R_PAREN@[8; 9) ")"
- WHITESPACE@[9; 10) " "
- BLOCK@[10; 574)
- L_CURLY@[10; 11) "{"
- WHITESPACE@[11; 16) "\n "
- ENUM_DEF@[16; 152)
- ENUM_KW@[16; 20) "enum"
- WHITESPACE@[20; 21) " "
- NAME@[21; 25)
- IDENT@[21; 25) "Test"
- WHITESPACE@[25; 26) " "
- ENUM_VARIANT_LIST@[26; 152)
- L_CURLY@[26; 27) "{"
- WHITESPACE@[27; 36) "\n "
- ENUM_VARIANT@[36; 40)
- NAME@[36; 40)
- IDENT@[36; 40) "Var1"
- COMMA@[40; 41) ","
- WHITESPACE@[41; 50) "\n "
- ENUM_VARIANT@[50; 62)
- NAME@[50; 54)
- IDENT@[50; 54) "Var2"
- POS_FIELD_DEF_LIST@[54; 62)
- L_PAREN@[54; 55) "("
- POS_FIELD_DEF@[55; 61)
- PATH_TYPE@[55; 61)
- PATH@[55; 61)
- PATH_SEGMENT@[55; 61)
- NAME_REF@[55; 61)
- IDENT@[55; 61) "String"
- R_PAREN@[61; 62) ")"
- COMMA@[62; 63) ","
- WHITESPACE@[63; 72) "\n "
- ENUM_VARIANT@[72; 145)
- NAME@[72; 76)
- IDENT@[72; 76) "Var3"
- WHITESPACE@[76; 77) " "
- NAMED_FIELD_DEF_LIST@[77; 145)
- L_CURLY@[77; 78) "{"
- WHITESPACE@[78; 91) "\n "
- NAMED_FIELD_DEF@[91; 95)
- NAME@[91; 94)
- IDENT@[91; 94) "abc"
- COLON@[94; 95) ":"
- WHITESPACE@[95; 96) " "
- ERROR@[96; 98)
- L_CURLY@[96; 97) "{"
- R_CURLY@[97; 98) "}"
- ERROR@[98; 99)
- COMMA@[98; 99) ","
- WHITESPACE@[99; 100) " "
- COMMENT@[100; 135) "//~ ERROR: expected t ..."
- WHITESPACE@[135; 144) "\n "
- R_CURLY@[144; 145) "}"
- COMMA@[145; 146) ","
- WHITESPACE@[146; 151) "\n "
- R_CURLY@[151; 152) "}"
- WHITESPACE@[152; 158) "\n\n "
- COMMENT@[158; 171) "// recover..."
- WHITESPACE@[171; 176) "\n "
- LET_STMT@[176; 186)
- LET_KW@[176; 179) "let"
- WHITESPACE@[179; 180) " "
- BIND_PAT@[180; 181)
- NAME@[180; 181)
- IDENT@[180; 181) "a"
- WHITESPACE@[181; 182) " "
- EQ@[182; 183) "="
- WHITESPACE@[183; 184) " "
- LITERAL@[184; 185)
- INT_NUMBER@[184; 185) "1"
- SEMI@[185; 186) ";"
- WHITESPACE@[186; 191) "\n "
- ENUM_DEF@[191; 223)
- ENUM_KW@[191; 195) "enum"
- WHITESPACE@[195; 196) " "
- NAME@[196; 201)
- IDENT@[196; 201) "Test2"
- WHITESPACE@[201; 202) " "
- ENUM_VARIANT_LIST@[202; 223)
- L_CURLY@[202; 203) "{"
- WHITESPACE@[203; 212) "\n "
- ENUM_VARIANT@[212; 216)
- NAME@[212; 216)
- IDENT@[212; 216) "Fine"
- COMMA@[216; 217) ","
- WHITESPACE@[217; 222) "\n "
- R_CURLY@[222; 223) "}"
- WHITESPACE@[223; 229) "\n\n "
- ENUM_DEF@[229; 300)
- ENUM_KW@[229; 233) "enum"
- WHITESPACE@[233; 234) " "
- NAME@[234; 239)
- IDENT@[234; 239) "Test3"
- WHITESPACE@[239; 240) " "
- ENUM_VARIANT_LIST@[240; 300)
- L_CURLY@[240; 241) "{"
- WHITESPACE@[241; 250) "\n "
- ENUM_VARIANT@[250; 293)
- NAME@[250; 259)
- IDENT@[250; 259) "StillFine"
- WHITESPACE@[259; 260) " "
- NAMED_FIELD_DEF_LIST@[260; 293)
- L_CURLY@[260; 261) "{"
- WHITESPACE@[261; 274) "\n "
- NAMED_FIELD_DEF@[274; 282)
- NAME@[274; 277)
- IDENT@[274; 277) "def"
- COLON@[277; 278) ":"
- WHITESPACE@[278; 279) " "
- PATH_TYPE@[279; 282)
- PATH@[279; 282)
- PATH_SEGMENT@[279; 282)
- NAME_REF@[279; 282)
- IDENT@[279; 282) "i32"
- COMMA@[282; 283) ","
- WHITESPACE@[283; 292) "\n "
- R_CURLY@[292; 293) "}"
- COMMA@[293; 294) ","
- WHITESPACE@[294; 299) "\n "
- R_CURLY@[299; 300) "}"
- WHITESPACE@[300; 306) "\n\n "
- EXPR_STMT@[306; 459)
- BLOCK_EXPR@[306; 459)
- BLOCK@[306; 459)
- L_CURLY@[306; 307) "{"
- WHITESPACE@[307; 316) "\n "
- ENUM_DEF@[316; 453)
- COMMENT@[316; 329) "// fail again"
- WHITESPACE@[329; 338) "\n "
- ENUM_KW@[338; 342) "enum"
- WHITESPACE@[342; 343) " "
- NAME@[343; 348)
- IDENT@[343; 348) "Test4"
- WHITESPACE@[348; 349) " "
- ENUM_VARIANT_LIST@[349; 453)
- L_CURLY@[349; 350) "{"
- WHITESPACE@[350; 363) "\n "
- ENUM_VARIANT@[363; 372)
- NAME@[363; 367)
- IDENT@[363; 367) "Nope"
- POS_FIELD_DEF_LIST@[367; 372)
- L_PAREN@[367; 368) "("
- POS_FIELD_DEF@[368; 371)
- PATH_TYPE@[368; 371)
- PATH@[368; 371)
- PATH_SEGMENT@[368; 371)
- NAME_REF@[368; 371)
- IDENT@[368; 371) "i32"
- WHITESPACE@[371; 372) " "
- ERROR@[372; 372)
- ERROR@[372; 374)
- L_CURLY@[372; 373) "{"
- R_CURLY@[373; 374) "}"
- ERROR@[374; 375)
- R_PAREN@[374; 375) ")"
- WHITESPACE@[375; 376) " "
- COMMENT@[376; 396) "//~ ERROR: found `{`"
- WHITESPACE@[396; 422) "\n ..."
- COMMENT@[422; 443) "//~^ ERROR: found `{`"
- WHITESPACE@[443; 452) "\n "
- R_CURLY@[452; 453) "}"
- WHITESPACE@[453; 458) "\n "
- R_CURLY@[458; 459) "}"
- WHITESPACE@[459; 464) "\n "
- COMMENT@[464; 486) "// still recover later"
- WHITESPACE@[486; 491) "\n "
- LET_STMT@[491; 510)
- LET_KW@[491; 494) "let"
- WHITESPACE@[494; 495) " "
- BIND_PAT@[495; 505)
- NAME@[495; 505)
- IDENT@[495; 505) "bad_syntax"
- WHITESPACE@[505; 506) " "
- EQ@[506; 507) "="
- WHITESPACE@[507; 508) " "
- ERROR@[508; 509)
- UNDERSCORE@[508; 509) "_"
- SEMI@[509; 510) ";"
- WHITESPACE@[510; 511) " "
- COMMENT@[511; 572) "//~ ERROR: expected e ..."
- WHITESPACE@[572; 573) "\n"
- R_CURLY@[573; 574) "}"
- WHITESPACE@[574; 575) "\n"
-error 95: expected type
-error 95: expected COMMA
-error 96: expected field
-error 98: expected field declaration
-error 371: expected COMMA
-error 372: expected a type
-error 372: expected R_PAREN
-error 372: expected COMMA
-error 372: expected enum variant
-error 374: expected enum variant
-error 508: expected expression
+++ /dev/null
-impl<T: Clone>
-impl<T> OnceCell<T> {}
+++ /dev/null
-SOURCE_FILE@[0; 38)
- IMPL_BLOCK@[0; 14)
- IMPL_KW@[0; 4) "impl"
- TYPE_PARAM_LIST@[4; 14)
- L_ANGLE@[4; 5) "<"
- TYPE_PARAM@[5; 13)
- NAME@[5; 6)
- IDENT@[5; 6) "T"
- COLON@[6; 7) ":"
- WHITESPACE@[7; 8) " "
- TYPE_BOUND_LIST@[8; 13)
- TYPE_BOUND@[8; 13)
- PATH_TYPE@[8; 13)
- PATH@[8; 13)
- PATH_SEGMENT@[8; 13)
- NAME_REF@[8; 13)
- IDENT@[8; 13) "Clone"
- R_ANGLE@[13; 14) ">"
- WHITESPACE@[14; 15) "\n"
- IMPL_BLOCK@[15; 37)
- IMPL_KW@[15; 19) "impl"
- TYPE_PARAM_LIST@[19; 22)
- L_ANGLE@[19; 20) "<"
- TYPE_PARAM@[20; 21)
- NAME@[20; 21)
- IDENT@[20; 21) "T"
- R_ANGLE@[21; 22) ">"
- WHITESPACE@[22; 23) " "
- PATH_TYPE@[23; 34)
- PATH@[23; 34)
- PATH_SEGMENT@[23; 34)
- NAME_REF@[23; 31)
- IDENT@[23; 31) "OnceCell"
- TYPE_ARG_LIST@[31; 34)
- L_ANGLE@[31; 32) "<"
- TYPE_ARG@[32; 33)
- PATH_TYPE@[32; 33)
- PATH@[32; 33)
- PATH_SEGMENT@[32; 33)
- NAME_REF@[32; 33)
- IDENT@[32; 33) "T"
- R_ANGLE@[33; 34) ">"
- WHITESPACE@[34; 35) " "
- ITEM_LIST@[35; 37)
- L_CURLY@[35; 36) "{"
- R_CURLY@[36; 37) "}"
- WHITESPACE@[37; 38) "\n"
-error 14: expected trait or type
-error 14: expected `{`
+++ /dev/null
-fn foo()
- where for<'a>
-{}
+++ /dev/null
-SOURCE_FILE@[0; 30)
- FN_DEF@[0; 29)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 13) "\n "
- WHERE_CLAUSE@[13; 26)
- WHERE_KW@[13; 18) "where"
- WHITESPACE@[18; 19) " "
- WHERE_PRED@[19; 26)
- FOR_TYPE@[19; 26)
- FOR_KW@[19; 22) "for"
- TYPE_PARAM_LIST@[22; 26)
- L_ANGLE@[22; 23) "<"
- LIFETIME_PARAM@[23; 25)
- LIFETIME@[23; 25) "\'a"
- R_ANGLE@[25; 26) ">"
- WHITESPACE@[26; 27) "\n"
- BLOCK@[27; 29)
- L_CURLY@[27; 28) "{"
- R_CURLY@[28; 29) "}"
- WHITESPACE@[29; 30) "\n"
-error 26: expected a path
-error 26: expected colon
+++ /dev/null
-macro parse_use_trees($($s:expr),* $(,)*) {
- vec![
- $(parse_use_tree($s),)*
- ]
-}
-
-#[test]
-fn test_use_tree_merge() {
- macro test_merge([$($input:expr),* $(,)*], [$($output:expr),* $(,)*]) {
- assert_eq!(
- merge_use_trees(parse_use_trees!($($input,)*)),
- parse_use_trees!($($output,)*),
- );
- }
-}
+++ /dev/null
-SOURCE_FILE@[0; 349)
- MACRO_CALL@[0; 41)
- PATH@[0; 5)
- PATH_SEGMENT@[0; 5)
- NAME_REF@[0; 5)
- IDENT@[0; 5) "macro"
- WHITESPACE@[5; 6) " "
- NAME@[6; 21)
- IDENT@[6; 21) "parse_use_trees"
- TOKEN_TREE@[21; 41)
- L_PAREN@[21; 22) "("
- DOLLAR@[22; 23) "$"
- TOKEN_TREE@[23; 32)
- L_PAREN@[23; 24) "("
- DOLLAR@[24; 25) "$"
- IDENT@[25; 26) "s"
- COLON@[26; 27) ":"
- IDENT@[27; 31) "expr"
- R_PAREN@[31; 32) ")"
- COMMA@[32; 33) ","
- STAR@[33; 34) "*"
- WHITESPACE@[34; 35) " "
- DOLLAR@[35; 36) "$"
- TOKEN_TREE@[36; 39)
- L_PAREN@[36; 37) "("
- COMMA@[37; 38) ","
- R_PAREN@[38; 39) ")"
- STAR@[39; 40) "*"
- R_PAREN@[40; 41) ")"
- WHITESPACE@[41; 42) " "
- ERROR@[42; 93)
- L_CURLY@[42; 43) "{"
- WHITESPACE@[43; 48) "\n "
- MACRO_CALL@[48; 91)
- PATH@[48; 51)
- PATH_SEGMENT@[48; 51)
- NAME_REF@[48; 51)
- IDENT@[48; 51) "vec"
- EXCL@[51; 52) "!"
- TOKEN_TREE@[52; 91)
- L_BRACK@[52; 53) "["
- WHITESPACE@[53; 62) "\n "
- DOLLAR@[62; 63) "$"
- TOKEN_TREE@[63; 84)
- L_PAREN@[63; 64) "("
- IDENT@[64; 78) "parse_use_tree"
- TOKEN_TREE@[78; 82)
- L_PAREN@[78; 79) "("
- DOLLAR@[79; 80) "$"
- IDENT@[80; 81) "s"
- R_PAREN@[81; 82) ")"
- COMMA@[82; 83) ","
- R_PAREN@[83; 84) ")"
- STAR@[84; 85) "*"
- WHITESPACE@[85; 90) "\n "
- R_BRACK@[90; 91) "]"
- WHITESPACE@[91; 92) "\n"
- R_CURLY@[92; 93) "}"
- WHITESPACE@[93; 95) "\n\n"
- FN_DEF@[95; 348)
- ATTR@[95; 102)
- POUND@[95; 96) "#"
- TOKEN_TREE@[96; 102)
- L_BRACK@[96; 97) "["
- IDENT@[97; 101) "test"
- R_BRACK@[101; 102) "]"
- WHITESPACE@[102; 103) "\n"
- FN_KW@[103; 105) "fn"
- WHITESPACE@[105; 106) " "
- NAME@[106; 125)
- IDENT@[106; 125) "test_use_tree_merge"
- PARAM_LIST@[125; 127)
- L_PAREN@[125; 126) "("
- R_PAREN@[126; 127) ")"
- WHITESPACE@[127; 128) " "
- BLOCK@[128; 348)
- L_CURLY@[128; 129) "{"
- WHITESPACE@[129; 134) "\n "
- EXPR_STMT@[134; 139)
- PATH_EXPR@[134; 139)
- PATH@[134; 139)
- PATH_SEGMENT@[134; 139)
- NAME_REF@[134; 139)
- IDENT@[134; 139) "macro"
- WHITESPACE@[139; 140) " "
- EXPR_STMT@[140; 154)
- CALL_EXPR@[140; 154)
- PATH_EXPR@[140; 150)
- PATH@[140; 150)
- PATH_SEGMENT@[140; 150)
- NAME_REF@[140; 150)
- IDENT@[140; 150) "test_merge"
- ARG_LIST@[150; 154)
- L_PAREN@[150; 151) "("
- ARRAY_EXPR@[151; 154)
- L_BRACK@[151; 152) "["
- ERROR@[152; 153)
- DOLLAR@[152; 153) "$"
- PAREN_EXPR@[153; 154)
- L_PAREN@[153; 154) "("
- EXPR_STMT@[154; 155)
- ERROR@[154; 155)
- DOLLAR@[154; 155) "$"
- EXPR_STMT@[155; 160)
- PATH_EXPR@[155; 160)
- PATH@[155; 160)
- PATH_SEGMENT@[155; 160)
- NAME_REF@[155; 160)
- IDENT@[155; 160) "input"
- EXPR_STMT@[160; 161)
- ERROR@[160; 161)
- COLON@[160; 161) ":"
- EXPR_STMT@[161; 165)
- PATH_EXPR@[161; 165)
- PATH@[161; 165)
- PATH_SEGMENT@[161; 165)
- NAME_REF@[161; 165)
- IDENT@[161; 165) "expr"
- EXPR_STMT@[165; 166)
- ERROR@[165; 166)
- R_PAREN@[165; 166) ")"
- EXPR_STMT@[166; 167)
- ERROR@[166; 167)
- COMMA@[166; 167) ","
- EXPR_STMT@[167; 170)
- PREFIX_EXPR@[167; 170)
- STAR@[167; 168) "*"
- WHITESPACE@[168; 169) " "
- ERROR@[169; 170)
- DOLLAR@[169; 170) "$"
- EXPR_STMT@[170; 171)
- PAREN_EXPR@[170; 171)
- L_PAREN@[170; 171) "("
- EXPR_STMT@[171; 172)
- ERROR@[171; 172)
- COMMA@[171; 172) ","
- EXPR_STMT@[172; 173)
- ERROR@[172; 173)
- R_PAREN@[172; 173) ")"
- EXPR_STMT@[173; 175)
- PREFIX_EXPR@[173; 175)
- STAR@[173; 174) "*"
- ERROR@[174; 175)
- R_BRACK@[174; 175) "]"
- EXPR_STMT@[175; 176)
- ERROR@[175; 176)
- COMMA@[175; 176) ","
- WHITESPACE@[176; 177) " "
- EXPR_STMT@[177; 180)
- ARRAY_EXPR@[177; 180)
- L_BRACK@[177; 178) "["
- ERROR@[178; 179)
- DOLLAR@[178; 179) "$"
- PAREN_EXPR@[179; 180)
- L_PAREN@[179; 180) "("
- EXPR_STMT@[180; 181)
- ERROR@[180; 181)
- DOLLAR@[180; 181) "$"
- EXPR_STMT@[181; 187)
- PATH_EXPR@[181; 187)
- PATH@[181; 187)
- PATH_SEGMENT@[181; 187)
- NAME_REF@[181; 187)
- IDENT@[181; 187) "output"
- EXPR_STMT@[187; 188)
- ERROR@[187; 188)
- COLON@[187; 188) ":"
- EXPR_STMT@[188; 192)
- PATH_EXPR@[188; 192)
- PATH@[188; 192)
- PATH_SEGMENT@[188; 192)
- NAME_REF@[188; 192)
- IDENT@[188; 192) "expr"
- EXPR_STMT@[192; 193)
- ERROR@[192; 193)
- R_PAREN@[192; 193) ")"
- EXPR_STMT@[193; 194)
- ERROR@[193; 194)
- COMMA@[193; 194) ","
- EXPR_STMT@[194; 197)
- PREFIX_EXPR@[194; 197)
- STAR@[194; 195) "*"
- WHITESPACE@[195; 196) " "
- ERROR@[196; 197)
- DOLLAR@[196; 197) "$"
- EXPR_STMT@[197; 198)
- PAREN_EXPR@[197; 198)
- L_PAREN@[197; 198) "("
- EXPR_STMT@[198; 199)
- ERROR@[198; 199)
- COMMA@[198; 199) ","
- EXPR_STMT@[199; 200)
- ERROR@[199; 200)
- R_PAREN@[199; 200) ")"
- EXPR_STMT@[200; 202)
- PREFIX_EXPR@[200; 202)
- STAR@[200; 201) "*"
- ERROR@[201; 202)
- R_BRACK@[201; 202) "]"
- EXPR_STMT@[202; 203)
- ERROR@[202; 203)
- R_PAREN@[202; 203) ")"
- WHITESPACE@[203; 204) " "
- BLOCK_EXPR@[204; 346)
- BLOCK@[204; 346)
- L_CURLY@[204; 205) "{"
- WHITESPACE@[205; 214) "\n "
- EXPR_STMT@[214; 340)
- MACRO_CALL@[214; 339)
- PATH@[214; 223)
- PATH_SEGMENT@[214; 223)
- NAME_REF@[214; 223)
- IDENT@[214; 223) "assert_eq"
- EXCL@[223; 224) "!"
- TOKEN_TREE@[224; 339)
- L_PAREN@[224; 225) "("
- WHITESPACE@[225; 238) "\n "
- IDENT@[238; 253) "merge_use_trees"
- TOKEN_TREE@[253; 284)
- L_PAREN@[253; 254) "("
- IDENT@[254; 269) "parse_use_trees"
- EXCL@[269; 270) "!"
- TOKEN_TREE@[270; 283)
- L_PAREN@[270; 271) "("
- DOLLAR@[271; 272) "$"
- TOKEN_TREE@[272; 281)
- L_PAREN@[272; 273) "("
- DOLLAR@[273; 274) "$"
- IDENT@[274; 279) "input"
- COMMA@[279; 280) ","
- R_PAREN@[280; 281) ")"
- STAR@[281; 282) "*"
- R_PAREN@[282; 283) ")"
- R_PAREN@[283; 284) ")"
- COMMA@[284; 285) ","
- WHITESPACE@[285; 298) "\n "
- IDENT@[298; 313) "parse_use_trees"
- EXCL@[313; 314) "!"
- TOKEN_TREE@[314; 328)
- L_PAREN@[314; 315) "("
- DOLLAR@[315; 316) "$"
- TOKEN_TREE@[316; 326)
- L_PAREN@[316; 317) "("
- DOLLAR@[317; 318) "$"
- IDENT@[318; 324) "output"
- COMMA@[324; 325) ","
- R_PAREN@[325; 326) ")"
- STAR@[326; 327) "*"
- R_PAREN@[327; 328) ")"
- COMMA@[328; 329) ","
- WHITESPACE@[329; 338) "\n "
- R_PAREN@[338; 339) ")"
- SEMI@[339; 340) ";"
- WHITESPACE@[340; 345) "\n "
- R_CURLY@[345; 346) "}"
- WHITESPACE@[346; 347) "\n"
- R_CURLY@[347; 348) "}"
- WHITESPACE@[348; 349) "\n"
-error 5: expected EXCL
-error 41: expected SEMI
-error 42: expected an item
-error 139: expected SEMI
-error 152: expected expression
-error 153: expected COMMA
-error 154: expected expression
-error 154: expected R_PAREN
-error 154: expected COMMA
-error 154: expected expression
-error 154: expected R_BRACK
-error 154: expected COMMA
-error 154: expected SEMI
-error 154: expected expression
-error 155: expected SEMI
-error 160: expected SEMI
-error 160: expected expression
-error 161: expected SEMI
-error 165: expected SEMI
-error 165: expected expression
-error 166: expected SEMI
-error 166: expected expression
-error 167: expected SEMI
-error 169: expected expression
-error 170: expected SEMI
-error 171: expected expression
-error 171: expected R_PAREN
-error 171: expected SEMI
-error 171: expected expression
-error 172: expected SEMI
-error 172: expected expression
-error 173: expected SEMI
-error 174: expected expression
-error 175: expected SEMI
-error 175: expected expression
-error 176: expected SEMI
-error 178: expected expression
-error 179: expected COMMA
-error 180: expected expression
-error 180: expected R_PAREN
-error 180: expected COMMA
-error 180: expected expression
-error 180: expected R_BRACK
-error 180: expected SEMI
-error 180: expected expression
-error 181: expected SEMI
-error 187: expected SEMI
-error 187: expected expression
-error 188: expected SEMI
-error 192: expected SEMI
-error 192: expected expression
-error 193: expected SEMI
-error 193: expected expression
-error 194: expected SEMI
-error 196: expected expression
-error 197: expected SEMI
-error 198: expected expression
-error 198: expected R_PAREN
-error 198: expected SEMI
-error 198: expected expression
-error 199: expected SEMI
-error 199: expected expression
-error 200: expected SEMI
-error 201: expected expression
-error 202: expected SEMI
-error 202: expected expression
-error 203: expected SEMI
+++ /dev/null
-fn foo(a: A) {
- a.
-}
+++ /dev/null
-SOURCE_FILE@[0; 24)
- FN_DEF@[0; 23)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 12)
- L_PAREN@[6; 7) "("
- PARAM@[7; 11)
- BIND_PAT@[7; 8)
- NAME@[7; 8)
- IDENT@[7; 8) "a"
- COLON@[8; 9) ":"
- WHITESPACE@[9; 10) " "
- PATH_TYPE@[10; 11)
- PATH@[10; 11)
- PATH_SEGMENT@[10; 11)
- NAME_REF@[10; 11)
- IDENT@[10; 11) "A"
- R_PAREN@[11; 12) ")"
- WHITESPACE@[12; 13) " "
- BLOCK@[13; 23)
- L_CURLY@[13; 14) "{"
- WHITESPACE@[14; 19) "\n "
- FIELD_EXPR@[19; 21)
- PATH_EXPR@[19; 20)
- PATH@[19; 20)
- PATH_SEGMENT@[19; 20)
- NAME_REF@[19; 20)
- IDENT@[19; 20) "a"
- DOT@[20; 21) "."
- WHITESPACE@[21; 22) "\n"
- R_CURLY@[22; 23) "}"
- WHITESPACE@[23; 24) "\n"
-error 21: expected field name or number
+++ /dev/null
-fn block() {
- let inner = {
- #![doc("Inner attributes not allowed here")]
- //! Nor are ModuleDoc comments
- };
- if true {
- #![doc("Nor here")]
- #![doc("We error on each attr")]
- //! Nor are ModuleDoc comments
- }
- while true {
- #![doc("Nor here")]
- //! Nor are ModuleDoc comments
- }
-}
+++ /dev/null
-SOURCE_FILE@[0; 350)
- FN_DEF@[0; 349)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 8)
- IDENT@[3; 8) "block"
- PARAM_LIST@[8; 10)
- L_PAREN@[8; 9) "("
- R_PAREN@[9; 10) ")"
- WHITESPACE@[10; 11) " "
- BLOCK@[11; 349)
- L_CURLY@[11; 12) "{"
- WHITESPACE@[12; 17) "\n "
- LET_STMT@[17; 129)
- LET_KW@[17; 20) "let"
- WHITESPACE@[20; 21) " "
- BIND_PAT@[21; 26)
- NAME@[21; 26)
- IDENT@[21; 26) "inner"
- WHITESPACE@[26; 27) " "
- EQ@[27; 28) "="
- WHITESPACE@[28; 29) " "
- BLOCK_EXPR@[29; 128)
- BLOCK@[29; 128)
- L_CURLY@[29; 30) "{"
- WHITESPACE@[30; 39) "\n "
- ATTR@[39; 83)
- POUND@[39; 40) "#"
- EXCL@[40; 41) "!"
- TOKEN_TREE@[41; 83)
- L_BRACK@[41; 42) "["
- IDENT@[42; 45) "doc"
- TOKEN_TREE@[45; 82)
- L_PAREN@[45; 46) "("
- STRING@[46; 81) "\"Inner attributes not ..."
- R_PAREN@[81; 82) ")"
- R_BRACK@[82; 83) "]"
- WHITESPACE@[83; 92) "\n "
- COMMENT@[92; 122) "//! Nor are ModuleDoc ..."
- WHITESPACE@[122; 127) "\n "
- R_CURLY@[127; 128) "}"
- SEMI@[128; 129) ";"
- WHITESPACE@[129; 134) "\n "
- EXPR_STMT@[134; 257)
- IF_EXPR@[134; 257)
- IF_KW@[134; 136) "if"
- WHITESPACE@[136; 137) " "
- CONDITION@[137; 141)
- LITERAL@[137; 141)
- TRUE_KW@[137; 141) "true"
- WHITESPACE@[141; 142) " "
- BLOCK@[142; 257)
- L_CURLY@[142; 143) "{"
- WHITESPACE@[143; 152) "\n "
- ATTR@[152; 171)
- POUND@[152; 153) "#"
- EXCL@[153; 154) "!"
- TOKEN_TREE@[154; 171)
- L_BRACK@[154; 155) "["
- IDENT@[155; 158) "doc"
- TOKEN_TREE@[158; 170)
- L_PAREN@[158; 159) "("
- STRING@[159; 169) "\"Nor here\""
- R_PAREN@[169; 170) ")"
- R_BRACK@[170; 171) "]"
- WHITESPACE@[171; 180) "\n "
- ATTR@[180; 212)
- POUND@[180; 181) "#"
- EXCL@[181; 182) "!"
- TOKEN_TREE@[182; 212)
- L_BRACK@[182; 183) "["
- IDENT@[183; 186) "doc"
- TOKEN_TREE@[186; 211)
- L_PAREN@[186; 187) "("
- STRING@[187; 210) "\"We error on each attr\""
- R_PAREN@[210; 211) ")"
- R_BRACK@[211; 212) "]"
- WHITESPACE@[212; 221) "\n "
- COMMENT@[221; 251) "//! Nor are ModuleDoc ..."
- WHITESPACE@[251; 256) "\n "
- R_CURLY@[256; 257) "}"
- WHITESPACE@[257; 262) "\n "
- WHILE_EXPR@[262; 347)
- WHILE_KW@[262; 267) "while"
- WHITESPACE@[267; 268) " "
- CONDITION@[268; 272)
- LITERAL@[268; 272)
- TRUE_KW@[268; 272) "true"
- WHITESPACE@[272; 273) " "
- BLOCK@[273; 347)
- L_CURLY@[273; 274) "{"
- WHITESPACE@[274; 283) "\n "
- ATTR@[283; 302)
- POUND@[283; 284) "#"
- EXCL@[284; 285) "!"
- TOKEN_TREE@[285; 302)
- L_BRACK@[285; 286) "["
- IDENT@[286; 289) "doc"
- TOKEN_TREE@[289; 301)
- L_PAREN@[289; 290) "("
- STRING@[290; 300) "\"Nor here\""
- R_PAREN@[300; 301) ")"
- R_BRACK@[301; 302) "]"
- WHITESPACE@[302; 311) "\n "
- COMMENT@[311; 341) "//! Nor are ModuleDoc ..."
- WHITESPACE@[341; 346) "\n "
- R_CURLY@[346; 347) "}"
- WHITESPACE@[347; 348) "\n"
- R_CURLY@[348; 349) "}"
- WHITESPACE@[349; 350) "\n"
-error [39; 83): A block in this position cannot accept inner attributes
-error [152; 171): A block in this position cannot accept inner attributes
-error [180; 212): A block in this position cannot accept inner attributes
-error [283; 302): A block in this position cannot accept inner attributes
+++ /dev/null
-fn foo() {
- match () {
- _ => (),
- #![doc("Not allowed here")]
- _ => (),
- }
-
- match () {
- _ => (),
- _ => (),
- #![doc("Nor here")]
- }
-
- match () {
- #[cfg(test)]
- #![doc("Nor here")]
- _ => (),
- _ => (),
- }
-}
+++ /dev/null
-SOURCE_FILE@[0; 293)
- FN_DEF@[0; 292)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 292)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- EXPR_STMT@[15; 101)
- MATCH_EXPR@[15; 101)
- MATCH_KW@[15; 20) "match"
- WHITESPACE@[20; 21) " "
- TUPLE_EXPR@[21; 23)
- L_PAREN@[21; 22) "("
- R_PAREN@[22; 23) ")"
- WHITESPACE@[23; 24) " "
- MATCH_ARM_LIST@[24; 101)
- L_CURLY@[24; 25) "{"
- WHITESPACE@[25; 34) "\n "
- MATCH_ARM@[34; 41)
- PLACEHOLDER_PAT@[34; 35)
- UNDERSCORE@[34; 35) "_"
- WHITESPACE@[35; 36) " "
- FAT_ARROW@[36; 38) "=>"
- WHITESPACE@[38; 39) " "
- TUPLE_EXPR@[39; 41)
- L_PAREN@[39; 40) "("
- R_PAREN@[40; 41) ")"
- COMMA@[41; 42) ","
- WHITESPACE@[42; 51) "\n "
- MATCH_ARM@[51; 78)
- ATTR@[51; 52)
- POUND@[51; 52) "#"
- ERROR@[52; 53)
- EXCL@[52; 53) "!"
- ARRAY_EXPR@[53; 78)
- L_BRACK@[53; 54) "["
- CALL_EXPR@[54; 77)
- PATH_EXPR@[54; 57)
- PATH@[54; 57)
- PATH_SEGMENT@[54; 57)
- NAME_REF@[54; 57)
- IDENT@[54; 57) "doc"
- ARG_LIST@[57; 77)
- L_PAREN@[57; 58) "("
- LITERAL@[58; 76)
- STRING@[58; 76) "\"Not allowed here\""
- R_PAREN@[76; 77) ")"
- R_BRACK@[77; 78) "]"
- WHITESPACE@[78; 87) "\n "
- MATCH_ARM@[87; 94)
- PLACEHOLDER_PAT@[87; 88)
- UNDERSCORE@[87; 88) "_"
- WHITESPACE@[88; 89) " "
- FAT_ARROW@[89; 91) "=>"
- WHITESPACE@[91; 92) " "
- TUPLE_EXPR@[92; 94)
- L_PAREN@[92; 93) "("
- R_PAREN@[93; 94) ")"
- COMMA@[94; 95) ","
- WHITESPACE@[95; 100) "\n "
- R_CURLY@[100; 101) "}"
- WHITESPACE@[101; 107) "\n\n "
- EXPR_STMT@[107; 185)
- MATCH_EXPR@[107; 185)
- MATCH_KW@[107; 112) "match"
- WHITESPACE@[112; 113) " "
- TUPLE_EXPR@[113; 115)
- L_PAREN@[113; 114) "("
- R_PAREN@[114; 115) ")"
- WHITESPACE@[115; 116) " "
- MATCH_ARM_LIST@[116; 185)
- L_CURLY@[116; 117) "{"
- WHITESPACE@[117; 126) "\n "
- MATCH_ARM@[126; 133)
- PLACEHOLDER_PAT@[126; 127)
- UNDERSCORE@[126; 127) "_"
- WHITESPACE@[127; 128) " "
- FAT_ARROW@[128; 130) "=>"
- WHITESPACE@[130; 131) " "
- TUPLE_EXPR@[131; 133)
- L_PAREN@[131; 132) "("
- R_PAREN@[132; 133) ")"
- COMMA@[133; 134) ","
- WHITESPACE@[134; 143) "\n "
- MATCH_ARM@[143; 150)
- PLACEHOLDER_PAT@[143; 144)
- UNDERSCORE@[143; 144) "_"
- WHITESPACE@[144; 145) " "
- FAT_ARROW@[145; 147) "=>"
- WHITESPACE@[147; 148) " "
- TUPLE_EXPR@[148; 150)
- L_PAREN@[148; 149) "("
- R_PAREN@[149; 150) ")"
- COMMA@[150; 151) ","
- WHITESPACE@[151; 160) "\n "
- MATCH_ARM@[160; 179)
- ATTR@[160; 161)
- POUND@[160; 161) "#"
- ERROR@[161; 162)
- EXCL@[161; 162) "!"
- ARRAY_EXPR@[162; 179)
- L_BRACK@[162; 163) "["
- CALL_EXPR@[163; 178)
- PATH_EXPR@[163; 166)
- PATH@[163; 166)
- PATH_SEGMENT@[163; 166)
- NAME_REF@[163; 166)
- IDENT@[163; 166) "doc"
- ARG_LIST@[166; 178)
- L_PAREN@[166; 167) "("
- LITERAL@[167; 177)
- STRING@[167; 177) "\"Nor here\""
- R_PAREN@[177; 178) ")"
- R_BRACK@[178; 179) "]"
- WHITESPACE@[179; 184) "\n "
- R_CURLY@[184; 185) "}"
- WHITESPACE@[185; 191) "\n\n "
- MATCH_EXPR@[191; 290)
- MATCH_KW@[191; 196) "match"
- WHITESPACE@[196; 197) " "
- TUPLE_EXPR@[197; 199)
- L_PAREN@[197; 198) "("
- R_PAREN@[198; 199) ")"
- WHITESPACE@[199; 200) " "
- MATCH_ARM_LIST@[200; 290)
- L_CURLY@[200; 201) "{"
- WHITESPACE@[201; 210) "\n "
- MATCH_ARM@[210; 250)
- ATTR@[210; 222)
- POUND@[210; 211) "#"
- TOKEN_TREE@[211; 222)
- L_BRACK@[211; 212) "["
- IDENT@[212; 215) "cfg"
- TOKEN_TREE@[215; 221)
- L_PAREN@[215; 216) "("
- IDENT@[216; 220) "test"
- R_PAREN@[220; 221) ")"
- R_BRACK@[221; 222) "]"
- WHITESPACE@[222; 231) "\n "
- ATTR@[231; 232)
- POUND@[231; 232) "#"
- ERROR@[232; 233)
- EXCL@[232; 233) "!"
- ARRAY_EXPR@[233; 250)
- L_BRACK@[233; 234) "["
- CALL_EXPR@[234; 249)
- PATH_EXPR@[234; 237)
- PATH@[234; 237)
- PATH_SEGMENT@[234; 237)
- NAME_REF@[234; 237)
- IDENT@[234; 237) "doc"
- ARG_LIST@[237; 249)
- L_PAREN@[237; 238) "("
- LITERAL@[238; 248)
- STRING@[238; 248) "\"Nor here\""
- R_PAREN@[248; 249) ")"
- R_BRACK@[249; 250) "]"
- WHITESPACE@[250; 259) "\n "
- MATCH_ARM@[259; 266)
- PLACEHOLDER_PAT@[259; 260)
- UNDERSCORE@[259; 260) "_"
- WHITESPACE@[260; 261) " "
- FAT_ARROW@[261; 263) "=>"
- WHITESPACE@[263; 264) " "
- TUPLE_EXPR@[264; 266)
- L_PAREN@[264; 265) "("
- R_PAREN@[265; 266) ")"
- COMMA@[266; 267) ","
- WHITESPACE@[267; 276) "\n "
- MATCH_ARM@[276; 283)
- PLACEHOLDER_PAT@[276; 277)
- UNDERSCORE@[276; 277) "_"
- WHITESPACE@[277; 278) " "
- FAT_ARROW@[278; 280) "=>"
- WHITESPACE@[280; 281) " "
- TUPLE_EXPR@[281; 283)
- L_PAREN@[281; 282) "("
- R_PAREN@[282; 283) ")"
- COMMA@[283; 284) ","
- WHITESPACE@[284; 289) "\n "
- R_CURLY@[289; 290) "}"
- WHITESPACE@[290; 291) "\n"
- R_CURLY@[291; 292) "}"
- WHITESPACE@[292; 293) "\n"
-error 52: expected `[`
-error 52: expected pattern
-error 53: expected FAT_ARROW
-error 78: expected COMMA
-error 161: expected `[`
-error 161: expected pattern
-error 162: expected FAT_ARROW
-error 232: expected `[`
-error 232: expected pattern
-error 233: expected FAT_ARROW
-error 250: expected COMMA
+++ /dev/null
-fn foo() {
- match () {
- _ => (),
- _ => (),
- #[cfg(test)]
- }
-}
+++ /dev/null
-SOURCE_FILE@[0; 89)
- FN_DEF@[0; 88)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 88)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- MATCH_EXPR@[15; 86)
- MATCH_KW@[15; 20) "match"
- WHITESPACE@[20; 21) " "
- TUPLE_EXPR@[21; 23)
- L_PAREN@[21; 22) "("
- R_PAREN@[22; 23) ")"
- WHITESPACE@[23; 24) " "
- MATCH_ARM_LIST@[24; 86)
- L_CURLY@[24; 25) "{"
- WHITESPACE@[25; 34) "\n "
- MATCH_ARM@[34; 41)
- PLACEHOLDER_PAT@[34; 35)
- UNDERSCORE@[34; 35) "_"
- WHITESPACE@[35; 36) " "
- FAT_ARROW@[36; 38) "=>"
- WHITESPACE@[38; 39) " "
- TUPLE_EXPR@[39; 41)
- L_PAREN@[39; 40) "("
- R_PAREN@[40; 41) ")"
- COMMA@[41; 42) ","
- WHITESPACE@[42; 51) "\n "
- MATCH_ARM@[51; 58)
- PLACEHOLDER_PAT@[51; 52)
- UNDERSCORE@[51; 52) "_"
- WHITESPACE@[52; 53) " "
- FAT_ARROW@[53; 55) "=>"
- WHITESPACE@[55; 56) " "
- TUPLE_EXPR@[56; 58)
- L_PAREN@[56; 57) "("
- R_PAREN@[57; 58) ")"
- COMMA@[58; 59) ","
- WHITESPACE@[59; 68) "\n "
- MATCH_ARM@[68; 80)
- ATTR@[68; 80)
- POUND@[68; 69) "#"
- TOKEN_TREE@[69; 80)
- L_BRACK@[69; 70) "["
- IDENT@[70; 73) "cfg"
- TOKEN_TREE@[73; 79)
- L_PAREN@[73; 74) "("
- IDENT@[74; 78) "test"
- R_PAREN@[78; 79) ")"
- R_BRACK@[79; 80) "]"
- WHITESPACE@[80; 85) "\n "
- R_CURLY@[85; 86) "}"
- WHITESPACE@[86; 87) "\n"
- R_CURLY@[87; 88) "}"
- WHITESPACE@[88; 89) "\n"
-error 80: expected pattern
-error 80: expected FAT_ARROW
-error 80: expected expression
+++ /dev/null
-//! An experimental implementation of [Rust RFC#2256 lrs);
- let root = SyntaxNode::new_owned(root);
- validate_block_structure(root.borrowed());
- File { root }
- }
- pub fn parse(text: &str) -> File {
- let tokens = tokenize(&text);
- let (green, errors) = parser_impl::parse_with::<syntax_node::GreenBuilder>(
- text, &tokens, grammar::root,
- );
- File::new(green, errors)
- }
- pub fn reparse(&self, edit: &AtomTextEdit) -> File {
- self.incremental_reparse(edit).unwrap_or_else(|| self.full_reparse(edit))
- }
- pub fn incremental_reparse(&self, edit: &AtomTextEdit) -> Option<File> {
- let (node, reparser) = find_reparsable_node(self.syntax(), edit.delete)?;
- let text = replace_range(
- node.text().to_string(),
- edit.delete - node.range().start(),
- &edit.insert,
- );
- let tokens = tokenize(&text);
- if !is_balanced(&tokens) {
- return None;
- }
- let (green, new_errors) = parser_impl::parse_with::<syntax_node::GreenBuilder>(
- &te2t, &tokens, reparser,
- );
- let green_root = node.replace_with(green);
- let errors = merge_errors(self.errors(), new_errors, node, edit);
- Some(File::new(green_root, errors))
- }
- fn full_reparse(&self, edit: &AtomTextEdit) -> File {
- let text = replace_range(self.syntax().text().to_string(), edit.delete, &edit.insert);
- File::parse(&text)
- }
- pub fn ast(&self) -> ast::Root {
- ast::Root::cast(self.syntax()).unwrap()
- }
- pub fn syntax(&self) -> SyntaxNodeRef {
- self.root.brroowed()
- }
- mp_tree(root),
- );
- assert!(
- node.next_sibling().is_none() && pair.prev_sibling().is_none(),
- "\nfloating curlys at {:?}\nfile:\n{}\nerror:\n{}\n",
- node,
- root.text(),
- node.text(),
- );
- }
- }
- _ => (),
- }
- }
-}
-
-#[derive(Debug, Clone)]
-pub struct AtomTextEdit {
- pub delete: TextRange,
- pub insert: String,
-}
-
-impl AtomTextEdit {
- pub fn replace(range: TextRange, replace_with: String) -> AtomTextEdit {
- AtomTextEdit { delete: range, insert: replace_with }
- }
-
- pub fn delete(range: TextRange) -> AtomTextEdit {
- AtomTextEdit::replace(range, String::new())
- }
-
- pub fn insert(offset: TextUnit, text: String) -> AtomTextEdit {
- AtomTextEdit::replace(TextRange::offset_len(offset, 0.into()), text)
- }
-}
-
-fn find_reparsable_node(node: SyntaxNodeRef, range: TextRange) -> Option<(SyntaxNodeRef, fn(&mut Parser))> {
- let node = algo::find_covering_node(node, range);
- return algo::ancestors(node)
- .filter_map(|node| reparser(node).map(|r| (node, r)))
- .next();
-
- fn reparser(node: SyntaxNodeRef) -> Option<fn(&mut Parser)> {
- let res = match node.kind() {
- BLOCK => grammar::block,
- NAMED_FIELD_DEF_LIST => grammar::named_field_def_list,
- _ => return None,
- };
- Some(res)
- }
-}
-
-pub /*(meh)*/ fn replace_range(mut text: String, range: TextRange, replace_with: &str) -> String {
- let start = u32::from(range.start()) as usize;
- let end = u32::from(range.end()) as usize;
- text.replace_range(start..end, replace_with);
- text
-}
-
-fn is_balanced(tokens: &[Token]) -> bool {
- if tokens.len() == 0
- || tokens.first().unwrap().kind != L_CURLY
- || tokens.last().unwrap().kind != R_CURLY {
- return false
- }
- let mut balance = 0usize;
- for t in tokens.iter() {
- match t.kind {
- L_CURLYt {
- pub delete: TextRange,
- pub insert: String,
-}
-
-impl AtomTextEdit {
- pub fn replace(range: TextRange, replace_with: String) -> AtomTextEdit {
- AtomTextEdit { delete: range, insert: replace_with }
- }
-
- pub fn delete(range: TextRange) -> AtomTextEdit {
- AtomTextEdit::replace(range, String::new())
- }
-
- pub fn insert(offset: TextUnit, text: String) -> AtomTextEdit {
- AtomTextEdit::replace(TextRange::offset_len(offset, 0.into()), text)
- }
-}
-
-fn find_reparsable_node(node: SyntaxNodeRef, range: TextRange) -> Option<(SyntaxNodeRef, fn(&mut Parser))> {
- let node = algo::find_covering_node(node, range);
- return algo::ancestors(node)
- .filter_map(|node| reparser(node).map(|r| (node, r)))
- .next();
-
- fn reparser(node: SyntaxNodeRef) -> Option<fn(&mut Parser)> {
- let res = match node.kind() {
- ;
- let end = u32::from(range.end()) as usize;
- text.replaT => grammar::named_field_def_list,
- _ => return None,
- };
- Some(res)
- }
-}
-
-pub /*(meh)*/ fn replace_range(mut text: String, range: TextRange, replace_with: &str) -> String {
- let start = u32::from(range.start()) as usize;
- let end = u32::from(range.end()) as usize;
- text.replace_range(start..end, replace_with);
- text
-}
-
-fn is_balanced(tokens: &[Token]) -> bool {
- if tokens.len() == 0
- || tokens.first().unwrap().kind != L_CURLY
- || tokens.last().unwrap().kind != R_CURLY {
- return false
- }
- let mut balance = 0usize;
- for t in tokens.iter() {
- match t.kind {
- L_CURLY => balance += 1,
- R_CURLY => balance = match balance.checked_sub(1) {
- Some(b) => b,
- None => return false,
- },
- _ => (),
- }
- }
- balance == 0
-}
-
-fn merge_errors(
- old_errors: Vec<SyntaxError>,
- new_errors: Vec<SyntaxError>,
- old_node: SyntaxNodeRef,
- edit: &AtomTextEdit,
-) -> Vec<SyntaxError> {
- let mut res = Vec::new();
- for e in old_errors {
- if e.offset < old_node.range().start() {
- res.push(e)
- } else if e.offset > old_node.range().end() {
- res.push(SyntaxError {
- msg: e.msg,
- offset: e.offset + TextUnit::of_str(&edit.insert) - edit.delete.len(),
- })
- }
- }
- for e in new_errors {
- res.push(SyntaxError {
- msg: e.msg,
- offset: e.offset + old_node.range().start(),
- })
- }
- res
-}
+++ /dev/null
-use ra_syntax::{
- File, TextRange, SyntaxNodeRef, TextUnit,
- SyntaxKind::*,
- algo::{find_leaf_at_offset, LeafAtOffset, find_covering_node, ancestors, Direction, siblings},
-};
-
-pub fn extend_selection(file: &File, range: TextRange) -> Option<TextRange> {
- let syntax = file.syntax();
- extend(syntax.borrowed(), range)
-}
-
-pub(crate) fn extend(root: SyntaxNodeRef, range: TextRange) -> Option<TextRange> {
- if range.is_empty() {
- let offset = range.start();
- let mut leaves = find_leaf_at_offset(root, offset);
- if leaves.clone().all(|it| it.kind() == WHITESPACE) {
- return Some(extend_ws(root, leaves.next()?, offset));
- }
- let leaf = match leaves {
- LeafAtOffset::None => return None,
- LeafAtOffset::Single(l) => l,
- LeafAtOffset::Between(l, r) => pick_best(l, r),
- };
- return Some(leaf.range());
- };
- let node = find_covering_node(root, range);
- if node.kind() == COMMENT && range == node.range() {
- if let Some(range) = extend_comments(node) {
- return Some(range);
- }
- }
-
- match ancestors(node).skip_while(|n| n.range() == range).next() {
- None => None,
- Some(parent) => Some(parent.range()),
- }
-}
-
-fn extend_ws(root: SyntaxNodeRef, ws: SyntaxNodeRef, offset: TextUnit) -> TextRange {
- let ws_text = ws.leaf_text().unwrap();
- let suffix = TextRange::from_to(offset, ws.range().end()) - ws.range().start();
- let prefix = TextRange::from_to(ws.range().start(), offset) - ws.range().start();
- let ws_suffix = &ws_text.as_str()[suffix];
- let ws_prefix = &ws_text.as_str()[prefix];
- if ws_text.contains("\n") && !ws_suffix.contains("\n") {
- if let Some(node) = ws.next_sibling() {
- let start = match ws_prefix.rfind('\n') {
- Some(idx) => ws.range().start() + TextUnit::from((idx + 1) as u32),
- None => node.range().start()
- };
- let end = if root.text().char_at(node.range().end()) == Some('\n') {
- node.range().end() + TextUnit::of_char('\n')
- } else {
- node.range().end()
- };
- return TextRange::from_to(start, end);
- }
- }
- ws.range()
-}
-
-fn pick_best<'a>(l: SyntaxNodeRef<'a>, r: Syntd[axNodeRef<'a>) -> SyntaxNodeRef<'a> {
- return if priority(r) > priority(l) { r } else { l };
- fn priority(n: SyntaxNodeRef) -> usize {
- match n.kind() {
- WHITESPACE => 0,
- IDENT | SELF_KW | SUPER_KW | CRATE_KW => 2,
- _ => 1,
- }
- }
-}
-
-fn extend_comments(node: SyntaxNodeRef) -> Option<TextRange> {
- let left = adj_com[ments(node, Direction::Backward);
- let right = adj_comments(node, Direction::Forward);
- if left != right {
- Some(TextRange::from_to(
- left.range().start(),
- right.range().end(),
- ))
- } else {
- None
- }
-}
-
-fn adj_comments(node: SyntaxNodeRef, dir: Direction) -> SyntaxNodeRef {
- let mut res = node;
- for node in siblings(node, dir) {
- match node.kind() {
- COMMENT => res = node,
- WHITESPACE if !node.leaf_text().unwrap().as_str().contains("\n\n") => (),
- _ => break
- }
- }
- res
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
- use test_utils::extract_offset;
-
- fn do_check(before: &str, afters: &[&str]) {
- let (cursor, before) = extract_offset(before);
- let file = File::parse(&before);
- let mut range = TextRange::of
+++ /dev/null
-!('\
\ No newline at end of file
+++ /dev/null
-if'\xɿ
\ No newline at end of file
+++ /dev/null
-b"\xʿ
\ No newline at end of file
+++ /dev/null
-type T = [() 92];
+++ /dev/null
-SOURCE_FILE@[0; 18)
- TYPE_ALIAS_DEF@[0; 12)
- TYPE_KW@[0; 4) "type"
- WHITESPACE@[4; 5) " "
- NAME@[5; 6)
- IDENT@[5; 6) "T"
- WHITESPACE@[6; 7) " "
- EQ@[7; 8) "="
- WHITESPACE@[8; 9) " "
- SLICE_TYPE@[9; 12)
- L_BRACK@[9; 10) "["
- TUPLE_TYPE@[10; 12)
- L_PAREN@[10; 11) "("
- R_PAREN@[11; 12) ")"
- WHITESPACE@[12; 13) " "
- ERROR@[13; 15)
- INT_NUMBER@[13; 15) "92"
- ERROR@[15; 16)
- R_BRACK@[15; 16) "]"
- ERROR@[16; 17)
- SEMI@[16; 17) ";"
- WHITESPACE@[17; 18) "\n"
-error 12: expected `;` or `]`
-error 12: expected SEMI
-error 13: expected an item
-error 15: expected an item
-error 16: expected an item
+++ /dev/null
-fn main() {
- 'loop: impl
-}
+++ /dev/null
-SOURCE_FILE@[0; 30)
- FN_DEF@[0; 29)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 7)
- IDENT@[3; 7) "main"
- PARAM_LIST@[7; 9)
- L_PAREN@[7; 8) "("
- R_PAREN@[8; 9) ")"
- WHITESPACE@[9; 10) " "
- BLOCK@[10; 29)
- L_CURLY@[10; 11) "{"
- WHITESPACE@[11; 16) "\n "
- EXPR_STMT@[16; 22)
- ERROR@[16; 22)
- LABEL@[16; 22)
- LIFETIME@[16; 21) "\'loop"
- COLON@[21; 22) ":"
- WHITESPACE@[22; 23) " "
- IMPL_BLOCK@[23; 27)
- IMPL_KW@[23; 27) "impl"
- WHITESPACE@[27; 28) "\n"
- R_CURLY@[28; 29) "}"
- WHITESPACE@[29; 30) "\n"
-error 22: expected a loop
-error 22: expected SEMI
-error 27: expected type
-error 27: expected `{`
+++ /dev/null
-type T = *();
+++ /dev/null
-SOURCE_FILE@[0; 14)
- TYPE_ALIAS_DEF@[0; 13)
- TYPE_KW@[0; 4) "type"
- WHITESPACE@[4; 5) " "
- NAME@[5; 6)
- IDENT@[5; 6) "T"
- WHITESPACE@[6; 7) " "
- EQ@[7; 8) "="
- WHITESPACE@[8; 9) " "
- POINTER_TYPE@[9; 12)
- STAR@[9; 10) "*"
- TUPLE_TYPE@[10; 12)
- L_PAREN@[10; 11) "("
- R_PAREN@[11; 12) ")"
- SEMI@[12; 13) ";"
- WHITESPACE@[13; 14) "\n"
-error 10: expected mut or const in raw pointer type (use `*mut T` or `*const T` as appropriate)
+++ /dev/null
-impl Type {}
-impl Trait1 for T {}
-impl impl NotType {}
-impl Trait2 for impl NotType {}
+++ /dev/null
-SOURCE_FILE@[0; 87)
- IMPL_BLOCK@[0; 12)
- IMPL_KW@[0; 4) "impl"
- WHITESPACE@[4; 5) " "
- PATH_TYPE@[5; 9)
- PATH@[5; 9)
- PATH_SEGMENT@[5; 9)
- NAME_REF@[5; 9)
- IDENT@[5; 9) "Type"
- WHITESPACE@[9; 10) " "
- ITEM_LIST@[10; 12)
- L_CURLY@[10; 11) "{"
- R_CURLY@[11; 12) "}"
- WHITESPACE@[12; 13) "\n"
- IMPL_BLOCK@[13; 33)
- IMPL_KW@[13; 17) "impl"
- WHITESPACE@[17; 18) " "
- PATH_TYPE@[18; 24)
- PATH@[18; 24)
- PATH_SEGMENT@[18; 24)
- NAME_REF@[18; 24)
- IDENT@[18; 24) "Trait1"
- WHITESPACE@[24; 25) " "
- FOR_KW@[25; 28) "for"
- WHITESPACE@[28; 29) " "
- PATH_TYPE@[29; 30)
- PATH@[29; 30)
- PATH_SEGMENT@[29; 30)
- NAME_REF@[29; 30)
- IDENT@[29; 30) "T"
- WHITESPACE@[30; 31) " "
- ITEM_LIST@[31; 33)
- L_CURLY@[31; 32) "{"
- R_CURLY@[32; 33) "}"
- WHITESPACE@[33; 34) "\n"
- IMPL_BLOCK@[34; 38)
- IMPL_KW@[34; 38) "impl"
- WHITESPACE@[38; 39) " "
- IMPL_BLOCK@[39; 54)
- IMPL_KW@[39; 43) "impl"
- WHITESPACE@[43; 44) " "
- PATH_TYPE@[44; 51)
- PATH@[44; 51)
- PATH_SEGMENT@[44; 51)
- NAME_REF@[44; 51)
- IDENT@[44; 51) "NotType"
- WHITESPACE@[51; 52) " "
- ITEM_LIST@[52; 54)
- L_CURLY@[52; 53) "{"
- R_CURLY@[53; 54) "}"
- WHITESPACE@[54; 55) "\n"
- IMPL_BLOCK@[55; 70)
- IMPL_KW@[55; 59) "impl"
- WHITESPACE@[59; 60) " "
- PATH_TYPE@[60; 66)
- PATH@[60; 66)
- PATH_SEGMENT@[60; 66)
- NAME_REF@[60; 66)
- IDENT@[60; 66) "Trait2"
- WHITESPACE@[66; 67) " "
- FOR_KW@[67; 70) "for"
- WHITESPACE@[70; 71) " "
- IMPL_BLOCK@[71; 86)
- IMPL_KW@[71; 75) "impl"
- WHITESPACE@[75; 76) " "
- PATH_TYPE@[76; 83)
- PATH@[76; 83)
- PATH_SEGMENT@[76; 83)
- NAME_REF@[76; 83)
- IDENT@[76; 83) "NotType"
- WHITESPACE@[83; 84) " "
- ITEM_LIST@[84; 86)
- L_CURLY@[84; 85) "{"
- R_CURLY@[85; 86) "}"
- WHITESPACE@[86; 87) "\n"
-error 38: expected trait or type
-error 38: expected `{`
-error 70: expected trait or type
-error 70: expected `{`
+++ /dev/null
-type F = unsafe ();
+++ /dev/null
-SOURCE_FILE@[0; 20)
- TYPE_ALIAS_DEF@[0; 15)
- TYPE_KW@[0; 4) "type"
- WHITESPACE@[4; 5) " "
- NAME@[5; 6)
- IDENT@[5; 6) "F"
- WHITESPACE@[6; 7) " "
- EQ@[7; 8) "="
- WHITESPACE@[8; 9) " "
- UNSAFE_KW@[9; 15) "unsafe"
- WHITESPACE@[15; 16) " "
- ERROR@[16; 17)
- L_PAREN@[16; 17) "("
- ERROR@[17; 18)
- R_PAREN@[17; 18) ")"
- ERROR@[18; 19)
- SEMI@[18; 19) ";"
- WHITESPACE@[19; 20) "\n"
-error 15: expected `fn`
-error 15: expected SEMI
-error 16: expected an item
-error 17: expected an item
-error 18: expected an item
+++ /dev/null
-fn foo(){} unsafe { } fn bar(){}
+++ /dev/null
-SOURCE_FILE@[0; 33)
- FN_DEF@[0; 10)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- BLOCK@[8; 10)
- L_CURLY@[8; 9) "{"
- R_CURLY@[9; 10) "}"
- WHITESPACE@[10; 11) " "
- ERROR@[11; 17)
- UNSAFE_KW@[11; 17) "unsafe"
- WHITESPACE@[17; 18) " "
- ERROR@[18; 21)
- L_CURLY@[18; 19) "{"
- WHITESPACE@[19; 20) " "
- R_CURLY@[20; 21) "}"
- WHITESPACE@[21; 22) " "
- FN_DEF@[22; 32)
- FN_KW@[22; 24) "fn"
- WHITESPACE@[24; 25) " "
- NAME@[25; 28)
- IDENT@[25; 28) "bar"
- PARAM_LIST@[28; 30)
- L_PAREN@[28; 29) "("
- R_PAREN@[29; 30) ")"
- BLOCK@[30; 32)
- L_CURLY@[30; 31) "{"
- R_CURLY@[31; 32) "}"
- WHITESPACE@[32; 33) "\n"
-error 11: expected an item
-error 18: expected an item
+++ /dev/null
-fn foo() { let _ = async {} }
+++ /dev/null
-SOURCE_FILE@[0; 30)
- FN_DEF@[0; 29)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 29)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 11) " "
- LET_STMT@[11; 27)
- LET_KW@[11; 14) "let"
- WHITESPACE@[14; 15) " "
- PLACEHOLDER_PAT@[15; 16)
- UNDERSCORE@[15; 16) "_"
- WHITESPACE@[16; 17) " "
- EQ@[17; 18) "="
- WHITESPACE@[18; 19) " "
- BLOCK_EXPR@[19; 27)
- ASYNC_KW@[19; 24) "async"
- WHITESPACE@[24; 25) " "
- BLOCK@[25; 27)
- L_CURLY@[25; 26) "{"
- R_CURLY@[26; 27) "}"
- WHITESPACE@[27; 28) " "
- R_CURLY@[28; 29) "}"
- WHITESPACE@[29; 30) "\n"
-error 27: expected SEMI
+++ /dev/null
-fn foo() { pub 92; }
+++ /dev/null
-SOURCE_FILE@[0; 21)
- FN_DEF@[0; 20)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 20)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 11) " "
- ERROR@[11; 14)
- VISIBILITY@[11; 14)
- PUB_KW@[11; 14) "pub"
- WHITESPACE@[14; 15) " "
- EXPR_STMT@[15; 18)
- LITERAL@[15; 17)
- INT_NUMBER@[15; 17) "92"
- SEMI@[17; 18) ";"
- WHITESPACE@[18; 19) " "
- R_CURLY@[19; 20) "}"
- WHITESPACE@[20; 21) "\n"
-error 14: expected an item
+++ /dev/null
-fn foo() {
- #[A] 1 + 2;
- #[B] if true {};
-}
+++ /dev/null
-SOURCE_FILE@[0; 48)
- FN_DEF@[0; 47)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 47)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 14) "\n "
- EXPR_STMT@[14; 25)
- ATTR@[14; 18)
- POUND@[14; 15) "#"
- TOKEN_TREE@[15; 18)
- L_BRACK@[15; 16) "["
- IDENT@[16; 17) "A"
- R_BRACK@[17; 18) "]"
- WHITESPACE@[18; 19) " "
- BIN_EXPR@[19; 24)
- LITERAL@[19; 20)
- INT_NUMBER@[19; 20) "1"
- WHITESPACE@[20; 21) " "
- PLUS@[21; 22) "+"
- WHITESPACE@[22; 23) " "
- LITERAL@[23; 24)
- INT_NUMBER@[23; 24) "2"
- SEMI@[24; 25) ";"
- WHITESPACE@[25; 29) "\n "
- EXPR_STMT@[29; 45)
- ATTR@[29; 33)
- POUND@[29; 30) "#"
- TOKEN_TREE@[30; 33)
- L_BRACK@[30; 31) "["
- IDENT@[31; 32) "B"
- R_BRACK@[32; 33) "]"
- WHITESPACE@[33; 34) " "
- IF_EXPR@[34; 44)
- IF_KW@[34; 36) "if"
- WHITESPACE@[36; 37) " "
- CONDITION@[37; 41)
- LITERAL@[37; 41)
- TRUE_KW@[37; 41) "true"
- WHITESPACE@[41; 42) " "
- BLOCK@[42; 44)
- L_CURLY@[42; 43) "{"
- R_CURLY@[43; 44) "}"
- SEMI@[44; 45) ";"
- WHITESPACE@[45; 46) "\n"
- R_CURLY@[46; 47) "}"
- WHITESPACE@[47; 48) "\n"
-error 24: attributes are not allowed on BIN_EXPR
-error 44: attributes are not allowed on IF_EXPR
+++ /dev/null
-fn foo() {
- x.0.;
- x.1i32;
- x.0x01;
-}
+++ /dev/null
-SOURCE_FILE@[0; 47)
- FN_DEF@[0; 46)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 46)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- EXPR_STMT@[15; 20)
- FIELD_EXPR@[15; 19)
- PATH_EXPR@[15; 16)
- PATH@[15; 16)
- PATH_SEGMENT@[15; 16)
- NAME_REF@[15; 16)
- IDENT@[15; 16) "x"
- DOT@[16; 17) "."
- FLOAT_NUMBER@[17; 19) "0."
- SEMI@[19; 20) ";"
- WHITESPACE@[20; 25) "\n "
- EXPR_STMT@[25; 32)
- FIELD_EXPR@[25; 31)
- PATH_EXPR@[25; 26)
- PATH@[25; 26)
- PATH_SEGMENT@[25; 26)
- NAME_REF@[25; 26)
- IDENT@[25; 26) "x"
- DOT@[26; 27) "."
- INT_NUMBER@[27; 31) "1i32"
- SEMI@[31; 32) ";"
- WHITESPACE@[32; 37) "\n "
- EXPR_STMT@[37; 44)
- FIELD_EXPR@[37; 43)
- PATH_EXPR@[37; 38)
- PATH@[37; 38)
- PATH_SEGMENT@[37; 38)
- NAME_REF@[37; 38)
- IDENT@[37; 38) "x"
- DOT@[38; 39) "."
- INT_NUMBER@[39; 43) "0x01"
- SEMI@[43; 44) ";"
- WHITESPACE@[44; 45) "\n"
- R_CURLY@[45; 46) "}"
- WHITESPACE@[46; 47) "\n"
-error [17; 19): Tuple (struct) field access is only allowed through decimal integers with no underscores or suffix
-error [27; 31): Tuple (struct) field access is only allowed through decimal integers with no underscores or suffix
-error [39; 43): Tuple (struct) field access is only allowed through decimal integers with no underscores or suffix
+++ /dev/null
-async unsafe fn foo() {}
-unsafe const fn bar() {}
+++ /dev/null
-SOURCE_FILE@[0; 50)
- ERROR@[0; 5)
- ASYNC_KW@[0; 5) "async"
- WHITESPACE@[5; 6) " "
- FN_DEF@[6; 24)
- UNSAFE_KW@[6; 12) "unsafe"
- WHITESPACE@[12; 13) " "
- FN_KW@[13; 15) "fn"
- WHITESPACE@[15; 16) " "
- NAME@[16; 19)
- IDENT@[16; 19) "foo"
- PARAM_LIST@[19; 21)
- L_PAREN@[19; 20) "("
- R_PAREN@[20; 21) ")"
- WHITESPACE@[21; 22) " "
- BLOCK@[22; 24)
- L_CURLY@[22; 23) "{"
- R_CURLY@[23; 24) "}"
- WHITESPACE@[24; 25) "\n"
- ERROR@[25; 31)
- UNSAFE_KW@[25; 31) "unsafe"
- WHITESPACE@[31; 32) " "
- FN_DEF@[32; 49)
- CONST_KW@[32; 37) "const"
- WHITESPACE@[37; 38) " "
- FN_KW@[38; 40) "fn"
- WHITESPACE@[40; 41) " "
- NAME@[41; 44)
- IDENT@[41; 44) "bar"
- PARAM_LIST@[44; 46)
- L_PAREN@[44; 45) "("
- R_PAREN@[45; 46) ")"
- WHITESPACE@[46; 47) " "
- BLOCK@[47; 49)
- L_CURLY@[47; 48) "{"
- R_CURLY@[48; 49) "}"
- WHITESPACE@[49; 50) "\n"
-error 5: expected existential, fn, trait or impl
-error 31: expected existential, fn, trait or impl
+++ /dev/null
-trait T {
- default type T = Bar;
- default fn foo() {}
-}
+++ /dev/null
-SOURCE_FILE@[0; 62)
- TRAIT_DEF@[0; 61)
- TRAIT_KW@[0; 5) "trait"
- WHITESPACE@[5; 6) " "
- NAME@[6; 7)
- IDENT@[6; 7) "T"
- WHITESPACE@[7; 8) " "
- ITEM_LIST@[8; 61)
- L_CURLY@[8; 9) "{"
- WHITESPACE@[9; 14) "\n "
- MACRO_CALL@[14; 21)
- PATH@[14; 21)
- PATH_SEGMENT@[14; 21)
- NAME_REF@[14; 21)
- IDENT@[14; 21) "default"
- WHITESPACE@[21; 22) " "
- TYPE_ALIAS_DEF@[22; 35)
- TYPE_KW@[22; 26) "type"
- WHITESPACE@[26; 27) " "
- NAME@[27; 28)
- IDENT@[27; 28) "T"
- WHITESPACE@[28; 29) " "
- EQ@[29; 30) "="
- WHITESPACE@[30; 31) " "
- PATH_TYPE@[31; 34)
- PATH@[31; 34)
- PATH_SEGMENT@[31; 34)
- NAME_REF@[31; 34)
- IDENT@[31; 34) "Bar"
- SEMI@[34; 35) ";"
- WHITESPACE@[35; 40) "\n "
- MACRO_CALL@[40; 47)
- PATH@[40; 47)
- PATH_SEGMENT@[40; 47)
- NAME_REF@[40; 47)
- IDENT@[40; 47) "default"
- WHITESPACE@[47; 48) " "
- FN_DEF@[48; 59)
- FN_KW@[48; 50) "fn"
- WHITESPACE@[50; 51) " "
- NAME@[51; 54)
- IDENT@[51; 54) "foo"
- PARAM_LIST@[54; 56)
- L_PAREN@[54; 55) "("
- R_PAREN@[55; 56) ")"
- WHITESPACE@[56; 57) " "
- BLOCK@[57; 59)
- L_CURLY@[57; 58) "{"
- R_CURLY@[58; 59) "}"
- WHITESPACE@[59; 60) "\n"
- R_CURLY@[60; 61) "}"
- WHITESPACE@[61; 62) "\n"
-error 21: expected EXCL
-error 21: expected `{`, `[`, `(`
-error 21: expected SEMI
-error 47: expected EXCL
-error 47: expected `{`, `[`, `(`
-error 47: expected SEMI
+++ /dev/null
-impl F {
- type A: Clone;
- const B: i32;
- fn foo() {}
- fn bar(&self);
-}
+++ /dev/null
-SOURCE_FILE@[0; 83)
- IMPL_BLOCK@[0; 82)
- IMPL_KW@[0; 4) "impl"
- WHITESPACE@[4; 5) " "
- PATH_TYPE@[5; 6)
- PATH@[5; 6)
- PATH_SEGMENT@[5; 6)
- NAME_REF@[5; 6)
- IDENT@[5; 6) "F"
- WHITESPACE@[6; 7) " "
- ITEM_LIST@[7; 82)
- L_CURLY@[7; 8) "{"
- WHITESPACE@[8; 13) "\n "
- TYPE_ALIAS_DEF@[13; 27)
- TYPE_KW@[13; 17) "type"
- WHITESPACE@[17; 18) " "
- NAME@[18; 19)
- IDENT@[18; 19) "A"
- COLON@[19; 20) ":"
- WHITESPACE@[20; 21) " "
- TYPE_BOUND_LIST@[21; 26)
- TYPE_BOUND@[21; 26)
- PATH_TYPE@[21; 26)
- PATH@[21; 26)
- PATH_SEGMENT@[21; 26)
- NAME_REF@[21; 26)
- IDENT@[21; 26) "Clone"
- SEMI@[26; 27) ";"
- WHITESPACE@[27; 32) "\n "
- CONST_DEF@[32; 45)
- CONST_KW@[32; 37) "const"
- WHITESPACE@[37; 38) " "
- NAME@[38; 39)
- IDENT@[38; 39) "B"
- COLON@[39; 40) ":"
- WHITESPACE@[40; 41) " "
- PATH_TYPE@[41; 44)
- PATH@[41; 44)
- PATH_SEGMENT@[41; 44)
- NAME_REF@[41; 44)
- IDENT@[41; 44) "i32"
- SEMI@[44; 45) ";"
- WHITESPACE@[45; 50) "\n "
- FN_DEF@[50; 61)
- FN_KW@[50; 52) "fn"
- WHITESPACE@[52; 53) " "
- NAME@[53; 56)
- IDENT@[53; 56) "foo"
- PARAM_LIST@[56; 58)
- L_PAREN@[56; 57) "("
- R_PAREN@[57; 58) ")"
- WHITESPACE@[58; 59) " "
- BLOCK@[59; 61)
- L_CURLY@[59; 60) "{"
- R_CURLY@[60; 61) "}"
- WHITESPACE@[61; 66) "\n "
- FN_DEF@[66; 80)
- FN_KW@[66; 68) "fn"
- WHITESPACE@[68; 69) " "
- NAME@[69; 72)
- IDENT@[69; 72) "bar"
- PARAM_LIST@[72; 79)
- L_PAREN@[72; 73) "("
- SELF_PARAM@[73; 78)
- AMP@[73; 74) "&"
- SELF_KW@[74; 78) "self"
- R_PAREN@[78; 79) ")"
- SEMI@[79; 80) ";"
- WHITESPACE@[80; 81) "\n"
- R_CURLY@[81; 82) "}"
- WHITESPACE@[82; 83) "\n"
+++ /dev/null
-use {crate::path::from::root, or::path::from::crate_name}; // Rust 2018 (with a crate named `or`)
-use {path::from::root}; // Rust 2015
-use ::{some::arbritrary::path}; // Rust 2015
-use ::{{{crate::export}}}; // Nonsensical but perfectly legal nestnig
+++ /dev/null
-SOURCE_FILE@[0; 250)
- USE_ITEM@[0; 58)
- USE_KW@[0; 3) "use"
- WHITESPACE@[3; 4) " "
- USE_TREE@[4; 57)
- USE_TREE_LIST@[4; 57)
- L_CURLY@[4; 5) "{"
- USE_TREE@[5; 28)
- PATH@[5; 28)
- PATH@[5; 22)
- PATH@[5; 16)
- PATH@[5; 10)
- PATH_SEGMENT@[5; 10)
- CRATE_KW@[5; 10) "crate"
- COLONCOLON@[10; 12) "::"
- PATH_SEGMENT@[12; 16)
- NAME_REF@[12; 16)
- IDENT@[12; 16) "path"
- COLONCOLON@[16; 18) "::"
- PATH_SEGMENT@[18; 22)
- NAME_REF@[18; 22)
- IDENT@[18; 22) "from"
- COLONCOLON@[22; 24) "::"
- PATH_SEGMENT@[24; 28)
- NAME_REF@[24; 28)
- IDENT@[24; 28) "root"
- COMMA@[28; 29) ","
- WHITESPACE@[29; 30) " "
- USE_TREE@[30; 56)
- PATH@[30; 56)
- PATH@[30; 44)
- PATH@[30; 38)
- PATH@[30; 32)
- PATH_SEGMENT@[30; 32)
- NAME_REF@[30; 32)
- IDENT@[30; 32) "or"
- COLONCOLON@[32; 34) "::"
- PATH_SEGMENT@[34; 38)
- NAME_REF@[34; 38)
- IDENT@[34; 38) "path"
- COLONCOLON@[38; 40) "::"
- PATH_SEGMENT@[40; 44)
- NAME_REF@[40; 44)
- IDENT@[40; 44) "from"
- COLONCOLON@[44; 46) "::"
- PATH_SEGMENT@[46; 56)
- NAME_REF@[46; 56)
- IDENT@[46; 56) "crate_name"
- R_CURLY@[56; 57) "}"
- SEMI@[57; 58) ";"
- WHITESPACE@[58; 59) " "
- COMMENT@[59; 97) "// Rust 2018 (with a ..."
- WHITESPACE@[97; 98) "\n"
- USE_ITEM@[98; 121)
- USE_KW@[98; 101) "use"
- WHITESPACE@[101; 102) " "
- USE_TREE@[102; 120)
- USE_TREE_LIST@[102; 120)
- L_CURLY@[102; 103) "{"
- USE_TREE@[103; 119)
- PATH@[103; 119)
- PATH@[103; 113)
- PATH@[103; 107)
- PATH_SEGMENT@[103; 107)
- NAME_REF@[103; 107)
- IDENT@[103; 107) "path"
- COLONCOLON@[107; 109) "::"
- PATH_SEGMENT@[109; 113)
- NAME_REF@[109; 113)
- IDENT@[109; 113) "from"
- COLONCOLON@[113; 115) "::"
- PATH_SEGMENT@[115; 119)
- NAME_REF@[115; 119)
- IDENT@[115; 119) "root"
- R_CURLY@[119; 120) "}"
- SEMI@[120; 121) ";"
- WHITESPACE@[121; 122) " "
- COMMENT@[122; 134) "// Rust 2015"
- WHITESPACE@[134; 135) "\n"
- USE_ITEM@[135; 166)
- USE_KW@[135; 138) "use"
- WHITESPACE@[138; 139) " "
- USE_TREE@[139; 165)
- COLONCOLON@[139; 141) "::"
- USE_TREE_LIST@[141; 165)
- L_CURLY@[141; 142) "{"
- USE_TREE@[142; 164)
- PATH@[142; 164)
- PATH@[142; 158)
- PATH@[142; 146)
- PATH_SEGMENT@[142; 146)
- NAME_REF@[142; 146)
- IDENT@[142; 146) "some"
- COLONCOLON@[146; 148) "::"
- PATH_SEGMENT@[148; 158)
- NAME_REF@[148; 158)
- IDENT@[148; 158) "arbritrary"
- COLONCOLON@[158; 160) "::"
- PATH_SEGMENT@[160; 164)
- NAME_REF@[160; 164)
- IDENT@[160; 164) "path"
- R_CURLY@[164; 165) "}"
- SEMI@[165; 166) ";"
- WHITESPACE@[166; 167) " "
- COMMENT@[167; 179) "// Rust 2015"
- WHITESPACE@[179; 180) "\n"
- USE_ITEM@[180; 206)
- USE_KW@[180; 183) "use"
- WHITESPACE@[183; 184) " "
- USE_TREE@[184; 205)
- COLONCOLON@[184; 186) "::"
- USE_TREE_LIST@[186; 205)
- L_CURLY@[186; 187) "{"
- USE_TREE@[187; 204)
- USE_TREE_LIST@[187; 204)
- L_CURLY@[187; 188) "{"
- USE_TREE@[188; 203)
- USE_TREE_LIST@[188; 203)
- L_CURLY@[188; 189) "{"
- USE_TREE@[189; 202)
- PATH@[189; 202)
- PATH@[189; 194)
- PATH_SEGMENT@[189; 194)
- CRATE_KW@[189; 194) "crate"
- COLONCOLON@[194; 196) "::"
- PATH_SEGMENT@[196; 202)
- NAME_REF@[196; 202)
- IDENT@[196; 202) "export"
- R_CURLY@[202; 203) "}"
- R_CURLY@[203; 204) "}"
- R_CURLY@[204; 205) "}"
- SEMI@[205; 206) ";"
- WHITESPACE@[206; 207) " "
- COMMENT@[207; 249) "// Nonsensical but pe ..."
- WHITESPACE@[249; 250) "\n"
+++ /dev/null
-fn test<F>()
-where
- for<'a> F: Fn(&'a str)
-{ }
+++ /dev/null
-SOURCE_FILE@[0; 49)
- FN_DEF@[0; 48)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 7)
- IDENT@[3; 7) "test"
- TYPE_PARAM_LIST@[7; 10)
- L_ANGLE@[7; 8) "<"
- TYPE_PARAM@[8; 9)
- NAME@[8; 9)
- IDENT@[8; 9) "F"
- R_ANGLE@[9; 10) ">"
- PARAM_LIST@[10; 12)
- L_PAREN@[10; 11) "("
- R_PAREN@[11; 12) ")"
- WHITESPACE@[12; 13) "\n"
- WHERE_CLAUSE@[13; 44)
- WHERE_KW@[13; 18) "where"
- WHITESPACE@[18; 22) "\n "
- WHERE_PRED@[22; 44)
- FOR_TYPE@[22; 31)
- FOR_KW@[22; 25) "for"
- TYPE_PARAM_LIST@[25; 29)
- L_ANGLE@[25; 26) "<"
- LIFETIME_PARAM@[26; 28)
- LIFETIME@[26; 28) "\'a"
- R_ANGLE@[28; 29) ">"
- WHITESPACE@[29; 30) " "
- PATH_TYPE@[30; 31)
- PATH@[30; 31)
- PATH_SEGMENT@[30; 31)
- NAME_REF@[30; 31)
- IDENT@[30; 31) "F"
- COLON@[31; 32) ":"
- WHITESPACE@[32; 33) " "
- TYPE_BOUND_LIST@[33; 44)
- TYPE_BOUND@[33; 44)
- PATH_TYPE@[33; 44)
- PATH@[33; 44)
- PATH_SEGMENT@[33; 44)
- NAME_REF@[33; 35)
- IDENT@[33; 35) "Fn"
- PARAM_LIST@[35; 44)
- L_PAREN@[35; 36) "("
- PARAM@[36; 43)
- REFERENCE_TYPE@[36; 43)
- AMP@[36; 37) "&"
- LIFETIME@[37; 39) "\'a"
- WHITESPACE@[39; 40) " "
- PATH_TYPE@[40; 43)
- PATH@[40; 43)
- PATH_SEGMENT@[40; 43)
- NAME_REF@[40; 43)
- IDENT@[40; 43) "str"
- R_PAREN@[43; 44) ")"
- WHITESPACE@[44; 45) "\n"
- BLOCK@[45; 48)
- L_CURLY@[45; 46) "{"
- WHITESPACE@[46; 47) " "
- R_CURLY@[47; 48) "}"
- WHITESPACE@[48; 49) "\n"
+++ /dev/null
-type F = Box<Fn(a: i32, &b: &i32, &mut c: &i32, ())>;
+++ /dev/null
-SOURCE_FILE@[0; 54)
- TYPE_ALIAS_DEF@[0; 53)
- TYPE_KW@[0; 4) "type"
- WHITESPACE@[4; 5) " "
- NAME@[5; 6)
- IDENT@[5; 6) "F"
- WHITESPACE@[6; 7) " "
- EQ@[7; 8) "="
- WHITESPACE@[8; 9) " "
- PATH_TYPE@[9; 52)
- PATH@[9; 52)
- PATH_SEGMENT@[9; 52)
- NAME_REF@[9; 12)
- IDENT@[9; 12) "Box"
- TYPE_ARG_LIST@[12; 52)
- L_ANGLE@[12; 13) "<"
- TYPE_ARG@[13; 51)
- PATH_TYPE@[13; 51)
- PATH@[13; 51)
- PATH_SEGMENT@[13; 51)
- NAME_REF@[13; 15)
- IDENT@[13; 15) "Fn"
- PARAM_LIST@[15; 51)
- L_PAREN@[15; 16) "("
- PARAM@[16; 22)
- BIND_PAT@[16; 17)
- NAME@[16; 17)
- IDENT@[16; 17) "a"
- COLON@[17; 18) ":"
- WHITESPACE@[18; 19) " "
- PATH_TYPE@[19; 22)
- PATH@[19; 22)
- PATH_SEGMENT@[19; 22)
- NAME_REF@[19; 22)
- IDENT@[19; 22) "i32"
- COMMA@[22; 23) ","
- WHITESPACE@[23; 24) " "
- PARAM@[24; 32)
- REF_PAT@[24; 26)
- AMP@[24; 25) "&"
- BIND_PAT@[25; 26)
- NAME@[25; 26)
- IDENT@[25; 26) "b"
- COLON@[26; 27) ":"
- WHITESPACE@[27; 28) " "
- REFERENCE_TYPE@[28; 32)
- AMP@[28; 29) "&"
- PATH_TYPE@[29; 32)
- PATH@[29; 32)
- PATH_SEGMENT@[29; 32)
- NAME_REF@[29; 32)
- IDENT@[29; 32) "i32"
- COMMA@[32; 33) ","
- WHITESPACE@[33; 34) " "
- PARAM@[34; 46)
- REF_PAT@[34; 40)
- AMP@[34; 35) "&"
- MUT_KW@[35; 38) "mut"
- WHITESPACE@[38; 39) " "
- BIND_PAT@[39; 40)
- NAME@[39; 40)
- IDENT@[39; 40) "c"
- COLON@[40; 41) ":"
- WHITESPACE@[41; 42) " "
- REFERENCE_TYPE@[42; 46)
- AMP@[42; 43) "&"
- PATH_TYPE@[43; 46)
- PATH@[43; 46)
- PATH_SEGMENT@[43; 46)
- NAME_REF@[43; 46)
- IDENT@[43; 46) "i32"
- COMMA@[46; 47) ","
- WHITESPACE@[47; 48) " "
- PARAM@[48; 50)
- TUPLE_TYPE@[48; 50)
- L_PAREN@[48; 49) "("
- R_PAREN@[49; 50) ")"
- R_PAREN@[50; 51) ")"
- R_ANGLE@[51; 52) ">"
- SEMI@[52; 53) ";"
- WHITESPACE@[53; 54) "\n"
+++ /dev/null
-fn foo<T: Clone + Copy>(){}
+++ /dev/null
-SOURCE_FILE@[0; 28)
- FN_DEF@[0; 27)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- TYPE_PARAM_LIST@[6; 23)
- L_ANGLE@[6; 7) "<"
- TYPE_PARAM@[7; 22)
- NAME@[7; 8)
- IDENT@[7; 8) "T"
- COLON@[8; 9) ":"
- WHITESPACE@[9; 10) " "
- TYPE_BOUND_LIST@[10; 22)
- TYPE_BOUND@[10; 15)
- PATH_TYPE@[10; 15)
- PATH@[10; 15)
- PATH_SEGMENT@[10; 15)
- NAME_REF@[10; 15)
- IDENT@[10; 15) "Clone"
- WHITESPACE@[15; 16) " "
- PLUS@[16; 17) "+"
- WHITESPACE@[17; 18) " "
- TYPE_BOUND@[18; 22)
- PATH_TYPE@[18; 22)
- PATH@[18; 22)
- PATH_SEGMENT@[18; 22)
- NAME_REF@[18; 22)
- IDENT@[18; 22) "Copy"
- R_ANGLE@[22; 23) ">"
- PARAM_LIST@[23; 25)
- L_PAREN@[23; 24) "("
- R_PAREN@[24; 25) ")"
- BLOCK@[25; 27)
- L_CURLY@[25; 26) "{"
- R_CURLY@[26; 27) "}"
- WHITESPACE@[27; 28) "\n"
+++ /dev/null
-impl S {
- fn a(self) {}
- fn b(&self,) {}
- fn c(&'a self,) {}
- fn d(&'a mut self, x: i32) {}
- fn e(mut self) {}
-}
+++ /dev/null
-SOURCE_FILE@[0; 128)
- IMPL_BLOCK@[0; 127)
- IMPL_KW@[0; 4) "impl"
- WHITESPACE@[4; 5) " "
- PATH_TYPE@[5; 6)
- PATH@[5; 6)
- PATH_SEGMENT@[5; 6)
- NAME_REF@[5; 6)
- IDENT@[5; 6) "S"
- WHITESPACE@[6; 7) " "
- ITEM_LIST@[7; 127)
- L_CURLY@[7; 8) "{"
- WHITESPACE@[8; 13) "\n "
- FN_DEF@[13; 26)
- FN_KW@[13; 15) "fn"
- WHITESPACE@[15; 16) " "
- NAME@[16; 17)
- IDENT@[16; 17) "a"
- PARAM_LIST@[17; 23)
- L_PAREN@[17; 18) "("
- SELF_PARAM@[18; 22)
- SELF_KW@[18; 22) "self"
- R_PAREN@[22; 23) ")"
- WHITESPACE@[23; 24) " "
- BLOCK@[24; 26)
- L_CURLY@[24; 25) "{"
- R_CURLY@[25; 26) "}"
- WHITESPACE@[26; 31) "\n "
- FN_DEF@[31; 46)
- FN_KW@[31; 33) "fn"
- WHITESPACE@[33; 34) " "
- NAME@[34; 35)
- IDENT@[34; 35) "b"
- PARAM_LIST@[35; 43)
- L_PAREN@[35; 36) "("
- SELF_PARAM@[36; 41)
- AMP@[36; 37) "&"
- SELF_KW@[37; 41) "self"
- COMMA@[41; 42) ","
- R_PAREN@[42; 43) ")"
- WHITESPACE@[43; 44) " "
- BLOCK@[44; 46)
- L_CURLY@[44; 45) "{"
- R_CURLY@[45; 46) "}"
- WHITESPACE@[46; 51) "\n "
- FN_DEF@[51; 69)
- FN_KW@[51; 53) "fn"
- WHITESPACE@[53; 54) " "
- NAME@[54; 55)
- IDENT@[54; 55) "c"
- PARAM_LIST@[55; 66)
- L_PAREN@[55; 56) "("
- SELF_PARAM@[56; 64)
- AMP@[56; 57) "&"
- LIFETIME@[57; 59) "\'a"
- WHITESPACE@[59; 60) " "
- SELF_KW@[60; 64) "self"
- COMMA@[64; 65) ","
- R_PAREN@[65; 66) ")"
- WHITESPACE@[66; 67) " "
- BLOCK@[67; 69)
- L_CURLY@[67; 68) "{"
- R_CURLY@[68; 69) "}"
- WHITESPACE@[69; 74) "\n "
- FN_DEF@[74; 103)
- FN_KW@[74; 76) "fn"
- WHITESPACE@[76; 77) " "
- NAME@[77; 78)
- IDENT@[77; 78) "d"
- PARAM_LIST@[78; 100)
- L_PAREN@[78; 79) "("
- SELF_PARAM@[79; 91)
- AMP@[79; 80) "&"
- LIFETIME@[80; 82) "\'a"
- WHITESPACE@[82; 83) " "
- MUT_KW@[83; 86) "mut"
- WHITESPACE@[86; 87) " "
- SELF_KW@[87; 91) "self"
- COMMA@[91; 92) ","
- WHITESPACE@[92; 93) " "
- PARAM@[93; 99)
- BIND_PAT@[93; 94)
- NAME@[93; 94)
- IDENT@[93; 94) "x"
- COLON@[94; 95) ":"
- WHITESPACE@[95; 96) " "
- PATH_TYPE@[96; 99)
- PATH@[96; 99)
- PATH_SEGMENT@[96; 99)
- NAME_REF@[96; 99)
- IDENT@[96; 99) "i32"
- R_PAREN@[99; 100) ")"
- WHITESPACE@[100; 101) " "
- BLOCK@[101; 103)
- L_CURLY@[101; 102) "{"
- R_CURLY@[102; 103) "}"
- WHITESPACE@[103; 108) "\n "
- FN_DEF@[108; 125)
- FN_KW@[108; 110) "fn"
- WHITESPACE@[110; 111) " "
- NAME@[111; 112)
- IDENT@[111; 112) "e"
- PARAM_LIST@[112; 122)
- L_PAREN@[112; 113) "("
- SELF_PARAM@[113; 121)
- MUT_KW@[113; 116) "mut"
- WHITESPACE@[116; 117) " "
- SELF_KW@[117; 121) "self"
- R_PAREN@[121; 122) ")"
- WHITESPACE@[122; 123) " "
- BLOCK@[123; 125)
- L_CURLY@[123; 124) "{"
- R_CURLY@[124; 125) "}"
- WHITESPACE@[125; 126) "\n"
- R_CURLY@[126; 127) "}"
- WHITESPACE@[127; 128) "\n"
+++ /dev/null
-struct S<T: 'a + ?Sized + (Copy)>;
+++ /dev/null
-SOURCE_FILE@[0; 35)
- STRUCT_DEF@[0; 34)
- STRUCT_KW@[0; 6) "struct"
- WHITESPACE@[6; 7) " "
- NAME@[7; 8)
- IDENT@[7; 8) "S"
- TYPE_PARAM_LIST@[8; 33)
- L_ANGLE@[8; 9) "<"
- TYPE_PARAM@[9; 32)
- NAME@[9; 10)
- IDENT@[9; 10) "T"
- COLON@[10; 11) ":"
- WHITESPACE@[11; 12) " "
- TYPE_BOUND_LIST@[12; 32)
- TYPE_BOUND@[12; 14)
- LIFETIME@[12; 14) "\'a"
- WHITESPACE@[14; 15) " "
- PLUS@[15; 16) "+"
- WHITESPACE@[16; 17) " "
- TYPE_BOUND@[17; 23)
- QUESTION@[17; 18) "?"
- PATH_TYPE@[18; 23)
- PATH@[18; 23)
- PATH_SEGMENT@[18; 23)
- NAME_REF@[18; 23)
- IDENT@[18; 23) "Sized"
- WHITESPACE@[23; 24) " "
- PLUS@[24; 25) "+"
- WHITESPACE@[25; 26) " "
- TYPE_BOUND@[26; 32)
- L_PAREN@[26; 27) "("
- PATH_TYPE@[27; 31)
- PATH@[27; 31)
- PATH_SEGMENT@[27; 31)
- NAME_REF@[27; 31)
- IDENT@[27; 31) "Copy"
- R_PAREN@[31; 32) ")"
- R_ANGLE@[32; 33) ">"
- SEMI@[33; 34) ";"
- WHITESPACE@[34; 35) "\n"
+++ /dev/null
-fn foo() {
- let foo::Bar = ();
- let ::Bar = ();
- let Bar { .. } = ();
- let Bar(..) = ();
-}
+++ /dev/null
-SOURCE_FILE@[0; 103)
- FN_DEF@[0; 102)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 102)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- LET_STMT@[15; 33)
- LET_KW@[15; 18) "let"
- WHITESPACE@[18; 19) " "
- PATH_PAT@[19; 27)
- PATH@[19; 27)
- PATH@[19; 22)
- PATH_SEGMENT@[19; 22)
- NAME_REF@[19; 22)
- IDENT@[19; 22) "foo"
- COLONCOLON@[22; 24) "::"
- PATH_SEGMENT@[24; 27)
- NAME_REF@[24; 27)
- IDENT@[24; 27) "Bar"
- WHITESPACE@[27; 28) " "
- EQ@[28; 29) "="
- WHITESPACE@[29; 30) " "
- TUPLE_EXPR@[30; 32)
- L_PAREN@[30; 31) "("
- R_PAREN@[31; 32) ")"
- SEMI@[32; 33) ";"
- WHITESPACE@[33; 38) "\n "
- LET_STMT@[38; 53)
- LET_KW@[38; 41) "let"
- WHITESPACE@[41; 42) " "
- PATH_PAT@[42; 47)
- PATH@[42; 47)
- PATH_SEGMENT@[42; 47)
- COLONCOLON@[42; 44) "::"
- NAME_REF@[44; 47)
- IDENT@[44; 47) "Bar"
- WHITESPACE@[47; 48) " "
- EQ@[48; 49) "="
- WHITESPACE@[49; 50) " "
- TUPLE_EXPR@[50; 52)
- L_PAREN@[50; 51) "("
- R_PAREN@[51; 52) ")"
- SEMI@[52; 53) ";"
- WHITESPACE@[53; 58) "\n "
- LET_STMT@[58; 78)
- LET_KW@[58; 61) "let"
- WHITESPACE@[61; 62) " "
- STRUCT_PAT@[62; 72)
- PATH@[62; 65)
- PATH_SEGMENT@[62; 65)
- NAME_REF@[62; 65)
- IDENT@[62; 65) "Bar"
- WHITESPACE@[65; 66) " "
- FIELD_PAT_LIST@[66; 72)
- L_CURLY@[66; 67) "{"
- WHITESPACE@[67; 68) " "
- DOTDOT@[68; 70) ".."
- WHITESPACE@[70; 71) " "
- R_CURLY@[71; 72) "}"
- WHITESPACE@[72; 73) " "
- EQ@[73; 74) "="
- WHITESPACE@[74; 75) " "
- TUPLE_EXPR@[75; 77)
- L_PAREN@[75; 76) "("
- R_PAREN@[76; 77) ")"
- SEMI@[77; 78) ";"
- WHITESPACE@[78; 83) "\n "
- LET_STMT@[83; 100)
- LET_KW@[83; 86) "let"
- WHITESPACE@[86; 87) " "
- TUPLE_STRUCT_PAT@[87; 94)
- PATH@[87; 90)
- PATH_SEGMENT@[87; 90)
- NAME_REF@[87; 90)
- IDENT@[87; 90) "Bar"
- L_PAREN@[90; 91) "("
- DOTDOT@[91; 93) ".."
- R_PAREN@[93; 94) ")"
- WHITESPACE@[94; 95) " "
- EQ@[95; 96) "="
- WHITESPACE@[96; 97) " "
- TUPLE_EXPR@[97; 99)
- L_PAREN@[97; 98) "("
- R_PAREN@[98; 99) ")"
- SEMI@[99; 100) ";"
- WHITESPACE@[100; 101) "\n"
- R_CURLY@[101; 102) "}"
- WHITESPACE@[102; 103) "\n"
+++ /dev/null
-fn foo() {
- loop {};
-}
+++ /dev/null
-SOURCE_FILE@[0; 26)
- FN_DEF@[0; 25)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 25)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- EXPR_STMT@[15; 23)
- LOOP_EXPR@[15; 22)
- LOOP_KW@[15; 19) "loop"
- WHITESPACE@[19; 20) " "
- BLOCK@[20; 22)
- L_CURLY@[20; 21) "{"
- R_CURLY@[21; 22) "}"
- SEMI@[22; 23) ";"
- WHITESPACE@[23; 24) "\n"
- R_CURLY@[24; 25) "}"
- WHITESPACE@[25; 26) "\n"
+++ /dev/null
-SOURCE_FILE@[0; 10)
- EXTERN_BLOCK@[0; 9)
- ABI@[0; 6)
- EXTERN_KW@[0; 6) "extern"
- WHITESPACE@[6; 7) " "
- EXTERN_ITEM_LIST@[7; 9)
- L_CURLY@[7; 8) "{"
- R_CURLY@[8; 9) "}"
- WHITESPACE@[9; 10) "\n"
+++ /dev/null
-fn foo() {
- x.foo;
- x.0.bar;
- x.0();
-}
+++ /dev/null
-SOURCE_FILE@[0; 48)
- FN_DEF@[0; 47)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 47)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- EXPR_STMT@[15; 21)
- FIELD_EXPR@[15; 20)
- PATH_EXPR@[15; 16)
- PATH@[15; 16)
- PATH_SEGMENT@[15; 16)
- NAME_REF@[15; 16)
- IDENT@[15; 16) "x"
- DOT@[16; 17) "."
- NAME_REF@[17; 20)
- IDENT@[17; 20) "foo"
- SEMI@[20; 21) ";"
- WHITESPACE@[21; 26) "\n "
- EXPR_STMT@[26; 34)
- FIELD_EXPR@[26; 33)
- FIELD_EXPR@[26; 29)
- PATH_EXPR@[26; 27)
- PATH@[26; 27)
- PATH_SEGMENT@[26; 27)
- NAME_REF@[26; 27)
- IDENT@[26; 27) "x"
- DOT@[27; 28) "."
- INT_NUMBER@[28; 29) "0"
- DOT@[29; 30) "."
- NAME_REF@[30; 33)
- IDENT@[30; 33) "bar"
- SEMI@[33; 34) ";"
- WHITESPACE@[34; 39) "\n "
- EXPR_STMT@[39; 45)
- CALL_EXPR@[39; 44)
- FIELD_EXPR@[39; 42)
- PATH_EXPR@[39; 40)
- PATH@[39; 40)
- PATH_SEGMENT@[39; 40)
- NAME_REF@[39; 40)
- IDENT@[39; 40) "x"
- DOT@[40; 41) "."
- INT_NUMBER@[41; 42) "0"
- ARG_LIST@[42; 44)
- L_PAREN@[42; 43) "("
- R_PAREN@[43; 44) ")"
- SEMI@[44; 45) ";"
- WHITESPACE@[45; 46) "\n"
- R_CURLY@[46; 47) "}"
- WHITESPACE@[47; 48) "\n"
+++ /dev/null
-type Foo where Foo: Copy = ();
+++ /dev/null
-SOURCE_FILE@[0; 31)
- TYPE_ALIAS_DEF@[0; 30)
- TYPE_KW@[0; 4) "type"
- WHITESPACE@[4; 5) " "
- NAME@[5; 8)
- IDENT@[5; 8) "Foo"
- WHITESPACE@[8; 9) " "
- WHERE_CLAUSE@[9; 24)
- WHERE_KW@[9; 14) "where"
- WHITESPACE@[14; 15) " "
- WHERE_PRED@[15; 24)
- PATH_TYPE@[15; 18)
- PATH@[15; 18)
- PATH_SEGMENT@[15; 18)
- NAME_REF@[15; 18)
- IDENT@[15; 18) "Foo"
- COLON@[18; 19) ":"
- WHITESPACE@[19; 20) " "
- TYPE_BOUND_LIST@[20; 24)
- TYPE_BOUND@[20; 24)
- PATH_TYPE@[20; 24)
- PATH@[20; 24)
- PATH_SEGMENT@[20; 24)
- NAME_REF@[20; 24)
- IDENT@[20; 24) "Copy"
- WHITESPACE@[24; 25) " "
- EQ@[25; 26) "="
- WHITESPACE@[26; 27) " "
- TUPLE_TYPE@[27; 29)
- L_PAREN@[27; 28) "("
- R_PAREN@[28; 29) ")"
- SEMI@[29; 30) ";"
- WHITESPACE@[30; 31) "\n"
+++ /dev/null
-type M = *mut ();
-type C = *mut ();
+++ /dev/null
-SOURCE_FILE@[0; 36)
- TYPE_ALIAS_DEF@[0; 17)
- TYPE_KW@[0; 4) "type"
- WHITESPACE@[4; 5) " "
- NAME@[5; 6)
- IDENT@[5; 6) "M"
- WHITESPACE@[6; 7) " "
- EQ@[7; 8) "="
- WHITESPACE@[8; 9) " "
- POINTER_TYPE@[9; 16)
- STAR@[9; 10) "*"
- MUT_KW@[10; 13) "mut"
- WHITESPACE@[13; 14) " "
- TUPLE_TYPE@[14; 16)
- L_PAREN@[14; 15) "("
- R_PAREN@[15; 16) ")"
- SEMI@[16; 17) ";"
- WHITESPACE@[17; 18) "\n"
- TYPE_ALIAS_DEF@[18; 35)
- TYPE_KW@[18; 22) "type"
- WHITESPACE@[22; 23) " "
- NAME@[23; 24)
- IDENT@[23; 24) "C"
- WHITESPACE@[24; 25) " "
- EQ@[25; 26) "="
- WHITESPACE@[26; 27) " "
- POINTER_TYPE@[27; 34)
- STAR@[27; 28) "*"
- MUT_KW@[28; 31) "mut"
- WHITESPACE@[31; 32) " "
- TUPLE_TYPE@[32; 34)
- L_PAREN@[32; 33) "("
- R_PAREN@[33; 34) ")"
- SEMI@[34; 35) ";"
- WHITESPACE@[35; 36) "\n"
+++ /dev/null
-type Never = !;
+++ /dev/null
-SOURCE_FILE@[0; 16)
- TYPE_ALIAS_DEF@[0; 15)
- TYPE_KW@[0; 4) "type"
- WHITESPACE@[4; 5) " "
- NAME@[5; 10)
- IDENT@[5; 10) "Never"
- WHITESPACE@[10; 11) " "
- EQ@[11; 12) "="
- WHITESPACE@[12; 13) " "
- NEVER_TYPE@[13; 14)
- EXCL@[13; 14) "!"
- SEMI@[14; 15) ";"
- WHITESPACE@[15; 16) "\n"
+++ /dev/null
-fn foo() {
- loop {
- continue;
- continue 'l;
- }
-}
+++ /dev/null
-SOURCE_FILE@[0; 69)
- FN_DEF@[0; 68)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 68)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- LOOP_EXPR@[15; 66)
- LOOP_KW@[15; 19) "loop"
- WHITESPACE@[19; 20) " "
- BLOCK@[20; 66)
- L_CURLY@[20; 21) "{"
- WHITESPACE@[21; 30) "\n "
- EXPR_STMT@[30; 39)
- CONTINUE_EXPR@[30; 38)
- CONTINUE_KW@[30; 38) "continue"
- SEMI@[38; 39) ";"
- WHITESPACE@[39; 48) "\n "
- EXPR_STMT@[48; 60)
- CONTINUE_EXPR@[48; 59)
- CONTINUE_KW@[48; 56) "continue"
- WHITESPACE@[56; 57) " "
- LIFETIME@[57; 59) "\'l"
- SEMI@[59; 60) ";"
- WHITESPACE@[60; 65) "\n "
- R_CURLY@[65; 66) "}"
- WHITESPACE@[66; 67) "\n"
- R_CURLY@[67; 68) "}"
- WHITESPACE@[68; 69) "\n"
+++ /dev/null
-unsafe trait T {}
+++ /dev/null
-SOURCE_FILE@[0; 18)
- TRAIT_DEF@[0; 17)
- UNSAFE_KW@[0; 6) "unsafe"
- WHITESPACE@[6; 7) " "
- TRAIT_KW@[7; 12) "trait"
- WHITESPACE@[12; 13) " "
- NAME@[13; 14)
- IDENT@[13; 14) "T"
- WHITESPACE@[14; 15) " "
- ITEM_LIST@[15; 17)
- L_CURLY@[15; 16) "{"
- R_CURLY@[16; 17) "}"
- WHITESPACE@[17; 18) "\n"
+++ /dev/null
-type T = [(); 92];
+++ /dev/null
-SOURCE_FILE@[0; 19)
- TYPE_ALIAS_DEF@[0; 18)
- TYPE_KW@[0; 4) "type"
- WHITESPACE@[4; 5) " "
- NAME@[5; 6)
- IDENT@[5; 6) "T"
- WHITESPACE@[6; 7) " "
- EQ@[7; 8) "="
- WHITESPACE@[8; 9) " "
- ARRAY_TYPE@[9; 17)
- L_BRACK@[9; 10) "["
- TUPLE_TYPE@[10; 12)
- L_PAREN@[10; 11) "("
- R_PAREN@[11; 12) ")"
- SEMI@[12; 13) ";"
- WHITESPACE@[13; 14) " "
- LITERAL@[14; 16)
- INT_NUMBER@[14; 16) "92"
- R_BRACK@[16; 17) "]"
- SEMI@[17; 18) ";"
- WHITESPACE@[18; 19) "\n"
+++ /dev/null
-impl S {
- fn a(self: &Self) {}
- fn b(mut self: Box<Self>) {}
-}
+++ /dev/null
-SOURCE_FILE@[0; 69)
- IMPL_BLOCK@[0; 68)
- IMPL_KW@[0; 4) "impl"
- WHITESPACE@[4; 5) " "
- PATH_TYPE@[5; 6)
- PATH@[5; 6)
- PATH_SEGMENT@[5; 6)
- NAME_REF@[5; 6)
- IDENT@[5; 6) "S"
- WHITESPACE@[6; 7) " "
- ITEM_LIST@[7; 68)
- L_CURLY@[7; 8) "{"
- WHITESPACE@[8; 13) "\n "
- FN_DEF@[13; 33)
- FN_KW@[13; 15) "fn"
- WHITESPACE@[15; 16) " "
- NAME@[16; 17)
- IDENT@[16; 17) "a"
- PARAM_LIST@[17; 30)
- L_PAREN@[17; 18) "("
- SELF_PARAM@[18; 29)
- SELF_KW@[18; 22) "self"
- COLON@[22; 23) ":"
- WHITESPACE@[23; 24) " "
- REFERENCE_TYPE@[24; 29)
- AMP@[24; 25) "&"
- PATH_TYPE@[25; 29)
- PATH@[25; 29)
- PATH_SEGMENT@[25; 29)
- NAME_REF@[25; 29)
- IDENT@[25; 29) "Self"
- R_PAREN@[29; 30) ")"
- WHITESPACE@[30; 31) " "
- BLOCK@[31; 33)
- L_CURLY@[31; 32) "{"
- R_CURLY@[32; 33) "}"
- WHITESPACE@[33; 38) "\n "
- FN_DEF@[38; 66)
- FN_KW@[38; 40) "fn"
- WHITESPACE@[40; 41) " "
- NAME@[41; 42)
- IDENT@[41; 42) "b"
- PARAM_LIST@[42; 63)
- L_PAREN@[42; 43) "("
- SELF_PARAM@[43; 62)
- MUT_KW@[43; 46) "mut"
- WHITESPACE@[46; 47) " "
- SELF_KW@[47; 51) "self"
- COLON@[51; 52) ":"
- WHITESPACE@[52; 53) " "
- PATH_TYPE@[53; 62)
- PATH@[53; 62)
- PATH_SEGMENT@[53; 62)
- NAME_REF@[53; 56)
- IDENT@[53; 56) "Box"
- TYPE_ARG_LIST@[56; 62)
- L_ANGLE@[56; 57) "<"
- TYPE_ARG@[57; 61)
- PATH_TYPE@[57; 61)
- PATH@[57; 61)
- PATH_SEGMENT@[57; 61)
- NAME_REF@[57; 61)
- IDENT@[57; 61) "Self"
- R_ANGLE@[61; 62) ">"
- R_PAREN@[62; 63) ")"
- WHITESPACE@[63; 64) " "
- BLOCK@[64; 66)
- L_CURLY@[64; 65) "{"
- R_CURLY@[65; 66) "}"
- WHITESPACE@[66; 67) "\n"
- R_CURLY@[67; 68) "}"
- WHITESPACE@[68; 69) "\n"
+++ /dev/null
-fn foo() {
- **&1;
- !!true;
- --1;
-}
+++ /dev/null
-SOURCE_FILE@[0; 44)
- FN_DEF@[0; 43)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 43)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- EXPR_STMT@[15; 20)
- PREFIX_EXPR@[15; 19)
- STAR@[15; 16) "*"
- PREFIX_EXPR@[16; 19)
- STAR@[16; 17) "*"
- REF_EXPR@[17; 19)
- AMP@[17; 18) "&"
- LITERAL@[18; 19)
- INT_NUMBER@[18; 19) "1"
- SEMI@[19; 20) ";"
- WHITESPACE@[20; 25) "\n "
- EXPR_STMT@[25; 32)
- PREFIX_EXPR@[25; 31)
- EXCL@[25; 26) "!"
- PREFIX_EXPR@[26; 31)
- EXCL@[26; 27) "!"
- LITERAL@[27; 31)
- TRUE_KW@[27; 31) "true"
- SEMI@[31; 32) ";"
- WHITESPACE@[32; 37) "\n "
- EXPR_STMT@[37; 41)
- PREFIX_EXPR@[37; 40)
- MINUS@[37; 38) "-"
- PREFIX_EXPR@[38; 40)
- MINUS@[38; 39) "-"
- LITERAL@[39; 40)
- INT_NUMBER@[39; 40) "1"
- SEMI@[40; 41) ";"
- WHITESPACE@[41; 42) "\n"
- R_CURLY@[42; 43) "}"
- WHITESPACE@[43; 44) "\n"
+++ /dev/null
-use *;
-use ::*;
-use some::path::{*};
-use some::path::{::*};
+++ /dev/null
-SOURCE_FILE@[0; 60)
- USE_ITEM@[0; 6)
- USE_KW@[0; 3) "use"
- WHITESPACE@[3; 4) " "
- USE_TREE@[4; 5)
- STAR@[4; 5) "*"
- SEMI@[5; 6) ";"
- WHITESPACE@[6; 7) "\n"
- USE_ITEM@[7; 15)
- USE_KW@[7; 10) "use"
- WHITESPACE@[10; 11) " "
- USE_TREE@[11; 14)
- COLONCOLON@[11; 13) "::"
- STAR@[13; 14) "*"
- SEMI@[14; 15) ";"
- WHITESPACE@[15; 16) "\n"
- USE_ITEM@[16; 36)
- USE_KW@[16; 19) "use"
- WHITESPACE@[19; 20) " "
- USE_TREE@[20; 35)
- PATH@[20; 30)
- PATH@[20; 24)
- PATH_SEGMENT@[20; 24)
- NAME_REF@[20; 24)
- IDENT@[20; 24) "some"
- COLONCOLON@[24; 26) "::"
- PATH_SEGMENT@[26; 30)
- NAME_REF@[26; 30)
- IDENT@[26; 30) "path"
- COLONCOLON@[30; 32) "::"
- USE_TREE_LIST@[32; 35)
- L_CURLY@[32; 33) "{"
- USE_TREE@[33; 34)
- STAR@[33; 34) "*"
- R_CURLY@[34; 35) "}"
- SEMI@[35; 36) ";"
- WHITESPACE@[36; 37) "\n"
- USE_ITEM@[37; 59)
- USE_KW@[37; 40) "use"
- WHITESPACE@[40; 41) " "
- USE_TREE@[41; 58)
- PATH@[41; 51)
- PATH@[41; 45)
- PATH_SEGMENT@[41; 45)
- NAME_REF@[41; 45)
- IDENT@[41; 45) "some"
- COLONCOLON@[45; 47) "::"
- PATH_SEGMENT@[47; 51)
- NAME_REF@[47; 51)
- IDENT@[47; 51) "path"
- COLONCOLON@[51; 53) "::"
- USE_TREE_LIST@[53; 58)
- L_CURLY@[53; 54) "{"
- USE_TREE@[54; 57)
- COLONCOLON@[54; 56) "::"
- STAR@[56; 57) "*"
- R_CURLY@[57; 58) "}"
- SEMI@[58; 59) ";"
- WHITESPACE@[59; 60) "\n"
+++ /dev/null
-impl F {
- type A = i32;
- const B: i32 = 92;
- fn foo() {}
- fn bar(&self) {}
-}
+++ /dev/null
-SOURCE_FILE@[0; 89)
- IMPL_BLOCK@[0; 88)
- IMPL_KW@[0; 4) "impl"
- WHITESPACE@[4; 5) " "
- PATH_TYPE@[5; 6)
- PATH@[5; 6)
- PATH_SEGMENT@[5; 6)
- NAME_REF@[5; 6)
- IDENT@[5; 6) "F"
- WHITESPACE@[6; 7) " "
- ITEM_LIST@[7; 88)
- L_CURLY@[7; 8) "{"
- WHITESPACE@[8; 13) "\n "
- TYPE_ALIAS_DEF@[13; 26)
- TYPE_KW@[13; 17) "type"
- WHITESPACE@[17; 18) " "
- NAME@[18; 19)
- IDENT@[18; 19) "A"
- WHITESPACE@[19; 20) " "
- EQ@[20; 21) "="
- WHITESPACE@[21; 22) " "
- PATH_TYPE@[22; 25)
- PATH@[22; 25)
- PATH_SEGMENT@[22; 25)
- NAME_REF@[22; 25)
- IDENT@[22; 25) "i32"
- SEMI@[25; 26) ";"
- WHITESPACE@[26; 31) "\n "
- CONST_DEF@[31; 49)
- CONST_KW@[31; 36) "const"
- WHITESPACE@[36; 37) " "
- NAME@[37; 38)
- IDENT@[37; 38) "B"
- COLON@[38; 39) ":"
- WHITESPACE@[39; 40) " "
- PATH_TYPE@[40; 43)
- PATH@[40; 43)
- PATH_SEGMENT@[40; 43)
- NAME_REF@[40; 43)
- IDENT@[40; 43) "i32"
- WHITESPACE@[43; 44) " "
- EQ@[44; 45) "="
- WHITESPACE@[45; 46) " "
- LITERAL@[46; 48)
- INT_NUMBER@[46; 48) "92"
- SEMI@[48; 49) ";"
- WHITESPACE@[49; 54) "\n "
- FN_DEF@[54; 65)
- FN_KW@[54; 56) "fn"
- WHITESPACE@[56; 57) " "
- NAME@[57; 60)
- IDENT@[57; 60) "foo"
- PARAM_LIST@[60; 62)
- L_PAREN@[60; 61) "("
- R_PAREN@[61; 62) ")"
- WHITESPACE@[62; 63) " "
- BLOCK@[63; 65)
- L_CURLY@[63; 64) "{"
- R_CURLY@[64; 65) "}"
- WHITESPACE@[65; 70) "\n "
- FN_DEF@[70; 86)
- FN_KW@[70; 72) "fn"
- WHITESPACE@[72; 73) " "
- NAME@[73; 76)
- IDENT@[73; 76) "bar"
- PARAM_LIST@[76; 83)
- L_PAREN@[76; 77) "("
- SELF_PARAM@[77; 82)
- AMP@[77; 78) "&"
- SELF_KW@[78; 82) "self"
- R_PAREN@[82; 83) ")"
- WHITESPACE@[83; 84) " "
- BLOCK@[84; 86)
- L_CURLY@[84; 85) "{"
- R_CURLY@[85; 86) "}"
- WHITESPACE@[86; 87) "\n"
- R_CURLY@[87; 88) "}"
- WHITESPACE@[88; 89) "\n"
+++ /dev/null
-pub(crate) struct S;
-pub(self) struct S;
-pub(self) struct S;
-pub(self) struct S;
+++ /dev/null
-SOURCE_FILE@[0; 81)
- STRUCT_DEF@[0; 20)
- VISIBILITY@[0; 10)
- PUB_KW@[0; 3) "pub"
- L_PAREN@[3; 4) "("
- CRATE_KW@[4; 9) "crate"
- R_PAREN@[9; 10) ")"
- WHITESPACE@[10; 11) " "
- STRUCT_KW@[11; 17) "struct"
- WHITESPACE@[17; 18) " "
- NAME@[18; 19)
- IDENT@[18; 19) "S"
- SEMI@[19; 20) ";"
- WHITESPACE@[20; 21) "\n"
- STRUCT_DEF@[21; 40)
- VISIBILITY@[21; 30)
- PUB_KW@[21; 24) "pub"
- L_PAREN@[24; 25) "("
- SELF_KW@[25; 29) "self"
- R_PAREN@[29; 30) ")"
- WHITESPACE@[30; 31) " "
- STRUCT_KW@[31; 37) "struct"
- WHITESPACE@[37; 38) " "
- NAME@[38; 39)
- IDENT@[38; 39) "S"
- SEMI@[39; 40) ";"
- WHITESPACE@[40; 41) "\n"
- STRUCT_DEF@[41; 60)
- VISIBILITY@[41; 50)
- PUB_KW@[41; 44) "pub"
- L_PAREN@[44; 45) "("
- SELF_KW@[45; 49) "self"
- R_PAREN@[49; 50) ")"
- WHITESPACE@[50; 51) " "
- STRUCT_KW@[51; 57) "struct"
- WHITESPACE@[57; 58) " "
- NAME@[58; 59)
- IDENT@[58; 59) "S"
- SEMI@[59; 60) ";"
- WHITESPACE@[60; 61) "\n"
- STRUCT_DEF@[61; 80)
- VISIBILITY@[61; 70)
- PUB_KW@[61; 64) "pub"
- L_PAREN@[64; 65) "("
- SELF_KW@[65; 69) "self"
- R_PAREN@[69; 70) ")"
- WHITESPACE@[70; 71) " "
- STRUCT_KW@[71; 77) "struct"
- WHITESPACE@[77; 78) " "
- NAME@[78; 79)
- IDENT@[78; 79) "S"
- SEMI@[79; 80) ";"
- WHITESPACE@[80; 81) "\n"
+++ /dev/null
-type Placeholder = _;
+++ /dev/null
-SOURCE_FILE@[0; 22)
- TYPE_ALIAS_DEF@[0; 21)
- TYPE_KW@[0; 4) "type"
- WHITESPACE@[4; 5) " "
- NAME@[5; 16)
- IDENT@[5; 16) "Placeholder"
- WHITESPACE@[16; 17) " "
- EQ@[17; 18) "="
- WHITESPACE@[18; 19) " "
- PLACEHOLDER_TYPE@[19; 20)
- UNDERSCORE@[19; 20) "_"
- SEMI@[20; 21) ";"
- WHITESPACE@[21; 22) "\n"
+++ /dev/null
-fn main() {
- let [a, b, ..] = [];
-}
+++ /dev/null
-SOURCE_FILE@[0; 39)
- FN_DEF@[0; 38)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 7)
- IDENT@[3; 7) "main"
- PARAM_LIST@[7; 9)
- L_PAREN@[7; 8) "("
- R_PAREN@[8; 9) ")"
- WHITESPACE@[9; 10) " "
- BLOCK@[10; 38)
- L_CURLY@[10; 11) "{"
- WHITESPACE@[11; 16) "\n "
- LET_STMT@[16; 36)
- LET_KW@[16; 19) "let"
- WHITESPACE@[19; 20) " "
- SLICE_PAT@[20; 30)
- L_BRACK@[20; 21) "["
- BIND_PAT@[21; 22)
- NAME@[21; 22)
- IDENT@[21; 22) "a"
- COMMA@[22; 23) ","
- WHITESPACE@[23; 24) " "
- BIND_PAT@[24; 25)
- NAME@[24; 25)
- IDENT@[24; 25) "b"
- COMMA@[25; 26) ","
- WHITESPACE@[26; 27) " "
- DOTDOT@[27; 29) ".."
- R_BRACK@[29; 30) "]"
- WHITESPACE@[30; 31) " "
- EQ@[31; 32) "="
- WHITESPACE@[32; 33) " "
- ARRAY_EXPR@[33; 35)
- L_BRACK@[33; 34) "["
- R_BRACK@[34; 35) "]"
- SEMI@[35; 36) ";"
- WHITESPACE@[36; 37) "\n"
- R_CURLY@[37; 38) "}"
- WHITESPACE@[38; 39) "\n"
+++ /dev/null
-type T = [()];
+++ /dev/null
-SOURCE_FILE@[0; 15)
- TYPE_ALIAS_DEF@[0; 14)
- TYPE_KW@[0; 4) "type"
- WHITESPACE@[4; 5) " "
- NAME@[5; 6)
- IDENT@[5; 6) "T"
- WHITESPACE@[6; 7) " "
- EQ@[7; 8) "="
- WHITESPACE@[8; 9) " "
- SLICE_TYPE@[9; 13)
- L_BRACK@[9; 10) "["
- TUPLE_TYPE@[10; 12)
- L_PAREN@[10; 11) "("
- R_PAREN@[11; 12) ")"
- R_BRACK@[12; 13) "]"
- SEMI@[13; 14) ";"
- WHITESPACE@[14; 15) "\n"
+++ /dev/null
-fn foo() {
- let S() = ();
- let S(_) = ();
- let S(_,) = ();
- let S(_, .. , x) = ();
-}
+++ /dev/null
-SOURCE_FILE@[0; 97)
- FN_DEF@[0; 96)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 96)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- LET_STMT@[15; 28)
- LET_KW@[15; 18) "let"
- WHITESPACE@[18; 19) " "
- TUPLE_STRUCT_PAT@[19; 22)
- PATH@[19; 20)
- PATH_SEGMENT@[19; 20)
- NAME_REF@[19; 20)
- IDENT@[19; 20) "S"
- L_PAREN@[20; 21) "("
- R_PAREN@[21; 22) ")"
- WHITESPACE@[22; 23) " "
- EQ@[23; 24) "="
- WHITESPACE@[24; 25) " "
- TUPLE_EXPR@[25; 27)
- L_PAREN@[25; 26) "("
- R_PAREN@[26; 27) ")"
- SEMI@[27; 28) ";"
- WHITESPACE@[28; 33) "\n "
- LET_STMT@[33; 47)
- LET_KW@[33; 36) "let"
- WHITESPACE@[36; 37) " "
- TUPLE_STRUCT_PAT@[37; 41)
- PATH@[37; 38)
- PATH_SEGMENT@[37; 38)
- NAME_REF@[37; 38)
- IDENT@[37; 38) "S"
- L_PAREN@[38; 39) "("
- PLACEHOLDER_PAT@[39; 40)
- UNDERSCORE@[39; 40) "_"
- R_PAREN@[40; 41) ")"
- WHITESPACE@[41; 42) " "
- EQ@[42; 43) "="
- WHITESPACE@[43; 44) " "
- TUPLE_EXPR@[44; 46)
- L_PAREN@[44; 45) "("
- R_PAREN@[45; 46) ")"
- SEMI@[46; 47) ";"
- WHITESPACE@[47; 52) "\n "
- LET_STMT@[52; 67)
- LET_KW@[52; 55) "let"
- WHITESPACE@[55; 56) " "
- TUPLE_STRUCT_PAT@[56; 61)
- PATH@[56; 57)
- PATH_SEGMENT@[56; 57)
- NAME_REF@[56; 57)
- IDENT@[56; 57) "S"
- L_PAREN@[57; 58) "("
- PLACEHOLDER_PAT@[58; 59)
- UNDERSCORE@[58; 59) "_"
- COMMA@[59; 60) ","
- R_PAREN@[60; 61) ")"
- WHITESPACE@[61; 62) " "
- EQ@[62; 63) "="
- WHITESPACE@[63; 64) " "
- TUPLE_EXPR@[64; 66)
- L_PAREN@[64; 65) "("
- R_PAREN@[65; 66) ")"
- SEMI@[66; 67) ";"
- WHITESPACE@[67; 72) "\n "
- LET_STMT@[72; 94)
- LET_KW@[72; 75) "let"
- WHITESPACE@[75; 76) " "
- TUPLE_STRUCT_PAT@[76; 88)
- PATH@[76; 77)
- PATH_SEGMENT@[76; 77)
- NAME_REF@[76; 77)
- IDENT@[76; 77) "S"
- L_PAREN@[77; 78) "("
- PLACEHOLDER_PAT@[78; 79)
- UNDERSCORE@[78; 79) "_"
- COMMA@[79; 80) ","
- WHITESPACE@[80; 81) " "
- DOTDOT@[81; 83) ".."
- WHITESPACE@[83; 84) " "
- COMMA@[84; 85) ","
- WHITESPACE@[85; 86) " "
- BIND_PAT@[86; 87)
- NAME@[86; 87)
- IDENT@[86; 87) "x"
- R_PAREN@[87; 88) ")"
- WHITESPACE@[88; 89) " "
- EQ@[89; 90) "="
- WHITESPACE@[90; 91) " "
- TUPLE_EXPR@[91; 93)
- L_PAREN@[91; 92) "("
- R_PAREN@[92; 93) ")"
- SEMI@[93; 94) ";"
- WHITESPACE@[94; 95) "\n"
- R_CURLY@[95; 96) "}"
- WHITESPACE@[96; 97) "\n"
+++ /dev/null
-fn main() {
- let &a = ();
- let &mut b = ();
-}
+++ /dev/null
-SOURCE_FILE@[0; 52)
- FN_DEF@[0; 51)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 7)
- IDENT@[3; 7) "main"
- PARAM_LIST@[7; 9)
- L_PAREN@[7; 8) "("
- R_PAREN@[8; 9) ")"
- WHITESPACE@[9; 10) " "
- BLOCK@[10; 51)
- L_CURLY@[10; 11) "{"
- WHITESPACE@[11; 16) "\n "
- LET_STMT@[16; 28)
- LET_KW@[16; 19) "let"
- WHITESPACE@[19; 20) " "
- REF_PAT@[20; 22)
- AMP@[20; 21) "&"
- BIND_PAT@[21; 22)
- NAME@[21; 22)
- IDENT@[21; 22) "a"
- WHITESPACE@[22; 23) " "
- EQ@[23; 24) "="
- WHITESPACE@[24; 25) " "
- TUPLE_EXPR@[25; 27)
- L_PAREN@[25; 26) "("
- R_PAREN@[26; 27) ")"
- SEMI@[27; 28) ";"
- WHITESPACE@[28; 33) "\n "
- LET_STMT@[33; 49)
- LET_KW@[33; 36) "let"
- WHITESPACE@[36; 37) " "
- REF_PAT@[37; 43)
- AMP@[37; 38) "&"
- MUT_KW@[38; 41) "mut"
- WHITESPACE@[41; 42) " "
- BIND_PAT@[42; 43)
- NAME@[42; 43)
- IDENT@[42; 43) "b"
- WHITESPACE@[43; 44) " "
- EQ@[44; 45) "="
- WHITESPACE@[45; 46) " "
- TUPLE_EXPR@[46; 48)
- L_PAREN@[46; 47) "("
- R_PAREN@[47; 48) ")"
- SEMI@[48; 49) ";"
- WHITESPACE@[49; 50) "\n"
- R_CURLY@[50; 51) "}"
- WHITESPACE@[51; 52) "\n"
+++ /dev/null
-type A = impl Iterator<Item=Foo<'a>> + 'a;
+++ /dev/null
-SOURCE_FILE@[0; 43)
- TYPE_ALIAS_DEF@[0; 42)
- TYPE_KW@[0; 4) "type"
- WHITESPACE@[4; 5) " "
- NAME@[5; 6)
- IDENT@[5; 6) "A"
- WHITESPACE@[6; 7) " "
- EQ@[7; 8) "="
- WHITESPACE@[8; 9) " "
- IMPL_TRAIT_TYPE@[9; 41)
- IMPL_KW@[9; 13) "impl"
- WHITESPACE@[13; 14) " "
- TYPE_BOUND_LIST@[14; 41)
- TYPE_BOUND@[14; 36)
- PATH_TYPE@[14; 36)
- PATH@[14; 36)
- PATH_SEGMENT@[14; 36)
- NAME_REF@[14; 22)
- IDENT@[14; 22) "Iterator"
- TYPE_ARG_LIST@[22; 36)
- L_ANGLE@[22; 23) "<"
- ASSOC_TYPE_ARG@[23; 35)
- NAME_REF@[23; 27)
- IDENT@[23; 27) "Item"
- EQ@[27; 28) "="
- PATH_TYPE@[28; 35)
- PATH@[28; 35)
- PATH_SEGMENT@[28; 35)
- NAME_REF@[28; 31)
- IDENT@[28; 31) "Foo"
- TYPE_ARG_LIST@[31; 35)
- L_ANGLE@[31; 32) "<"
- LIFETIME_ARG@[32; 34)
- LIFETIME@[32; 34) "\'a"
- R_ANGLE@[34; 35) ">"
- R_ANGLE@[35; 36) ">"
- WHITESPACE@[36; 37) " "
- PLUS@[37; 38) "+"
- WHITESPACE@[38; 39) " "
- TYPE_BOUND@[39; 41)
- LIFETIME@[39; 41) "\'a"
- SEMI@[41; 42) ";"
- WHITESPACE@[42; 43) "\n"
+++ /dev/null
-fn foo() {
- 82 as i32;
- 81 as i8 + 1;
- 79 as i16 - 1;
- 0x36 as u8 <= 0x37;
-}
+++ /dev/null
-SOURCE_FILE@[0; 89)
- FN_DEF@[0; 88)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 88)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- EXPR_STMT@[15; 25)
- CAST_EXPR@[15; 24)
- LITERAL@[15; 17)
- INT_NUMBER@[15; 17) "82"
- WHITESPACE@[17; 18) " "
- AS_KW@[18; 20) "as"
- WHITESPACE@[20; 21) " "
- PATH_TYPE@[21; 24)
- PATH@[21; 24)
- PATH_SEGMENT@[21; 24)
- NAME_REF@[21; 24)
- IDENT@[21; 24) "i32"
- SEMI@[24; 25) ";"
- WHITESPACE@[25; 30) "\n "
- EXPR_STMT@[30; 43)
- BIN_EXPR@[30; 42)
- CAST_EXPR@[30; 38)
- LITERAL@[30; 32)
- INT_NUMBER@[30; 32) "81"
- WHITESPACE@[32; 33) " "
- AS_KW@[33; 35) "as"
- WHITESPACE@[35; 36) " "
- PATH_TYPE@[36; 38)
- PATH@[36; 38)
- PATH_SEGMENT@[36; 38)
- NAME_REF@[36; 38)
- IDENT@[36; 38) "i8"
- WHITESPACE@[38; 39) " "
- PLUS@[39; 40) "+"
- WHITESPACE@[40; 41) " "
- LITERAL@[41; 42)
- INT_NUMBER@[41; 42) "1"
- SEMI@[42; 43) ";"
- WHITESPACE@[43; 48) "\n "
- EXPR_STMT@[48; 62)
- BIN_EXPR@[48; 61)
- CAST_EXPR@[48; 57)
- LITERAL@[48; 50)
- INT_NUMBER@[48; 50) "79"
- WHITESPACE@[50; 51) " "
- AS_KW@[51; 53) "as"
- WHITESPACE@[53; 54) " "
- PATH_TYPE@[54; 57)
- PATH@[54; 57)
- PATH_SEGMENT@[54; 57)
- NAME_REF@[54; 57)
- IDENT@[54; 57) "i16"
- WHITESPACE@[57; 58) " "
- MINUS@[58; 59) "-"
- WHITESPACE@[59; 60) " "
- LITERAL@[60; 61)
- INT_NUMBER@[60; 61) "1"
- SEMI@[61; 62) ";"
- WHITESPACE@[62; 67) "\n "
- EXPR_STMT@[67; 86)
- BIN_EXPR@[67; 85)
- CAST_EXPR@[67; 77)
- LITERAL@[67; 71)
- INT_NUMBER@[67; 71) "0x36"
- WHITESPACE@[71; 72) " "
- AS_KW@[72; 74) "as"
- WHITESPACE@[74; 75) " "
- PATH_TYPE@[75; 77)
- PATH@[75; 77)
- PATH_SEGMENT@[75; 77)
- NAME_REF@[75; 77)
- IDENT@[75; 77) "u8"
- WHITESPACE@[77; 78) " "
- LTEQ@[78; 80) "<="
- WHITESPACE@[80; 81) " "
- LITERAL@[81; 85)
- INT_NUMBER@[81; 85) "0x37"
- SEMI@[85; 86) ";"
- WHITESPACE@[86; 87) "\n"
- R_CURLY@[87; 88) "}"
- WHITESPACE@[88; 89) "\n"
+++ /dev/null
-fn foo() { if let Some(_) = None {} }
-fn bar() {
- if let Some(_) | Some(_) = None {}
- if let | Some(_) = None {}
- while let Some(_) | Some(_) = None {}
- while let | Some(_) = None {}
-}
+++ /dev/null
-SOURCE_FILE@[0; 197)
- FN_DEF@[0; 37)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 37)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 11) " "
- IF_EXPR@[11; 35)
- IF_KW@[11; 13) "if"
- WHITESPACE@[13; 14) " "
- CONDITION@[14; 32)
- LET_KW@[14; 17) "let"
- WHITESPACE@[17; 18) " "
- TUPLE_STRUCT_PAT@[18; 25)
- PATH@[18; 22)
- PATH_SEGMENT@[18; 22)
- NAME_REF@[18; 22)
- IDENT@[18; 22) "Some"
- L_PAREN@[22; 23) "("
- PLACEHOLDER_PAT@[23; 24)
- UNDERSCORE@[23; 24) "_"
- R_PAREN@[24; 25) ")"
- WHITESPACE@[25; 26) " "
- EQ@[26; 27) "="
- WHITESPACE@[27; 28) " "
- PATH_EXPR@[28; 32)
- PATH@[28; 32)
- PATH_SEGMENT@[28; 32)
- NAME_REF@[28; 32)
- IDENT@[28; 32) "None"
- WHITESPACE@[32; 33) " "
- BLOCK@[33; 35)
- L_CURLY@[33; 34) "{"
- R_CURLY@[34; 35) "}"
- WHITESPACE@[35; 36) " "
- R_CURLY@[36; 37) "}"
- WHITESPACE@[37; 38) "\n"
- FN_DEF@[38; 196)
- FN_KW@[38; 40) "fn"
- WHITESPACE@[40; 41) " "
- NAME@[41; 44)
- IDENT@[41; 44) "bar"
- PARAM_LIST@[44; 46)
- L_PAREN@[44; 45) "("
- R_PAREN@[45; 46) ")"
- WHITESPACE@[46; 47) " "
- BLOCK@[47; 196)
- L_CURLY@[47; 48) "{"
- WHITESPACE@[48; 53) "\n "
- EXPR_STMT@[53; 87)
- IF_EXPR@[53; 87)
- IF_KW@[53; 55) "if"
- WHITESPACE@[55; 56) " "
- CONDITION@[56; 84)
- LET_KW@[56; 59) "let"
- WHITESPACE@[59; 60) " "
- TUPLE_STRUCT_PAT@[60; 67)
- PATH@[60; 64)
- PATH_SEGMENT@[60; 64)
- NAME_REF@[60; 64)
- IDENT@[60; 64) "Some"
- L_PAREN@[64; 65) "("
- PLACEHOLDER_PAT@[65; 66)
- UNDERSCORE@[65; 66) "_"
- R_PAREN@[66; 67) ")"
- WHITESPACE@[67; 68) " "
- PIPE@[68; 69) "|"
- WHITESPACE@[69; 70) " "
- TUPLE_STRUCT_PAT@[70; 77)
- PATH@[70; 74)
- PATH_SEGMENT@[70; 74)
- NAME_REF@[70; 74)
- IDENT@[70; 74) "Some"
- L_PAREN@[74; 75) "("
- PLACEHOLDER_PAT@[75; 76)
- UNDERSCORE@[75; 76) "_"
- R_PAREN@[76; 77) ")"
- WHITESPACE@[77; 78) " "
- EQ@[78; 79) "="
- WHITESPACE@[79; 80) " "
- PATH_EXPR@[80; 84)
- PATH@[80; 84)
- PATH_SEGMENT@[80; 84)
- NAME_REF@[80; 84)
- IDENT@[80; 84) "None"
- WHITESPACE@[84; 85) " "
- BLOCK@[85; 87)
- L_CURLY@[85; 86) "{"
- R_CURLY@[86; 87) "}"
- WHITESPACE@[87; 92) "\n "
- EXPR_STMT@[92; 118)
- IF_EXPR@[92; 118)
- IF_KW@[92; 94) "if"
- WHITESPACE@[94; 95) " "
- CONDITION@[95; 115)
- LET_KW@[95; 98) "let"
- WHITESPACE@[98; 99) " "
- PIPE@[99; 100) "|"
- WHITESPACE@[100; 101) " "
- TUPLE_STRUCT_PAT@[101; 108)
- PATH@[101; 105)
- PATH_SEGMENT@[101; 105)
- NAME_REF@[101; 105)
- IDENT@[101; 105) "Some"
- L_PAREN@[105; 106) "("
- PLACEHOLDER_PAT@[106; 107)
- UNDERSCORE@[106; 107) "_"
- R_PAREN@[107; 108) ")"
- WHITESPACE@[108; 109) " "
- EQ@[109; 110) "="
- WHITESPACE@[110; 111) " "
- PATH_EXPR@[111; 115)
- PATH@[111; 115)
- PATH_SEGMENT@[111; 115)
- NAME_REF@[111; 115)
- IDENT@[111; 115) "None"
- WHITESPACE@[115; 116) " "
- BLOCK@[116; 118)
- L_CURLY@[116; 117) "{"
- R_CURLY@[117; 118) "}"
- WHITESPACE@[118; 123) "\n "
- EXPR_STMT@[123; 160)
- WHILE_EXPR@[123; 160)
- WHILE_KW@[123; 128) "while"
- WHITESPACE@[128; 129) " "
- CONDITION@[129; 157)
- LET_KW@[129; 132) "let"
- WHITESPACE@[132; 133) " "
- TUPLE_STRUCT_PAT@[133; 140)
- PATH@[133; 137)
- PATH_SEGMENT@[133; 137)
- NAME_REF@[133; 137)
- IDENT@[133; 137) "Some"
- L_PAREN@[137; 138) "("
- PLACEHOLDER_PAT@[138; 139)
- UNDERSCORE@[138; 139) "_"
- R_PAREN@[139; 140) ")"
- WHITESPACE@[140; 141) " "
- PIPE@[141; 142) "|"
- WHITESPACE@[142; 143) " "
- TUPLE_STRUCT_PAT@[143; 150)
- PATH@[143; 147)
- PATH_SEGMENT@[143; 147)
- NAME_REF@[143; 147)
- IDENT@[143; 147) "Some"
- L_PAREN@[147; 148) "("
- PLACEHOLDER_PAT@[148; 149)
- UNDERSCORE@[148; 149) "_"
- R_PAREN@[149; 150) ")"
- WHITESPACE@[150; 151) " "
- EQ@[151; 152) "="
- WHITESPACE@[152; 153) " "
- PATH_EXPR@[153; 157)
- PATH@[153; 157)
- PATH_SEGMENT@[153; 157)
- NAME_REF@[153; 157)
- IDENT@[153; 157) "None"
- WHITESPACE@[157; 158) " "
- BLOCK@[158; 160)
- L_CURLY@[158; 159) "{"
- R_CURLY@[159; 160) "}"
- WHITESPACE@[160; 165) "\n "
- WHILE_EXPR@[165; 194)
- WHILE_KW@[165; 170) "while"
- WHITESPACE@[170; 171) " "
- CONDITION@[171; 191)
- LET_KW@[171; 174) "let"
- WHITESPACE@[174; 175) " "
- PIPE@[175; 176) "|"
- WHITESPACE@[176; 177) " "
- TUPLE_STRUCT_PAT@[177; 184)
- PATH@[177; 181)
- PATH_SEGMENT@[177; 181)
- NAME_REF@[177; 181)
- IDENT@[177; 181) "Some"
- L_PAREN@[181; 182) "("
- PLACEHOLDER_PAT@[182; 183)
- UNDERSCORE@[182; 183) "_"
- R_PAREN@[183; 184) ")"
- WHITESPACE@[184; 185) " "
- EQ@[185; 186) "="
- WHITESPACE@[186; 187) " "
- PATH_EXPR@[187; 191)
- PATH@[187; 191)
- PATH_SEGMENT@[187; 191)
- NAME_REF@[187; 191)
- IDENT@[187; 191) "None"
- WHITESPACE@[191; 192) " "
- BLOCK@[192; 194)
- L_CURLY@[192; 193) "{"
- R_CURLY@[193; 194) "}"
- WHITESPACE@[194; 195) "\n"
- R_CURLY@[195; 196) "}"
- WHITESPACE@[196; 197) "\n"
+++ /dev/null
-fn foo() {
- while true {};
- while let Some(x) = it.next() {};
-}
+++ /dev/null
-SOURCE_FILE@[0; 70)
- FN_DEF@[0; 69)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 69)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- EXPR_STMT@[15; 29)
- WHILE_EXPR@[15; 28)
- WHILE_KW@[15; 20) "while"
- WHITESPACE@[20; 21) " "
- CONDITION@[21; 25)
- LITERAL@[21; 25)
- TRUE_KW@[21; 25) "true"
- WHITESPACE@[25; 26) " "
- BLOCK@[26; 28)
- L_CURLY@[26; 27) "{"
- R_CURLY@[27; 28) "}"
- SEMI@[28; 29) ";"
- WHITESPACE@[29; 34) "\n "
- EXPR_STMT@[34; 67)
- WHILE_EXPR@[34; 66)
- WHILE_KW@[34; 39) "while"
- WHITESPACE@[39; 40) " "
- CONDITION@[40; 63)
- LET_KW@[40; 43) "let"
- WHITESPACE@[43; 44) " "
- TUPLE_STRUCT_PAT@[44; 51)
- PATH@[44; 48)
- PATH_SEGMENT@[44; 48)
- NAME_REF@[44; 48)
- IDENT@[44; 48) "Some"
- L_PAREN@[48; 49) "("
- BIND_PAT@[49; 50)
- NAME@[49; 50)
- IDENT@[49; 50) "x"
- R_PAREN@[50; 51) ")"
- WHITESPACE@[51; 52) " "
- EQ@[52; 53) "="
- WHITESPACE@[53; 54) " "
- METHOD_CALL_EXPR@[54; 63)
- PATH_EXPR@[54; 56)
- PATH@[54; 56)
- PATH_SEGMENT@[54; 56)
- NAME_REF@[54; 56)
- IDENT@[54; 56) "it"
- DOT@[56; 57) "."
- NAME_REF@[57; 61)
- IDENT@[57; 61) "next"
- ARG_LIST@[61; 63)
- L_PAREN@[61; 62) "("
- R_PAREN@[62; 63) ")"
- WHITESPACE@[63; 64) " "
- BLOCK@[64; 66)
- L_CURLY@[64; 65) "{"
- R_CURLY@[65; 66) "}"
- SEMI@[66; 67) ";"
- WHITESPACE@[67; 68) "\n"
- R_CURLY@[68; 69) "}"
- WHITESPACE@[69; 70) "\n"
+++ /dev/null
-type A = fn();
-type B = unsafe fn();
-type C = unsafe extern "C" fn();
-type D = extern "C" fn ( u8 , ... ) -> u8;
+++ /dev/null
-SOURCE_FILE@[0; 113)
- TYPE_ALIAS_DEF@[0; 14)
- TYPE_KW@[0; 4) "type"
- WHITESPACE@[4; 5) " "
- NAME@[5; 6)
- IDENT@[5; 6) "A"
- WHITESPACE@[6; 7) " "
- EQ@[7; 8) "="
- WHITESPACE@[8; 9) " "
- FN_POINTER_TYPE@[9; 13)
- FN_KW@[9; 11) "fn"
- PARAM_LIST@[11; 13)
- L_PAREN@[11; 12) "("
- R_PAREN@[12; 13) ")"
- SEMI@[13; 14) ";"
- WHITESPACE@[14; 15) "\n"
- TYPE_ALIAS_DEF@[15; 36)
- TYPE_KW@[15; 19) "type"
- WHITESPACE@[19; 20) " "
- NAME@[20; 21)
- IDENT@[20; 21) "B"
- WHITESPACE@[21; 22) " "
- EQ@[22; 23) "="
- WHITESPACE@[23; 24) " "
- FN_POINTER_TYPE@[24; 35)
- UNSAFE_KW@[24; 30) "unsafe"
- WHITESPACE@[30; 31) " "
- FN_KW@[31; 33) "fn"
- PARAM_LIST@[33; 35)
- L_PAREN@[33; 34) "("
- R_PAREN@[34; 35) ")"
- SEMI@[35; 36) ";"
- WHITESPACE@[36; 37) "\n"
- TYPE_ALIAS_DEF@[37; 69)
- TYPE_KW@[37; 41) "type"
- WHITESPACE@[41; 42) " "
- NAME@[42; 43)
- IDENT@[42; 43) "C"
- WHITESPACE@[43; 44) " "
- EQ@[44; 45) "="
- WHITESPACE@[45; 46) " "
- FN_POINTER_TYPE@[46; 68)
- UNSAFE_KW@[46; 52) "unsafe"
- WHITESPACE@[52; 53) " "
- ABI@[53; 63)
- EXTERN_KW@[53; 59) "extern"
- WHITESPACE@[59; 60) " "
- STRING@[60; 63) "\"C\""
- WHITESPACE@[63; 64) " "
- FN_KW@[64; 66) "fn"
- PARAM_LIST@[66; 68)
- L_PAREN@[66; 67) "("
- R_PAREN@[67; 68) ")"
- SEMI@[68; 69) ";"
- WHITESPACE@[69; 70) "\n"
- TYPE_ALIAS_DEF@[70; 112)
- TYPE_KW@[70; 74) "type"
- WHITESPACE@[74; 75) " "
- NAME@[75; 76)
- IDENT@[75; 76) "D"
- WHITESPACE@[76; 77) " "
- EQ@[77; 78) "="
- WHITESPACE@[78; 79) " "
- FN_POINTER_TYPE@[79; 111)
- ABI@[79; 89)
- EXTERN_KW@[79; 85) "extern"
- WHITESPACE@[85; 86) " "
- STRING@[86; 89) "\"C\""
- WHITESPACE@[89; 90) " "
- FN_KW@[90; 92) "fn"
- WHITESPACE@[92; 93) " "
- PARAM_LIST@[93; 105)
- L_PAREN@[93; 94) "("
- WHITESPACE@[94; 95) " "
- PARAM@[95; 97)
- PATH_TYPE@[95; 97)
- PATH@[95; 97)
- PATH_SEGMENT@[95; 97)
- NAME_REF@[95; 97)
- IDENT@[95; 97) "u8"
- WHITESPACE@[97; 98) " "
- COMMA@[98; 99) ","
- WHITESPACE@[99; 100) " "
- DOTDOTDOT@[100; 103) "..."
- WHITESPACE@[103; 104) " "
- R_PAREN@[104; 105) ")"
- WHITESPACE@[105; 106) " "
- RET_TYPE@[106; 111)
- THIN_ARROW@[106; 108) "->"
- WHITESPACE@[108; 109) " "
- PATH_TYPE@[109; 111)
- PATH@[109; 111)
- PATH_SEGMENT@[109; 111)
- NAME_REF@[109; 111)
- IDENT@[109; 111) "u8"
- SEMI@[111; 112) ";"
- WHITESPACE@[112; 113) "\n"
+++ /dev/null
-type A = &();
-type B = &'static ();
-type C = &mut ();
+++ /dev/null
-SOURCE_FILE@[0; 54)
- TYPE_ALIAS_DEF@[0; 13)
- TYPE_KW@[0; 4) "type"
- WHITESPACE@[4; 5) " "
- NAME@[5; 6)
- IDENT@[5; 6) "A"
- WHITESPACE@[6; 7) " "
- EQ@[7; 8) "="
- WHITESPACE@[8; 9) " "
- REFERENCE_TYPE@[9; 12)
- AMP@[9; 10) "&"
- TUPLE_TYPE@[10; 12)
- L_PAREN@[10; 11) "("
- R_PAREN@[11; 12) ")"
- SEMI@[12; 13) ";"
- WHITESPACE@[13; 14) "\n"
- TYPE_ALIAS_DEF@[14; 35)
- TYPE_KW@[14; 18) "type"
- WHITESPACE@[18; 19) " "
- NAME@[19; 20)
- IDENT@[19; 20) "B"
- WHITESPACE@[20; 21) " "
- EQ@[21; 22) "="
- WHITESPACE@[22; 23) " "
- REFERENCE_TYPE@[23; 34)
- AMP@[23; 24) "&"
- LIFETIME@[24; 31) "\'static"
- WHITESPACE@[31; 32) " "
- TUPLE_TYPE@[32; 34)
- L_PAREN@[32; 33) "("
- R_PAREN@[33; 34) ")"
- SEMI@[34; 35) ";"
- WHITESPACE@[35; 36) "\n"
- TYPE_ALIAS_DEF@[36; 53)
- TYPE_KW@[36; 40) "type"
- WHITESPACE@[40; 41) " "
- NAME@[41; 42)
- IDENT@[41; 42) "C"
- WHITESPACE@[42; 43) " "
- EQ@[43; 44) "="
- WHITESPACE@[44; 45) " "
- REFERENCE_TYPE@[45; 52)
- AMP@[45; 46) "&"
- MUT_KW@[46; 49) "mut"
- WHITESPACE@[49; 50) " "
- TUPLE_TYPE@[50; 52)
- L_PAREN@[50; 51) "("
- R_PAREN@[51; 52) ")"
- SEMI@[52; 53) ";"
- WHITESPACE@[53; 54) "\n"
+++ /dev/null
-fn foo() {
- loop {
- break;
- break 'l;
- break 92;
- break 'l 92;
- }
-}
+++ /dev/null
-SOURCE_FILE@[0; 102)
- FN_DEF@[0; 101)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 101)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- LOOP_EXPR@[15; 99)
- LOOP_KW@[15; 19) "loop"
- WHITESPACE@[19; 20) " "
- BLOCK@[20; 99)
- L_CURLY@[20; 21) "{"
- WHITESPACE@[21; 30) "\n "
- EXPR_STMT@[30; 36)
- BREAK_EXPR@[30; 35)
- BREAK_KW@[30; 35) "break"
- SEMI@[35; 36) ";"
- WHITESPACE@[36; 45) "\n "
- EXPR_STMT@[45; 54)
- BREAK_EXPR@[45; 53)
- BREAK_KW@[45; 50) "break"
- WHITESPACE@[50; 51) " "
- LIFETIME@[51; 53) "\'l"
- SEMI@[53; 54) ";"
- WHITESPACE@[54; 63) "\n "
- EXPR_STMT@[63; 72)
- BREAK_EXPR@[63; 71)
- BREAK_KW@[63; 68) "break"
- WHITESPACE@[68; 69) " "
- LITERAL@[69; 71)
- INT_NUMBER@[69; 71) "92"
- SEMI@[71; 72) ";"
- WHITESPACE@[72; 81) "\n "
- EXPR_STMT@[81; 93)
- BREAK_EXPR@[81; 92)
- BREAK_KW@[81; 86) "break"
- WHITESPACE@[86; 87) " "
- LIFETIME@[87; 89) "\'l"
- WHITESPACE@[89; 90) " "
- LITERAL@[90; 92)
- INT_NUMBER@[90; 92) "92"
- SEMI@[92; 93) ";"
- WHITESPACE@[93; 98) "\n "
- R_CURLY@[98; 99) "}"
- WHITESPACE@[99; 100) "\n"
- R_CURLY@[100; 101) "}"
- WHITESPACE@[101; 102) "\n"
+++ /dev/null
-unsafe extern "C" fn foo() {}
+++ /dev/null
-SOURCE_FILE@[0; 30)
- FN_DEF@[0; 29)
- UNSAFE_KW@[0; 6) "unsafe"
- WHITESPACE@[6; 7) " "
- ABI@[7; 17)
- EXTERN_KW@[7; 13) "extern"
- WHITESPACE@[13; 14) " "
- STRING@[14; 17) "\"C\""
- WHITESPACE@[17; 18) " "
- FN_KW@[18; 20) "fn"
- WHITESPACE@[20; 21) " "
- NAME@[21; 24)
- IDENT@[21; 24) "foo"
- PARAM_LIST@[24; 26)
- L_PAREN@[24; 25) "("
- R_PAREN@[25; 26) ")"
- WHITESPACE@[26; 27) " "
- BLOCK@[27; 29)
- L_CURLY@[27; 28) "{"
- R_CURLY@[28; 29) "}"
- WHITESPACE@[29; 30) "\n"
+++ /dev/null
-type X = <A as B>::Output;
-fn foo() { <usize as Default>::default(); }
+++ /dev/null
-SOURCE_FILE@[0; 71)
- TYPE_ALIAS_DEF@[0; 26)
- TYPE_KW@[0; 4) "type"
- WHITESPACE@[4; 5) " "
- NAME@[5; 6)
- IDENT@[5; 6) "X"
- WHITESPACE@[6; 7) " "
- EQ@[7; 8) "="
- WHITESPACE@[8; 9) " "
- PATH_TYPE@[9; 25)
- PATH@[9; 25)
- PATH@[9; 17)
- PATH_SEGMENT@[9; 17)
- L_ANGLE@[9; 10) "<"
- PATH_TYPE@[10; 11)
- PATH@[10; 11)
- PATH_SEGMENT@[10; 11)
- NAME_REF@[10; 11)
- IDENT@[10; 11) "A"
- WHITESPACE@[11; 12) " "
- AS_KW@[12; 14) "as"
- WHITESPACE@[14; 15) " "
- PATH_TYPE@[15; 16)
- PATH@[15; 16)
- PATH_SEGMENT@[15; 16)
- NAME_REF@[15; 16)
- IDENT@[15; 16) "B"
- R_ANGLE@[16; 17) ">"
- COLONCOLON@[17; 19) "::"
- PATH_SEGMENT@[19; 25)
- NAME_REF@[19; 25)
- IDENT@[19; 25) "Output"
- SEMI@[25; 26) ";"
- WHITESPACE@[26; 27) "\n"
- FN_DEF@[27; 70)
- FN_KW@[27; 29) "fn"
- WHITESPACE@[29; 30) " "
- NAME@[30; 33)
- IDENT@[30; 33) "foo"
- PARAM_LIST@[33; 35)
- L_PAREN@[33; 34) "("
- R_PAREN@[34; 35) ")"
- WHITESPACE@[35; 36) " "
- BLOCK@[36; 70)
- L_CURLY@[36; 37) "{"
- WHITESPACE@[37; 38) " "
- EXPR_STMT@[38; 68)
- CALL_EXPR@[38; 67)
- PATH_EXPR@[38; 65)
- PATH@[38; 65)
- PATH@[38; 56)
- PATH_SEGMENT@[38; 56)
- L_ANGLE@[38; 39) "<"
- PATH_TYPE@[39; 44)
- PATH@[39; 44)
- PATH_SEGMENT@[39; 44)
- NAME_REF@[39; 44)
- IDENT@[39; 44) "usize"
- WHITESPACE@[44; 45) " "
- AS_KW@[45; 47) "as"
- WHITESPACE@[47; 48) " "
- PATH_TYPE@[48; 55)
- PATH@[48; 55)
- PATH_SEGMENT@[48; 55)
- NAME_REF@[48; 55)
- IDENT@[48; 55) "Default"
- R_ANGLE@[55; 56) ">"
- COLONCOLON@[56; 58) "::"
- PATH_SEGMENT@[58; 65)
- NAME_REF@[58; 65)
- IDENT@[58; 65) "default"
- ARG_LIST@[65; 67)
- L_PAREN@[65; 66) "("
- R_PAREN@[66; 67) ")"
- SEMI@[67; 68) ";"
- WHITESPACE@[68; 69) " "
- R_CURLY@[69; 70) "}"
- WHITESPACE@[70; 71) "\n"
+++ /dev/null
-fn foo() { xs[..]; }
+++ /dev/null
-SOURCE_FILE@[0; 21)
- FN_DEF@[0; 20)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 20)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 11) " "
- EXPR_STMT@[11; 18)
- INDEX_EXPR@[11; 17)
- PATH_EXPR@[11; 13)
- PATH@[11; 13)
- PATH_SEGMENT@[11; 13)
- NAME_REF@[11; 13)
- IDENT@[11; 13) "xs"
- L_BRACK@[13; 14) "["
- RANGE_EXPR@[14; 16)
- DOTDOT@[14; 16) ".."
- R_BRACK@[16; 17) "]"
- SEMI@[17; 18) ";"
- WHITESPACE@[18; 19) " "
- R_CURLY@[19; 20) "}"
- WHITESPACE@[20; 21) "\n"
+++ /dev/null
-type A = B<'static, i32, Item=u64>;
+++ /dev/null
-SOURCE_FILE@[0; 36)
- TYPE_ALIAS_DEF@[0; 35)
- TYPE_KW@[0; 4) "type"
- WHITESPACE@[4; 5) " "
- NAME@[5; 6)
- IDENT@[5; 6) "A"
- WHITESPACE@[6; 7) " "
- EQ@[7; 8) "="
- WHITESPACE@[8; 9) " "
- PATH_TYPE@[9; 34)
- PATH@[9; 34)
- PATH_SEGMENT@[9; 34)
- NAME_REF@[9; 10)
- IDENT@[9; 10) "B"
- TYPE_ARG_LIST@[10; 34)
- L_ANGLE@[10; 11) "<"
- LIFETIME_ARG@[11; 18)
- LIFETIME@[11; 18) "\'static"
- COMMA@[18; 19) ","
- WHITESPACE@[19; 20) " "
- TYPE_ARG@[20; 23)
- PATH_TYPE@[20; 23)
- PATH@[20; 23)
- PATH_SEGMENT@[20; 23)
- NAME_REF@[20; 23)
- IDENT@[20; 23) "i32"
- COMMA@[23; 24) ","
- WHITESPACE@[24; 25) " "
- ASSOC_TYPE_ARG@[25; 33)
- NAME_REF@[25; 29)
- IDENT@[25; 29) "Item"
- EQ@[29; 30) "="
- PATH_TYPE@[30; 33)
- PATH@[30; 33)
- PATH_SEGMENT@[30; 33)
- NAME_REF@[30; 33)
- IDENT@[30; 33) "u64"
- R_ANGLE@[33; 34) ">"
- SEMI@[34; 35) ";"
- WHITESPACE@[35; 36) "\n"
+++ /dev/null
-crate fn main() { }
-struct S { crate field: u32 }
-struct T(crate u32);
+++ /dev/null
-SOURCE_FILE@[0; 71)
- FN_DEF@[0; 19)
- VISIBILITY@[0; 5)
- CRATE_KW@[0; 5) "crate"
- WHITESPACE@[5; 6) " "
- FN_KW@[6; 8) "fn"
- WHITESPACE@[8; 9) " "
- NAME@[9; 13)
- IDENT@[9; 13) "main"
- PARAM_LIST@[13; 15)
- L_PAREN@[13; 14) "("
- R_PAREN@[14; 15) ")"
- WHITESPACE@[15; 16) " "
- BLOCK@[16; 19)
- L_CURLY@[16; 17) "{"
- WHITESPACE@[17; 18) " "
- R_CURLY@[18; 19) "}"
- WHITESPACE@[19; 20) "\n"
- STRUCT_DEF@[20; 49)
- STRUCT_KW@[20; 26) "struct"
- WHITESPACE@[26; 27) " "
- NAME@[27; 28)
- IDENT@[27; 28) "S"
- WHITESPACE@[28; 29) " "
- NAMED_FIELD_DEF_LIST@[29; 49)
- L_CURLY@[29; 30) "{"
- WHITESPACE@[30; 31) " "
- NAMED_FIELD_DEF@[31; 47)
- VISIBILITY@[31; 36)
- CRATE_KW@[31; 36) "crate"
- WHITESPACE@[36; 37) " "
- NAME@[37; 42)
- IDENT@[37; 42) "field"
- COLON@[42; 43) ":"
- WHITESPACE@[43; 44) " "
- PATH_TYPE@[44; 47)
- PATH@[44; 47)
- PATH_SEGMENT@[44; 47)
- NAME_REF@[44; 47)
- IDENT@[44; 47) "u32"
- WHITESPACE@[47; 48) " "
- R_CURLY@[48; 49) "}"
- WHITESPACE@[49; 50) "\n"
- STRUCT_DEF@[50; 70)
- STRUCT_KW@[50; 56) "struct"
- WHITESPACE@[56; 57) " "
- NAME@[57; 58)
- IDENT@[57; 58) "T"
- POS_FIELD_DEF_LIST@[58; 69)
- L_PAREN@[58; 59) "("
- POS_FIELD_DEF@[59; 68)
- VISIBILITY@[59; 64)
- CRATE_KW@[59; 64) "crate"
- WHITESPACE@[64; 65) " "
- PATH_TYPE@[65; 68)
- PATH@[65; 68)
- PATH_SEGMENT@[65; 68)
- NAME_REF@[65; 68)
- IDENT@[65; 68) "u32"
- R_PAREN@[68; 69) ")"
- SEMI@[69; 70) ";"
- WHITESPACE@[70; 71) "\n"
+++ /dev/null
-trait T<U>: Hash + Clone where U: Copy {}
-trait X<U: Debug + Display>: Hash + Clone where U: Copy {}
+++ /dev/null
-SOURCE_FILE@[0; 101)
- TRAIT_DEF@[0; 41)
- TRAIT_KW@[0; 5) "trait"
- WHITESPACE@[5; 6) " "
- NAME@[6; 7)
- IDENT@[6; 7) "T"
- TYPE_PARAM_LIST@[7; 10)
- L_ANGLE@[7; 8) "<"
- TYPE_PARAM@[8; 9)
- NAME@[8; 9)
- IDENT@[8; 9) "U"
- R_ANGLE@[9; 10) ">"
- COLON@[10; 11) ":"
- WHITESPACE@[11; 12) " "
- TYPE_BOUND_LIST@[12; 24)
- TYPE_BOUND@[12; 16)
- PATH_TYPE@[12; 16)
- PATH@[12; 16)
- PATH_SEGMENT@[12; 16)
- NAME_REF@[12; 16)
- IDENT@[12; 16) "Hash"
- WHITESPACE@[16; 17) " "
- PLUS@[17; 18) "+"
- WHITESPACE@[18; 19) " "
- TYPE_BOUND@[19; 24)
- PATH_TYPE@[19; 24)
- PATH@[19; 24)
- PATH_SEGMENT@[19; 24)
- NAME_REF@[19; 24)
- IDENT@[19; 24) "Clone"
- WHITESPACE@[24; 25) " "
- WHERE_CLAUSE@[25; 38)
- WHERE_KW@[25; 30) "where"
- WHITESPACE@[30; 31) " "
- WHERE_PRED@[31; 38)
- PATH_TYPE@[31; 32)
- PATH@[31; 32)
- PATH_SEGMENT@[31; 32)
- NAME_REF@[31; 32)
- IDENT@[31; 32) "U"
- COLON@[32; 33) ":"
- WHITESPACE@[33; 34) " "
- TYPE_BOUND_LIST@[34; 38)
- TYPE_BOUND@[34; 38)
- PATH_TYPE@[34; 38)
- PATH@[34; 38)
- PATH_SEGMENT@[34; 38)
- NAME_REF@[34; 38)
- IDENT@[34; 38) "Copy"
- WHITESPACE@[38; 39) " "
- ITEM_LIST@[39; 41)
- L_CURLY@[39; 40) "{"
- R_CURLY@[40; 41) "}"
- WHITESPACE@[41; 42) "\n"
- TRAIT_DEF@[42; 100)
- TRAIT_KW@[42; 47) "trait"
- WHITESPACE@[47; 48) " "
- NAME@[48; 49)
- IDENT@[48; 49) "X"
- TYPE_PARAM_LIST@[49; 69)
- L_ANGLE@[49; 50) "<"
- TYPE_PARAM@[50; 68)
- NAME@[50; 51)
- IDENT@[50; 51) "U"
- COLON@[51; 52) ":"
- WHITESPACE@[52; 53) " "
- TYPE_BOUND_LIST@[53; 68)
- TYPE_BOUND@[53; 58)
- PATH_TYPE@[53; 58)
- PATH@[53; 58)
- PATH_SEGMENT@[53; 58)
- NAME_REF@[53; 58)
- IDENT@[53; 58) "Debug"
- WHITESPACE@[58; 59) " "
- PLUS@[59; 60) "+"
- WHITESPACE@[60; 61) " "
- TYPE_BOUND@[61; 68)
- PATH_TYPE@[61; 68)
- PATH@[61; 68)
- PATH_SEGMENT@[61; 68)
- NAME_REF@[61; 68)
- IDENT@[61; 68) "Display"
- R_ANGLE@[68; 69) ">"
- COLON@[69; 70) ":"
- WHITESPACE@[70; 71) " "
- TYPE_BOUND_LIST@[71; 83)
- TYPE_BOUND@[71; 75)
- PATH_TYPE@[71; 75)
- PATH@[71; 75)
- PATH_SEGMENT@[71; 75)
- NAME_REF@[71; 75)
- IDENT@[71; 75) "Hash"
- WHITESPACE@[75; 76) " "
- PLUS@[76; 77) "+"
- WHITESPACE@[77; 78) " "
- TYPE_BOUND@[78; 83)
- PATH_TYPE@[78; 83)
- PATH@[78; 83)
- PATH_SEGMENT@[78; 83)
- NAME_REF@[78; 83)
- IDENT@[78; 83) "Clone"
- WHITESPACE@[83; 84) " "
- WHERE_CLAUSE@[84; 97)
- WHERE_KW@[84; 89) "where"
- WHITESPACE@[89; 90) " "
- WHERE_PRED@[90; 97)
- PATH_TYPE@[90; 91)
- PATH@[90; 91)
- PATH_SEGMENT@[90; 91)
- NAME_REF@[90; 91)
- IDENT@[90; 91) "U"
- COLON@[91; 92) ":"
- WHITESPACE@[92; 93) " "
- TYPE_BOUND_LIST@[93; 97)
- TYPE_BOUND@[93; 97)
- PATH_TYPE@[93; 97)
- PATH@[93; 97)
- PATH_SEGMENT@[93; 97)
- NAME_REF@[93; 97)
- IDENT@[93; 97) "Copy"
- WHITESPACE@[97; 98) " "
- ITEM_LIST@[98; 100)
- L_CURLY@[98; 99) "{"
- R_CURLY@[99; 100) "}"
- WHITESPACE@[100; 101) "\n"
+++ /dev/null
-fn foo() {
- let _ = f();
- let _ = f()(1)(1, 2,);
- let _ = f(<Foo>::func());
- f(<Foo as Trait>::func());
-}
+++ /dev/null
-SOURCE_FILE@[0; 118)
- FN_DEF@[0; 117)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 117)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- LET_STMT@[15; 27)
- LET_KW@[15; 18) "let"
- WHITESPACE@[18; 19) " "
- PLACEHOLDER_PAT@[19; 20)
- UNDERSCORE@[19; 20) "_"
- WHITESPACE@[20; 21) " "
- EQ@[21; 22) "="
- WHITESPACE@[22; 23) " "
- CALL_EXPR@[23; 26)
- PATH_EXPR@[23; 24)
- PATH@[23; 24)
- PATH_SEGMENT@[23; 24)
- NAME_REF@[23; 24)
- IDENT@[23; 24) "f"
- ARG_LIST@[24; 26)
- L_PAREN@[24; 25) "("
- R_PAREN@[25; 26) ")"
- SEMI@[26; 27) ";"
- WHITESPACE@[27; 32) "\n "
- LET_STMT@[32; 54)
- LET_KW@[32; 35) "let"
- WHITESPACE@[35; 36) " "
- PLACEHOLDER_PAT@[36; 37)
- UNDERSCORE@[36; 37) "_"
- WHITESPACE@[37; 38) " "
- EQ@[38; 39) "="
- WHITESPACE@[39; 40) " "
- CALL_EXPR@[40; 53)
- CALL_EXPR@[40; 46)
- CALL_EXPR@[40; 43)
- PATH_EXPR@[40; 41)
- PATH@[40; 41)
- PATH_SEGMENT@[40; 41)
- NAME_REF@[40; 41)
- IDENT@[40; 41) "f"
- ARG_LIST@[41; 43)
- L_PAREN@[41; 42) "("
- R_PAREN@[42; 43) ")"
- ARG_LIST@[43; 46)
- L_PAREN@[43; 44) "("
- LITERAL@[44; 45)
- INT_NUMBER@[44; 45) "1"
- R_PAREN@[45; 46) ")"
- ARG_LIST@[46; 53)
- L_PAREN@[46; 47) "("
- LITERAL@[47; 48)
- INT_NUMBER@[47; 48) "1"
- COMMA@[48; 49) ","
- WHITESPACE@[49; 50) " "
- LITERAL@[50; 51)
- INT_NUMBER@[50; 51) "2"
- COMMA@[51; 52) ","
- R_PAREN@[52; 53) ")"
- SEMI@[53; 54) ";"
- WHITESPACE@[54; 59) "\n "
- LET_STMT@[59; 84)
- LET_KW@[59; 62) "let"
- WHITESPACE@[62; 63) " "
- PLACEHOLDER_PAT@[63; 64)
- UNDERSCORE@[63; 64) "_"
- WHITESPACE@[64; 65) " "
- EQ@[65; 66) "="
- WHITESPACE@[66; 67) " "
- CALL_EXPR@[67; 83)
- PATH_EXPR@[67; 68)
- PATH@[67; 68)
- PATH_SEGMENT@[67; 68)
- NAME_REF@[67; 68)
- IDENT@[67; 68) "f"
- ARG_LIST@[68; 83)
- L_PAREN@[68; 69) "("
- CALL_EXPR@[69; 82)
- PATH_EXPR@[69; 80)
- PATH@[69; 80)
- PATH@[69; 74)
- PATH_SEGMENT@[69; 74)
- L_ANGLE@[69; 70) "<"
- PATH_TYPE@[70; 73)
- PATH@[70; 73)
- PATH_SEGMENT@[70; 73)
- NAME_REF@[70; 73)
- IDENT@[70; 73) "Foo"
- R_ANGLE@[73; 74) ">"
- COLONCOLON@[74; 76) "::"
- PATH_SEGMENT@[76; 80)
- NAME_REF@[76; 80)
- IDENT@[76; 80) "func"
- ARG_LIST@[80; 82)
- L_PAREN@[80; 81) "("
- R_PAREN@[81; 82) ")"
- R_PAREN@[82; 83) ")"
- SEMI@[83; 84) ";"
- WHITESPACE@[84; 89) "\n "
- EXPR_STMT@[89; 115)
- CALL_EXPR@[89; 114)
- PATH_EXPR@[89; 90)
- PATH@[89; 90)
- PATH_SEGMENT@[89; 90)
- NAME_REF@[89; 90)
- IDENT@[89; 90) "f"
- ARG_LIST@[90; 114)
- L_PAREN@[90; 91) "("
- CALL_EXPR@[91; 113)
- PATH_EXPR@[91; 111)
- PATH@[91; 111)
- PATH@[91; 105)
- PATH_SEGMENT@[91; 105)
- L_ANGLE@[91; 92) "<"
- PATH_TYPE@[92; 95)
- PATH@[92; 95)
- PATH_SEGMENT@[92; 95)
- NAME_REF@[92; 95)
- IDENT@[92; 95) "Foo"
- WHITESPACE@[95; 96) " "
- AS_KW@[96; 98) "as"
- WHITESPACE@[98; 99) " "
- PATH_TYPE@[99; 104)
- PATH@[99; 104)
- PATH_SEGMENT@[99; 104)
- NAME_REF@[99; 104)
- IDENT@[99; 104) "Trait"
- R_ANGLE@[104; 105) ">"
- COLONCOLON@[105; 107) "::"
- PATH_SEGMENT@[107; 111)
- NAME_REF@[107; 111)
- IDENT@[107; 111) "func"
- ARG_LIST@[111; 113)
- L_PAREN@[111; 112) "("
- R_PAREN@[112; 113) ")"
- R_PAREN@[113; 114) ")"
- SEMI@[114; 115) ";"
- WHITESPACE@[115; 116) "\n"
- R_CURLY@[116; 117) "}"
- WHITESPACE@[117; 118) "\n"
+++ /dev/null
-use some::path as some_name;
-use some::{
- other::path as some_other_name,
- different::path as different_name,
- yet::another::path,
- running::out::of::synonyms::for_::different::*
-};
-use Trait as _;
+++ /dev/null
-SOURCE_FILE@[0; 198)
- USE_ITEM@[0; 28)
- USE_KW@[0; 3) "use"
- WHITESPACE@[3; 4) " "
- USE_TREE@[4; 27)
- PATH@[4; 14)
- PATH@[4; 8)
- PATH_SEGMENT@[4; 8)
- NAME_REF@[4; 8)
- IDENT@[4; 8) "some"
- COLONCOLON@[8; 10) "::"
- PATH_SEGMENT@[10; 14)
- NAME_REF@[10; 14)
- IDENT@[10; 14) "path"
- WHITESPACE@[14; 15) " "
- ALIAS@[15; 27)
- AS_KW@[15; 17) "as"
- WHITESPACE@[17; 18) " "
- NAME@[18; 27)
- IDENT@[18; 27) "some_name"
- SEMI@[27; 28) ";"
- WHITESPACE@[28; 29) "\n"
- USE_ITEM@[29; 181)
- USE_KW@[29; 32) "use"
- WHITESPACE@[32; 33) " "
- USE_TREE@[33; 180)
- PATH@[33; 37)
- PATH_SEGMENT@[33; 37)
- NAME_REF@[33; 37)
- IDENT@[33; 37) "some"
- COLONCOLON@[37; 39) "::"
- USE_TREE_LIST@[39; 180)
- L_CURLY@[39; 40) "{"
- WHITESPACE@[40; 42) "\n "
- USE_TREE@[42; 72)
- PATH@[42; 53)
- PATH@[42; 47)
- PATH_SEGMENT@[42; 47)
- NAME_REF@[42; 47)
- IDENT@[42; 47) "other"
- COLONCOLON@[47; 49) "::"
- PATH_SEGMENT@[49; 53)
- NAME_REF@[49; 53)
- IDENT@[49; 53) "path"
- WHITESPACE@[53; 54) " "
- ALIAS@[54; 72)
- AS_KW@[54; 56) "as"
- WHITESPACE@[56; 57) " "
- NAME@[57; 72)
- IDENT@[57; 72) "some_other_name"
- COMMA@[72; 73) ","
- WHITESPACE@[73; 75) "\n "
- USE_TREE@[75; 108)
- PATH@[75; 90)
- PATH@[75; 84)
- PATH_SEGMENT@[75; 84)
- NAME_REF@[75; 84)
- IDENT@[75; 84) "different"
- COLONCOLON@[84; 86) "::"
- PATH_SEGMENT@[86; 90)
- NAME_REF@[86; 90)
- IDENT@[86; 90) "path"
- WHITESPACE@[90; 91) " "
- ALIAS@[91; 108)
- AS_KW@[91; 93) "as"
- WHITESPACE@[93; 94) " "
- NAME@[94; 108)
- IDENT@[94; 108) "different_name"
- COMMA@[108; 109) ","
- WHITESPACE@[109; 111) "\n "
- USE_TREE@[111; 129)
- PATH@[111; 129)
- PATH@[111; 123)
- PATH@[111; 114)
- PATH_SEGMENT@[111; 114)
- NAME_REF@[111; 114)
- IDENT@[111; 114) "yet"
- COLONCOLON@[114; 116) "::"
- PATH_SEGMENT@[116; 123)
- NAME_REF@[116; 123)
- IDENT@[116; 123) "another"
- COLONCOLON@[123; 125) "::"
- PATH_SEGMENT@[125; 129)
- NAME_REF@[125; 129)
- IDENT@[125; 129) "path"
- COMMA@[129; 130) ","
- WHITESPACE@[130; 132) "\n "
- USE_TREE@[132; 178)
- PATH@[132; 175)
- PATH@[132; 164)
- PATH@[132; 158)
- PATH@[132; 148)
- PATH@[132; 144)
- PATH@[132; 139)
- PATH_SEGMENT@[132; 139)
- NAME_REF@[132; 139)
- IDENT@[132; 139) "running"
- COLONCOLON@[139; 141) "::"
- PATH_SEGMENT@[141; 144)
- NAME_REF@[141; 144)
- IDENT@[141; 144) "out"
- COLONCOLON@[144; 146) "::"
- PATH_SEGMENT@[146; 148)
- NAME_REF@[146; 148)
- IDENT@[146; 148) "of"
- COLONCOLON@[148; 150) "::"
- PATH_SEGMENT@[150; 158)
- NAME_REF@[150; 158)
- IDENT@[150; 158) "synonyms"
- COLONCOLON@[158; 160) "::"
- PATH_SEGMENT@[160; 164)
- NAME_REF@[160; 164)
- IDENT@[160; 164) "for_"
- COLONCOLON@[164; 166) "::"
- PATH_SEGMENT@[166; 175)
- NAME_REF@[166; 175)
- IDENT@[166; 175) "different"
- COLONCOLON@[175; 177) "::"
- STAR@[177; 178) "*"
- WHITESPACE@[178; 179) "\n"
- R_CURLY@[179; 180) "}"
- SEMI@[180; 181) ";"
- WHITESPACE@[181; 182) "\n"
- USE_ITEM@[182; 197)
- USE_KW@[182; 185) "use"
- WHITESPACE@[185; 186) " "
- USE_TREE@[186; 196)
- PATH@[186; 191)
- PATH_SEGMENT@[186; 191)
- NAME_REF@[186; 191)
- IDENT@[186; 191) "Trait"
- WHITESPACE@[191; 192) " "
- ALIAS@[192; 196)
- AS_KW@[192; 194) "as"
- WHITESPACE@[194; 195) " "
- UNDERSCORE@[195; 196) "_"
- SEMI@[196; 197) ";"
- WHITESPACE@[197; 198) "\n"
+++ /dev/null
-fn a() { fn b() {} }
+++ /dev/null
-SOURCE_FILE@[0; 21)
- FN_DEF@[0; 20)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 4)
- IDENT@[3; 4) "a"
- PARAM_LIST@[4; 6)
- L_PAREN@[4; 5) "("
- R_PAREN@[5; 6) ")"
- WHITESPACE@[6; 7) " "
- BLOCK@[7; 20)
- L_CURLY@[7; 8) "{"
- WHITESPACE@[8; 9) " "
- FN_DEF@[9; 18)
- FN_KW@[9; 11) "fn"
- WHITESPACE@[11; 12) " "
- NAME@[12; 13)
- IDENT@[12; 13) "b"
- PARAM_LIST@[13; 15)
- L_PAREN@[13; 14) "("
- R_PAREN@[14; 15) ")"
- WHITESPACE@[15; 16) " "
- BLOCK@[16; 18)
- L_CURLY@[16; 17) "{"
- R_CURLY@[17; 18) "}"
- WHITESPACE@[18; 19) " "
- R_CURLY@[19; 20) "}"
- WHITESPACE@[20; 21) "\n"
+++ /dev/null
-fn foo<F: FnMut(&mut Foo<'a>)>(){}
+++ /dev/null
-SOURCE_FILE@[0; 35)
- FN_DEF@[0; 34)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- TYPE_PARAM_LIST@[6; 30)
- L_ANGLE@[6; 7) "<"
- TYPE_PARAM@[7; 29)
- NAME@[7; 8)
- IDENT@[7; 8) "F"
- COLON@[8; 9) ":"
- WHITESPACE@[9; 10) " "
- TYPE_BOUND_LIST@[10; 29)
- TYPE_BOUND@[10; 29)
- PATH_TYPE@[10; 29)
- PATH@[10; 29)
- PATH_SEGMENT@[10; 29)
- NAME_REF@[10; 15)
- IDENT@[10; 15) "FnMut"
- PARAM_LIST@[15; 29)
- L_PAREN@[15; 16) "("
- PARAM@[16; 28)
- REFERENCE_TYPE@[16; 28)
- AMP@[16; 17) "&"
- MUT_KW@[17; 20) "mut"
- WHITESPACE@[20; 21) " "
- PATH_TYPE@[21; 28)
- PATH@[21; 28)
- PATH_SEGMENT@[21; 28)
- NAME_REF@[21; 24)
- IDENT@[21; 24) "Foo"
- TYPE_ARG_LIST@[24; 28)
- L_ANGLE@[24; 25) "<"
- LIFETIME_ARG@[25; 27)
- LIFETIME@[25; 27) "\'a"
- R_ANGLE@[27; 28) ">"
- R_PAREN@[28; 29) ")"
- R_ANGLE@[29; 30) ">"
- PARAM_LIST@[30; 32)
- L_PAREN@[30; 31) "("
- R_PAREN@[31; 32) ")"
- BLOCK@[32; 34)
- L_CURLY@[32; 33) "{"
- R_CURLY@[33; 34) "}"
- WHITESPACE@[34; 35) "\n"
+++ /dev/null
-type T = (i32,);
+++ /dev/null
-SOURCE_FILE@[0; 17)
- TYPE_ALIAS_DEF@[0; 16)
- TYPE_KW@[0; 4) "type"
- WHITESPACE@[4; 5) " "
- NAME@[5; 6)
- IDENT@[5; 6) "T"
- WHITESPACE@[6; 7) " "
- EQ@[7; 8) "="
- WHITESPACE@[8; 9) " "
- TUPLE_TYPE@[9; 15)
- L_PAREN@[9; 10) "("
- PATH_TYPE@[10; 13)
- PATH@[10; 13)
- PATH_SEGMENT@[10; 13)
- NAME_REF@[10; 13)
- IDENT@[10; 13) "i32"
- COMMA@[13; 14) ","
- R_PAREN@[14; 15) ")"
- SEMI@[15; 16) ";"
- WHITESPACE@[16; 17) "\n"
+++ /dev/null
-unsafe default impl Foo {}
+++ /dev/null
-SOURCE_FILE@[0; 27)
- IMPL_BLOCK@[0; 26)
- UNSAFE_KW@[0; 6) "unsafe"
- WHITESPACE@[6; 7) " "
- DEFAULT_KW@[7; 14) "default"
- WHITESPACE@[14; 15) " "
- IMPL_KW@[15; 19) "impl"
- WHITESPACE@[19; 20) " "
- PATH_TYPE@[20; 23)
- PATH@[20; 23)
- PATH_SEGMENT@[20; 23)
- NAME_REF@[20; 23)
- IDENT@[20; 23) "Foo"
- WHITESPACE@[23; 24) " "
- ITEM_LIST@[24; 26)
- L_CURLY@[24; 25) "{"
- R_CURLY@[25; 26) "}"
- WHITESPACE@[26; 27) "\n"
+++ /dev/null
-fn foo() -> Box<T + 'f> {}
-fn foo() -> Box<dyn T + 'f> {}
+++ /dev/null
-SOURCE_FILE@[0; 58)
- FN_DEF@[0; 26)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- RET_TYPE@[9; 23)
- THIN_ARROW@[9; 11) "->"
- WHITESPACE@[11; 12) " "
- PATH_TYPE@[12; 23)
- PATH@[12; 23)
- PATH_SEGMENT@[12; 23)
- NAME_REF@[12; 15)
- IDENT@[12; 15) "Box"
- TYPE_ARG_LIST@[15; 23)
- L_ANGLE@[15; 16) "<"
- TYPE_ARG@[16; 22)
- DYN_TRAIT_TYPE@[16; 22)
- TYPE_BOUND_LIST@[16; 22)
- TYPE_BOUND@[16; 17)
- PATH_TYPE@[16; 17)
- PATH@[16; 17)
- PATH_SEGMENT@[16; 17)
- NAME_REF@[16; 17)
- IDENT@[16; 17) "T"
- WHITESPACE@[17; 18) " "
- PLUS@[18; 19) "+"
- WHITESPACE@[19; 20) " "
- TYPE_BOUND@[20; 22)
- LIFETIME@[20; 22) "\'f"
- R_ANGLE@[22; 23) ">"
- WHITESPACE@[23; 24) " "
- BLOCK@[24; 26)
- L_CURLY@[24; 25) "{"
- R_CURLY@[25; 26) "}"
- WHITESPACE@[26; 27) "\n"
- FN_DEF@[27; 57)
- FN_KW@[27; 29) "fn"
- WHITESPACE@[29; 30) " "
- NAME@[30; 33)
- IDENT@[30; 33) "foo"
- PARAM_LIST@[33; 35)
- L_PAREN@[33; 34) "("
- R_PAREN@[34; 35) ")"
- WHITESPACE@[35; 36) " "
- RET_TYPE@[36; 54)
- THIN_ARROW@[36; 38) "->"
- WHITESPACE@[38; 39) " "
- PATH_TYPE@[39; 54)
- PATH@[39; 54)
- PATH_SEGMENT@[39; 54)
- NAME_REF@[39; 42)
- IDENT@[39; 42) "Box"
- TYPE_ARG_LIST@[42; 54)
- L_ANGLE@[42; 43) "<"
- TYPE_ARG@[43; 53)
- DYN_TRAIT_TYPE@[43; 53)
- DYN_KW@[43; 46) "dyn"
- WHITESPACE@[46; 47) " "
- TYPE_BOUND_LIST@[47; 53)
- TYPE_BOUND@[47; 48)
- PATH_TYPE@[47; 48)
- PATH@[47; 48)
- PATH_SEGMENT@[47; 48)
- NAME_REF@[47; 48)
- IDENT@[47; 48) "T"
- WHITESPACE@[48; 49) " "
- PLUS@[49; 50) "+"
- WHITESPACE@[50; 51) " "
- TYPE_BOUND@[51; 53)
- LIFETIME@[51; 53) "\'f"
- R_ANGLE@[53; 54) ">"
- WHITESPACE@[54; 55) " "
- BLOCK@[55; 57)
- L_CURLY@[55; 56) "{"
- R_CURLY@[56; 57) "}"
- WHITESPACE@[57; 58) "\n"
+++ /dev/null
-trait T { fn foo(); }
+++ /dev/null
-SOURCE_FILE@[0; 22)
- TRAIT_DEF@[0; 21)
- TRAIT_KW@[0; 5) "trait"
- WHITESPACE@[5; 6) " "
- NAME@[6; 7)
- IDENT@[6; 7) "T"
- WHITESPACE@[7; 8) " "
- ITEM_LIST@[8; 21)
- L_CURLY@[8; 9) "{"
- WHITESPACE@[9; 10) " "
- FN_DEF@[10; 19)
- FN_KW@[10; 12) "fn"
- WHITESPACE@[12; 13) " "
- NAME@[13; 16)
- IDENT@[13; 16) "foo"
- PARAM_LIST@[16; 18)
- L_PAREN@[16; 17) "("
- R_PAREN@[17; 18) ")"
- SEMI@[18; 19) ";"
- WHITESPACE@[19; 20) " "
- R_CURLY@[20; 21) "}"
- WHITESPACE@[21; 22) "\n"
+++ /dev/null
-type T = ();
+++ /dev/null
-SOURCE_FILE@[0; 13)
- TYPE_ALIAS_DEF@[0; 12)
- TYPE_KW@[0; 4) "type"
- WHITESPACE@[4; 5) " "
- NAME@[5; 6)
- IDENT@[5; 6) "T"
- WHITESPACE@[6; 7) " "
- EQ@[7; 8) "="
- WHITESPACE@[8; 9) " "
- TUPLE_TYPE@[9; 11)
- L_PAREN@[9; 10) "("
- R_PAREN@[10; 11) ")"
- SEMI@[11; 12) ";"
- WHITESPACE@[12; 13) "\n"
+++ /dev/null
-type A = Foo;
-type B = ::Foo;
-type C = self::Foo;
-type D = super::Foo;
+++ /dev/null
-SOURCE_FILE@[0; 71)
- TYPE_ALIAS_DEF@[0; 13)
- TYPE_KW@[0; 4) "type"
- WHITESPACE@[4; 5) " "
- NAME@[5; 6)
- IDENT@[5; 6) "A"
- WHITESPACE@[6; 7) " "
- EQ@[7; 8) "="
- WHITESPACE@[8; 9) " "
- PATH_TYPE@[9; 12)
- PATH@[9; 12)
- PATH_SEGMENT@[9; 12)
- NAME_REF@[9; 12)
- IDENT@[9; 12) "Foo"
- SEMI@[12; 13) ";"
- WHITESPACE@[13; 14) "\n"
- TYPE_ALIAS_DEF@[14; 29)
- TYPE_KW@[14; 18) "type"
- WHITESPACE@[18; 19) " "
- NAME@[19; 20)
- IDENT@[19; 20) "B"
- WHITESPACE@[20; 21) " "
- EQ@[21; 22) "="
- WHITESPACE@[22; 23) " "
- PATH_TYPE@[23; 28)
- PATH@[23; 28)
- PATH_SEGMENT@[23; 28)
- COLONCOLON@[23; 25) "::"
- NAME_REF@[25; 28)
- IDENT@[25; 28) "Foo"
- SEMI@[28; 29) ";"
- WHITESPACE@[29; 30) "\n"
- TYPE_ALIAS_DEF@[30; 49)
- TYPE_KW@[30; 34) "type"
- WHITESPACE@[34; 35) " "
- NAME@[35; 36)
- IDENT@[35; 36) "C"
- WHITESPACE@[36; 37) " "
- EQ@[37; 38) "="
- WHITESPACE@[38; 39) " "
- PATH_TYPE@[39; 48)
- PATH@[39; 48)
- PATH@[39; 43)
- PATH_SEGMENT@[39; 43)
- SELF_KW@[39; 43) "self"
- COLONCOLON@[43; 45) "::"
- PATH_SEGMENT@[45; 48)
- NAME_REF@[45; 48)
- IDENT@[45; 48) "Foo"
- SEMI@[48; 49) ";"
- WHITESPACE@[49; 50) "\n"
- TYPE_ALIAS_DEF@[50; 70)
- TYPE_KW@[50; 54) "type"
- WHITESPACE@[54; 55) " "
- NAME@[55; 56)
- IDENT@[55; 56) "D"
- WHITESPACE@[56; 57) " "
- EQ@[57; 58) "="
- WHITESPACE@[58; 59) " "
- PATH_TYPE@[59; 69)
- PATH@[59; 69)
- PATH@[59; 64)
- PATH_SEGMENT@[59; 64)
- SUPER_KW@[59; 64) "super"
- COLONCOLON@[64; 66) "::"
- PATH_SEGMENT@[66; 69)
- NAME_REF@[66; 69)
- IDENT@[66; 69) "Foo"
- SEMI@[69; 70) ";"
- WHITESPACE@[70; 71) "\n"
+++ /dev/null
-fn foo() {
- let _ = a;
- let _ = a::b;
- let _ = ::a::<b>;
- let _ = format!();
-}
+++ /dev/null
-SOURCE_FILE@[0; 91)
- FN_DEF@[0; 90)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 90)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- LET_STMT@[15; 25)
- LET_KW@[15; 18) "let"
- WHITESPACE@[18; 19) " "
- PLACEHOLDER_PAT@[19; 20)
- UNDERSCORE@[19; 20) "_"
- WHITESPACE@[20; 21) " "
- EQ@[21; 22) "="
- WHITESPACE@[22; 23) " "
- PATH_EXPR@[23; 24)
- PATH@[23; 24)
- PATH_SEGMENT@[23; 24)
- NAME_REF@[23; 24)
- IDENT@[23; 24) "a"
- SEMI@[24; 25) ";"
- WHITESPACE@[25; 30) "\n "
- LET_STMT@[30; 43)
- LET_KW@[30; 33) "let"
- WHITESPACE@[33; 34) " "
- PLACEHOLDER_PAT@[34; 35)
- UNDERSCORE@[34; 35) "_"
- WHITESPACE@[35; 36) " "
- EQ@[36; 37) "="
- WHITESPACE@[37; 38) " "
- PATH_EXPR@[38; 42)
- PATH@[38; 42)
- PATH@[38; 39)
- PATH_SEGMENT@[38; 39)
- NAME_REF@[38; 39)
- IDENT@[38; 39) "a"
- COLONCOLON@[39; 41) "::"
- PATH_SEGMENT@[41; 42)
- NAME_REF@[41; 42)
- IDENT@[41; 42) "b"
- SEMI@[42; 43) ";"
- WHITESPACE@[43; 48) "\n "
- LET_STMT@[48; 65)
- LET_KW@[48; 51) "let"
- WHITESPACE@[51; 52) " "
- PLACEHOLDER_PAT@[52; 53)
- UNDERSCORE@[52; 53) "_"
- WHITESPACE@[53; 54) " "
- EQ@[54; 55) "="
- WHITESPACE@[55; 56) " "
- PATH_EXPR@[56; 64)
- PATH@[56; 64)
- PATH_SEGMENT@[56; 64)
- COLONCOLON@[56; 58) "::"
- NAME_REF@[58; 59)
- IDENT@[58; 59) "a"
- TYPE_ARG_LIST@[59; 64)
- COLONCOLON@[59; 61) "::"
- L_ANGLE@[61; 62) "<"
- TYPE_ARG@[62; 63)
- PATH_TYPE@[62; 63)
- PATH@[62; 63)
- PATH_SEGMENT@[62; 63)
- NAME_REF@[62; 63)
- IDENT@[62; 63) "b"
- R_ANGLE@[63; 64) ">"
- SEMI@[64; 65) ";"
- WHITESPACE@[65; 70) "\n "
- LET_STMT@[70; 88)
- LET_KW@[70; 73) "let"
- WHITESPACE@[73; 74) " "
- PLACEHOLDER_PAT@[74; 75)
- UNDERSCORE@[74; 75) "_"
- WHITESPACE@[75; 76) " "
- EQ@[76; 77) "="
- WHITESPACE@[77; 78) " "
- MACRO_CALL@[78; 87)
- PATH@[78; 84)
- PATH_SEGMENT@[78; 84)
- NAME_REF@[78; 84)
- IDENT@[78; 84) "format"
- EXCL@[84; 85) "!"
- TOKEN_TREE@[85; 87)
- L_PAREN@[85; 86) "("
- R_PAREN@[86; 87) ")"
- SEMI@[87; 88) ";"
- WHITESPACE@[88; 89) "\n"
- R_CURLY@[89; 90) "}"
- WHITESPACE@[90; 91) "\n"
+++ /dev/null
-struct S {
- #[serde(with = "url_serde")]
- pub uri: Uri,
-}
+++ /dev/null
-SOURCE_FILE@[0; 64)
- STRUCT_DEF@[0; 63)
- STRUCT_KW@[0; 6) "struct"
- WHITESPACE@[6; 7) " "
- NAME@[7; 8)
- IDENT@[7; 8) "S"
- WHITESPACE@[8; 9) " "
- NAMED_FIELD_DEF_LIST@[9; 63)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- NAMED_FIELD_DEF@[15; 60)
- ATTR@[15; 43)
- POUND@[15; 16) "#"
- TOKEN_TREE@[16; 43)
- L_BRACK@[16; 17) "["
- IDENT@[17; 22) "serde"
- TOKEN_TREE@[22; 42)
- L_PAREN@[22; 23) "("
- IDENT@[23; 27) "with"
- WHITESPACE@[27; 28) " "
- EQ@[28; 29) "="
- WHITESPACE@[29; 30) " "
- STRING@[30; 41) "\"url_serde\""
- R_PAREN@[41; 42) ")"
- R_BRACK@[42; 43) "]"
- WHITESPACE@[43; 48) "\n "
- VISIBILITY@[48; 51)
- PUB_KW@[48; 51) "pub"
- WHITESPACE@[51; 52) " "
- NAME@[52; 55)
- IDENT@[52; 55) "uri"
- COLON@[55; 56) ":"
- WHITESPACE@[56; 57) " "
- PATH_TYPE@[57; 60)
- PATH@[57; 60)
- PATH_SEGMENT@[57; 60)
- NAME_REF@[57; 60)
- IDENT@[57; 60) "Uri"
- COMMA@[60; 61) ","
- WHITESPACE@[61; 62) "\n"
- R_CURLY@[62; 63) "}"
- WHITESPACE@[63; 64) "\n"
+++ /dev/null
-fn main() {
- match () {
- -1 => (),
- 92 => (),
- 'c' => (),
- "hello" => (),
- }
-}
+++ /dev/null
-SOURCE_FILE@[0; 113)
- FN_DEF@[0; 112)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 7)
- IDENT@[3; 7) "main"
- PARAM_LIST@[7; 9)
- L_PAREN@[7; 8) "("
- R_PAREN@[8; 9) ")"
- WHITESPACE@[9; 10) " "
- BLOCK@[10; 112)
- L_CURLY@[10; 11) "{"
- WHITESPACE@[11; 16) "\n "
- MATCH_EXPR@[16; 110)
- MATCH_KW@[16; 21) "match"
- WHITESPACE@[21; 22) " "
- TUPLE_EXPR@[22; 24)
- L_PAREN@[22; 23) "("
- R_PAREN@[23; 24) ")"
- WHITESPACE@[24; 25) " "
- MATCH_ARM_LIST@[25; 110)
- L_CURLY@[25; 26) "{"
- WHITESPACE@[26; 35) "\n "
- MATCH_ARM@[35; 43)
- LITERAL_PAT@[35; 37)
- MINUS@[35; 36) "-"
- LITERAL@[36; 37)
- INT_NUMBER@[36; 37) "1"
- WHITESPACE@[37; 38) " "
- FAT_ARROW@[38; 40) "=>"
- WHITESPACE@[40; 41) " "
- TUPLE_EXPR@[41; 43)
- L_PAREN@[41; 42) "("
- R_PAREN@[42; 43) ")"
- COMMA@[43; 44) ","
- WHITESPACE@[44; 53) "\n "
- MATCH_ARM@[53; 61)
- LITERAL_PAT@[53; 55)
- LITERAL@[53; 55)
- INT_NUMBER@[53; 55) "92"
- WHITESPACE@[55; 56) " "
- FAT_ARROW@[56; 58) "=>"
- WHITESPACE@[58; 59) " "
- TUPLE_EXPR@[59; 61)
- L_PAREN@[59; 60) "("
- R_PAREN@[60; 61) ")"
- COMMA@[61; 62) ","
- WHITESPACE@[62; 71) "\n "
- MATCH_ARM@[71; 80)
- LITERAL_PAT@[71; 74)
- LITERAL@[71; 74)
- CHAR@[71; 74) "\'c\'"
- WHITESPACE@[74; 75) " "
- FAT_ARROW@[75; 77) "=>"
- WHITESPACE@[77; 78) " "
- TUPLE_EXPR@[78; 80)
- L_PAREN@[78; 79) "("
- R_PAREN@[79; 80) ")"
- COMMA@[80; 81) ","
- WHITESPACE@[81; 90) "\n "
- MATCH_ARM@[90; 103)
- LITERAL_PAT@[90; 97)
- LITERAL@[90; 97)
- STRING@[90; 97) "\"hello\""
- WHITESPACE@[97; 98) " "
- FAT_ARROW@[98; 100) "=>"
- WHITESPACE@[100; 101) " "
- TUPLE_EXPR@[101; 103)
- L_PAREN@[101; 102) "("
- R_PAREN@[102; 103) ")"
- COMMA@[103; 104) ","
- WHITESPACE@[104; 109) "\n "
- R_CURLY@[109; 110) "}"
- WHITESPACE@[110; 111) "\n"
- R_CURLY@[111; 112) "}"
- WHITESPACE@[112; 113) "\n"
+++ /dev/null
-fn foo()
-where
- 'a: 'b + 'c,
- T: Clone + Copy + 'static,
- Iterator::Item: 'a,
- <T as Iterator>::Item: 'a
-{}
+++ /dev/null
-SOURCE_FILE@[0; 116)
- FN_DEF@[0; 115)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) "\n"
- WHERE_CLAUSE@[9; 112)
- WHERE_KW@[9; 14) "where"
- WHITESPACE@[14; 18) "\n "
- WHERE_PRED@[18; 29)
- LIFETIME@[18; 20) "\'a"
- COLON@[20; 21) ":"
- WHITESPACE@[21; 22) " "
- TYPE_BOUND_LIST@[22; 29)
- TYPE_BOUND@[22; 24)
- LIFETIME@[22; 24) "\'b"
- WHITESPACE@[24; 25) " "
- PLUS@[25; 26) "+"
- WHITESPACE@[26; 27) " "
- TYPE_BOUND@[27; 29)
- LIFETIME@[27; 29) "\'c"
- COMMA@[29; 30) ","
- WHITESPACE@[30; 34) "\n "
- WHERE_PRED@[34; 59)
- PATH_TYPE@[34; 35)
- PATH@[34; 35)
- PATH_SEGMENT@[34; 35)
- NAME_REF@[34; 35)
- IDENT@[34; 35) "T"
- COLON@[35; 36) ":"
- WHITESPACE@[36; 37) " "
- TYPE_BOUND_LIST@[37; 59)
- TYPE_BOUND@[37; 42)
- PATH_TYPE@[37; 42)
- PATH@[37; 42)
- PATH_SEGMENT@[37; 42)
- NAME_REF@[37; 42)
- IDENT@[37; 42) "Clone"
- WHITESPACE@[42; 43) " "
- PLUS@[43; 44) "+"
- WHITESPACE@[44; 45) " "
- TYPE_BOUND@[45; 49)
- PATH_TYPE@[45; 49)
- PATH@[45; 49)
- PATH_SEGMENT@[45; 49)
- NAME_REF@[45; 49)
- IDENT@[45; 49) "Copy"
- WHITESPACE@[49; 50) " "
- PLUS@[50; 51) "+"
- WHITESPACE@[51; 52) " "
- TYPE_BOUND@[52; 59)
- LIFETIME@[52; 59) "\'static"
- COMMA@[59; 60) ","
- WHITESPACE@[60; 64) "\n "
- WHERE_PRED@[64; 82)
- PATH_TYPE@[64; 78)
- PATH@[64; 78)
- PATH@[64; 72)
- PATH_SEGMENT@[64; 72)
- NAME_REF@[64; 72)
- IDENT@[64; 72) "Iterator"
- COLONCOLON@[72; 74) "::"
- PATH_SEGMENT@[74; 78)
- NAME_REF@[74; 78)
- IDENT@[74; 78) "Item"
- COLON@[78; 79) ":"
- WHITESPACE@[79; 80) " "
- TYPE_BOUND_LIST@[80; 82)
- TYPE_BOUND@[80; 82)
- LIFETIME@[80; 82) "\'a"
- COMMA@[82; 83) ","
- WHITESPACE@[83; 87) "\n "
- WHERE_PRED@[87; 112)
- PATH_TYPE@[87; 108)
- PATH@[87; 108)
- PATH@[87; 102)
- PATH_SEGMENT@[87; 102)
- L_ANGLE@[87; 88) "<"
- PATH_TYPE@[88; 89)
- PATH@[88; 89)
- PATH_SEGMENT@[88; 89)
- NAME_REF@[88; 89)
- IDENT@[88; 89) "T"
- WHITESPACE@[89; 90) " "
- AS_KW@[90; 92) "as"
- WHITESPACE@[92; 93) " "
- PATH_TYPE@[93; 101)
- PATH@[93; 101)
- PATH_SEGMENT@[93; 101)
- NAME_REF@[93; 101)
- IDENT@[93; 101) "Iterator"
- R_ANGLE@[101; 102) ">"
- COLONCOLON@[102; 104) "::"
- PATH_SEGMENT@[104; 108)
- NAME_REF@[104; 108)
- IDENT@[104; 108) "Item"
- COLON@[108; 109) ":"
- WHITESPACE@[109; 110) " "
- TYPE_BOUND_LIST@[110; 112)
- TYPE_BOUND@[110; 112)
- LIFETIME@[110; 112) "\'a"
- WHITESPACE@[112; 113) "\n"
- BLOCK@[113; 115)
- L_CURLY@[113; 114) "{"
- R_CURLY@[114; 115) "}"
- WHITESPACE@[115; 116) "\n"
+++ /dev/null
-const fn foo() {}
+++ /dev/null
-SOURCE_FILE@[0; 18)
- FN_DEF@[0; 17)
- CONST_KW@[0; 5) "const"
- WHITESPACE@[5; 6) " "
- FN_KW@[6; 8) "fn"
- WHITESPACE@[8; 9) " "
- NAME@[9; 12)
- IDENT@[9; 12) "foo"
- PARAM_LIST@[12; 14)
- L_PAREN@[12; 13) "("
- R_PAREN@[13; 14) ")"
- WHITESPACE@[14; 15) " "
- BLOCK@[15; 17)
- L_CURLY@[15; 16) "{"
- R_CURLY@[16; 17) "}"
- WHITESPACE@[17; 18) "\n"
+++ /dev/null
-fn main() {
- match 92 {
- 0 ... 100 => (),
- 101 ..= 200 => (),
- 200 .. 301=> (),
- }
-}
+++ /dev/null
-SOURCE_FILE@[0; 112)
- FN_DEF@[0; 111)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 7)
- IDENT@[3; 7) "main"
- PARAM_LIST@[7; 9)
- L_PAREN@[7; 8) "("
- R_PAREN@[8; 9) ")"
- WHITESPACE@[9; 10) " "
- BLOCK@[10; 111)
- L_CURLY@[10; 11) "{"
- WHITESPACE@[11; 16) "\n "
- MATCH_EXPR@[16; 109)
- MATCH_KW@[16; 21) "match"
- WHITESPACE@[21; 22) " "
- LITERAL@[22; 24)
- INT_NUMBER@[22; 24) "92"
- WHITESPACE@[24; 25) " "
- MATCH_ARM_LIST@[25; 109)
- L_CURLY@[25; 26) "{"
- WHITESPACE@[26; 35) "\n "
- MATCH_ARM@[35; 50)
- RANGE_PAT@[35; 44)
- LITERAL_PAT@[35; 36)
- LITERAL@[35; 36)
- INT_NUMBER@[35; 36) "0"
- WHITESPACE@[36; 37) " "
- DOTDOTDOT@[37; 40) "..."
- WHITESPACE@[40; 41) " "
- LITERAL_PAT@[41; 44)
- LITERAL@[41; 44)
- INT_NUMBER@[41; 44) "100"
- WHITESPACE@[44; 45) " "
- FAT_ARROW@[45; 47) "=>"
- WHITESPACE@[47; 48) " "
- TUPLE_EXPR@[48; 50)
- L_PAREN@[48; 49) "("
- R_PAREN@[49; 50) ")"
- COMMA@[50; 51) ","
- WHITESPACE@[51; 60) "\n "
- MATCH_ARM@[60; 77)
- RANGE_PAT@[60; 71)
- LITERAL_PAT@[60; 63)
- LITERAL@[60; 63)
- INT_NUMBER@[60; 63) "101"
- WHITESPACE@[63; 64) " "
- DOTDOTEQ@[64; 67) "..="
- WHITESPACE@[67; 68) " "
- LITERAL_PAT@[68; 71)
- LITERAL@[68; 71)
- INT_NUMBER@[68; 71) "200"
- WHITESPACE@[71; 72) " "
- FAT_ARROW@[72; 74) "=>"
- WHITESPACE@[74; 75) " "
- TUPLE_EXPR@[75; 77)
- L_PAREN@[75; 76) "("
- R_PAREN@[76; 77) ")"
- COMMA@[77; 78) ","
- WHITESPACE@[78; 87) "\n "
- MATCH_ARM@[87; 102)
- RANGE_PAT@[87; 97)
- LITERAL_PAT@[87; 90)
- LITERAL@[87; 90)
- INT_NUMBER@[87; 90) "200"
- WHITESPACE@[90; 91) " "
- DOTDOT@[91; 93) ".."
- WHITESPACE@[93; 94) " "
- LITERAL_PAT@[94; 97)
- LITERAL@[94; 97)
- INT_NUMBER@[94; 97) "301"
- FAT_ARROW@[97; 99) "=>"
- WHITESPACE@[99; 100) " "
- TUPLE_EXPR@[100; 102)
- L_PAREN@[100; 101) "("
- R_PAREN@[101; 102) ")"
- COMMA@[102; 103) ","
- WHITESPACE@[103; 108) "\n "
- R_CURLY@[108; 109) "}"
- WHITESPACE@[109; 110) "\n"
- R_CURLY@[110; 111) "}"
- WHITESPACE@[111; 112) "\n"
+++ /dev/null
-fn foo() {
- match () {
- _ => (),
- _ => {}
- _ => ()
- }
-}
+++ /dev/null
-SOURCE_FILE@[0; 83)
- FN_DEF@[0; 82)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 82)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- MATCH_EXPR@[15; 80)
- MATCH_KW@[15; 20) "match"
- WHITESPACE@[20; 21) " "
- TUPLE_EXPR@[21; 23)
- L_PAREN@[21; 22) "("
- R_PAREN@[22; 23) ")"
- WHITESPACE@[23; 24) " "
- MATCH_ARM_LIST@[24; 80)
- L_CURLY@[24; 25) "{"
- WHITESPACE@[25; 34) "\n "
- MATCH_ARM@[34; 41)
- PLACEHOLDER_PAT@[34; 35)
- UNDERSCORE@[34; 35) "_"
- WHITESPACE@[35; 36) " "
- FAT_ARROW@[36; 38) "=>"
- WHITESPACE@[38; 39) " "
- TUPLE_EXPR@[39; 41)
- L_PAREN@[39; 40) "("
- R_PAREN@[40; 41) ")"
- COMMA@[41; 42) ","
- WHITESPACE@[42; 51) "\n "
- MATCH_ARM@[51; 58)
- PLACEHOLDER_PAT@[51; 52)
- UNDERSCORE@[51; 52) "_"
- WHITESPACE@[52; 53) " "
- FAT_ARROW@[53; 55) "=>"
- WHITESPACE@[55; 56) " "
- BLOCK_EXPR@[56; 58)
- BLOCK@[56; 58)
- L_CURLY@[56; 57) "{"
- R_CURLY@[57; 58) "}"
- WHITESPACE@[58; 67) "\n "
- MATCH_ARM@[67; 74)
- PLACEHOLDER_PAT@[67; 68)
- UNDERSCORE@[67; 68) "_"
- WHITESPACE@[68; 69) " "
- FAT_ARROW@[69; 71) "=>"
- WHITESPACE@[71; 72) " "
- TUPLE_EXPR@[72; 74)
- L_PAREN@[72; 73) "("
- R_PAREN@[73; 74) ")"
- WHITESPACE@[74; 79) "\n "
- R_CURLY@[79; 80) "}"
- WHITESPACE@[80; 81) "\n"
- R_CURLY@[81; 82) "}"
- WHITESPACE@[82; 83) "\n"
+++ /dev/null
-extern crate foo;
+++ /dev/null
-SOURCE_FILE@[0; 18)
- EXTERN_CRATE_ITEM@[0; 17)
- EXTERN_KW@[0; 6) "extern"
- WHITESPACE@[6; 7) " "
- CRATE_KW@[7; 12) "crate"
- WHITESPACE@[12; 13) " "
- NAME_REF@[13; 16)
- IDENT@[13; 16) "foo"
- SEMI@[16; 17) ";"
- WHITESPACE@[17; 18) "\n"
+++ /dev/null
-fn foo() {
- S {};
- S { x, y: 32, };
- S { x, y: 32, ..Default::default() };
-}
+++ /dev/null
-SOURCE_FILE@[0; 86)
- FN_DEF@[0; 85)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 85)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- EXPR_STMT@[15; 20)
- STRUCT_LIT@[15; 19)
- PATH@[15; 16)
- PATH_SEGMENT@[15; 16)
- NAME_REF@[15; 16)
- IDENT@[15; 16) "S"
- WHITESPACE@[16; 17) " "
- NAMED_FIELD_LIST@[17; 19)
- L_CURLY@[17; 18) "{"
- R_CURLY@[18; 19) "}"
- SEMI@[19; 20) ";"
- WHITESPACE@[20; 25) "\n "
- EXPR_STMT@[25; 41)
- STRUCT_LIT@[25; 40)
- PATH@[25; 26)
- PATH_SEGMENT@[25; 26)
- NAME_REF@[25; 26)
- IDENT@[25; 26) "S"
- WHITESPACE@[26; 27) " "
- NAMED_FIELD_LIST@[27; 40)
- L_CURLY@[27; 28) "{"
- WHITESPACE@[28; 29) " "
- NAMED_FIELD@[29; 30)
- NAME_REF@[29; 30)
- IDENT@[29; 30) "x"
- COMMA@[30; 31) ","
- WHITESPACE@[31; 32) " "
- NAMED_FIELD@[32; 37)
- NAME_REF@[32; 33)
- IDENT@[32; 33) "y"
- COLON@[33; 34) ":"
- WHITESPACE@[34; 35) " "
- LITERAL@[35; 37)
- INT_NUMBER@[35; 37) "32"
- COMMA@[37; 38) ","
- WHITESPACE@[38; 39) " "
- R_CURLY@[39; 40) "}"
- SEMI@[40; 41) ";"
- WHITESPACE@[41; 46) "\n "
- EXPR_STMT@[46; 83)
- STRUCT_LIT@[46; 82)
- PATH@[46; 47)
- PATH_SEGMENT@[46; 47)
- NAME_REF@[46; 47)
- IDENT@[46; 47) "S"
- WHITESPACE@[47; 48) " "
- NAMED_FIELD_LIST@[48; 82)
- L_CURLY@[48; 49) "{"
- WHITESPACE@[49; 50) " "
- NAMED_FIELD@[50; 51)
- NAME_REF@[50; 51)
- IDENT@[50; 51) "x"
- COMMA@[51; 52) ","
- WHITESPACE@[52; 53) " "
- NAMED_FIELD@[53; 58)
- NAME_REF@[53; 54)
- IDENT@[53; 54) "y"
- COLON@[54; 55) ":"
- WHITESPACE@[55; 56) " "
- LITERAL@[56; 58)
- INT_NUMBER@[56; 58) "32"
- COMMA@[58; 59) ","
- WHITESPACE@[59; 60) " "
- DOTDOT@[60; 62) ".."
- CALL_EXPR@[62; 80)
- PATH_EXPR@[62; 78)
- PATH@[62; 78)
- PATH@[62; 69)
- PATH_SEGMENT@[62; 69)
- NAME_REF@[62; 69)
- IDENT@[62; 69) "Default"
- COLONCOLON@[69; 71) "::"
- PATH_SEGMENT@[71; 78)
- NAME_REF@[71; 78)
- IDENT@[71; 78) "default"
- ARG_LIST@[78; 80)
- L_PAREN@[78; 79) "("
- R_PAREN@[79; 80) ")"
- WHITESPACE@[80; 81) " "
- R_CURLY@[81; 82) "}"
- SEMI@[82; 83) ";"
- WHITESPACE@[83; 84) "\n"
- R_CURLY@[84; 85) "}"
- WHITESPACE@[85; 86) "\n"
+++ /dev/null
-fn foo() {}
-macro_rules! foo {}
-foo::bar!();
-super::baz! {}
-struct S;
+++ /dev/null
-SOURCE_FILE@[0; 70)
- FN_DEF@[0; 11)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 11)
- L_CURLY@[9; 10) "{"
- R_CURLY@[10; 11) "}"
- WHITESPACE@[11; 12) "\n"
- MACRO_CALL@[12; 31)
- PATH@[12; 23)
- PATH_SEGMENT@[12; 23)
- NAME_REF@[12; 23)
- IDENT@[12; 23) "macro_rules"
- EXCL@[23; 24) "!"
- WHITESPACE@[24; 25) " "
- NAME@[25; 28)
- IDENT@[25; 28) "foo"
- WHITESPACE@[28; 29) " "
- TOKEN_TREE@[29; 31)
- L_CURLY@[29; 30) "{"
- R_CURLY@[30; 31) "}"
- WHITESPACE@[31; 32) "\n"
- MACRO_CALL@[32; 44)
- PATH@[32; 40)
- PATH@[32; 35)
- PATH_SEGMENT@[32; 35)
- NAME_REF@[32; 35)
- IDENT@[32; 35) "foo"
- COLONCOLON@[35; 37) "::"
- PATH_SEGMENT@[37; 40)
- NAME_REF@[37; 40)
- IDENT@[37; 40) "bar"
- EXCL@[40; 41) "!"
- TOKEN_TREE@[41; 43)
- L_PAREN@[41; 42) "("
- R_PAREN@[42; 43) ")"
- SEMI@[43; 44) ";"
- WHITESPACE@[44; 45) "\n"
- MACRO_CALL@[45; 59)
- PATH@[45; 55)
- PATH@[45; 50)
- PATH_SEGMENT@[45; 50)
- SUPER_KW@[45; 50) "super"
- COLONCOLON@[50; 52) "::"
- PATH_SEGMENT@[52; 55)
- NAME_REF@[52; 55)
- IDENT@[52; 55) "baz"
- EXCL@[55; 56) "!"
- WHITESPACE@[56; 57) " "
- TOKEN_TREE@[57; 59)
- L_CURLY@[57; 58) "{"
- R_CURLY@[58; 59) "}"
- WHITESPACE@[59; 60) "\n"
- STRUCT_DEF@[60; 69)
- STRUCT_KW@[60; 66) "struct"
- WHITESPACE@[66; 67) " "
- NAME@[67; 68)
- IDENT@[67; 68) "S"
- SEMI@[68; 69) ";"
- WHITESPACE@[69; 70) "\n"
+++ /dev/null
-impl !Send for X {}
+++ /dev/null
-SOURCE_FILE@[0; 20)
- IMPL_BLOCK@[0; 19)
- IMPL_KW@[0; 4) "impl"
- WHITESPACE@[4; 5) " "
- EXCL@[5; 6) "!"
- PATH_TYPE@[6; 10)
- PATH@[6; 10)
- PATH_SEGMENT@[6; 10)
- NAME_REF@[6; 10)
- IDENT@[6; 10) "Send"
- WHITESPACE@[10; 11) " "
- FOR_KW@[11; 14) "for"
- WHITESPACE@[14; 15) " "
- PATH_TYPE@[15; 16)
- PATH@[15; 16)
- PATH_SEGMENT@[15; 16)
- NAME_REF@[15; 16)
- IDENT@[15; 16) "X"
- WHITESPACE@[16; 17) " "
- ITEM_LIST@[17; 19)
- L_CURLY@[17; 18) "{"
- R_CURLY@[18; 19) "}"
- WHITESPACE@[19; 20) "\n"
+++ /dev/null
-fn foo() {
- if true {};
- if true {} else {};
- if true {} else if false {} else {};
- if S {};
-}
+++ /dev/null
-SOURCE_FILE@[0; 107)
- FN_DEF@[0; 106)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 106)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- EXPR_STMT@[15; 26)
- IF_EXPR@[15; 25)
- IF_KW@[15; 17) "if"
- WHITESPACE@[17; 18) " "
- CONDITION@[18; 22)
- LITERAL@[18; 22)
- TRUE_KW@[18; 22) "true"
- WHITESPACE@[22; 23) " "
- BLOCK@[23; 25)
- L_CURLY@[23; 24) "{"
- R_CURLY@[24; 25) "}"
- SEMI@[25; 26) ";"
- WHITESPACE@[26; 31) "\n "
- EXPR_STMT@[31; 50)
- IF_EXPR@[31; 49)
- IF_KW@[31; 33) "if"
- WHITESPACE@[33; 34) " "
- CONDITION@[34; 38)
- LITERAL@[34; 38)
- TRUE_KW@[34; 38) "true"
- WHITESPACE@[38; 39) " "
- BLOCK@[39; 41)
- L_CURLY@[39; 40) "{"
- R_CURLY@[40; 41) "}"
- WHITESPACE@[41; 42) " "
- ELSE_KW@[42; 46) "else"
- WHITESPACE@[46; 47) " "
- BLOCK@[47; 49)
- L_CURLY@[47; 48) "{"
- R_CURLY@[48; 49) "}"
- SEMI@[49; 50) ";"
- WHITESPACE@[50; 55) "\n "
- EXPR_STMT@[55; 91)
- IF_EXPR@[55; 90)
- IF_KW@[55; 57) "if"
- WHITESPACE@[57; 58) " "
- CONDITION@[58; 62)
- LITERAL@[58; 62)
- TRUE_KW@[58; 62) "true"
- WHITESPACE@[62; 63) " "
- BLOCK@[63; 65)
- L_CURLY@[63; 64) "{"
- R_CURLY@[64; 65) "}"
- WHITESPACE@[65; 66) " "
- ELSE_KW@[66; 70) "else"
- WHITESPACE@[70; 71) " "
- IF_EXPR@[71; 90)
- IF_KW@[71; 73) "if"
- WHITESPACE@[73; 74) " "
- CONDITION@[74; 79)
- LITERAL@[74; 79)
- FALSE_KW@[74; 79) "false"
- WHITESPACE@[79; 80) " "
- BLOCK@[80; 82)
- L_CURLY@[80; 81) "{"
- R_CURLY@[81; 82) "}"
- WHITESPACE@[82; 83) " "
- ELSE_KW@[83; 87) "else"
- WHITESPACE@[87; 88) " "
- BLOCK@[88; 90)
- L_CURLY@[88; 89) "{"
- R_CURLY@[89; 90) "}"
- SEMI@[90; 91) ";"
- WHITESPACE@[91; 96) "\n "
- EXPR_STMT@[96; 104)
- IF_EXPR@[96; 103)
- IF_KW@[96; 98) "if"
- WHITESPACE@[98; 99) " "
- CONDITION@[99; 100)
- PATH_EXPR@[99; 100)
- PATH@[99; 100)
- PATH_SEGMENT@[99; 100)
- NAME_REF@[99; 100)
- IDENT@[99; 100) "S"
- WHITESPACE@[100; 101) " "
- BLOCK@[101; 103)
- L_CURLY@[101; 102) "{"
- R_CURLY@[102; 103) "}"
- SEMI@[103; 104) ";"
- WHITESPACE@[104; 105) "\n"
- R_CURLY@[105; 106) "}"
- WHITESPACE@[106; 107) "\n"
+++ /dev/null
-type A = dyn Iterator<Item=Foo<'a>> + 'a;
+++ /dev/null
-SOURCE_FILE@[0; 42)
- TYPE_ALIAS_DEF@[0; 41)
- TYPE_KW@[0; 4) "type"
- WHITESPACE@[4; 5) " "
- NAME@[5; 6)
- IDENT@[5; 6) "A"
- WHITESPACE@[6; 7) " "
- EQ@[7; 8) "="
- WHITESPACE@[8; 9) " "
- DYN_TRAIT_TYPE@[9; 40)
- DYN_KW@[9; 12) "dyn"
- WHITESPACE@[12; 13) " "
- TYPE_BOUND_LIST@[13; 40)
- TYPE_BOUND@[13; 35)
- PATH_TYPE@[13; 35)
- PATH@[13; 35)
- PATH_SEGMENT@[13; 35)
- NAME_REF@[13; 21)
- IDENT@[13; 21) "Iterator"
- TYPE_ARG_LIST@[21; 35)
- L_ANGLE@[21; 22) "<"
- ASSOC_TYPE_ARG@[22; 34)
- NAME_REF@[22; 26)
- IDENT@[22; 26) "Item"
- EQ@[26; 27) "="
- PATH_TYPE@[27; 34)
- PATH@[27; 34)
- PATH_SEGMENT@[27; 34)
- NAME_REF@[27; 30)
- IDENT@[27; 30) "Foo"
- TYPE_ARG_LIST@[30; 34)
- L_ANGLE@[30; 31) "<"
- LIFETIME_ARG@[31; 33)
- LIFETIME@[31; 33) "\'a"
- R_ANGLE@[33; 34) ">"
- R_ANGLE@[34; 35) ">"
- WHITESPACE@[35; 36) " "
- PLUS@[36; 37) "+"
- WHITESPACE@[37; 38) " "
- TYPE_BOUND@[38; 40)
- LIFETIME@[38; 40) "\'a"
- SEMI@[40; 41) ";"
- WHITESPACE@[41; 42) "\n"
+++ /dev/null
-fn foo() {
- match () {
- _ => (),
- _ if Test > Test{field: 0} => (),
- X | Y if Z => (),
- | X | Y if Z => (),
- | X => (),
- };
-}
+++ /dev/null
-SOURCE_FILE@[0; 167)
- FN_DEF@[0; 166)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 166)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- EXPR_STMT@[15; 164)
- MATCH_EXPR@[15; 163)
- MATCH_KW@[15; 20) "match"
- WHITESPACE@[20; 21) " "
- TUPLE_EXPR@[21; 23)
- L_PAREN@[21; 22) "("
- R_PAREN@[22; 23) ")"
- WHITESPACE@[23; 24) " "
- MATCH_ARM_LIST@[24; 163)
- L_CURLY@[24; 25) "{"
- WHITESPACE@[25; 34) "\n "
- MATCH_ARM@[34; 41)
- PLACEHOLDER_PAT@[34; 35)
- UNDERSCORE@[34; 35) "_"
- WHITESPACE@[35; 36) " "
- FAT_ARROW@[36; 38) "=>"
- WHITESPACE@[38; 39) " "
- TUPLE_EXPR@[39; 41)
- L_PAREN@[39; 40) "("
- R_PAREN@[40; 41) ")"
- COMMA@[41; 42) ","
- WHITESPACE@[42; 51) "\n "
- MATCH_ARM@[51; 83)
- PLACEHOLDER_PAT@[51; 52)
- UNDERSCORE@[51; 52) "_"
- WHITESPACE@[52; 53) " "
- MATCH_GUARD@[53; 77)
- IF_KW@[53; 55) "if"
- WHITESPACE@[55; 56) " "
- BIN_EXPR@[56; 77)
- PATH_EXPR@[56; 60)
- PATH@[56; 60)
- PATH_SEGMENT@[56; 60)
- NAME_REF@[56; 60)
- IDENT@[56; 60) "Test"
- WHITESPACE@[60; 61) " "
- R_ANGLE@[61; 62) ">"
- WHITESPACE@[62; 63) " "
- STRUCT_LIT@[63; 77)
- PATH@[63; 67)
- PATH_SEGMENT@[63; 67)
- NAME_REF@[63; 67)
- IDENT@[63; 67) "Test"
- NAMED_FIELD_LIST@[67; 77)
- L_CURLY@[67; 68) "{"
- NAMED_FIELD@[68; 76)
- NAME_REF@[68; 73)
- IDENT@[68; 73) "field"
- COLON@[73; 74) ":"
- WHITESPACE@[74; 75) " "
- LITERAL@[75; 76)
- INT_NUMBER@[75; 76) "0"
- R_CURLY@[76; 77) "}"
- WHITESPACE@[77; 78) " "
- FAT_ARROW@[78; 80) "=>"
- WHITESPACE@[80; 81) " "
- TUPLE_EXPR@[81; 83)
- L_PAREN@[81; 82) "("
- R_PAREN@[82; 83) ")"
- COMMA@[83; 84) ","
- WHITESPACE@[84; 93) "\n "
- MATCH_ARM@[93; 109)
- BIND_PAT@[93; 94)
- NAME@[93; 94)
- IDENT@[93; 94) "X"
- WHITESPACE@[94; 95) " "
- PIPE@[95; 96) "|"
- WHITESPACE@[96; 97) " "
- BIND_PAT@[97; 98)
- NAME@[97; 98)
- IDENT@[97; 98) "Y"
- WHITESPACE@[98; 99) " "
- MATCH_GUARD@[99; 103)
- IF_KW@[99; 101) "if"
- WHITESPACE@[101; 102) " "
- PATH_EXPR@[102; 103)
- PATH@[102; 103)
- PATH_SEGMENT@[102; 103)
- NAME_REF@[102; 103)
- IDENT@[102; 103) "Z"
- WHITESPACE@[103; 104) " "
- FAT_ARROW@[104; 106) "=>"
- WHITESPACE@[106; 107) " "
- TUPLE_EXPR@[107; 109)
- L_PAREN@[107; 108) "("
- R_PAREN@[108; 109) ")"
- COMMA@[109; 110) ","
- WHITESPACE@[110; 119) "\n "
- MATCH_ARM@[119; 137)
- PIPE@[119; 120) "|"
- WHITESPACE@[120; 121) " "
- BIND_PAT@[121; 122)
- NAME@[121; 122)
- IDENT@[121; 122) "X"
- WHITESPACE@[122; 123) " "
- PIPE@[123; 124) "|"
- WHITESPACE@[124; 125) " "
- BIND_PAT@[125; 126)
- NAME@[125; 126)
- IDENT@[125; 126) "Y"
- WHITESPACE@[126; 127) " "
- MATCH_GUARD@[127; 131)
- IF_KW@[127; 129) "if"
- WHITESPACE@[129; 130) " "
- PATH_EXPR@[130; 131)
- PATH@[130; 131)
- PATH_SEGMENT@[130; 131)
- NAME_REF@[130; 131)
- IDENT@[130; 131) "Z"
- WHITESPACE@[131; 132) " "
- FAT_ARROW@[132; 134) "=>"
- WHITESPACE@[134; 135) " "
- TUPLE_EXPR@[135; 137)
- L_PAREN@[135; 136) "("
- R_PAREN@[136; 137) ")"
- COMMA@[137; 138) ","
- WHITESPACE@[138; 147) "\n "
- MATCH_ARM@[147; 156)
- PIPE@[147; 148) "|"
- WHITESPACE@[148; 149) " "
- BIND_PAT@[149; 150)
- NAME@[149; 150)
- IDENT@[149; 150) "X"
- WHITESPACE@[150; 151) " "
- FAT_ARROW@[151; 153) "=>"
- WHITESPACE@[153; 154) " "
- TUPLE_EXPR@[154; 156)
- L_PAREN@[154; 155) "("
- R_PAREN@[155; 156) ")"
- COMMA@[156; 157) ","
- WHITESPACE@[157; 162) "\n "
- R_CURLY@[162; 163) "}"
- SEMI@[163; 164) ";"
- WHITESPACE@[164; 165) "\n"
- R_CURLY@[165; 166) "}"
- WHITESPACE@[166; 167) "\n"
+++ /dev/null
-use crate::foo;
+++ /dev/null
-SOURCE_FILE@[0; 16)
- USE_ITEM@[0; 15)
- USE_KW@[0; 3) "use"
- WHITESPACE@[3; 4) " "
- USE_TREE@[4; 14)
- PATH@[4; 14)
- PATH@[4; 9)
- PATH_SEGMENT@[4; 9)
- CRATE_KW@[4; 9) "crate"
- COLONCOLON@[9; 11) "::"
- PATH_SEGMENT@[11; 14)
- NAME_REF@[11; 14)
- IDENT@[11; 14) "foo"
- SEMI@[14; 15) ";"
- WHITESPACE@[15; 16) "\n"
+++ /dev/null
-union Foo {}
-union Foo {
- a: i32,
- b: f32,
-}
+++ /dev/null
-SOURCE_FILE@[0; 51)
- STRUCT_DEF@[0; 12)
- UNION_KW@[0; 5) "union"
- WHITESPACE@[5; 6) " "
- NAME@[6; 9)
- IDENT@[6; 9) "Foo"
- WHITESPACE@[9; 10) " "
- NAMED_FIELD_DEF_LIST@[10; 12)
- L_CURLY@[10; 11) "{"
- R_CURLY@[11; 12) "}"
- WHITESPACE@[12; 13) "\n"
- STRUCT_DEF@[13; 50)
- UNION_KW@[13; 18) "union"
- WHITESPACE@[18; 19) " "
- NAME@[19; 22)
- IDENT@[19; 22) "Foo"
- WHITESPACE@[22; 23) " "
- NAMED_FIELD_DEF_LIST@[23; 50)
- L_CURLY@[23; 24) "{"
- WHITESPACE@[24; 29) "\n "
- NAMED_FIELD_DEF@[29; 35)
- NAME@[29; 30)
- IDENT@[29; 30) "a"
- COLON@[30; 31) ":"
- WHITESPACE@[31; 32) " "
- PATH_TYPE@[32; 35)
- PATH@[32; 35)
- PATH_SEGMENT@[32; 35)
- NAME_REF@[32; 35)
- IDENT@[32; 35) "i32"
- COMMA@[35; 36) ","
- WHITESPACE@[36; 41) "\n "
- NAMED_FIELD_DEF@[41; 47)
- NAME@[41; 42)
- IDENT@[41; 42) "b"
- COLON@[42; 43) ":"
- WHITESPACE@[43; 44) " "
- PATH_TYPE@[44; 47)
- PATH@[44; 47)
- PATH_SEGMENT@[44; 47)
- NAME_REF@[44; 47)
- IDENT@[44; 47) "f32"
- COMMA@[47; 48) ","
- WHITESPACE@[48; 49) "\n"
- R_CURLY@[49; 50) "}"
- WHITESPACE@[50; 51) "\n"
+++ /dev/null
-use crate::{Item};
-use self::{Item};
+++ /dev/null
-SOURCE_FILE@[0; 37)
- USE_ITEM@[0; 18)
- USE_KW@[0; 3) "use"
- WHITESPACE@[3; 4) " "
- USE_TREE@[4; 17)
- PATH@[4; 9)
- PATH_SEGMENT@[4; 9)
- CRATE_KW@[4; 9) "crate"
- COLONCOLON@[9; 11) "::"
- USE_TREE_LIST@[11; 17)
- L_CURLY@[11; 12) "{"
- USE_TREE@[12; 16)
- PATH@[12; 16)
- PATH_SEGMENT@[12; 16)
- NAME_REF@[12; 16)
- IDENT@[12; 16) "Item"
- R_CURLY@[16; 17) "}"
- SEMI@[17; 18) ";"
- WHITESPACE@[18; 19) "\n"
- USE_ITEM@[19; 36)
- USE_KW@[19; 22) "use"
- WHITESPACE@[22; 23) " "
- USE_TREE@[23; 35)
- PATH@[23; 27)
- PATH_SEGMENT@[23; 27)
- SELF_KW@[23; 27) "self"
- COLONCOLON@[27; 29) "::"
- USE_TREE_LIST@[29; 35)
- L_CURLY@[29; 30) "{"
- USE_TREE@[30; 34)
- PATH@[30; 34)
- PATH_SEGMENT@[30; 34)
- NAME_REF@[30; 34)
- IDENT@[30; 34) "Item"
- R_CURLY@[34; 35) "}"
- SEMI@[35; 36) ";"
- WHITESPACE@[36; 37) "\n"
+++ /dev/null
-fn foo() {
- let _ = {1} & 2;
- {1} &2;
-}
+++ /dev/null
-SOURCE_FILE@[0; 46)
- FN_DEF@[0; 45)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 45)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- LET_STMT@[15; 31)
- LET_KW@[15; 18) "let"
- WHITESPACE@[18; 19) " "
- PLACEHOLDER_PAT@[19; 20)
- UNDERSCORE@[19; 20) "_"
- WHITESPACE@[20; 21) " "
- EQ@[21; 22) "="
- WHITESPACE@[22; 23) " "
- BIN_EXPR@[23; 30)
- BLOCK_EXPR@[23; 26)
- BLOCK@[23; 26)
- L_CURLY@[23; 24) "{"
- LITERAL@[24; 25)
- INT_NUMBER@[24; 25) "1"
- R_CURLY@[25; 26) "}"
- WHITESPACE@[26; 27) " "
- AMP@[27; 28) "&"
- WHITESPACE@[28; 29) " "
- LITERAL@[29; 30)
- INT_NUMBER@[29; 30) "2"
- SEMI@[30; 31) ";"
- WHITESPACE@[31; 36) "\n "
- EXPR_STMT@[36; 39)
- BLOCK_EXPR@[36; 39)
- BLOCK@[36; 39)
- L_CURLY@[36; 37) "{"
- LITERAL@[37; 38)
- INT_NUMBER@[37; 38) "1"
- R_CURLY@[38; 39) "}"
- WHITESPACE@[39; 40) " "
- EXPR_STMT@[40; 43)
- REF_EXPR@[40; 42)
- AMP@[40; 41) "&"
- LITERAL@[41; 42)
- INT_NUMBER@[41; 42) "2"
- SEMI@[42; 43) ";"
- WHITESPACE@[43; 44) "\n"
- R_CURLY@[44; 45) "}"
- WHITESPACE@[45; 46) "\n"
+++ /dev/null
-fn foo() {
- match () { };
- match S {};
-}
+++ /dev/null
-SOURCE_FILE@[0; 47)
- FN_DEF@[0; 46)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 46)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- EXPR_STMT@[15; 28)
- MATCH_EXPR@[15; 27)
- MATCH_KW@[15; 20) "match"
- WHITESPACE@[20; 21) " "
- TUPLE_EXPR@[21; 23)
- L_PAREN@[21; 22) "("
- R_PAREN@[22; 23) ")"
- WHITESPACE@[23; 24) " "
- MATCH_ARM_LIST@[24; 27)
- L_CURLY@[24; 25) "{"
- WHITESPACE@[25; 26) " "
- R_CURLY@[26; 27) "}"
- SEMI@[27; 28) ";"
- WHITESPACE@[28; 33) "\n "
- EXPR_STMT@[33; 44)
- MATCH_EXPR@[33; 43)
- MATCH_KW@[33; 38) "match"
- WHITESPACE@[38; 39) " "
- PATH_EXPR@[39; 40)
- PATH@[39; 40)
- PATH_SEGMENT@[39; 40)
- NAME_REF@[39; 40)
- IDENT@[39; 40) "S"
- WHITESPACE@[40; 41) " "
- MATCH_ARM_LIST@[41; 43)
- L_CURLY@[41; 42) "{"
- R_CURLY@[42; 43) "}"
- SEMI@[43; 44) ";"
- WHITESPACE@[44; 45) "\n"
- R_CURLY@[45; 46) "}"
- WHITESPACE@[46; 47) "\n"
+++ /dev/null
-fn foo() {
- return;
- return 92;
-}
+++ /dev/null
-SOURCE_FILE@[0; 40)
- FN_DEF@[0; 39)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 39)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- EXPR_STMT@[15; 22)
- RETURN_EXPR@[15; 21)
- RETURN_KW@[15; 21) "return"
- SEMI@[21; 22) ";"
- WHITESPACE@[22; 27) "\n "
- EXPR_STMT@[27; 37)
- RETURN_EXPR@[27; 36)
- RETURN_KW@[27; 33) "return"
- WHITESPACE@[33; 34) " "
- LITERAL@[34; 36)
- INT_NUMBER@[34; 36) "92"
- SEMI@[36; 37) ";"
- WHITESPACE@[37; 38) "\n"
- R_CURLY@[38; 39) "}"
- WHITESPACE@[39; 40) "\n"
+++ /dev/null
-type Result<T> = ();
+++ /dev/null
-SOURCE_FILE@[0; 21)
- TYPE_ALIAS_DEF@[0; 20)
- TYPE_KW@[0; 4) "type"
- WHITESPACE@[4; 5) " "
- NAME@[5; 11)
- IDENT@[5; 11) "Result"
- TYPE_PARAM_LIST@[11; 14)
- L_ANGLE@[11; 12) "<"
- TYPE_PARAM@[12; 13)
- NAME@[12; 13)
- IDENT@[12; 13) "T"
- R_ANGLE@[13; 14) ">"
- WHITESPACE@[14; 15) " "
- EQ@[15; 16) "="
- WHITESPACE@[16; 17) " "
- TUPLE_TYPE@[17; 19)
- L_PAREN@[17; 18) "("
- R_PAREN@[18; 19) ")"
- SEMI@[19; 20) ";"
- WHITESPACE@[20; 21) "\n"
+++ /dev/null
-fn foo() {
- match () {
- _ => {}
- () => {}
- [] => {}
- }
-}
+++ /dev/null
-SOURCE_FILE@[0; 84)
- FN_DEF@[0; 83)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 83)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- MATCH_EXPR@[15; 81)
- MATCH_KW@[15; 20) "match"
- WHITESPACE@[20; 21) " "
- TUPLE_EXPR@[21; 23)
- L_PAREN@[21; 22) "("
- R_PAREN@[22; 23) ")"
- WHITESPACE@[23; 24) " "
- MATCH_ARM_LIST@[24; 81)
- L_CURLY@[24; 25) "{"
- WHITESPACE@[25; 34) "\n "
- MATCH_ARM@[34; 41)
- PLACEHOLDER_PAT@[34; 35)
- UNDERSCORE@[34; 35) "_"
- WHITESPACE@[35; 36) " "
- FAT_ARROW@[36; 38) "=>"
- WHITESPACE@[38; 39) " "
- BLOCK_EXPR@[39; 41)
- BLOCK@[39; 41)
- L_CURLY@[39; 40) "{"
- R_CURLY@[40; 41) "}"
- WHITESPACE@[41; 50) "\n "
- MATCH_ARM@[50; 58)
- TUPLE_PAT@[50; 52)
- L_PAREN@[50; 51) "("
- R_PAREN@[51; 52) ")"
- WHITESPACE@[52; 53) " "
- FAT_ARROW@[53; 55) "=>"
- WHITESPACE@[55; 56) " "
- BLOCK_EXPR@[56; 58)
- BLOCK@[56; 58)
- L_CURLY@[56; 57) "{"
- R_CURLY@[57; 58) "}"
- WHITESPACE@[58; 67) "\n "
- MATCH_ARM@[67; 75)
- SLICE_PAT@[67; 69)
- L_BRACK@[67; 68) "["
- R_BRACK@[68; 69) "]"
- WHITESPACE@[69; 70) " "
- FAT_ARROW@[70; 72) "=>"
- WHITESPACE@[72; 73) " "
- BLOCK_EXPR@[73; 75)
- BLOCK@[73; 75)
- L_CURLY@[73; 74) "{"
- R_CURLY@[74; 75) "}"
- WHITESPACE@[75; 80) "\n "
- R_CURLY@[80; 81) "}"
- WHITESPACE@[81; 82) "\n"
- R_CURLY@[82; 83) "}"
- WHITESPACE@[83; 84) "\n"
+++ /dev/null
-fn a() {}
-fn b() { let _ = 1; }
-fn c() { 1; 2; }
-fn d() { 1; 2 }
+++ /dev/null
-SOURCE_FILE@[0; 65)
- FN_DEF@[0; 9)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 4)
- IDENT@[3; 4) "a"
- PARAM_LIST@[4; 6)
- L_PAREN@[4; 5) "("
- R_PAREN@[5; 6) ")"
- WHITESPACE@[6; 7) " "
- BLOCK@[7; 9)
- L_CURLY@[7; 8) "{"
- R_CURLY@[8; 9) "}"
- WHITESPACE@[9; 10) "\n"
- FN_DEF@[10; 31)
- FN_KW@[10; 12) "fn"
- WHITESPACE@[12; 13) " "
- NAME@[13; 14)
- IDENT@[13; 14) "b"
- PARAM_LIST@[14; 16)
- L_PAREN@[14; 15) "("
- R_PAREN@[15; 16) ")"
- WHITESPACE@[16; 17) " "
- BLOCK@[17; 31)
- L_CURLY@[17; 18) "{"
- WHITESPACE@[18; 19) " "
- LET_STMT@[19; 29)
- LET_KW@[19; 22) "let"
- WHITESPACE@[22; 23) " "
- PLACEHOLDER_PAT@[23; 24)
- UNDERSCORE@[23; 24) "_"
- WHITESPACE@[24; 25) " "
- EQ@[25; 26) "="
- WHITESPACE@[26; 27) " "
- LITERAL@[27; 28)
- INT_NUMBER@[27; 28) "1"
- SEMI@[28; 29) ";"
- WHITESPACE@[29; 30) " "
- R_CURLY@[30; 31) "}"
- WHITESPACE@[31; 32) "\n"
- FN_DEF@[32; 48)
- FN_KW@[32; 34) "fn"
- WHITESPACE@[34; 35) " "
- NAME@[35; 36)
- IDENT@[35; 36) "c"
- PARAM_LIST@[36; 38)
- L_PAREN@[36; 37) "("
- R_PAREN@[37; 38) ")"
- WHITESPACE@[38; 39) " "
- BLOCK@[39; 48)
- L_CURLY@[39; 40) "{"
- WHITESPACE@[40; 41) " "
- EXPR_STMT@[41; 43)
- LITERAL@[41; 42)
- INT_NUMBER@[41; 42) "1"
- SEMI@[42; 43) ";"
- WHITESPACE@[43; 44) " "
- EXPR_STMT@[44; 46)
- LITERAL@[44; 45)
- INT_NUMBER@[44; 45) "2"
- SEMI@[45; 46) ";"
- WHITESPACE@[46; 47) " "
- R_CURLY@[47; 48) "}"
- WHITESPACE@[48; 49) "\n"
- FN_DEF@[49; 64)
- FN_KW@[49; 51) "fn"
- WHITESPACE@[51; 52) " "
- NAME@[52; 53)
- IDENT@[52; 53) "d"
- PARAM_LIST@[53; 55)
- L_PAREN@[53; 54) "("
- R_PAREN@[54; 55) ")"
- WHITESPACE@[55; 56) " "
- BLOCK@[56; 64)
- L_CURLY@[56; 57) "{"
- WHITESPACE@[57; 58) " "
- EXPR_STMT@[58; 60)
- LITERAL@[58; 59)
- INT_NUMBER@[58; 59) "1"
- SEMI@[59; 60) ";"
- WHITESPACE@[60; 61) " "
- LITERAL@[61; 62)
- INT_NUMBER@[61; 62) "2"
- WHITESPACE@[62; 63) " "
- R_CURLY@[63; 64) "}"
- WHITESPACE@[64; 65) "\n"
+++ /dev/null
-fn foo<T>() where T: Copy {}
+++ /dev/null
-SOURCE_FILE@[0; 29)
- FN_DEF@[0; 28)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- TYPE_PARAM_LIST@[6; 9)
- L_ANGLE@[6; 7) "<"
- TYPE_PARAM@[7; 8)
- NAME@[7; 8)
- IDENT@[7; 8) "T"
- R_ANGLE@[8; 9) ">"
- PARAM_LIST@[9; 11)
- L_PAREN@[9; 10) "("
- R_PAREN@[10; 11) ")"
- WHITESPACE@[11; 12) " "
- WHERE_CLAUSE@[12; 25)
- WHERE_KW@[12; 17) "where"
- WHITESPACE@[17; 18) " "
- WHERE_PRED@[18; 25)
- PATH_TYPE@[18; 19)
- PATH@[18; 19)
- PATH_SEGMENT@[18; 19)
- NAME_REF@[18; 19)
- IDENT@[18; 19) "T"
- COLON@[19; 20) ":"
- WHITESPACE@[20; 21) " "
- TYPE_BOUND_LIST@[21; 25)
- TYPE_BOUND@[21; 25)
- PATH_TYPE@[21; 25)
- PATH@[21; 25)
- PATH_SEGMENT@[21; 25)
- NAME_REF@[21; 25)
- IDENT@[21; 25) "Copy"
- WHITESPACE@[25; 26) " "
- BLOCK@[26; 28)
- L_CURLY@[26; 27) "{"
- R_CURLY@[27; 28) "}"
- WHITESPACE@[28; 29) "\n"
+++ /dev/null
-fn foo() {
- x?;
-}
+++ /dev/null
-SOURCE_FILE@[0; 21)
- FN_DEF@[0; 20)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 20)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- EXPR_STMT@[15; 18)
- TRY_EXPR@[15; 17)
- PATH_EXPR@[15; 16)
- PATH@[15; 16)
- PATH_SEGMENT@[15; 16)
- NAME_REF@[15; 16)
- IDENT@[15; 16) "x"
- QUESTION@[16; 17) "?"
- SEMI@[17; 18) ";"
- WHITESPACE@[18; 19) "\n"
- R_CURLY@[19; 20) "}"
- WHITESPACE@[20; 21) "\n"
+++ /dev/null
-type Foo = Bar;
+++ /dev/null
-SOURCE_FILE@[0; 16)
- TYPE_ALIAS_DEF@[0; 15)
- TYPE_KW@[0; 4) "type"
- WHITESPACE@[4; 5) " "
- NAME@[5; 8)
- IDENT@[5; 8) "Foo"
- WHITESPACE@[8; 9) " "
- EQ@[9; 10) "="
- WHITESPACE@[10; 11) " "
- PATH_TYPE@[11; 14)
- PATH@[11; 14)
- PATH_SEGMENT@[11; 14)
- NAME_REF@[11; 14)
- IDENT@[11; 14) "Bar"
- SEMI@[14; 15) ";"
- WHITESPACE@[15; 16) "\n"
+++ /dev/null
-impl Foo {}
+++ /dev/null
-SOURCE_FILE@[0; 12)
- IMPL_BLOCK@[0; 11)
- IMPL_KW@[0; 4) "impl"
- WHITESPACE@[4; 5) " "
- PATH_TYPE@[5; 8)
- PATH@[5; 8)
- PATH_SEGMENT@[5; 8)
- NAME_REF@[5; 8)
- IDENT@[5; 8) "Foo"
- WHITESPACE@[8; 9) " "
- ITEM_LIST@[9; 11)
- L_CURLY@[9; 10) "{"
- R_CURLY@[10; 11) "}"
- WHITESPACE@[11; 12) "\n"
+++ /dev/null
-fn foo() { let x = 1..; }
+++ /dev/null
-SOURCE_FILE@[0; 26)
- FN_DEF@[0; 25)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 25)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 11) " "
- LET_STMT@[11; 23)
- LET_KW@[11; 14) "let"
- WHITESPACE@[14; 15) " "
- BIND_PAT@[15; 16)
- NAME@[15; 16)
- IDENT@[15; 16) "x"
- WHITESPACE@[16; 17) " "
- EQ@[17; 18) "="
- WHITESPACE@[18; 19) " "
- RANGE_EXPR@[19; 22)
- LITERAL@[19; 20)
- INT_NUMBER@[19; 20) "1"
- DOTDOT@[20; 22) ".."
- SEMI@[22; 23) ";"
- WHITESPACE@[23; 24) " "
- R_CURLY@[24; 25) "}"
- WHITESPACE@[25; 26) "\n"
+++ /dev/null
-type A = for<'a> fn() -> ();
-fn foo<T>(_t: &T) where for<'a> &'a T: Iterator {}
-fn bar<T>(_t: &T) where for<'a> &'a mut T: Iterator {}
+++ /dev/null
-SOURCE_FILE@[0; 135)
- TYPE_ALIAS_DEF@[0; 28)
- TYPE_KW@[0; 4) "type"
- WHITESPACE@[4; 5) " "
- NAME@[5; 6)
- IDENT@[5; 6) "A"
- WHITESPACE@[6; 7) " "
- EQ@[7; 8) "="
- WHITESPACE@[8; 9) " "
- FOR_TYPE@[9; 27)
- FOR_KW@[9; 12) "for"
- TYPE_PARAM_LIST@[12; 16)
- L_ANGLE@[12; 13) "<"
- LIFETIME_PARAM@[13; 15)
- LIFETIME@[13; 15) "\'a"
- R_ANGLE@[15; 16) ">"
- WHITESPACE@[16; 17) " "
- FN_POINTER_TYPE@[17; 27)
- FN_KW@[17; 19) "fn"
- PARAM_LIST@[19; 21)
- L_PAREN@[19; 20) "("
- R_PAREN@[20; 21) ")"
- WHITESPACE@[21; 22) " "
- RET_TYPE@[22; 27)
- THIN_ARROW@[22; 24) "->"
- WHITESPACE@[24; 25) " "
- TUPLE_TYPE@[25; 27)
- L_PAREN@[25; 26) "("
- R_PAREN@[26; 27) ")"
- SEMI@[27; 28) ";"
- WHITESPACE@[28; 29) "\n"
- FN_DEF@[29; 79)
- FN_KW@[29; 31) "fn"
- WHITESPACE@[31; 32) " "
- NAME@[32; 35)
- IDENT@[32; 35) "foo"
- TYPE_PARAM_LIST@[35; 38)
- L_ANGLE@[35; 36) "<"
- TYPE_PARAM@[36; 37)
- NAME@[36; 37)
- IDENT@[36; 37) "T"
- R_ANGLE@[37; 38) ">"
- PARAM_LIST@[38; 46)
- L_PAREN@[38; 39) "("
- PARAM@[39; 45)
- BIND_PAT@[39; 41)
- NAME@[39; 41)
- IDENT@[39; 41) "_t"
- COLON@[41; 42) ":"
- WHITESPACE@[42; 43) " "
- REFERENCE_TYPE@[43; 45)
- AMP@[43; 44) "&"
- PATH_TYPE@[44; 45)
- PATH@[44; 45)
- PATH_SEGMENT@[44; 45)
- NAME_REF@[44; 45)
- IDENT@[44; 45) "T"
- R_PAREN@[45; 46) ")"
- WHITESPACE@[46; 47) " "
- WHERE_CLAUSE@[47; 76)
- WHERE_KW@[47; 52) "where"
- WHITESPACE@[52; 53) " "
- WHERE_PRED@[53; 76)
- FOR_TYPE@[53; 66)
- FOR_KW@[53; 56) "for"
- TYPE_PARAM_LIST@[56; 60)
- L_ANGLE@[56; 57) "<"
- LIFETIME_PARAM@[57; 59)
- LIFETIME@[57; 59) "\'a"
- R_ANGLE@[59; 60) ">"
- WHITESPACE@[60; 61) " "
- REFERENCE_TYPE@[61; 66)
- AMP@[61; 62) "&"
- LIFETIME@[62; 64) "\'a"
- WHITESPACE@[64; 65) " "
- PATH_TYPE@[65; 66)
- PATH@[65; 66)
- PATH_SEGMENT@[65; 66)
- NAME_REF@[65; 66)
- IDENT@[65; 66) "T"
- COLON@[66; 67) ":"
- WHITESPACE@[67; 68) " "
- TYPE_BOUND_LIST@[68; 76)
- TYPE_BOUND@[68; 76)
- PATH_TYPE@[68; 76)
- PATH@[68; 76)
- PATH_SEGMENT@[68; 76)
- NAME_REF@[68; 76)
- IDENT@[68; 76) "Iterator"
- WHITESPACE@[76; 77) " "
- BLOCK@[77; 79)
- L_CURLY@[77; 78) "{"
- R_CURLY@[78; 79) "}"
- WHITESPACE@[79; 80) "\n"
- FN_DEF@[80; 134)
- FN_KW@[80; 82) "fn"
- WHITESPACE@[82; 83) " "
- NAME@[83; 86)
- IDENT@[83; 86) "bar"
- TYPE_PARAM_LIST@[86; 89)
- L_ANGLE@[86; 87) "<"
- TYPE_PARAM@[87; 88)
- NAME@[87; 88)
- IDENT@[87; 88) "T"
- R_ANGLE@[88; 89) ">"
- PARAM_LIST@[89; 97)
- L_PAREN@[89; 90) "("
- PARAM@[90; 96)
- BIND_PAT@[90; 92)
- NAME@[90; 92)
- IDENT@[90; 92) "_t"
- COLON@[92; 93) ":"
- WHITESPACE@[93; 94) " "
- REFERENCE_TYPE@[94; 96)
- AMP@[94; 95) "&"
- PATH_TYPE@[95; 96)
- PATH@[95; 96)
- PATH_SEGMENT@[95; 96)
- NAME_REF@[95; 96)
- IDENT@[95; 96) "T"
- R_PAREN@[96; 97) ")"
- WHITESPACE@[97; 98) " "
- WHERE_CLAUSE@[98; 131)
- WHERE_KW@[98; 103) "where"
- WHITESPACE@[103; 104) " "
- WHERE_PRED@[104; 131)
- FOR_TYPE@[104; 121)
- FOR_KW@[104; 107) "for"
- TYPE_PARAM_LIST@[107; 111)
- L_ANGLE@[107; 108) "<"
- LIFETIME_PARAM@[108; 110)
- LIFETIME@[108; 110) "\'a"
- R_ANGLE@[110; 111) ">"
- WHITESPACE@[111; 112) " "
- REFERENCE_TYPE@[112; 121)
- AMP@[112; 113) "&"
- LIFETIME@[113; 115) "\'a"
- WHITESPACE@[115; 116) " "
- MUT_KW@[116; 119) "mut"
- WHITESPACE@[119; 120) " "
- PATH_TYPE@[120; 121)
- PATH@[120; 121)
- PATH_SEGMENT@[120; 121)
- NAME_REF@[120; 121)
- IDENT@[120; 121) "T"
- COLON@[121; 122) ":"
- WHITESPACE@[122; 123) " "
- TYPE_BOUND_LIST@[123; 131)
- TYPE_BOUND@[123; 131)
- PATH_TYPE@[123; 131)
- PATH@[123; 131)
- PATH_SEGMENT@[123; 131)
- NAME_REF@[123; 131)
- IDENT@[123; 131) "Iterator"
- WHITESPACE@[131; 132) " "
- BLOCK@[132; 134)
- L_CURLY@[132; 133) "{"
- R_CURLY@[133; 134) "}"
- WHITESPACE@[134; 135) "\n"
+++ /dev/null
-fn foo() {
- let _ = &1;
- let _ = &mut &f();
-}
+++ /dev/null
-SOURCE_FILE@[0; 52)
- FN_DEF@[0; 51)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 51)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- LET_STMT@[15; 26)
- LET_KW@[15; 18) "let"
- WHITESPACE@[18; 19) " "
- PLACEHOLDER_PAT@[19; 20)
- UNDERSCORE@[19; 20) "_"
- WHITESPACE@[20; 21) " "
- EQ@[21; 22) "="
- WHITESPACE@[22; 23) " "
- REF_EXPR@[23; 25)
- AMP@[23; 24) "&"
- LITERAL@[24; 25)
- INT_NUMBER@[24; 25) "1"
- SEMI@[25; 26) ";"
- WHITESPACE@[26; 31) "\n "
- LET_STMT@[31; 49)
- LET_KW@[31; 34) "let"
- WHITESPACE@[34; 35) " "
- PLACEHOLDER_PAT@[35; 36)
- UNDERSCORE@[35; 36) "_"
- WHITESPACE@[36; 37) " "
- EQ@[37; 38) "="
- WHITESPACE@[38; 39) " "
- REF_EXPR@[39; 48)
- AMP@[39; 40) "&"
- MUT_KW@[40; 43) "mut"
- WHITESPACE@[43; 44) " "
- REF_EXPR@[44; 48)
- AMP@[44; 45) "&"
- CALL_EXPR@[45; 48)
- PATH_EXPR@[45; 46)
- PATH@[45; 46)
- PATH_SEGMENT@[45; 46)
- NAME_REF@[45; 46)
- IDENT@[45; 46) "f"
- ARG_LIST@[46; 48)
- L_PAREN@[46; 47) "("
- R_PAREN@[47; 48) ")"
- SEMI@[48; 49) ";"
- WHITESPACE@[49; 50) "\n"
- R_CURLY@[50; 51) "}"
- WHITESPACE@[51; 52) "\n"
+++ /dev/null
-struct Foo;
-struct Foo {}
-struct Foo();
-struct Foo(String, usize);
-struct Foo {
- a: i32,
- b: f32,
-}
+++ /dev/null
-SOURCE_FILE@[0; 106)
- STRUCT_DEF@[0; 11)
- STRUCT_KW@[0; 6) "struct"
- WHITESPACE@[6; 7) " "
- NAME@[7; 10)
- IDENT@[7; 10) "Foo"
- SEMI@[10; 11) ";"
- WHITESPACE@[11; 12) "\n"
- STRUCT_DEF@[12; 25)
- STRUCT_KW@[12; 18) "struct"
- WHITESPACE@[18; 19) " "
- NAME@[19; 22)
- IDENT@[19; 22) "Foo"
- WHITESPACE@[22; 23) " "
- NAMED_FIELD_DEF_LIST@[23; 25)
- L_CURLY@[23; 24) "{"
- R_CURLY@[24; 25) "}"
- WHITESPACE@[25; 26) "\n"
- STRUCT_DEF@[26; 39)
- STRUCT_KW@[26; 32) "struct"
- WHITESPACE@[32; 33) " "
- NAME@[33; 36)
- IDENT@[33; 36) "Foo"
- POS_FIELD_DEF_LIST@[36; 38)
- L_PAREN@[36; 37) "("
- R_PAREN@[37; 38) ")"
- SEMI@[38; 39) ";"
- WHITESPACE@[39; 40) "\n"
- STRUCT_DEF@[40; 66)
- STRUCT_KW@[40; 46) "struct"
- WHITESPACE@[46; 47) " "
- NAME@[47; 50)
- IDENT@[47; 50) "Foo"
- POS_FIELD_DEF_LIST@[50; 65)
- L_PAREN@[50; 51) "("
- POS_FIELD_DEF@[51; 57)
- PATH_TYPE@[51; 57)
- PATH@[51; 57)
- PATH_SEGMENT@[51; 57)
- NAME_REF@[51; 57)
- IDENT@[51; 57) "String"
- COMMA@[57; 58) ","
- WHITESPACE@[58; 59) " "
- POS_FIELD_DEF@[59; 64)
- PATH_TYPE@[59; 64)
- PATH@[59; 64)
- PATH_SEGMENT@[59; 64)
- NAME_REF@[59; 64)
- IDENT@[59; 64) "usize"
- R_PAREN@[64; 65) ")"
- SEMI@[65; 66) ";"
- WHITESPACE@[66; 67) "\n"
- STRUCT_DEF@[67; 105)
- STRUCT_KW@[67; 73) "struct"
- WHITESPACE@[73; 74) " "
- NAME@[74; 77)
- IDENT@[74; 77) "Foo"
- WHITESPACE@[77; 78) " "
- NAMED_FIELD_DEF_LIST@[78; 105)
- L_CURLY@[78; 79) "{"
- WHITESPACE@[79; 84) "\n "
- NAMED_FIELD_DEF@[84; 90)
- NAME@[84; 85)
- IDENT@[84; 85) "a"
- COLON@[85; 86) ":"
- WHITESPACE@[86; 87) " "
- PATH_TYPE@[87; 90)
- PATH@[87; 90)
- PATH_SEGMENT@[87; 90)
- NAME_REF@[87; 90)
- IDENT@[87; 90) "i32"
- COMMA@[90; 91) ","
- WHITESPACE@[91; 96) "\n "
- NAMED_FIELD_DEF@[96; 102)
- NAME@[96; 97)
- IDENT@[96; 97) "b"
- COLON@[97; 98) ":"
- WHITESPACE@[98; 99) " "
- PATH_TYPE@[99; 102)
- PATH@[99; 102)
- PATH_SEGMENT@[99; 102)
- NAME_REF@[99; 102)
- IDENT@[99; 102) "f32"
- COMMA@[102; 103) ","
- WHITESPACE@[103; 104) "\n"
- R_CURLY@[104; 105) "}"
- WHITESPACE@[105; 106) "\n"
+++ /dev/null
-type T = (i32);
+++ /dev/null
-SOURCE_FILE@[0; 16)
- TYPE_ALIAS_DEF@[0; 15)
- TYPE_KW@[0; 4) "type"
- WHITESPACE@[4; 5) " "
- NAME@[5; 6)
- IDENT@[5; 6) "T"
- WHITESPACE@[6; 7) " "
- EQ@[7; 8) "="
- WHITESPACE@[8; 9) " "
- PAREN_TYPE@[9; 14)
- L_PAREN@[9; 10) "("
- PATH_TYPE@[10; 13)
- PATH@[10; 13)
- PATH_SEGMENT@[10; 13)
- NAME_REF@[10; 13)
- IDENT@[10; 13) "i32"
- R_PAREN@[13; 14) ")"
- SEMI@[14; 15) ";"
- WHITESPACE@[15; 16) "\n"
+++ /dev/null
-fn foo() {
- let _ = true;
- let _ = false;
- let _ = 1;
- let _ = 2.0;
- let _ = b'a';
- let _ = 'b';
- let _ = "c";
- let _ = r"d";
- let _ = b"e";
- let _ = br"f";
-}
+++ /dev/null
-SOURCE_FILE@[0; 189)
- FN_DEF@[0; 188)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 188)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- LET_STMT@[15; 28)
- LET_KW@[15; 18) "let"
- WHITESPACE@[18; 19) " "
- PLACEHOLDER_PAT@[19; 20)
- UNDERSCORE@[19; 20) "_"
- WHITESPACE@[20; 21) " "
- EQ@[21; 22) "="
- WHITESPACE@[22; 23) " "
- LITERAL@[23; 27)
- TRUE_KW@[23; 27) "true"
- SEMI@[27; 28) ";"
- WHITESPACE@[28; 33) "\n "
- LET_STMT@[33; 47)
- LET_KW@[33; 36) "let"
- WHITESPACE@[36; 37) " "
- PLACEHOLDER_PAT@[37; 38)
- UNDERSCORE@[37; 38) "_"
- WHITESPACE@[38; 39) " "
- EQ@[39; 40) "="
- WHITESPACE@[40; 41) " "
- LITERAL@[41; 46)
- FALSE_KW@[41; 46) "false"
- SEMI@[46; 47) ";"
- WHITESPACE@[47; 52) "\n "
- LET_STMT@[52; 62)
- LET_KW@[52; 55) "let"
- WHITESPACE@[55; 56) " "
- PLACEHOLDER_PAT@[56; 57)
- UNDERSCORE@[56; 57) "_"
- WHITESPACE@[57; 58) " "
- EQ@[58; 59) "="
- WHITESPACE@[59; 60) " "
- LITERAL@[60; 61)
- INT_NUMBER@[60; 61) "1"
- SEMI@[61; 62) ";"
- WHITESPACE@[62; 67) "\n "
- LET_STMT@[67; 79)
- LET_KW@[67; 70) "let"
- WHITESPACE@[70; 71) " "
- PLACEHOLDER_PAT@[71; 72)
- UNDERSCORE@[71; 72) "_"
- WHITESPACE@[72; 73) " "
- EQ@[73; 74) "="
- WHITESPACE@[74; 75) " "
- LITERAL@[75; 78)
- FLOAT_NUMBER@[75; 78) "2.0"
- SEMI@[78; 79) ";"
- WHITESPACE@[79; 84) "\n "
- LET_STMT@[84; 97)
- LET_KW@[84; 87) "let"
- WHITESPACE@[87; 88) " "
- PLACEHOLDER_PAT@[88; 89)
- UNDERSCORE@[88; 89) "_"
- WHITESPACE@[89; 90) " "
- EQ@[90; 91) "="
- WHITESPACE@[91; 92) " "
- LITERAL@[92; 96)
- BYTE@[92; 96) "b\'a\'"
- SEMI@[96; 97) ";"
- WHITESPACE@[97; 102) "\n "
- LET_STMT@[102; 114)
- LET_KW@[102; 105) "let"
- WHITESPACE@[105; 106) " "
- PLACEHOLDER_PAT@[106; 107)
- UNDERSCORE@[106; 107) "_"
- WHITESPACE@[107; 108) " "
- EQ@[108; 109) "="
- WHITESPACE@[109; 110) " "
- LITERAL@[110; 113)
- CHAR@[110; 113) "\'b\'"
- SEMI@[113; 114) ";"
- WHITESPACE@[114; 119) "\n "
- LET_STMT@[119; 131)
- LET_KW@[119; 122) "let"
- WHITESPACE@[122; 123) " "
- PLACEHOLDER_PAT@[123; 124)
- UNDERSCORE@[123; 124) "_"
- WHITESPACE@[124; 125) " "
- EQ@[125; 126) "="
- WHITESPACE@[126; 127) " "
- LITERAL@[127; 130)
- STRING@[127; 130) "\"c\""
- SEMI@[130; 131) ";"
- WHITESPACE@[131; 136) "\n "
- LET_STMT@[136; 149)
- LET_KW@[136; 139) "let"
- WHITESPACE@[139; 140) " "
- PLACEHOLDER_PAT@[140; 141)
- UNDERSCORE@[140; 141) "_"
- WHITESPACE@[141; 142) " "
- EQ@[142; 143) "="
- WHITESPACE@[143; 144) " "
- LITERAL@[144; 148)
- RAW_STRING@[144; 148) "r\"d\""
- SEMI@[148; 149) ";"
- WHITESPACE@[149; 154) "\n "
- LET_STMT@[154; 167)
- LET_KW@[154; 157) "let"
- WHITESPACE@[157; 158) " "
- PLACEHOLDER_PAT@[158; 159)
- UNDERSCORE@[158; 159) "_"
- WHITESPACE@[159; 160) " "
- EQ@[160; 161) "="
- WHITESPACE@[161; 162) " "
- LITERAL@[162; 166)
- BYTE_STRING@[162; 166) "b\"e\""
- SEMI@[166; 167) ";"
- WHITESPACE@[167; 172) "\n "
- LET_STMT@[172; 186)
- LET_KW@[172; 175) "let"
- WHITESPACE@[175; 176) " "
- PLACEHOLDER_PAT@[176; 177)
- UNDERSCORE@[176; 177) "_"
- WHITESPACE@[177; 178) " "
- EQ@[178; 179) "="
- WHITESPACE@[179; 180) " "
- LITERAL@[180; 185)
- RAW_BYTE_STRING@[180; 185) "br\"f\""
- SEMI@[185; 186) ";"
- WHITESPACE@[186; 187) "\n"
- R_CURLY@[187; 188) "}"
- WHITESPACE@[188; 189) "\n"
+++ /dev/null
-fn foo() {}
-fn bar() -> () {}
+++ /dev/null
-SOURCE_FILE@[0; 30)
- FN_DEF@[0; 11)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 11)
- L_CURLY@[9; 10) "{"
- R_CURLY@[10; 11) "}"
- WHITESPACE@[11; 12) "\n"
- FN_DEF@[12; 29)
- FN_KW@[12; 14) "fn"
- WHITESPACE@[14; 15) " "
- NAME@[15; 18)
- IDENT@[15; 18) "bar"
- PARAM_LIST@[18; 20)
- L_PAREN@[18; 19) "("
- R_PAREN@[19; 20) ")"
- WHITESPACE@[20; 21) " "
- RET_TYPE@[21; 26)
- THIN_ARROW@[21; 23) "->"
- WHITESPACE@[23; 24) " "
- TUPLE_TYPE@[24; 26)
- L_PAREN@[24; 25) "("
- R_PAREN@[25; 26) ")"
- WHITESPACE@[26; 27) " "
- BLOCK@[27; 29)
- L_CURLY@[27; 28) "{"
- R_CURLY@[28; 29) "}"
- WHITESPACE@[29; 30) "\n"
+++ /dev/null
-unsafe impl Foo {}
+++ /dev/null
-SOURCE_FILE@[0; 19)
- IMPL_BLOCK@[0; 18)
- UNSAFE_KW@[0; 6) "unsafe"
- WHITESPACE@[6; 7) " "
- IMPL_KW@[7; 11) "impl"
- WHITESPACE@[11; 12) " "
- PATH_TYPE@[12; 15)
- PATH@[12; 15)
- PATH_SEGMENT@[12; 15)
- NAME_REF@[12; 15)
- IDENT@[12; 15) "Foo"
- WHITESPACE@[15; 16) " "
- ITEM_LIST@[16; 18)
- L_CURLY@[16; 17) "{"
- R_CURLY@[17; 18) "}"
- WHITESPACE@[18; 19) "\n"
+++ /dev/null
-fn foo(){
- if break {}
- while break {}
- for i in break {}
- match break {}
-}
+++ /dev/null
-SOURCE_FILE@[0; 88)
- FN_DEF@[0; 87)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- BLOCK@[8; 87)
- L_CURLY@[8; 9) "{"
- WHITESPACE@[9; 14) "\n "
- EXPR_STMT@[14; 25)
- IF_EXPR@[14; 25)
- IF_KW@[14; 16) "if"
- WHITESPACE@[16; 17) " "
- CONDITION@[17; 22)
- BREAK_EXPR@[17; 22)
- BREAK_KW@[17; 22) "break"
- WHITESPACE@[22; 23) " "
- BLOCK@[23; 25)
- L_CURLY@[23; 24) "{"
- R_CURLY@[24; 25) "}"
- WHITESPACE@[25; 30) "\n "
- EXPR_STMT@[30; 44)
- WHILE_EXPR@[30; 44)
- WHILE_KW@[30; 35) "while"
- WHITESPACE@[35; 36) " "
- CONDITION@[36; 41)
- BREAK_EXPR@[36; 41)
- BREAK_KW@[36; 41) "break"
- WHITESPACE@[41; 42) " "
- BLOCK@[42; 44)
- L_CURLY@[42; 43) "{"
- R_CURLY@[43; 44) "}"
- WHITESPACE@[44; 49) "\n "
- EXPR_STMT@[49; 66)
- FOR_EXPR@[49; 66)
- FOR_KW@[49; 52) "for"
- WHITESPACE@[52; 53) " "
- BIND_PAT@[53; 54)
- NAME@[53; 54)
- IDENT@[53; 54) "i"
- WHITESPACE@[54; 55) " "
- IN_KW@[55; 57) "in"
- WHITESPACE@[57; 58) " "
- BREAK_EXPR@[58; 63)
- BREAK_KW@[58; 63) "break"
- WHITESPACE@[63; 64) " "
- BLOCK@[64; 66)
- L_CURLY@[64; 65) "{"
- R_CURLY@[65; 66) "}"
- WHITESPACE@[66; 71) "\n "
- MATCH_EXPR@[71; 85)
- MATCH_KW@[71; 76) "match"
- WHITESPACE@[76; 77) " "
- BREAK_EXPR@[77; 82)
- BREAK_KW@[77; 82) "break"
- WHITESPACE@[82; 83) " "
- MATCH_ARM_LIST@[83; 85)
- L_CURLY@[83; 84) "{"
- R_CURLY@[84; 85) "}"
- WHITESPACE@[85; 86) "\n"
- R_CURLY@[86; 87) "}"
- WHITESPACE@[87; 88) "\n"
+++ /dev/null
-extern fn foo() {}
+++ /dev/null
-SOURCE_FILE@[0; 19)
- FN_DEF@[0; 18)
- ABI@[0; 6)
- EXTERN_KW@[0; 6) "extern"
- WHITESPACE@[6; 7) " "
- FN_KW@[7; 9) "fn"
- WHITESPACE@[9; 10) " "
- NAME@[10; 13)
- IDENT@[10; 13) "foo"
- PARAM_LIST@[13; 15)
- L_PAREN@[13; 14) "("
- R_PAREN@[14; 15) ")"
- WHITESPACE@[15; 16) " "
- BLOCK@[16; 18)
- L_CURLY@[16; 17) "{"
- R_CURLY@[17; 18) "}"
- WHITESPACE@[18; 19) "\n"
+++ /dev/null
-struct S<T = i32>;
+++ /dev/null
-SOURCE_FILE@[0; 19)
- STRUCT_DEF@[0; 18)
- STRUCT_KW@[0; 6) "struct"
- WHITESPACE@[6; 7) " "
- NAME@[7; 8)
- IDENT@[7; 8) "S"
- TYPE_PARAM_LIST@[8; 17)
- L_ANGLE@[8; 9) "<"
- TYPE_PARAM@[9; 16)
- NAME@[9; 10)
- IDENT@[9; 10) "T"
- WHITESPACE@[10; 11) " "
- EQ@[11; 12) "="
- WHITESPACE@[12; 13) " "
- PATH_TYPE@[13; 16)
- PATH@[13; 16)
- PATH_SEGMENT@[13; 16)
- NAME_REF@[13; 16)
- IDENT@[13; 16) "i32"
- R_ANGLE@[16; 17) ">"
- SEMI@[17; 18) ";"
- WHITESPACE@[18; 19) "\n"
+++ /dev/null
-auto trait T {}
+++ /dev/null
-SOURCE_FILE@[0; 16)
- TRAIT_DEF@[0; 15)
- AUTO_KW@[0; 4) "auto"
- WHITESPACE@[4; 5) " "
- TRAIT_KW@[5; 10) "trait"
- WHITESPACE@[10; 11) " "
- NAME@[11; 12)
- IDENT@[11; 12) "T"
- WHITESPACE@[12; 13) " "
- ITEM_LIST@[13; 15)
- L_CURLY@[13; 14) "{"
- R_CURLY@[14; 15) "}"
- WHITESPACE@[15; 16) "\n"
+++ /dev/null
-type F = fn() -> ();
+++ /dev/null
-SOURCE_FILE@[0; 21)
- TYPE_ALIAS_DEF@[0; 20)
- TYPE_KW@[0; 4) "type"
- WHITESPACE@[4; 5) " "
- NAME@[5; 6)
- IDENT@[5; 6) "F"
- WHITESPACE@[6; 7) " "
- EQ@[7; 8) "="
- WHITESPACE@[8; 9) " "
- FN_POINTER_TYPE@[9; 19)
- FN_KW@[9; 11) "fn"
- PARAM_LIST@[11; 13)
- L_PAREN@[11; 12) "("
- R_PAREN@[12; 13) ")"
- WHITESPACE@[13; 14) " "
- RET_TYPE@[14; 19)
- THIN_ARROW@[14; 16) "->"
- WHITESPACE@[16; 17) " "
- TUPLE_TYPE@[17; 19)
- L_PAREN@[17; 18) "("
- R_PAREN@[18; 19) ")"
- SEMI@[19; 20) ";"
- WHITESPACE@[20; 21) "\n"
+++ /dev/null
-fn foo() {
- x[1][2];
-}
+++ /dev/null
-SOURCE_FILE@[0; 26)
- FN_DEF@[0; 25)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 25)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- EXPR_STMT@[15; 23)
- INDEX_EXPR@[15; 22)
- INDEX_EXPR@[15; 19)
- PATH_EXPR@[15; 16)
- PATH@[15; 16)
- PATH_SEGMENT@[15; 16)
- NAME_REF@[15; 16)
- IDENT@[15; 16) "x"
- L_BRACK@[16; 17) "["
- LITERAL@[17; 18)
- INT_NUMBER@[17; 18) "1"
- R_BRACK@[18; 19) "]"
- L_BRACK@[19; 20) "["
- LITERAL@[20; 21)
- INT_NUMBER@[20; 21) "2"
- R_BRACK@[21; 22) "]"
- SEMI@[22; 23) ";"
- WHITESPACE@[23; 24) "\n"
- R_CURLY@[24; 25) "}"
- WHITESPACE@[25; 26) "\n"
+++ /dev/null
-unsafe auto trait T {}
+++ /dev/null
-SOURCE_FILE@[0; 23)
- TRAIT_DEF@[0; 22)
- UNSAFE_KW@[0; 6) "unsafe"
- WHITESPACE@[6; 7) " "
- AUTO_KW@[7; 11) "auto"
- WHITESPACE@[11; 12) " "
- TRAIT_KW@[12; 17) "trait"
- WHITESPACE@[17; 18) " "
- NAME@[18; 19)
- IDENT@[18; 19) "T"
- WHITESPACE@[19; 20) " "
- ITEM_LIST@[20; 22)
- L_CURLY@[20; 21) "{"
- R_CURLY@[21; 22) "}"
- WHITESPACE@[22; 23) "\n"
+++ /dev/null
-fn main() { let _ = (); }
+++ /dev/null
-SOURCE_FILE@[0; 26)
- FN_DEF@[0; 25)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 7)
- IDENT@[3; 7) "main"
- PARAM_LIST@[7; 9)
- L_PAREN@[7; 8) "("
- R_PAREN@[8; 9) ")"
- WHITESPACE@[9; 10) " "
- BLOCK@[10; 25)
- L_CURLY@[10; 11) "{"
- WHITESPACE@[11; 12) " "
- LET_STMT@[12; 23)
- LET_KW@[12; 15) "let"
- WHITESPACE@[15; 16) " "
- PLACEHOLDER_PAT@[16; 17)
- UNDERSCORE@[16; 17) "_"
- WHITESPACE@[17; 18) " "
- EQ@[18; 19) "="
- WHITESPACE@[19; 20) " "
- TUPLE_EXPR@[20; 22)
- L_PAREN@[20; 21) "("
- R_PAREN@[21; 22) ")"
- SEMI@[22; 23) ";"
- WHITESPACE@[23; 24) " "
- R_CURLY@[24; 25) "}"
- WHITESPACE@[25; 26) "\n"
+++ /dev/null
-fn foo() {
- if true {}
- loop {}
- match () {}
- while true {}
- for _ in () {}
- {}
- {}
- macro_rules! test {
- () => {}
- }
- test!{}
-}
+++ /dev/null
-SOURCE_FILE@[0; 167)
- FN_DEF@[0; 166)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 166)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- EXPR_STMT@[15; 25)
- IF_EXPR@[15; 25)
- IF_KW@[15; 17) "if"
- WHITESPACE@[17; 18) " "
- CONDITION@[18; 22)
- LITERAL@[18; 22)
- TRUE_KW@[18; 22) "true"
- WHITESPACE@[22; 23) " "
- BLOCK@[23; 25)
- L_CURLY@[23; 24) "{"
- R_CURLY@[24; 25) "}"
- WHITESPACE@[25; 30) "\n "
- EXPR_STMT@[30; 37)
- LOOP_EXPR@[30; 37)
- LOOP_KW@[30; 34) "loop"
- WHITESPACE@[34; 35) " "
- BLOCK@[35; 37)
- L_CURLY@[35; 36) "{"
- R_CURLY@[36; 37) "}"
- WHITESPACE@[37; 42) "\n "
- EXPR_STMT@[42; 53)
- MATCH_EXPR@[42; 53)
- MATCH_KW@[42; 47) "match"
- WHITESPACE@[47; 48) " "
- TUPLE_EXPR@[48; 50)
- L_PAREN@[48; 49) "("
- R_PAREN@[49; 50) ")"
- WHITESPACE@[50; 51) " "
- MATCH_ARM_LIST@[51; 53)
- L_CURLY@[51; 52) "{"
- R_CURLY@[52; 53) "}"
- WHITESPACE@[53; 58) "\n "
- EXPR_STMT@[58; 71)
- WHILE_EXPR@[58; 71)
- WHILE_KW@[58; 63) "while"
- WHITESPACE@[63; 64) " "
- CONDITION@[64; 68)
- LITERAL@[64; 68)
- TRUE_KW@[64; 68) "true"
- WHITESPACE@[68; 69) " "
- BLOCK@[69; 71)
- L_CURLY@[69; 70) "{"
- R_CURLY@[70; 71) "}"
- WHITESPACE@[71; 76) "\n "
- EXPR_STMT@[76; 90)
- FOR_EXPR@[76; 90)
- FOR_KW@[76; 79) "for"
- WHITESPACE@[79; 80) " "
- PLACEHOLDER_PAT@[80; 81)
- UNDERSCORE@[80; 81) "_"
- WHITESPACE@[81; 82) " "
- IN_KW@[82; 84) "in"
- WHITESPACE@[84; 85) " "
- TUPLE_EXPR@[85; 87)
- L_PAREN@[85; 86) "("
- R_PAREN@[86; 87) ")"
- WHITESPACE@[87; 88) " "
- BLOCK@[88; 90)
- L_CURLY@[88; 89) "{"
- R_CURLY@[89; 90) "}"
- WHITESPACE@[90; 95) "\n "
- EXPR_STMT@[95; 97)
- BLOCK_EXPR@[95; 97)
- BLOCK@[95; 97)
- L_CURLY@[95; 96) "{"
- R_CURLY@[96; 97) "}"
- WHITESPACE@[97; 102) "\n "
- EXPR_STMT@[102; 104)
- BLOCK_EXPR@[102; 104)
- BLOCK@[102; 104)
- L_CURLY@[102; 103) "{"
- R_CURLY@[103; 104) "}"
- WHITESPACE@[104; 109) "\n "
- EXPR_STMT@[109; 152)
- MACRO_CALL@[109; 152)
- PATH@[109; 120)
- PATH_SEGMENT@[109; 120)
- NAME_REF@[109; 120)
- IDENT@[109; 120) "macro_rules"
- EXCL@[120; 121) "!"
- WHITESPACE@[121; 122) " "
- NAME@[122; 126)
- IDENT@[122; 126) "test"
- WHITESPACE@[126; 127) " "
- TOKEN_TREE@[127; 152)
- L_CURLY@[127; 128) "{"
- WHITESPACE@[128; 138) "\n "
- TOKEN_TREE@[138; 140)
- L_PAREN@[138; 139) "("
- R_PAREN@[139; 140) ")"
- WHITESPACE@[140; 141) " "
- EQ@[141; 142) "="
- R_ANGLE@[142; 143) ">"
- WHITESPACE@[143; 144) " "
- TOKEN_TREE@[144; 146)
- L_CURLY@[144; 145) "{"
- R_CURLY@[145; 146) "}"
- WHITESPACE@[146; 151) "\n "
- R_CURLY@[151; 152) "}"
- WHITESPACE@[152; 157) "\n "
- MACRO_CALL@[157; 164)
- PATH@[157; 161)
- PATH_SEGMENT@[157; 161)
- NAME_REF@[157; 161)
- IDENT@[157; 161) "test"
- EXCL@[161; 162) "!"
- TOKEN_TREE@[162; 164)
- L_CURLY@[162; 163) "{"
- R_CURLY@[163; 164) "}"
- WHITESPACE@[164; 165) "\n"
- R_CURLY@[165; 166) "}"
- WHITESPACE@[166; 167) "\n"
+++ /dev/null
-default impl Foo {}
+++ /dev/null
-SOURCE_FILE@[0; 20)
- IMPL_BLOCK@[0; 19)
- DEFAULT_KW@[0; 7) "default"
- WHITESPACE@[7; 8) " "
- IMPL_KW@[8; 12) "impl"
- WHITESPACE@[12; 13) " "
- PATH_TYPE@[13; 16)
- PATH@[13; 16)
- PATH_SEGMENT@[13; 16)
- NAME_REF@[13; 16)
- IDENT@[13; 16) "Foo"
- WHITESPACE@[16; 17) " "
- ITEM_LIST@[17; 19)
- L_CURLY@[17; 18) "{"
- R_CURLY@[18; 19) "}"
- WHITESPACE@[19; 20) "\n"
+++ /dev/null
-const unsafe fn foo() {}
+++ /dev/null
-SOURCE_FILE@[0; 25)
- FN_DEF@[0; 24)
- CONST_KW@[0; 5) "const"
- WHITESPACE@[5; 6) " "
- UNSAFE_KW@[6; 12) "unsafe"
- WHITESPACE@[12; 13) " "
- FN_KW@[13; 15) "fn"
- WHITESPACE@[15; 16) " "
- NAME@[16; 19)
- IDENT@[16; 19) "foo"
- PARAM_LIST@[19; 21)
- L_PAREN@[19; 20) "("
- R_PAREN@[20; 21) ")"
- WHITESPACE@[21; 22) " "
- BLOCK@[22; 24)
- L_CURLY@[22; 23) "{"
- R_CURLY@[23; 24) "}"
- WHITESPACE@[24; 25) "\n"
+++ /dev/null
-fn a() {}
-fn b(x: i32) {}
-fn c(x: i32, ) {}
-fn d(x: i32, y: ()) {}
+++ /dev/null
-SOURCE_FILE@[0; 67)
- FN_DEF@[0; 9)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 4)
- IDENT@[3; 4) "a"
- PARAM_LIST@[4; 6)
- L_PAREN@[4; 5) "("
- R_PAREN@[5; 6) ")"
- WHITESPACE@[6; 7) " "
- BLOCK@[7; 9)
- L_CURLY@[7; 8) "{"
- R_CURLY@[8; 9) "}"
- WHITESPACE@[9; 10) "\n"
- FN_DEF@[10; 25)
- FN_KW@[10; 12) "fn"
- WHITESPACE@[12; 13) " "
- NAME@[13; 14)
- IDENT@[13; 14) "b"
- PARAM_LIST@[14; 22)
- L_PAREN@[14; 15) "("
- PARAM@[15; 21)
- BIND_PAT@[15; 16)
- NAME@[15; 16)
- IDENT@[15; 16) "x"
- COLON@[16; 17) ":"
- WHITESPACE@[17; 18) " "
- PATH_TYPE@[18; 21)
- PATH@[18; 21)
- PATH_SEGMENT@[18; 21)
- NAME_REF@[18; 21)
- IDENT@[18; 21) "i32"
- R_PAREN@[21; 22) ")"
- WHITESPACE@[22; 23) " "
- BLOCK@[23; 25)
- L_CURLY@[23; 24) "{"
- R_CURLY@[24; 25) "}"
- WHITESPACE@[25; 26) "\n"
- FN_DEF@[26; 43)
- FN_KW@[26; 28) "fn"
- WHITESPACE@[28; 29) " "
- NAME@[29; 30)
- IDENT@[29; 30) "c"
- PARAM_LIST@[30; 40)
- L_PAREN@[30; 31) "("
- PARAM@[31; 37)
- BIND_PAT@[31; 32)
- NAME@[31; 32)
- IDENT@[31; 32) "x"
- COLON@[32; 33) ":"
- WHITESPACE@[33; 34) " "
- PATH_TYPE@[34; 37)
- PATH@[34; 37)
- PATH_SEGMENT@[34; 37)
- NAME_REF@[34; 37)
- IDENT@[34; 37) "i32"
- COMMA@[37; 38) ","
- WHITESPACE@[38; 39) " "
- R_PAREN@[39; 40) ")"
- WHITESPACE@[40; 41) " "
- BLOCK@[41; 43)
- L_CURLY@[41; 42) "{"
- R_CURLY@[42; 43) "}"
- WHITESPACE@[43; 44) "\n"
- FN_DEF@[44; 66)
- FN_KW@[44; 46) "fn"
- WHITESPACE@[46; 47) " "
- NAME@[47; 48)
- IDENT@[47; 48) "d"
- PARAM_LIST@[48; 63)
- L_PAREN@[48; 49) "("
- PARAM@[49; 55)
- BIND_PAT@[49; 50)
- NAME@[49; 50)
- IDENT@[49; 50) "x"
- COLON@[50; 51) ":"
- WHITESPACE@[51; 52) " "
- PATH_TYPE@[52; 55)
- PATH@[52; 55)
- PATH_SEGMENT@[52; 55)
- NAME_REF@[52; 55)
- IDENT@[52; 55) "i32"
- COMMA@[55; 56) ","
- WHITESPACE@[56; 57) " "
- PARAM@[57; 62)
- BIND_PAT@[57; 58)
- NAME@[57; 58)
- IDENT@[57; 58) "y"
- COLON@[58; 59) ":"
- WHITESPACE@[59; 60) " "
- TUPLE_TYPE@[60; 62)
- L_PAREN@[60; 61) "("
- R_PAREN@[61; 62) ")"
- R_PAREN@[62; 63) ")"
- WHITESPACE@[63; 64) " "
- BLOCK@[64; 66)
- L_CURLY@[64; 65) "{"
- R_CURLY@[65; 66) "}"
- WHITESPACE@[66; 67) "\n"
+++ /dev/null
-fn foo() {
- for x in [] {};
-}
+++ /dev/null
-SOURCE_FILE@[0; 33)
- FN_DEF@[0; 32)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 32)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- EXPR_STMT@[15; 30)
- FOR_EXPR@[15; 29)
- FOR_KW@[15; 18) "for"
- WHITESPACE@[18; 19) " "
- BIND_PAT@[19; 20)
- NAME@[19; 20)
- IDENT@[19; 20) "x"
- WHITESPACE@[20; 21) " "
- IN_KW@[21; 23) "in"
- WHITESPACE@[23; 24) " "
- ARRAY_EXPR@[24; 26)
- L_BRACK@[24; 25) "["
- R_BRACK@[25; 26) "]"
- WHITESPACE@[26; 27) " "
- BLOCK@[27; 29)
- L_CURLY@[27; 28) "{"
- R_CURLY@[28; 29) "}"
- SEMI@[29; 30) ";"
- WHITESPACE@[30; 31) "\n"
- R_CURLY@[31; 32) "}"
- WHITESPACE@[32; 33) "\n"
+++ /dev/null
-unsafe fn foo() {}
+++ /dev/null
-SOURCE_FILE@[0; 19)
- FN_DEF@[0; 18)
- UNSAFE_KW@[0; 6) "unsafe"
- WHITESPACE@[6; 7) " "
- FN_KW@[7; 9) "fn"
- WHITESPACE@[9; 10) " "
- NAME@[10; 13)
- IDENT@[10; 13) "foo"
- PARAM_LIST@[13; 15)
- L_PAREN@[13; 14) "("
- R_PAREN@[14; 15) ")"
- WHITESPACE@[15; 16) " "
- BLOCK@[16; 18)
- L_CURLY@[16; 17) "{"
- R_CURLY@[17; 18) "}"
- WHITESPACE@[18; 19) "\n"
+++ /dev/null
-fn foo() {
- let S {} = ();
- let S { f, ref mut g } = ();
- let S { h: _, ..} = ();
- let S { h: _, } = ();
-}
+++ /dev/null
-SOURCE_FILE@[0; 119)
- FN_DEF@[0; 118)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 118)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- LET_STMT@[15; 29)
- LET_KW@[15; 18) "let"
- WHITESPACE@[18; 19) " "
- STRUCT_PAT@[19; 23)
- PATH@[19; 20)
- PATH_SEGMENT@[19; 20)
- NAME_REF@[19; 20)
- IDENT@[19; 20) "S"
- WHITESPACE@[20; 21) " "
- FIELD_PAT_LIST@[21; 23)
- L_CURLY@[21; 22) "{"
- R_CURLY@[22; 23) "}"
- WHITESPACE@[23; 24) " "
- EQ@[24; 25) "="
- WHITESPACE@[25; 26) " "
- TUPLE_EXPR@[26; 28)
- L_PAREN@[26; 27) "("
- R_PAREN@[27; 28) ")"
- SEMI@[28; 29) ";"
- WHITESPACE@[29; 34) "\n "
- LET_STMT@[34; 62)
- LET_KW@[34; 37) "let"
- WHITESPACE@[37; 38) " "
- STRUCT_PAT@[38; 56)
- PATH@[38; 39)
- PATH_SEGMENT@[38; 39)
- NAME_REF@[38; 39)
- IDENT@[38; 39) "S"
- WHITESPACE@[39; 40) " "
- FIELD_PAT_LIST@[40; 56)
- L_CURLY@[40; 41) "{"
- WHITESPACE@[41; 42) " "
- BIND_PAT@[42; 43)
- NAME@[42; 43)
- IDENT@[42; 43) "f"
- COMMA@[43; 44) ","
- WHITESPACE@[44; 45) " "
- BIND_PAT@[45; 54)
- REF_KW@[45; 48) "ref"
- WHITESPACE@[48; 49) " "
- MUT_KW@[49; 52) "mut"
- WHITESPACE@[52; 53) " "
- NAME@[53; 54)
- IDENT@[53; 54) "g"
- WHITESPACE@[54; 55) " "
- R_CURLY@[55; 56) "}"
- WHITESPACE@[56; 57) " "
- EQ@[57; 58) "="
- WHITESPACE@[58; 59) " "
- TUPLE_EXPR@[59; 61)
- L_PAREN@[59; 60) "("
- R_PAREN@[60; 61) ")"
- SEMI@[61; 62) ";"
- WHITESPACE@[62; 67) "\n "
- LET_STMT@[67; 90)
- LET_KW@[67; 70) "let"
- WHITESPACE@[70; 71) " "
- STRUCT_PAT@[71; 84)
- PATH@[71; 72)
- PATH_SEGMENT@[71; 72)
- NAME_REF@[71; 72)
- IDENT@[71; 72) "S"
- WHITESPACE@[72; 73) " "
- FIELD_PAT_LIST@[73; 84)
- L_CURLY@[73; 74) "{"
- WHITESPACE@[74; 75) " "
- FIELD_PAT@[75; 79)
- NAME@[75; 76)
- IDENT@[75; 76) "h"
- COLON@[76; 77) ":"
- WHITESPACE@[77; 78) " "
- PLACEHOLDER_PAT@[78; 79)
- UNDERSCORE@[78; 79) "_"
- COMMA@[79; 80) ","
- WHITESPACE@[80; 81) " "
- DOTDOT@[81; 83) ".."
- R_CURLY@[83; 84) "}"
- WHITESPACE@[84; 85) " "
- EQ@[85; 86) "="
- WHITESPACE@[86; 87) " "
- TUPLE_EXPR@[87; 89)
- L_PAREN@[87; 88) "("
- R_PAREN@[88; 89) ")"
- SEMI@[89; 90) ";"
- WHITESPACE@[90; 95) "\n "
- LET_STMT@[95; 116)
- LET_KW@[95; 98) "let"
- WHITESPACE@[98; 99) " "
- STRUCT_PAT@[99; 110)
- PATH@[99; 100)
- PATH_SEGMENT@[99; 100)
- NAME_REF@[99; 100)
- IDENT@[99; 100) "S"
- WHITESPACE@[100; 101) " "
- FIELD_PAT_LIST@[101; 110)
- L_CURLY@[101; 102) "{"
- WHITESPACE@[102; 103) " "
- FIELD_PAT@[103; 107)
- NAME@[103; 104)
- IDENT@[103; 104) "h"
- COLON@[104; 105) ":"
- WHITESPACE@[105; 106) " "
- PLACEHOLDER_PAT@[106; 107)
- UNDERSCORE@[106; 107) "_"
- COMMA@[107; 108) ","
- WHITESPACE@[108; 109) " "
- R_CURLY@[109; 110) "}"
- WHITESPACE@[110; 111) " "
- EQ@[111; 112) "="
- WHITESPACE@[112; 113) " "
- TUPLE_EXPR@[113; 115)
- L_PAREN@[113; 114) "("
- R_PAREN@[114; 115) ")"
- SEMI@[115; 116) ";"
- WHITESPACE@[116; 117) "\n"
- R_CURLY@[117; 118) "}"
- WHITESPACE@[118; 119) "\n"
+++ /dev/null
-fn foo() {
- [];
- [1];
- [1, 2,];
- [1; 2];
-}
+++ /dev/null
-SOURCE_FILE@[0; 55)
- FN_DEF@[0; 54)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 54)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- EXPR_STMT@[15; 18)
- ARRAY_EXPR@[15; 17)
- L_BRACK@[15; 16) "["
- R_BRACK@[16; 17) "]"
- SEMI@[17; 18) ";"
- WHITESPACE@[18; 23) "\n "
- EXPR_STMT@[23; 27)
- ARRAY_EXPR@[23; 26)
- L_BRACK@[23; 24) "["
- LITERAL@[24; 25)
- INT_NUMBER@[24; 25) "1"
- R_BRACK@[25; 26) "]"
- SEMI@[26; 27) ";"
- WHITESPACE@[27; 32) "\n "
- EXPR_STMT@[32; 40)
- ARRAY_EXPR@[32; 39)
- L_BRACK@[32; 33) "["
- LITERAL@[33; 34)
- INT_NUMBER@[33; 34) "1"
- COMMA@[34; 35) ","
- WHITESPACE@[35; 36) " "
- LITERAL@[36; 37)
- INT_NUMBER@[36; 37) "2"
- COMMA@[37; 38) ","
- R_BRACK@[38; 39) "]"
- SEMI@[39; 40) ";"
- WHITESPACE@[40; 45) "\n "
- EXPR_STMT@[45; 52)
- ARRAY_EXPR@[45; 51)
- L_BRACK@[45; 46) "["
- LITERAL@[46; 47)
- INT_NUMBER@[46; 47) "1"
- SEMI@[47; 48) ";"
- WHITESPACE@[48; 49) " "
- LITERAL@[49; 50)
- INT_NUMBER@[49; 50) "2"
- R_BRACK@[50; 51) "]"
- SEMI@[51; 52) ";"
- WHITESPACE@[52; 53) "\n"
- R_CURLY@[53; 54) "}"
- WHITESPACE@[54; 55) "\n"
+++ /dev/null
-type F = Box<Fn(x: i32) -> ()>;
+++ /dev/null
-SOURCE_FILE@[0; 32)
- TYPE_ALIAS_DEF@[0; 31)
- TYPE_KW@[0; 4) "type"
- WHITESPACE@[4; 5) " "
- NAME@[5; 6)
- IDENT@[5; 6) "F"
- WHITESPACE@[6; 7) " "
- EQ@[7; 8) "="
- WHITESPACE@[8; 9) " "
- PATH_TYPE@[9; 30)
- PATH@[9; 30)
- PATH_SEGMENT@[9; 30)
- NAME_REF@[9; 12)
- IDENT@[9; 12) "Box"
- TYPE_ARG_LIST@[12; 30)
- L_ANGLE@[12; 13) "<"
- TYPE_ARG@[13; 29)
- PATH_TYPE@[13; 29)
- PATH@[13; 29)
- PATH_SEGMENT@[13; 29)
- NAME_REF@[13; 15)
- IDENT@[13; 15) "Fn"
- PARAM_LIST@[15; 23)
- L_PAREN@[15; 16) "("
- PARAM@[16; 22)
- BIND_PAT@[16; 17)
- NAME@[16; 17)
- IDENT@[16; 17) "x"
- COLON@[17; 18) ":"
- WHITESPACE@[18; 19) " "
- PATH_TYPE@[19; 22)
- PATH@[19; 22)
- PATH_SEGMENT@[19; 22)
- NAME_REF@[19; 22)
- IDENT@[19; 22) "i32"
- R_PAREN@[22; 23) ")"
- WHITESPACE@[23; 24) " "
- RET_TYPE@[24; 29)
- THIN_ARROW@[24; 26) "->"
- WHITESPACE@[26; 27) " "
- TUPLE_TYPE@[27; 29)
- L_PAREN@[27; 28) "("
- R_PAREN@[28; 29) ")"
- R_ANGLE@[29; 30) ">"
- SEMI@[30; 31) ";"
- WHITESPACE@[31; 32) "\n"
+++ /dev/null
-fn foo() {
- {};
- unsafe {};
- 'label: {};
-}
+++ /dev/null
-SOURCE_FILE@[0; 52)
- FN_DEF@[0; 51)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 51)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- EXPR_STMT@[15; 18)
- BLOCK_EXPR@[15; 17)
- BLOCK@[15; 17)
- L_CURLY@[15; 16) "{"
- R_CURLY@[16; 17) "}"
- SEMI@[17; 18) ";"
- WHITESPACE@[18; 23) "\n "
- EXPR_STMT@[23; 33)
- BLOCK_EXPR@[23; 32)
- UNSAFE_KW@[23; 29) "unsafe"
- WHITESPACE@[29; 30) " "
- BLOCK@[30; 32)
- L_CURLY@[30; 31) "{"
- R_CURLY@[31; 32) "}"
- SEMI@[32; 33) ";"
- WHITESPACE@[33; 38) "\n "
- EXPR_STMT@[38; 49)
- BLOCK_EXPR@[38; 48)
- LABEL@[38; 45)
- LIFETIME@[38; 44) "\'label"
- COLON@[44; 45) ":"
- WHITESPACE@[45; 46) " "
- BLOCK@[46; 48)
- L_CURLY@[46; 47) "{"
- R_CURLY@[47; 48) "}"
- SEMI@[48; 49) ";"
- WHITESPACE@[49; 50) "\n"
- R_CURLY@[50; 51) "}"
- WHITESPACE@[51; 52) "\n"
+++ /dev/null
-fn foo() {
- || ();
- || -> i32 { 92 };
- |x| x;
- move |x: i32,| x;
- async || {};
- move || {};
- async move || {};
-}
+++ /dev/null
-SOURCE_FILE@[0; 134)
- FN_DEF@[0; 133)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 133)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- EXPR_STMT@[15; 21)
- LAMBDA_EXPR@[15; 20)
- PARAM_LIST@[15; 17)
- PIPE@[15; 16) "|"
- PIPE@[16; 17) "|"
- WHITESPACE@[17; 18) " "
- TUPLE_EXPR@[18; 20)
- L_PAREN@[18; 19) "("
- R_PAREN@[19; 20) ")"
- SEMI@[20; 21) ";"
- WHITESPACE@[21; 26) "\n "
- EXPR_STMT@[26; 43)
- LAMBDA_EXPR@[26; 42)
- PARAM_LIST@[26; 28)
- PIPE@[26; 27) "|"
- PIPE@[27; 28) "|"
- WHITESPACE@[28; 29) " "
- RET_TYPE@[29; 35)
- THIN_ARROW@[29; 31) "->"
- WHITESPACE@[31; 32) " "
- PATH_TYPE@[32; 35)
- PATH@[32; 35)
- PATH_SEGMENT@[32; 35)
- NAME_REF@[32; 35)
- IDENT@[32; 35) "i32"
- WHITESPACE@[35; 36) " "
- BLOCK_EXPR@[36; 42)
- BLOCK@[36; 42)
- L_CURLY@[36; 37) "{"
- WHITESPACE@[37; 38) " "
- LITERAL@[38; 40)
- INT_NUMBER@[38; 40) "92"
- WHITESPACE@[40; 41) " "
- R_CURLY@[41; 42) "}"
- SEMI@[42; 43) ";"
- WHITESPACE@[43; 48) "\n "
- EXPR_STMT@[48; 54)
- LAMBDA_EXPR@[48; 53)
- PARAM_LIST@[48; 51)
- PIPE@[48; 49) "|"
- PARAM@[49; 50)
- BIND_PAT@[49; 50)
- NAME@[49; 50)
- IDENT@[49; 50) "x"
- PIPE@[50; 51) "|"
- WHITESPACE@[51; 52) " "
- PATH_EXPR@[52; 53)
- PATH@[52; 53)
- PATH_SEGMENT@[52; 53)
- NAME_REF@[52; 53)
- IDENT@[52; 53) "x"
- SEMI@[53; 54) ";"
- WHITESPACE@[54; 59) "\n "
- EXPR_STMT@[59; 76)
- LAMBDA_EXPR@[59; 75)
- MOVE_KW@[59; 63) "move"
- WHITESPACE@[63; 64) " "
- PARAM_LIST@[64; 73)
- PIPE@[64; 65) "|"
- PARAM@[65; 71)
- BIND_PAT@[65; 66)
- NAME@[65; 66)
- IDENT@[65; 66) "x"
- COLON@[66; 67) ":"
- WHITESPACE@[67; 68) " "
- PATH_TYPE@[68; 71)
- PATH@[68; 71)
- PATH_SEGMENT@[68; 71)
- NAME_REF@[68; 71)
- IDENT@[68; 71) "i32"
- COMMA@[71; 72) ","
- PIPE@[72; 73) "|"
- WHITESPACE@[73; 74) " "
- PATH_EXPR@[74; 75)
- PATH@[74; 75)
- PATH_SEGMENT@[74; 75)
- NAME_REF@[74; 75)
- IDENT@[74; 75) "x"
- SEMI@[75; 76) ";"
- WHITESPACE@[76; 81) "\n "
- EXPR_STMT@[81; 93)
- LAMBDA_EXPR@[81; 92)
- ASYNC_KW@[81; 86) "async"
- WHITESPACE@[86; 87) " "
- PARAM_LIST@[87; 89)
- PIPE@[87; 88) "|"
- PIPE@[88; 89) "|"
- WHITESPACE@[89; 90) " "
- BLOCK_EXPR@[90; 92)
- BLOCK@[90; 92)
- L_CURLY@[90; 91) "{"
- R_CURLY@[91; 92) "}"
- SEMI@[92; 93) ";"
- WHITESPACE@[93; 98) "\n "
- EXPR_STMT@[98; 109)
- LAMBDA_EXPR@[98; 108)
- MOVE_KW@[98; 102) "move"
- WHITESPACE@[102; 103) " "
- PARAM_LIST@[103; 105)
- PIPE@[103; 104) "|"
- PIPE@[104; 105) "|"
- WHITESPACE@[105; 106) " "
- BLOCK_EXPR@[106; 108)
- BLOCK@[106; 108)
- L_CURLY@[106; 107) "{"
- R_CURLY@[107; 108) "}"
- SEMI@[108; 109) ";"
- WHITESPACE@[109; 114) "\n "
- EXPR_STMT@[114; 131)
- LAMBDA_EXPR@[114; 130)
- ASYNC_KW@[114; 119) "async"
- WHITESPACE@[119; 120) " "
- MOVE_KW@[120; 124) "move"
- WHITESPACE@[124; 125) " "
- PARAM_LIST@[125; 127)
- PIPE@[125; 126) "|"
- PIPE@[126; 127) "|"
- WHITESPACE@[127; 128) " "
- BLOCK_EXPR@[128; 130)
- BLOCK@[128; 130)
- L_CURLY@[128; 129) "{"
- R_CURLY@[129; 130) "}"
- SEMI@[130; 131) ";"
- WHITESPACE@[131; 132) "\n"
- R_CURLY@[132; 133) "}"
- WHITESPACE@[133; 134) "\n"
+++ /dev/null
-fn foo() {
- x.foo();
- y.bar::<T>(1, 2,);
-}
+++ /dev/null
-SOURCE_FILE@[0; 49)
- FN_DEF@[0; 48)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 48)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- EXPR_STMT@[15; 23)
- METHOD_CALL_EXPR@[15; 22)
- PATH_EXPR@[15; 16)
- PATH@[15; 16)
- PATH_SEGMENT@[15; 16)
- NAME_REF@[15; 16)
- IDENT@[15; 16) "x"
- DOT@[16; 17) "."
- NAME_REF@[17; 20)
- IDENT@[17; 20) "foo"
- ARG_LIST@[20; 22)
- L_PAREN@[20; 21) "("
- R_PAREN@[21; 22) ")"
- SEMI@[22; 23) ";"
- WHITESPACE@[23; 28) "\n "
- EXPR_STMT@[28; 46)
- METHOD_CALL_EXPR@[28; 45)
- PATH_EXPR@[28; 29)
- PATH@[28; 29)
- PATH_SEGMENT@[28; 29)
- NAME_REF@[28; 29)
- IDENT@[28; 29) "y"
- DOT@[29; 30) "."
- NAME_REF@[30; 33)
- IDENT@[30; 33) "bar"
- TYPE_ARG_LIST@[33; 38)
- COLONCOLON@[33; 35) "::"
- L_ANGLE@[35; 36) "<"
- TYPE_ARG@[36; 37)
- PATH_TYPE@[36; 37)
- PATH@[36; 37)
- PATH_SEGMENT@[36; 37)
- NAME_REF@[36; 37)
- IDENT@[36; 37) "T"
- R_ANGLE@[37; 38) ">"
- ARG_LIST@[38; 45)
- L_PAREN@[38; 39) "("
- LITERAL@[39; 40)
- INT_NUMBER@[39; 40) "1"
- COMMA@[40; 41) ","
- WHITESPACE@[41; 42) " "
- LITERAL@[42; 43)
- INT_NUMBER@[42; 43) "2"
- COMMA@[43; 44) ","
- R_PAREN@[44; 45) ")"
- SEMI@[45; 46) ";"
- WHITESPACE@[46; 47) "\n"
- R_CURLY@[47; 48) "}"
- WHITESPACE@[48; 49) "\n"
+++ /dev/null
-fn foo() {
- ();
- (1);
- (1,);
-}
+++ /dev/null
-SOURCE_FILE@[0; 40)
- FN_DEF@[0; 39)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 39)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- EXPR_STMT@[15; 18)
- TUPLE_EXPR@[15; 17)
- L_PAREN@[15; 16) "("
- R_PAREN@[16; 17) ")"
- SEMI@[17; 18) ";"
- WHITESPACE@[18; 23) "\n "
- EXPR_STMT@[23; 27)
- PAREN_EXPR@[23; 26)
- L_PAREN@[23; 24) "("
- LITERAL@[24; 25)
- INT_NUMBER@[24; 25) "1"
- R_PAREN@[25; 26) ")"
- SEMI@[26; 27) ";"
- WHITESPACE@[27; 32) "\n "
- EXPR_STMT@[32; 37)
- TUPLE_EXPR@[32; 36)
- L_PAREN@[32; 33) "("
- LITERAL@[33; 34)
- INT_NUMBER@[33; 34) "1"
- COMMA@[34; 35) ","
- R_PAREN@[35; 36) ")"
- SEMI@[36; 37) ";"
- WHITESPACE@[37; 38) "\n"
- R_CURLY@[38; 39) "}"
- WHITESPACE@[39; 40) "\n"
+++ /dev/null
-fn foo() {
- 'a: loop {}
- 'b: while true {}
- 'c: for x in () {}
-}
+++ /dev/null
-SOURCE_FILE@[0; 74)
- FN_DEF@[0; 73)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 73)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- EXPR_STMT@[15; 26)
- LOOP_EXPR@[15; 26)
- LABEL@[15; 18)
- LIFETIME@[15; 17) "\'a"
- COLON@[17; 18) ":"
- WHITESPACE@[18; 19) " "
- LOOP_KW@[19; 23) "loop"
- WHITESPACE@[23; 24) " "
- BLOCK@[24; 26)
- L_CURLY@[24; 25) "{"
- R_CURLY@[25; 26) "}"
- WHITESPACE@[26; 31) "\n "
- EXPR_STMT@[31; 48)
- WHILE_EXPR@[31; 48)
- LABEL@[31; 34)
- LIFETIME@[31; 33) "\'b"
- COLON@[33; 34) ":"
- WHITESPACE@[34; 35) " "
- WHILE_KW@[35; 40) "while"
- WHITESPACE@[40; 41) " "
- CONDITION@[41; 45)
- LITERAL@[41; 45)
- TRUE_KW@[41; 45) "true"
- WHITESPACE@[45; 46) " "
- BLOCK@[46; 48)
- L_CURLY@[46; 47) "{"
- R_CURLY@[47; 48) "}"
- WHITESPACE@[48; 53) "\n "
- FOR_EXPR@[53; 71)
- LABEL@[53; 56)
- LIFETIME@[53; 55) "\'c"
- COLON@[55; 56) ":"
- WHITESPACE@[56; 57) " "
- FOR_KW@[57; 60) "for"
- WHITESPACE@[60; 61) " "
- BIND_PAT@[61; 62)
- NAME@[61; 62)
- IDENT@[61; 62) "x"
- WHITESPACE@[62; 63) " "
- IN_KW@[63; 65) "in"
- WHITESPACE@[65; 66) " "
- TUPLE_EXPR@[66; 68)
- L_PAREN@[66; 67) "("
- R_PAREN@[67; 68) ")"
- WHITESPACE@[68; 69) " "
- BLOCK@[69; 71)
- L_CURLY@[69; 70) "{"
- R_CURLY@[70; 71) "}"
- WHITESPACE@[71; 72) "\n"
- R_CURLY@[72; 73) "}"
- WHITESPACE@[73; 74) "\n"
+++ /dev/null
-use ::crate_name; // Rust 2018 - All flavours
-use crate_name; // Rust 2018 - Anchored paths
-use item_in_scope_or_crate_name; // Rust 2018 - Uniform Paths
+++ /dev/null
-SOURCE_FILE@[0; 154)
- USE_ITEM@[0; 17)
- USE_KW@[0; 3) "use"
- WHITESPACE@[3; 4) " "
- USE_TREE@[4; 16)
- PATH@[4; 16)
- PATH_SEGMENT@[4; 16)
- COLONCOLON@[4; 6) "::"
- NAME_REF@[6; 16)
- IDENT@[6; 16) "crate_name"
- SEMI@[16; 17) ";"
- WHITESPACE@[17; 18) " "
- COMMENT@[18; 45) "// Rust 2018 - All fl ..."
- WHITESPACE@[45; 46) "\n"
- USE_ITEM@[46; 61)
- USE_KW@[46; 49) "use"
- WHITESPACE@[49; 50) " "
- USE_TREE@[50; 60)
- PATH@[50; 60)
- PATH_SEGMENT@[50; 60)
- NAME_REF@[50; 60)
- IDENT@[50; 60) "crate_name"
- SEMI@[60; 61) ";"
- WHITESPACE@[61; 62) " "
- COMMENT@[62; 91) "// Rust 2018 - Anchor ..."
- WHITESPACE@[91; 92) "\n"
- USE_ITEM@[92; 124)
- USE_KW@[92; 95) "use"
- WHITESPACE@[95; 96) " "
- USE_TREE@[96; 123)
- PATH@[96; 123)
- PATH_SEGMENT@[96; 123)
- NAME_REF@[96; 123)
- IDENT@[96; 123) "item_in_scope_or_crat ..."
- SEMI@[123; 124) ";"
- WHITESPACE@[124; 125) " "
- COMMENT@[125; 153) "// Rust 2018 - Unifor ..."
- WHITESPACE@[153; 154) "\n"
+++ /dev/null
-fn main() {
- let (a, b, ..) = ();
-}
+++ /dev/null
-SOURCE_FILE@[0; 39)
- FN_DEF@[0; 38)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 7)
- IDENT@[3; 7) "main"
- PARAM_LIST@[7; 9)
- L_PAREN@[7; 8) "("
- R_PAREN@[8; 9) ")"
- WHITESPACE@[9; 10) " "
- BLOCK@[10; 38)
- L_CURLY@[10; 11) "{"
- WHITESPACE@[11; 16) "\n "
- LET_STMT@[16; 36)
- LET_KW@[16; 19) "let"
- WHITESPACE@[19; 20) " "
- TUPLE_PAT@[20; 30)
- L_PAREN@[20; 21) "("
- BIND_PAT@[21; 22)
- NAME@[21; 22)
- IDENT@[21; 22) "a"
- COMMA@[22; 23) ","
- WHITESPACE@[23; 24) " "
- BIND_PAT@[24; 25)
- NAME@[24; 25)
- IDENT@[24; 25) "b"
- COMMA@[25; 26) ","
- WHITESPACE@[26; 27) " "
- DOTDOT@[27; 29) ".."
- R_PAREN@[29; 30) ")"
- WHITESPACE@[30; 31) " "
- EQ@[31; 32) "="
- WHITESPACE@[32; 33) " "
- TUPLE_EXPR@[33; 35)
- L_PAREN@[33; 34) "("
- R_PAREN@[34; 35) ")"
- SEMI@[35; 36) ";"
- WHITESPACE@[36; 37) "\n"
- R_CURLY@[37; 38) "}"
- WHITESPACE@[38; 39) "\n"
+++ /dev/null
-fn main() {
- let a = ();
- let mut b = ();
- let ref c = ();
- let ref mut d = ();
- let e @ _ = ();
- let ref mut f @ g @ _ = ();
- let box i = Box::new(1i32);
-}
+++ /dev/null
-SOURCE_FILE@[0; 178)
- FN_DEF@[0; 177)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 7)
- IDENT@[3; 7) "main"
- PARAM_LIST@[7; 9)
- L_PAREN@[7; 8) "("
- R_PAREN@[8; 9) ")"
- WHITESPACE@[9; 10) " "
- BLOCK@[10; 177)
- L_CURLY@[10; 11) "{"
- WHITESPACE@[11; 16) "\n "
- LET_STMT@[16; 27)
- LET_KW@[16; 19) "let"
- WHITESPACE@[19; 20) " "
- BIND_PAT@[20; 21)
- NAME@[20; 21)
- IDENT@[20; 21) "a"
- WHITESPACE@[21; 22) " "
- EQ@[22; 23) "="
- WHITESPACE@[23; 24) " "
- TUPLE_EXPR@[24; 26)
- L_PAREN@[24; 25) "("
- R_PAREN@[25; 26) ")"
- SEMI@[26; 27) ";"
- WHITESPACE@[27; 32) "\n "
- LET_STMT@[32; 47)
- LET_KW@[32; 35) "let"
- WHITESPACE@[35; 36) " "
- BIND_PAT@[36; 41)
- MUT_KW@[36; 39) "mut"
- WHITESPACE@[39; 40) " "
- NAME@[40; 41)
- IDENT@[40; 41) "b"
- WHITESPACE@[41; 42) " "
- EQ@[42; 43) "="
- WHITESPACE@[43; 44) " "
- TUPLE_EXPR@[44; 46)
- L_PAREN@[44; 45) "("
- R_PAREN@[45; 46) ")"
- SEMI@[46; 47) ";"
- WHITESPACE@[47; 52) "\n "
- LET_STMT@[52; 67)
- LET_KW@[52; 55) "let"
- WHITESPACE@[55; 56) " "
- BIND_PAT@[56; 61)
- REF_KW@[56; 59) "ref"
- WHITESPACE@[59; 60) " "
- NAME@[60; 61)
- IDENT@[60; 61) "c"
- WHITESPACE@[61; 62) " "
- EQ@[62; 63) "="
- WHITESPACE@[63; 64) " "
- TUPLE_EXPR@[64; 66)
- L_PAREN@[64; 65) "("
- R_PAREN@[65; 66) ")"
- SEMI@[66; 67) ";"
- WHITESPACE@[67; 72) "\n "
- LET_STMT@[72; 91)
- LET_KW@[72; 75) "let"
- WHITESPACE@[75; 76) " "
- BIND_PAT@[76; 85)
- REF_KW@[76; 79) "ref"
- WHITESPACE@[79; 80) " "
- MUT_KW@[80; 83) "mut"
- WHITESPACE@[83; 84) " "
- NAME@[84; 85)
- IDENT@[84; 85) "d"
- WHITESPACE@[85; 86) " "
- EQ@[86; 87) "="
- WHITESPACE@[87; 88) " "
- TUPLE_EXPR@[88; 90)
- L_PAREN@[88; 89) "("
- R_PAREN@[89; 90) ")"
- SEMI@[90; 91) ";"
- WHITESPACE@[91; 96) "\n "
- LET_STMT@[96; 111)
- LET_KW@[96; 99) "let"
- WHITESPACE@[99; 100) " "
- BIND_PAT@[100; 105)
- NAME@[100; 101)
- IDENT@[100; 101) "e"
- WHITESPACE@[101; 102) " "
- AT@[102; 103) "@"
- WHITESPACE@[103; 104) " "
- PLACEHOLDER_PAT@[104; 105)
- UNDERSCORE@[104; 105) "_"
- WHITESPACE@[105; 106) " "
- EQ@[106; 107) "="
- WHITESPACE@[107; 108) " "
- TUPLE_EXPR@[108; 110)
- L_PAREN@[108; 109) "("
- R_PAREN@[109; 110) ")"
- SEMI@[110; 111) ";"
- WHITESPACE@[111; 116) "\n "
- LET_STMT@[116; 143)
- LET_KW@[116; 119) "let"
- WHITESPACE@[119; 120) " "
- BIND_PAT@[120; 137)
- REF_KW@[120; 123) "ref"
- WHITESPACE@[123; 124) " "
- MUT_KW@[124; 127) "mut"
- WHITESPACE@[127; 128) " "
- NAME@[128; 129)
- IDENT@[128; 129) "f"
- WHITESPACE@[129; 130) " "
- AT@[130; 131) "@"
- WHITESPACE@[131; 132) " "
- BIND_PAT@[132; 137)
- NAME@[132; 133)
- IDENT@[132; 133) "g"
- WHITESPACE@[133; 134) " "
- AT@[134; 135) "@"
- WHITESPACE@[135; 136) " "
- PLACEHOLDER_PAT@[136; 137)
- UNDERSCORE@[136; 137) "_"
- WHITESPACE@[137; 138) " "
- EQ@[138; 139) "="
- WHITESPACE@[139; 140) " "
- TUPLE_EXPR@[140; 142)
- L_PAREN@[140; 141) "("
- R_PAREN@[141; 142) ")"
- SEMI@[142; 143) ";"
- WHITESPACE@[143; 148) "\n "
- LET_STMT@[148; 175)
- LET_KW@[148; 151) "let"
- WHITESPACE@[151; 152) " "
- BIND_PAT@[152; 157)
- BOX_KW@[152; 155) "box"
- WHITESPACE@[155; 156) " "
- NAME@[156; 157)
- IDENT@[156; 157) "i"
- WHITESPACE@[157; 158) " "
- EQ@[158; 159) "="
- WHITESPACE@[159; 160) " "
- CALL_EXPR@[160; 174)
- PATH_EXPR@[160; 168)
- PATH@[160; 168)
- PATH@[160; 163)
- PATH_SEGMENT@[160; 163)
- NAME_REF@[160; 163)
- IDENT@[160; 163) "Box"
- COLONCOLON@[163; 165) "::"
- PATH_SEGMENT@[165; 168)
- NAME_REF@[165; 168)
- IDENT@[165; 168) "new"
- ARG_LIST@[168; 174)
- L_PAREN@[168; 169) "("
- LITERAL@[169; 173)
- INT_NUMBER@[169; 173) "1i32"
- R_PAREN@[173; 174) ")"
- SEMI@[174; 175) ";"
- WHITESPACE@[175; 176) "\n"
- R_CURLY@[176; 177) "}"
- WHITESPACE@[177; 178) "\n"
+++ /dev/null
-fn foo(){
- ;;;some_expr();;;;{;;;};;;;Ok(())
-}
+++ /dev/null
-SOURCE_FILE@[0; 50)
- FN_DEF@[0; 49)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- BLOCK@[8; 49)
- L_CURLY@[8; 9) "{"
- WHITESPACE@[9; 14) "\n "
- SEMI@[14; 15) ";"
- SEMI@[15; 16) ";"
- SEMI@[16; 17) ";"
- EXPR_STMT@[17; 29)
- CALL_EXPR@[17; 28)
- PATH_EXPR@[17; 26)
- PATH@[17; 26)
- PATH_SEGMENT@[17; 26)
- NAME_REF@[17; 26)
- IDENT@[17; 26) "some_expr"
- ARG_LIST@[26; 28)
- L_PAREN@[26; 27) "("
- R_PAREN@[27; 28) ")"
- SEMI@[28; 29) ";"
- SEMI@[29; 30) ";"
- SEMI@[30; 31) ";"
- SEMI@[31; 32) ";"
- EXPR_STMT@[32; 38)
- BLOCK_EXPR@[32; 37)
- BLOCK@[32; 37)
- L_CURLY@[32; 33) "{"
- SEMI@[33; 34) ";"
- SEMI@[34; 35) ";"
- SEMI@[35; 36) ";"
- R_CURLY@[36; 37) "}"
- SEMI@[37; 38) ";"
- SEMI@[38; 39) ";"
- SEMI@[39; 40) ";"
- SEMI@[40; 41) ";"
- CALL_EXPR@[41; 47)
- PATH_EXPR@[41; 43)
- PATH@[41; 43)
- PATH_SEGMENT@[41; 43)
- NAME_REF@[41; 43)
- IDENT@[41; 43) "Ok"
- ARG_LIST@[43; 47)
- L_PAREN@[43; 44) "("
- TUPLE_EXPR@[44; 46)
- L_PAREN@[44; 45) "("
- R_PAREN@[45; 46) ")"
- R_PAREN@[46; 47) ")"
- WHITESPACE@[47; 48) "\n"
- R_CURLY@[48; 49) "}"
- WHITESPACE@[49; 50) "\n"
+++ /dev/null
-struct Test<T>(T) where T: Clone;
-struct Test<T>(T);
+++ /dev/null
-SOURCE_FILE@[0; 53)
- STRUCT_DEF@[0; 33)
- STRUCT_KW@[0; 6) "struct"
- WHITESPACE@[6; 7) " "
- NAME@[7; 11)
- IDENT@[7; 11) "Test"
- TYPE_PARAM_LIST@[11; 14)
- L_ANGLE@[11; 12) "<"
- TYPE_PARAM@[12; 13)
- NAME@[12; 13)
- IDENT@[12; 13) "T"
- R_ANGLE@[13; 14) ">"
- POS_FIELD_DEF_LIST@[14; 17)
- L_PAREN@[14; 15) "("
- POS_FIELD_DEF@[15; 16)
- PATH_TYPE@[15; 16)
- PATH@[15; 16)
- PATH_SEGMENT@[15; 16)
- NAME_REF@[15; 16)
- IDENT@[15; 16) "T"
- R_PAREN@[16; 17) ")"
- WHITESPACE@[17; 18) " "
- WHERE_CLAUSE@[18; 32)
- WHERE_KW@[18; 23) "where"
- WHITESPACE@[23; 24) " "
- WHERE_PRED@[24; 32)
- PATH_TYPE@[24; 25)
- PATH@[24; 25)
- PATH_SEGMENT@[24; 25)
- NAME_REF@[24; 25)
- IDENT@[24; 25) "T"
- COLON@[25; 26) ":"
- WHITESPACE@[26; 27) " "
- TYPE_BOUND_LIST@[27; 32)
- TYPE_BOUND@[27; 32)
- PATH_TYPE@[27; 32)
- PATH@[27; 32)
- PATH_SEGMENT@[27; 32)
- NAME_REF@[27; 32)
- IDENT@[27; 32) "Clone"
- SEMI@[32; 33) ";"
- WHITESPACE@[33; 34) "\n"
- STRUCT_DEF@[34; 52)
- STRUCT_KW@[34; 40) "struct"
- WHITESPACE@[40; 41) " "
- NAME@[41; 45)
- IDENT@[41; 45) "Test"
- TYPE_PARAM_LIST@[45; 48)
- L_ANGLE@[45; 46) "<"
- TYPE_PARAM@[46; 47)
- NAME@[46; 47)
- IDENT@[46; 47) "T"
- R_ANGLE@[47; 48) ">"
- POS_FIELD_DEF_LIST@[48; 51)
- L_PAREN@[48; 49) "("
- POS_FIELD_DEF@[49; 50)
- PATH_TYPE@[49; 50)
- PATH@[49; 50)
- PATH_SEGMENT@[49; 50)
- NAME_REF@[49; 50)
- IDENT@[49; 50) "T"
- R_PAREN@[50; 51) ")"
- SEMI@[51; 52) ";"
- WHITESPACE@[52; 53) "\n"
+++ /dev/null
-struct S (
- #[serde(with = "url_serde")]
- pub Uri,
-);
+++ /dev/null
-SOURCE_FILE@[0; 60)
- STRUCT_DEF@[0; 59)
- STRUCT_KW@[0; 6) "struct"
- WHITESPACE@[6; 7) " "
- NAME@[7; 8)
- IDENT@[7; 8) "S"
- WHITESPACE@[8; 9) " "
- POS_FIELD_DEF_LIST@[9; 58)
- L_PAREN@[9; 10) "("
- WHITESPACE@[10; 15) "\n "
- POS_FIELD_DEF@[15; 55)
- ATTR@[15; 43)
- POUND@[15; 16) "#"
- TOKEN_TREE@[16; 43)
- L_BRACK@[16; 17) "["
- IDENT@[17; 22) "serde"
- TOKEN_TREE@[22; 42)
- L_PAREN@[22; 23) "("
- IDENT@[23; 27) "with"
- WHITESPACE@[27; 28) " "
- EQ@[28; 29) "="
- WHITESPACE@[29; 30) " "
- STRING@[30; 41) "\"url_serde\""
- R_PAREN@[41; 42) ")"
- R_BRACK@[42; 43) "]"
- WHITESPACE@[43; 48) "\n "
- VISIBILITY@[48; 51)
- PUB_KW@[48; 51) "pub"
- WHITESPACE@[51; 52) " "
- PATH_TYPE@[52; 55)
- PATH@[52; 55)
- PATH_SEGMENT@[52; 55)
- NAME_REF@[52; 55)
- IDENT@[52; 55) "Uri"
- COMMA@[55; 56) ","
- WHITESPACE@[56; 57) "\n"
- R_PAREN@[57; 58) ")"
- SEMI@[58; 59) ";"
- WHITESPACE@[59; 60) "\n"
+++ /dev/null
-trait Foo {
- fn bar(_: u64, mut x: i32);
-}
+++ /dev/null
-SOURCE_FILE@[0; 46)
- TRAIT_DEF@[0; 45)
- TRAIT_KW@[0; 5) "trait"
- WHITESPACE@[5; 6) " "
- NAME@[6; 9)
- IDENT@[6; 9) "Foo"
- WHITESPACE@[9; 10) " "
- ITEM_LIST@[10; 45)
- L_CURLY@[10; 11) "{"
- WHITESPACE@[11; 16) "\n "
- FN_DEF@[16; 43)
- FN_KW@[16; 18) "fn"
- WHITESPACE@[18; 19) " "
- NAME@[19; 22)
- IDENT@[19; 22) "bar"
- PARAM_LIST@[22; 42)
- L_PAREN@[22; 23) "("
- PARAM@[23; 29)
- PLACEHOLDER_PAT@[23; 24)
- UNDERSCORE@[23; 24) "_"
- COLON@[24; 25) ":"
- WHITESPACE@[25; 26) " "
- PATH_TYPE@[26; 29)
- PATH@[26; 29)
- PATH_SEGMENT@[26; 29)
- NAME_REF@[26; 29)
- IDENT@[26; 29) "u64"
- COMMA@[29; 30) ","
- WHITESPACE@[30; 31) " "
- PARAM@[31; 41)
- BIND_PAT@[31; 36)
- MUT_KW@[31; 34) "mut"
- WHITESPACE@[34; 35) " "
- NAME@[35; 36)
- IDENT@[35; 36) "x"
- COLON@[36; 37) ":"
- WHITESPACE@[37; 38) " "
- PATH_TYPE@[38; 41)
- PATH@[38; 41)
- PATH_SEGMENT@[38; 41)
- NAME_REF@[38; 41)
- IDENT@[38; 41) "i32"
- R_PAREN@[41; 42) ")"
- SEMI@[42; 43) ";"
- WHITESPACE@[43; 44) "\n"
- R_CURLY@[44; 45) "}"
- WHITESPACE@[45; 46) "\n"
+++ /dev/null
-type A = foo!();
-type B = crate::foo!();
+++ /dev/null
-SOURCE_FILE@[0; 41)
- TYPE_ALIAS_DEF@[0; 16)
- TYPE_KW@[0; 4) "type"
- WHITESPACE@[4; 5) " "
- NAME@[5; 6)
- IDENT@[5; 6) "A"
- WHITESPACE@[6; 7) " "
- EQ@[7; 8) "="
- WHITESPACE@[8; 9) " "
- MACRO_CALL@[9; 15)
- PATH@[9; 12)
- PATH_SEGMENT@[9; 12)
- NAME_REF@[9; 12)
- IDENT@[9; 12) "foo"
- EXCL@[12; 13) "!"
- TOKEN_TREE@[13; 15)
- L_PAREN@[13; 14) "("
- R_PAREN@[14; 15) ")"
- SEMI@[15; 16) ";"
- WHITESPACE@[16; 17) "\n"
- TYPE_ALIAS_DEF@[17; 40)
- TYPE_KW@[17; 21) "type"
- WHITESPACE@[21; 22) " "
- NAME@[22; 23)
- IDENT@[22; 23) "B"
- WHITESPACE@[23; 24) " "
- EQ@[24; 25) "="
- WHITESPACE@[25; 26) " "
- MACRO_CALL@[26; 39)
- PATH@[26; 36)
- PATH@[26; 31)
- PATH_SEGMENT@[26; 31)
- CRATE_KW@[26; 31) "crate"
- COLONCOLON@[31; 33) "::"
- PATH_SEGMENT@[33; 36)
- NAME_REF@[33; 36)
- IDENT@[33; 36) "foo"
- EXCL@[36; 37) "!"
- TOKEN_TREE@[37; 39)
- L_PAREN@[37; 38) "("
- R_PAREN@[38; 39) ")"
- SEMI@[39; 40) ";"
- WHITESPACE@[40; 41) "\n"
+++ /dev/null
-enum F{}
-impl F {
- //! This is a doc comment
- #![doc("This is also a doc comment")]
-}
+++ /dev/null
-SOURCE_FILE@[0; 94)
- ENUM_DEF@[0; 8)
- ENUM_KW@[0; 4) "enum"
- WHITESPACE@[4; 5) " "
- NAME@[5; 6)
- IDENT@[5; 6) "F"
- ENUM_VARIANT_LIST@[6; 8)
- L_CURLY@[6; 7) "{"
- R_CURLY@[7; 8) "}"
- WHITESPACE@[8; 9) "\n"
- IMPL_BLOCK@[9; 93)
- IMPL_KW@[9; 13) "impl"
- WHITESPACE@[13; 14) " "
- PATH_TYPE@[14; 15)
- PATH@[14; 15)
- PATH_SEGMENT@[14; 15)
- NAME_REF@[14; 15)
- IDENT@[14; 15) "F"
- WHITESPACE@[15; 16) " "
- ITEM_LIST@[16; 93)
- L_CURLY@[16; 17) "{"
- WHITESPACE@[17; 23) "\n "
- COMMENT@[23; 48) "//! This is a doc com ..."
- WHITESPACE@[48; 54) "\n "
- ATTR@[54; 91)
- POUND@[54; 55) "#"
- EXCL@[55; 56) "!"
- TOKEN_TREE@[56; 91)
- L_BRACK@[56; 57) "["
- IDENT@[57; 60) "doc"
- TOKEN_TREE@[60; 90)
- L_PAREN@[60; 61) "("
- STRING@[61; 89) "\"This is also a doc c ..."
- R_PAREN@[89; 90) ")"
- R_BRACK@[90; 91) "]"
- WHITESPACE@[91; 92) "\n"
- R_CURLY@[92; 93) "}"
- WHITESPACE@[93; 94) "\n"
+++ /dev/null
-fn foo() {
- match () {
- _ if foo => (),
- }
-}
+++ /dev/null
-SOURCE_FILE@[0; 58)
- FN_DEF@[0; 57)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 57)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- MATCH_EXPR@[15; 55)
- MATCH_KW@[15; 20) "match"
- WHITESPACE@[20; 21) " "
- TUPLE_EXPR@[21; 23)
- L_PAREN@[21; 22) "("
- R_PAREN@[22; 23) ")"
- WHITESPACE@[23; 24) " "
- MATCH_ARM_LIST@[24; 55)
- L_CURLY@[24; 25) "{"
- WHITESPACE@[25; 34) "\n "
- MATCH_ARM@[34; 48)
- PLACEHOLDER_PAT@[34; 35)
- UNDERSCORE@[34; 35) "_"
- WHITESPACE@[35; 36) " "
- MATCH_GUARD@[36; 42)
- IF_KW@[36; 38) "if"
- WHITESPACE@[38; 39) " "
- PATH_EXPR@[39; 42)
- PATH@[39; 42)
- PATH_SEGMENT@[39; 42)
- NAME_REF@[39; 42)
- IDENT@[39; 42) "foo"
- WHITESPACE@[42; 43) " "
- FAT_ARROW@[43; 45) "=>"
- WHITESPACE@[45; 46) " "
- TUPLE_EXPR@[46; 48)
- L_PAREN@[46; 47) "("
- R_PAREN@[47; 48) ")"
- COMMA@[48; 49) ","
- WHITESPACE@[49; 54) "\n "
- R_CURLY@[54; 55) "}"
- WHITESPACE@[55; 56) "\n"
- R_CURLY@[56; 57) "}"
- WHITESPACE@[57; 58) "\n"
+++ /dev/null
-fn foo() {
- match () {
- #![doc("Inner attribute")]
- #![doc("Can be")]
- #![doc("Stacked")]
- _ => (),
- }
-}
+++ /dev/null
-SOURCE_FILE@[0; 139)
- FN_DEF@[0; 138)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 138)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- MATCH_EXPR@[15; 136)
- MATCH_KW@[15; 20) "match"
- WHITESPACE@[20; 21) " "
- TUPLE_EXPR@[21; 23)
- L_PAREN@[21; 22) "("
- R_PAREN@[22; 23) ")"
- WHITESPACE@[23; 24) " "
- MATCH_ARM_LIST@[24; 136)
- L_CURLY@[24; 25) "{"
- WHITESPACE@[25; 34) "\n "
- ATTR@[34; 60)
- POUND@[34; 35) "#"
- EXCL@[35; 36) "!"
- TOKEN_TREE@[36; 60)
- L_BRACK@[36; 37) "["
- IDENT@[37; 40) "doc"
- TOKEN_TREE@[40; 59)
- L_PAREN@[40; 41) "("
- STRING@[41; 58) "\"Inner attribute\""
- R_PAREN@[58; 59) ")"
- R_BRACK@[59; 60) "]"
- WHITESPACE@[60; 69) "\n "
- ATTR@[69; 86)
- POUND@[69; 70) "#"
- EXCL@[70; 71) "!"
- TOKEN_TREE@[71; 86)
- L_BRACK@[71; 72) "["
- IDENT@[72; 75) "doc"
- TOKEN_TREE@[75; 85)
- L_PAREN@[75; 76) "("
- STRING@[76; 84) "\"Can be\""
- R_PAREN@[84; 85) ")"
- R_BRACK@[85; 86) "]"
- WHITESPACE@[86; 95) "\n "
- ATTR@[95; 113)
- POUND@[95; 96) "#"
- EXCL@[96; 97) "!"
- TOKEN_TREE@[97; 113)
- L_BRACK@[97; 98) "["
- IDENT@[98; 101) "doc"
- TOKEN_TREE@[101; 112)
- L_PAREN@[101; 102) "("
- STRING@[102; 111) "\"Stacked\""
- R_PAREN@[111; 112) ")"
- R_BRACK@[112; 113) "]"
- WHITESPACE@[113; 122) "\n "
- MATCH_ARM@[122; 129)
- PLACEHOLDER_PAT@[122; 123)
- UNDERSCORE@[122; 123) "_"
- WHITESPACE@[123; 124) " "
- FAT_ARROW@[124; 126) "=>"
- WHITESPACE@[126; 127) " "
- TUPLE_EXPR@[127; 129)
- L_PAREN@[127; 128) "("
- R_PAREN@[128; 129) ")"
- COMMA@[129; 130) ","
- WHITESPACE@[130; 135) "\n "
- R_CURLY@[135; 136) "}"
- WHITESPACE@[136; 137) "\n"
- R_CURLY@[137; 138) "}"
- WHITESPACE@[138; 139) "\n"
+++ /dev/null
-fn foo() {
- match () {
- #[cfg(feature = "some")]
- _ => (),
- #[cfg(feature = "other")]
- _ => (),
- #[cfg(feature = "many")]
- #[cfg(feature = "attributes")]
- #[cfg(feature = "before")]
- _ => (),
- }
-}
+++ /dev/null
-SOURCE_FILE@[0; 259)
- FN_DEF@[0; 258)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 258)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- MATCH_EXPR@[15; 256)
- MATCH_KW@[15; 20) "match"
- WHITESPACE@[20; 21) " "
- TUPLE_EXPR@[21; 23)
- L_PAREN@[21; 22) "("
- R_PAREN@[22; 23) ")"
- WHITESPACE@[23; 24) " "
- MATCH_ARM_LIST@[24; 256)
- L_CURLY@[24; 25) "{"
- WHITESPACE@[25; 34) "\n "
- MATCH_ARM@[34; 74)
- ATTR@[34; 58)
- POUND@[34; 35) "#"
- TOKEN_TREE@[35; 58)
- L_BRACK@[35; 36) "["
- IDENT@[36; 39) "cfg"
- TOKEN_TREE@[39; 57)
- L_PAREN@[39; 40) "("
- IDENT@[40; 47) "feature"
- WHITESPACE@[47; 48) " "
- EQ@[48; 49) "="
- WHITESPACE@[49; 50) " "
- STRING@[50; 56) "\"some\""
- R_PAREN@[56; 57) ")"
- R_BRACK@[57; 58) "]"
- WHITESPACE@[58; 67) "\n "
- PLACEHOLDER_PAT@[67; 68)
- UNDERSCORE@[67; 68) "_"
- WHITESPACE@[68; 69) " "
- FAT_ARROW@[69; 71) "=>"
- WHITESPACE@[71; 72) " "
- TUPLE_EXPR@[72; 74)
- L_PAREN@[72; 73) "("
- R_PAREN@[73; 74) ")"
- COMMA@[74; 75) ","
- WHITESPACE@[75; 84) "\n "
- MATCH_ARM@[84; 125)
- ATTR@[84; 109)
- POUND@[84; 85) "#"
- TOKEN_TREE@[85; 109)
- L_BRACK@[85; 86) "["
- IDENT@[86; 89) "cfg"
- TOKEN_TREE@[89; 108)
- L_PAREN@[89; 90) "("
- IDENT@[90; 97) "feature"
- WHITESPACE@[97; 98) " "
- EQ@[98; 99) "="
- WHITESPACE@[99; 100) " "
- STRING@[100; 107) "\"other\""
- R_PAREN@[107; 108) ")"
- R_BRACK@[108; 109) "]"
- WHITESPACE@[109; 118) "\n "
- PLACEHOLDER_PAT@[118; 119)
- UNDERSCORE@[118; 119) "_"
- WHITESPACE@[119; 120) " "
- FAT_ARROW@[120; 122) "=>"
- WHITESPACE@[122; 123) " "
- TUPLE_EXPR@[123; 125)
- L_PAREN@[123; 124) "("
- R_PAREN@[124; 125) ")"
- COMMA@[125; 126) ","
- WHITESPACE@[126; 135) "\n "
- MATCH_ARM@[135; 249)
- ATTR@[135; 159)
- POUND@[135; 136) "#"
- TOKEN_TREE@[136; 159)
- L_BRACK@[136; 137) "["
- IDENT@[137; 140) "cfg"
- TOKEN_TREE@[140; 158)
- L_PAREN@[140; 141) "("
- IDENT@[141; 148) "feature"
- WHITESPACE@[148; 149) " "
- EQ@[149; 150) "="
- WHITESPACE@[150; 151) " "
- STRING@[151; 157) "\"many\""
- R_PAREN@[157; 158) ")"
- R_BRACK@[158; 159) "]"
- WHITESPACE@[159; 168) "\n "
- ATTR@[168; 198)
- POUND@[168; 169) "#"
- TOKEN_TREE@[169; 198)
- L_BRACK@[169; 170) "["
- IDENT@[170; 173) "cfg"
- TOKEN_TREE@[173; 197)
- L_PAREN@[173; 174) "("
- IDENT@[174; 181) "feature"
- WHITESPACE@[181; 182) " "
- EQ@[182; 183) "="
- WHITESPACE@[183; 184) " "
- STRING@[184; 196) "\"attributes\""
- R_PAREN@[196; 197) ")"
- R_BRACK@[197; 198) "]"
- WHITESPACE@[198; 207) "\n "
- ATTR@[207; 233)
- POUND@[207; 208) "#"
- TOKEN_TREE@[208; 233)
- L_BRACK@[208; 209) "["
- IDENT@[209; 212) "cfg"
- TOKEN_TREE@[212; 232)
- L_PAREN@[212; 213) "("
- IDENT@[213; 220) "feature"
- WHITESPACE@[220; 221) " "
- EQ@[221; 222) "="
- WHITESPACE@[222; 223) " "
- STRING@[223; 231) "\"before\""
- R_PAREN@[231; 232) ")"
- R_BRACK@[232; 233) "]"
- WHITESPACE@[233; 242) "\n "
- PLACEHOLDER_PAT@[242; 243)
- UNDERSCORE@[242; 243) "_"
- WHITESPACE@[243; 244) " "
- FAT_ARROW@[244; 246) "=>"
- WHITESPACE@[246; 247) " "
- TUPLE_EXPR@[247; 249)
- L_PAREN@[247; 248) "("
- R_PAREN@[248; 249) ")"
- COMMA@[249; 250) ","
- WHITESPACE@[250; 255) "\n "
- R_CURLY@[255; 256) "}"
- WHITESPACE@[256; 257) "\n"
- R_CURLY@[257; 258) "}"
- WHITESPACE@[258; 259) "\n"
+++ /dev/null
-fn foo<#[derive(Lifetime)] 'a, #[derive(Type)] T>(_: &'a T) {
-}
+++ /dev/null
-SOURCE_FILE@[0; 64)
- FN_DEF@[0; 63)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- TYPE_PARAM_LIST@[6; 49)
- L_ANGLE@[6; 7) "<"
- LIFETIME_PARAM@[7; 29)
- ATTR@[7; 26)
- POUND@[7; 8) "#"
- TOKEN_TREE@[8; 26)
- L_BRACK@[8; 9) "["
- IDENT@[9; 15) "derive"
- TOKEN_TREE@[15; 25)
- L_PAREN@[15; 16) "("
- IDENT@[16; 24) "Lifetime"
- R_PAREN@[24; 25) ")"
- R_BRACK@[25; 26) "]"
- WHITESPACE@[26; 27) " "
- LIFETIME@[27; 29) "\'a"
- COMMA@[29; 30) ","
- WHITESPACE@[30; 31) " "
- TYPE_PARAM@[31; 48)
- ATTR@[31; 46)
- POUND@[31; 32) "#"
- TOKEN_TREE@[32; 46)
- L_BRACK@[32; 33) "["
- IDENT@[33; 39) "derive"
- TOKEN_TREE@[39; 45)
- L_PAREN@[39; 40) "("
- IDENT@[40; 44) "Type"
- R_PAREN@[44; 45) ")"
- R_BRACK@[45; 46) "]"
- WHITESPACE@[46; 47) " "
- NAME@[47; 48)
- IDENT@[47; 48) "T"
- R_ANGLE@[48; 49) ">"
- PARAM_LIST@[49; 59)
- L_PAREN@[49; 50) "("
- PARAM@[50; 58)
- PLACEHOLDER_PAT@[50; 51)
- UNDERSCORE@[50; 51) "_"
- COLON@[51; 52) ":"
- WHITESPACE@[52; 53) " "
- REFERENCE_TYPE@[53; 58)
- AMP@[53; 54) "&"
- LIFETIME@[54; 56) "\'a"
- WHITESPACE@[56; 57) " "
- PATH_TYPE@[57; 58)
- PATH@[57; 58)
- PATH_SEGMENT@[57; 58)
- NAME_REF@[57; 58)
- IDENT@[57; 58) "T"
- R_PAREN@[58; 59) ")"
- WHITESPACE@[59; 60) " "
- BLOCK@[60; 63)
- L_CURLY@[60; 61) "{"
- WHITESPACE@[61; 62) "\n"
- R_CURLY@[62; 63) "}"
- WHITESPACE@[63; 64) "\n"
+++ /dev/null
-extern "C" { fn printf(format: *const i8, ...) -> i32; }
+++ /dev/null
-SOURCE_FILE@[0; 57)
- EXTERN_BLOCK@[0; 56)
- ABI@[0; 10)
- EXTERN_KW@[0; 6) "extern"
- WHITESPACE@[6; 7) " "
- STRING@[7; 10) "\"C\""
- WHITESPACE@[10; 11) " "
- EXTERN_ITEM_LIST@[11; 56)
- L_CURLY@[11; 12) "{"
- WHITESPACE@[12; 13) " "
- FN_DEF@[13; 54)
- FN_KW@[13; 15) "fn"
- WHITESPACE@[15; 16) " "
- NAME@[16; 22)
- IDENT@[16; 22) "printf"
- PARAM_LIST@[22; 46)
- L_PAREN@[22; 23) "("
- PARAM@[23; 40)
- BIND_PAT@[23; 29)
- NAME@[23; 29)
- IDENT@[23; 29) "format"
- COLON@[29; 30) ":"
- WHITESPACE@[30; 31) " "
- POINTER_TYPE@[31; 40)
- STAR@[31; 32) "*"
- CONST_KW@[32; 37) "const"
- WHITESPACE@[37; 38) " "
- PATH_TYPE@[38; 40)
- PATH@[38; 40)
- PATH_SEGMENT@[38; 40)
- NAME_REF@[38; 40)
- IDENT@[38; 40) "i8"
- COMMA@[40; 41) ","
- WHITESPACE@[41; 42) " "
- DOTDOTDOT@[42; 45) "..."
- R_PAREN@[45; 46) ")"
- WHITESPACE@[46; 47) " "
- RET_TYPE@[47; 53)
- THIN_ARROW@[47; 49) "->"
- WHITESPACE@[49; 50) " "
- PATH_TYPE@[50; 53)
- PATH@[50; 53)
- PATH_SEGMENT@[50; 53)
- NAME_REF@[50; 53)
- IDENT@[50; 53) "i32"
- SEMI@[53; 54) ";"
- WHITESPACE@[54; 55) " "
- R_CURLY@[55; 56) "}"
- WHITESPACE@[56; 57) "\n"
+++ /dev/null
-async fn foo() {}
+++ /dev/null
-SOURCE_FILE@[0; 18)
- FN_DEF@[0; 17)
- ASYNC_KW@[0; 5) "async"
- WHITESPACE@[5; 6) " "
- FN_KW@[6; 8) "fn"
- WHITESPACE@[8; 9) " "
- NAME@[9; 12)
- IDENT@[9; 12) "foo"
- PARAM_LIST@[12; 14)
- L_PAREN@[12; 13) "("
- R_PAREN@[13; 14) ")"
- WHITESPACE@[14; 15) " "
- BLOCK@[15; 17)
- L_CURLY@[15; 16) "{"
- R_CURLY@[16; 17) "}"
- WHITESPACE@[17; 18) "\n"
+++ /dev/null
-fn foo() { crate::foo(); }
+++ /dev/null
-SOURCE_FILE@[0; 27)
- FN_DEF@[0; 26)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 26)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 11) " "
- EXPR_STMT@[11; 24)
- CALL_EXPR@[11; 23)
- PATH_EXPR@[11; 21)
- PATH@[11; 21)
- PATH@[11; 16)
- PATH_SEGMENT@[11; 16)
- CRATE_KW@[11; 16) "crate"
- COLONCOLON@[16; 18) "::"
- PATH_SEGMENT@[18; 21)
- NAME_REF@[18; 21)
- IDENT@[18; 21) "foo"
- ARG_LIST@[21; 23)
- L_PAREN@[21; 22) "("
- R_PAREN@[22; 23) ")"
- SEMI@[23; 24) ";"
- WHITESPACE@[24; 25) " "
- R_CURLY@[25; 26) "}"
- WHITESPACE@[26; 27) "\n"
+++ /dev/null
-fn main() {
- S { #[cfg(test)] field: 1 }
-}
+++ /dev/null
-SOURCE_FILE@[0; 46)
- FN_DEF@[0; 45)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 7)
- IDENT@[3; 7) "main"
- PARAM_LIST@[7; 9)
- L_PAREN@[7; 8) "("
- R_PAREN@[8; 9) ")"
- WHITESPACE@[9; 10) " "
- BLOCK@[10; 45)
- L_CURLY@[10; 11) "{"
- WHITESPACE@[11; 16) "\n "
- STRUCT_LIT@[16; 43)
- PATH@[16; 17)
- PATH_SEGMENT@[16; 17)
- NAME_REF@[16; 17)
- IDENT@[16; 17) "S"
- WHITESPACE@[17; 18) " "
- NAMED_FIELD_LIST@[18; 43)
- L_CURLY@[18; 19) "{"
- WHITESPACE@[19; 20) " "
- NAMED_FIELD@[20; 41)
- ATTR@[20; 32)
- POUND@[20; 21) "#"
- TOKEN_TREE@[21; 32)
- L_BRACK@[21; 22) "["
- IDENT@[22; 25) "cfg"
- TOKEN_TREE@[25; 31)
- L_PAREN@[25; 26) "("
- IDENT@[26; 30) "test"
- R_PAREN@[30; 31) ")"
- R_BRACK@[31; 32) "]"
- WHITESPACE@[32; 33) " "
- NAME_REF@[33; 38)
- IDENT@[33; 38) "field"
- COLON@[38; 39) ":"
- WHITESPACE@[39; 40) " "
- LITERAL@[40; 41)
- INT_NUMBER@[40; 41) "1"
- WHITESPACE@[41; 42) " "
- R_CURLY@[42; 43) "}"
- WHITESPACE@[43; 44) "\n"
- R_CURLY@[44; 45) "}"
- WHITESPACE@[45; 46) "\n"
+++ /dev/null
-fn foo() {
- #[A] foo();
- #[B] bar!{}
- #[C] #[D] {}
- #[D] return ();
-}
+++ /dev/null
-SOURCE_FILE@[0; 82)
- FN_DEF@[0; 81)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 81)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- EXPR_STMT@[15; 26)
- ATTR@[15; 19)
- POUND@[15; 16) "#"
- TOKEN_TREE@[16; 19)
- L_BRACK@[16; 17) "["
- IDENT@[17; 18) "A"
- R_BRACK@[18; 19) "]"
- WHITESPACE@[19; 20) " "
- CALL_EXPR@[20; 25)
- PATH_EXPR@[20; 23)
- PATH@[20; 23)
- PATH_SEGMENT@[20; 23)
- NAME_REF@[20; 23)
- IDENT@[20; 23) "foo"
- ARG_LIST@[23; 25)
- L_PAREN@[23; 24) "("
- R_PAREN@[24; 25) ")"
- SEMI@[25; 26) ";"
- WHITESPACE@[26; 31) "\n "
- EXPR_STMT@[31; 42)
- ATTR@[31; 35)
- POUND@[31; 32) "#"
- TOKEN_TREE@[32; 35)
- L_BRACK@[32; 33) "["
- IDENT@[33; 34) "B"
- R_BRACK@[34; 35) "]"
- WHITESPACE@[35; 36) " "
- MACRO_CALL@[36; 42)
- PATH@[36; 39)
- PATH_SEGMENT@[36; 39)
- NAME_REF@[36; 39)
- IDENT@[36; 39) "bar"
- EXCL@[39; 40) "!"
- TOKEN_TREE@[40; 42)
- L_CURLY@[40; 41) "{"
- R_CURLY@[41; 42) "}"
- WHITESPACE@[42; 47) "\n "
- EXPR_STMT@[47; 59)
- ATTR@[47; 51)
- POUND@[47; 48) "#"
- TOKEN_TREE@[48; 51)
- L_BRACK@[48; 49) "["
- IDENT@[49; 50) "C"
- R_BRACK@[50; 51) "]"
- WHITESPACE@[51; 52) " "
- ATTR@[52; 56)
- POUND@[52; 53) "#"
- TOKEN_TREE@[53; 56)
- L_BRACK@[53; 54) "["
- IDENT@[54; 55) "D"
- R_BRACK@[55; 56) "]"
- WHITESPACE@[56; 57) " "
- BLOCK_EXPR@[57; 59)
- BLOCK@[57; 59)
- L_CURLY@[57; 58) "{"
- R_CURLY@[58; 59) "}"
- WHITESPACE@[59; 64) "\n "
- EXPR_STMT@[64; 79)
- ATTR@[64; 68)
- POUND@[64; 65) "#"
- TOKEN_TREE@[65; 68)
- L_BRACK@[65; 66) "["
- IDENT@[66; 67) "D"
- R_BRACK@[67; 68) "]"
- WHITESPACE@[68; 69) " "
- RETURN_EXPR@[69; 78)
- RETURN_KW@[69; 75) "return"
- WHITESPACE@[75; 76) " "
- TUPLE_EXPR@[76; 78)
- L_PAREN@[76; 77) "("
- R_PAREN@[77; 78) ")"
- SEMI@[78; 79) ";"
- WHITESPACE@[79; 80) "\n"
- R_CURLY@[80; 81) "}"
- WHITESPACE@[81; 82) "\n"
+++ /dev/null
-fn foo() {
- { #[A] bar!()? }
- #[B] &()
-}
+++ /dev/null
-SOURCE_FILE@[0; 47)
- FN_DEF@[0; 46)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 46)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- EXPR_STMT@[15; 31)
- BLOCK_EXPR@[15; 31)
- BLOCK@[15; 31)
- L_CURLY@[15; 16) "{"
- WHITESPACE@[16; 17) " "
- TRY_EXPR@[17; 29)
- ATTR@[17; 21)
- POUND@[17; 18) "#"
- TOKEN_TREE@[18; 21)
- L_BRACK@[18; 19) "["
- IDENT@[19; 20) "A"
- R_BRACK@[20; 21) "]"
- WHITESPACE@[21; 22) " "
- MACRO_CALL@[22; 28)
- PATH@[22; 25)
- PATH_SEGMENT@[22; 25)
- NAME_REF@[22; 25)
- IDENT@[22; 25) "bar"
- EXCL@[25; 26) "!"
- TOKEN_TREE@[26; 28)
- L_PAREN@[26; 27) "("
- R_PAREN@[27; 28) ")"
- QUESTION@[28; 29) "?"
- WHITESPACE@[29; 30) " "
- R_CURLY@[30; 31) "}"
- WHITESPACE@[31; 36) "\n "
- REF_EXPR@[36; 44)
- ATTR@[36; 40)
- POUND@[36; 37) "#"
- TOKEN_TREE@[37; 40)
- L_BRACK@[37; 38) "["
- IDENT@[38; 39) "B"
- R_BRACK@[39; 40) "]"
- WHITESPACE@[40; 41) " "
- AMP@[41; 42) "&"
- TUPLE_EXPR@[42; 44)
- L_PAREN@[42; 43) "("
- R_PAREN@[43; 44) ")"
- WHITESPACE@[44; 45) "\n"
- R_CURLY@[45; 46) "}"
- WHITESPACE@[46; 47) "\n"
+++ /dev/null
-unsafe async fn foo() {}
-const unsafe fn bar() {}
+++ /dev/null
-SOURCE_FILE@[0; 50)
- FN_DEF@[0; 24)
- UNSAFE_KW@[0; 6) "unsafe"
- WHITESPACE@[6; 7) " "
- ASYNC_KW@[7; 12) "async"
- WHITESPACE@[12; 13) " "
- FN_KW@[13; 15) "fn"
- WHITESPACE@[15; 16) " "
- NAME@[16; 19)
- IDENT@[16; 19) "foo"
- PARAM_LIST@[19; 21)
- L_PAREN@[19; 20) "("
- R_PAREN@[20; 21) ")"
- WHITESPACE@[21; 22) " "
- BLOCK@[22; 24)
- L_CURLY@[22; 23) "{"
- R_CURLY@[23; 24) "}"
- WHITESPACE@[24; 25) "\n"
- FN_DEF@[25; 49)
- CONST_KW@[25; 30) "const"
- WHITESPACE@[30; 31) " "
- UNSAFE_KW@[31; 37) "unsafe"
- WHITESPACE@[37; 38) " "
- FN_KW@[38; 40) "fn"
- WHITESPACE@[40; 41) " "
- NAME@[41; 44)
- IDENT@[41; 44) "bar"
- PARAM_LIST@[44; 46)
- L_PAREN@[44; 45) "("
- R_PAREN@[45; 46) ")"
- WHITESPACE@[46; 47) " "
- BLOCK@[47; 49)
- L_CURLY@[47; 48) "{"
- R_CURLY@[48; 49) "}"
- WHITESPACE@[49; 50) "\n"
+++ /dev/null
-fn main() {
- let m!(x) = 0;
-}
+++ /dev/null
-SOURCE_FILE@[0; 33)
- FN_DEF@[0; 32)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 7)
- IDENT@[3; 7) "main"
- PARAM_LIST@[7; 9)
- L_PAREN@[7; 8) "("
- R_PAREN@[8; 9) ")"
- WHITESPACE@[9; 10) " "
- BLOCK@[10; 32)
- L_CURLY@[10; 11) "{"
- WHITESPACE@[11; 16) "\n "
- LET_STMT@[16; 30)
- LET_KW@[16; 19) "let"
- WHITESPACE@[19; 20) " "
- MACRO_CALL@[20; 25)
- PATH_PAT@[20; 21)
- PATH@[20; 21)
- PATH_SEGMENT@[20; 21)
- NAME_REF@[20; 21)
- IDENT@[20; 21) "m"
- EXCL@[21; 22) "!"
- TOKEN_TREE@[22; 25)
- L_PAREN@[22; 23) "("
- IDENT@[23; 24) "x"
- R_PAREN@[24; 25) ")"
- WHITESPACE@[25; 26) " "
- EQ@[26; 27) "="
- WHITESPACE@[27; 28) " "
- LITERAL@[28; 29)
- INT_NUMBER@[28; 29) "0"
- SEMI@[29; 30) ";"
- WHITESPACE@[30; 31) "\n"
- R_CURLY@[31; 32) "}"
- WHITESPACE@[32; 33) "\n"
+++ /dev/null
-fn foo() {
- let a;
- let b: i32;
- let c = 92;
- let d: i32 = 92;
- let e: !;
- let _: ! = {};
-}
+++ /dev/null
-SOURCE_FILE@[0; 110)
- FN_DEF@[0; 109)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 109)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- LET_STMT@[15; 21)
- LET_KW@[15; 18) "let"
- WHITESPACE@[18; 19) " "
- BIND_PAT@[19; 20)
- NAME@[19; 20)
- IDENT@[19; 20) "a"
- SEMI@[20; 21) ";"
- WHITESPACE@[21; 26) "\n "
- LET_STMT@[26; 37)
- LET_KW@[26; 29) "let"
- WHITESPACE@[29; 30) " "
- BIND_PAT@[30; 31)
- NAME@[30; 31)
- IDENT@[30; 31) "b"
- COLON@[31; 32) ":"
- WHITESPACE@[32; 33) " "
- PATH_TYPE@[33; 36)
- PATH@[33; 36)
- PATH_SEGMENT@[33; 36)
- NAME_REF@[33; 36)
- IDENT@[33; 36) "i32"
- SEMI@[36; 37) ";"
- WHITESPACE@[37; 42) "\n "
- LET_STMT@[42; 53)
- LET_KW@[42; 45) "let"
- WHITESPACE@[45; 46) " "
- BIND_PAT@[46; 47)
- NAME@[46; 47)
- IDENT@[46; 47) "c"
- WHITESPACE@[47; 48) " "
- EQ@[48; 49) "="
- WHITESPACE@[49; 50) " "
- LITERAL@[50; 52)
- INT_NUMBER@[50; 52) "92"
- SEMI@[52; 53) ";"
- WHITESPACE@[53; 58) "\n "
- LET_STMT@[58; 74)
- LET_KW@[58; 61) "let"
- WHITESPACE@[61; 62) " "
- BIND_PAT@[62; 63)
- NAME@[62; 63)
- IDENT@[62; 63) "d"
- COLON@[63; 64) ":"
- WHITESPACE@[64; 65) " "
- PATH_TYPE@[65; 68)
- PATH@[65; 68)
- PATH_SEGMENT@[65; 68)
- NAME_REF@[65; 68)
- IDENT@[65; 68) "i32"
- WHITESPACE@[68; 69) " "
- EQ@[69; 70) "="
- WHITESPACE@[70; 71) " "
- LITERAL@[71; 73)
- INT_NUMBER@[71; 73) "92"
- SEMI@[73; 74) ";"
- WHITESPACE@[74; 79) "\n "
- LET_STMT@[79; 88)
- LET_KW@[79; 82) "let"
- WHITESPACE@[82; 83) " "
- BIND_PAT@[83; 84)
- NAME@[83; 84)
- IDENT@[83; 84) "e"
- COLON@[84; 85) ":"
- WHITESPACE@[85; 86) " "
- NEVER_TYPE@[86; 87)
- EXCL@[86; 87) "!"
- SEMI@[87; 88) ";"
- WHITESPACE@[88; 93) "\n "
- LET_STMT@[93; 107)
- LET_KW@[93; 96) "let"
- WHITESPACE@[96; 97) " "
- PLACEHOLDER_PAT@[97; 98)
- UNDERSCORE@[97; 98) "_"
- COLON@[98; 99) ":"
- WHITESPACE@[99; 100) " "
- NEVER_TYPE@[100; 101)
- EXCL@[100; 101) "!"
- WHITESPACE@[101; 102) " "
- EQ@[102; 103) "="
- WHITESPACE@[103; 104) " "
- BLOCK_EXPR@[104; 106)
- BLOCK@[104; 106)
- L_CURLY@[104; 105) "{"
- R_CURLY@[105; 106) "}"
- SEMI@[106; 107) ";"
- WHITESPACE@[107; 108) "\n"
- R_CURLY@[108; 109) "}"
- WHITESPACE@[109; 110) "\n"
+++ /dev/null
-fn foo() {
- let _ = try {};
-}
+++ /dev/null
-SOURCE_FILE@[0; 33)
- FN_DEF@[0; 32)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 32)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- LET_STMT@[15; 30)
- LET_KW@[15; 18) "let"
- WHITESPACE@[18; 19) " "
- PLACEHOLDER_PAT@[19; 20)
- UNDERSCORE@[19; 20) "_"
- WHITESPACE@[20; 21) " "
- EQ@[21; 22) "="
- WHITESPACE@[22; 23) " "
- TRY_EXPR@[23; 29)
- TRY_KW@[23; 26) "try"
- WHITESPACE@[26; 27) " "
- BLOCK@[27; 29)
- L_CURLY@[27; 28) "{"
- R_CURLY@[28; 29) "}"
- SEMI@[29; 30) ";"
- WHITESPACE@[30; 31) "\n"
- R_CURLY@[31; 32) "}"
- WHITESPACE@[32; 33) "\n"
+++ /dev/null
-existential type Foo: Fn() -> usize;
+++ /dev/null
-SOURCE_FILE@[0; 37)
- TYPE_ALIAS_DEF@[0; 36)
- EXISTENTIAL_KW@[0; 11) "existential"
- WHITESPACE@[11; 12) " "
- TYPE_KW@[12; 16) "type"
- WHITESPACE@[16; 17) " "
- NAME@[17; 20)
- IDENT@[17; 20) "Foo"
- COLON@[20; 21) ":"
- WHITESPACE@[21; 22) " "
- TYPE_BOUND_LIST@[22; 35)
- TYPE_BOUND@[22; 35)
- PATH_TYPE@[22; 35)
- PATH@[22; 35)
- PATH_SEGMENT@[22; 35)
- NAME_REF@[22; 24)
- IDENT@[22; 24) "Fn"
- PARAM_LIST@[24; 26)
- L_PAREN@[24; 25) "("
- R_PAREN@[25; 26) ")"
- WHITESPACE@[26; 27) " "
- RET_TYPE@[27; 35)
- THIN_ARROW@[27; 29) "->"
- WHITESPACE@[29; 30) " "
- PATH_TYPE@[30; 35)
- PATH@[30; 35)
- PATH_SEGMENT@[30; 35)
- NAME_REF@[30; 35)
- IDENT@[30; 35) "usize"
- SEMI@[35; 36) ";"
- WHITESPACE@[36; 37) "\n"
+++ /dev/null
-fn foo() {
- let x = box 1i32;
- let y = (box 1i32, box 2i32);
- let z = Foo(box 1i32, box 2i32);
-}
+++ /dev/null
-SOURCE_FILE@[0; 106)
- FN_DEF@[0; 105)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 105)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- LET_STMT@[15; 32)
- LET_KW@[15; 18) "let"
- WHITESPACE@[18; 19) " "
- BIND_PAT@[19; 20)
- NAME@[19; 20)
- IDENT@[19; 20) "x"
- WHITESPACE@[20; 21) " "
- EQ@[21; 22) "="
- WHITESPACE@[22; 23) " "
- BOX_EXPR@[23; 31)
- BOX_KW@[23; 26) "box"
- WHITESPACE@[26; 27) " "
- LITERAL@[27; 31)
- INT_NUMBER@[27; 31) "1i32"
- SEMI@[31; 32) ";"
- WHITESPACE@[32; 37) "\n "
- LET_STMT@[37; 66)
- LET_KW@[37; 40) "let"
- WHITESPACE@[40; 41) " "
- BIND_PAT@[41; 42)
- NAME@[41; 42)
- IDENT@[41; 42) "y"
- WHITESPACE@[42; 43) " "
- EQ@[43; 44) "="
- WHITESPACE@[44; 45) " "
- TUPLE_EXPR@[45; 65)
- L_PAREN@[45; 46) "("
- BOX_EXPR@[46; 54)
- BOX_KW@[46; 49) "box"
- WHITESPACE@[49; 50) " "
- LITERAL@[50; 54)
- INT_NUMBER@[50; 54) "1i32"
- COMMA@[54; 55) ","
- WHITESPACE@[55; 56) " "
- BOX_EXPR@[56; 64)
- BOX_KW@[56; 59) "box"
- WHITESPACE@[59; 60) " "
- LITERAL@[60; 64)
- INT_NUMBER@[60; 64) "2i32"
- R_PAREN@[64; 65) ")"
- SEMI@[65; 66) ";"
- WHITESPACE@[66; 71) "\n "
- LET_STMT@[71; 103)
- LET_KW@[71; 74) "let"
- WHITESPACE@[74; 75) " "
- BIND_PAT@[75; 76)
- NAME@[75; 76)
- IDENT@[75; 76) "z"
- WHITESPACE@[76; 77) " "
- EQ@[77; 78) "="
- WHITESPACE@[78; 79) " "
- CALL_EXPR@[79; 102)
- PATH_EXPR@[79; 82)
- PATH@[79; 82)
- PATH_SEGMENT@[79; 82)
- NAME_REF@[79; 82)
- IDENT@[79; 82) "Foo"
- ARG_LIST@[82; 102)
- L_PAREN@[82; 83) "("
- BOX_EXPR@[83; 91)
- BOX_KW@[83; 86) "box"
- WHITESPACE@[86; 87) " "
- LITERAL@[87; 91)
- INT_NUMBER@[87; 91) "1i32"
- COMMA@[91; 92) ","
- WHITESPACE@[92; 93) " "
- BOX_EXPR@[93; 101)
- BOX_KW@[93; 96) "box"
- WHITESPACE@[96; 97) " "
- LITERAL@[97; 101)
- INT_NUMBER@[97; 101) "2i32"
- R_PAREN@[101; 102) ")"
- SEMI@[102; 103) ";"
- WHITESPACE@[103; 104) "\n"
- R_CURLY@[104; 105) "}"
- WHITESPACE@[105; 106) "\n"
+++ /dev/null
-impl T for Foo {
- default type T = Bar;
- default fn foo() {}
-}
+++ /dev/null
-SOURCE_FILE@[0; 69)
- IMPL_BLOCK@[0; 68)
- IMPL_KW@[0; 4) "impl"
- WHITESPACE@[4; 5) " "
- PATH_TYPE@[5; 6)
- PATH@[5; 6)
- PATH_SEGMENT@[5; 6)
- NAME_REF@[5; 6)
- IDENT@[5; 6) "T"
- WHITESPACE@[6; 7) " "
- FOR_KW@[7; 10) "for"
- WHITESPACE@[10; 11) " "
- PATH_TYPE@[11; 14)
- PATH@[11; 14)
- PATH_SEGMENT@[11; 14)
- NAME_REF@[11; 14)
- IDENT@[11; 14) "Foo"
- WHITESPACE@[14; 15) " "
- ITEM_LIST@[15; 68)
- L_CURLY@[15; 16) "{"
- WHITESPACE@[16; 21) "\n "
- TYPE_ALIAS_DEF@[21; 42)
- DEFAULT_KW@[21; 28) "default"
- WHITESPACE@[28; 29) " "
- TYPE_KW@[29; 33) "type"
- WHITESPACE@[33; 34) " "
- NAME@[34; 35)
- IDENT@[34; 35) "T"
- WHITESPACE@[35; 36) " "
- EQ@[36; 37) "="
- WHITESPACE@[37; 38) " "
- PATH_TYPE@[38; 41)
- PATH@[38; 41)
- PATH_SEGMENT@[38; 41)
- NAME_REF@[38; 41)
- IDENT@[38; 41) "Bar"
- SEMI@[41; 42) ";"
- WHITESPACE@[42; 47) "\n "
- FN_DEF@[47; 66)
- DEFAULT_KW@[47; 54) "default"
- WHITESPACE@[54; 55) " "
- FN_KW@[55; 57) "fn"
- WHITESPACE@[57; 58) " "
- NAME@[58; 61)
- IDENT@[58; 61) "foo"
- PARAM_LIST@[61; 63)
- L_PAREN@[61; 62) "("
- R_PAREN@[62; 63) ")"
- WHITESPACE@[63; 64) " "
- BLOCK@[64; 66)
- L_CURLY@[64; 65) "{"
- R_CURLY@[65; 66) "}"
- WHITESPACE@[66; 67) "\n"
- R_CURLY@[67; 68) "}"
- WHITESPACE@[68; 69) "\n"
+++ /dev/null
-fn simple_function() {
- enum LocalEnum {
- One,
- Two,
- };
- fn f() {};
- struct S {};
-}
+++ /dev/null
-SOURCE_FILE@[0; 111)
- FN_DEF@[0; 110)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 18)
- IDENT@[3; 18) "simple_function"
- PARAM_LIST@[18; 20)
- L_PAREN@[18; 19) "("
- R_PAREN@[19; 20) ")"
- WHITESPACE@[20; 21) " "
- BLOCK@[21; 110)
- L_CURLY@[21; 22) "{"
- WHITESPACE@[22; 27) "\n "
- ENUM_DEF@[27; 75)
- ENUM_KW@[27; 31) "enum"
- WHITESPACE@[31; 32) " "
- NAME@[32; 41)
- IDENT@[32; 41) "LocalEnum"
- WHITESPACE@[41; 42) " "
- ENUM_VARIANT_LIST@[42; 75)
- L_CURLY@[42; 43) "{"
- WHITESPACE@[43; 52) "\n "
- ENUM_VARIANT@[52; 55)
- NAME@[52; 55)
- IDENT@[52; 55) "One"
- COMMA@[55; 56) ","
- WHITESPACE@[56; 65) "\n "
- ENUM_VARIANT@[65; 68)
- NAME@[65; 68)
- IDENT@[65; 68) "Two"
- COMMA@[68; 69) ","
- WHITESPACE@[69; 74) "\n "
- R_CURLY@[74; 75) "}"
- SEMI@[75; 76) ";"
- WHITESPACE@[76; 81) "\n "
- FN_DEF@[81; 90)
- FN_KW@[81; 83) "fn"
- WHITESPACE@[83; 84) " "
- NAME@[84; 85)
- IDENT@[84; 85) "f"
- PARAM_LIST@[85; 87)
- L_PAREN@[85; 86) "("
- R_PAREN@[86; 87) ")"
- WHITESPACE@[87; 88) " "
- BLOCK@[88; 90)
- L_CURLY@[88; 89) "{"
- R_CURLY@[89; 90) "}"
- SEMI@[90; 91) ";"
- WHITESPACE@[91; 96) "\n "
- STRUCT_DEF@[96; 107)
- STRUCT_KW@[96; 102) "struct"
- WHITESPACE@[102; 103) " "
- NAME@[103; 104)
- IDENT@[103; 104) "S"
- WHITESPACE@[104; 105) " "
- NAMED_FIELD_DEF_LIST@[105; 107)
- L_CURLY@[105; 106) "{"
- R_CURLY@[106; 107) "}"
- SEMI@[107; 108) ";"
- WHITESPACE@[108; 109) "\n"
- R_CURLY@[109; 110) "}"
- WHITESPACE@[110; 111) "\n"
+++ /dev/null
-pub const A: &[i64] = &[
- #[cfg(test)]
- 1,
- 2,
-];
+++ /dev/null
-SOURCE_FILE@[0; 56)
- CONST_DEF@[0; 55)
- VISIBILITY@[0; 3)
- PUB_KW@[0; 3) "pub"
- WHITESPACE@[3; 4) " "
- CONST_KW@[4; 9) "const"
- WHITESPACE@[9; 10) " "
- NAME@[10; 11)
- IDENT@[10; 11) "A"
- COLON@[11; 12) ":"
- WHITESPACE@[12; 13) " "
- REFERENCE_TYPE@[13; 19)
- AMP@[13; 14) "&"
- SLICE_TYPE@[14; 19)
- L_BRACK@[14; 15) "["
- PATH_TYPE@[15; 18)
- PATH@[15; 18)
- PATH_SEGMENT@[15; 18)
- NAME_REF@[15; 18)
- IDENT@[15; 18) "i64"
- R_BRACK@[18; 19) "]"
- WHITESPACE@[19; 20) " "
- EQ@[20; 21) "="
- WHITESPACE@[21; 22) " "
- REF_EXPR@[22; 54)
- AMP@[22; 23) "&"
- ARRAY_EXPR@[23; 54)
- L_BRACK@[23; 24) "["
- WHITESPACE@[24; 28) "\n "
- ATTR@[28; 40)
- POUND@[28; 29) "#"
- TOKEN_TREE@[29; 40)
- L_BRACK@[29; 30) "["
- IDENT@[30; 33) "cfg"
- TOKEN_TREE@[33; 39)
- L_PAREN@[33; 34) "("
- IDENT@[34; 38) "test"
- R_PAREN@[38; 39) ")"
- R_BRACK@[39; 40) "]"
- WHITESPACE@[40; 44) "\n "
- LITERAL@[44; 45)
- INT_NUMBER@[44; 45) "1"
- COMMA@[45; 46) ","
- WHITESPACE@[46; 50) "\n "
- LITERAL@[50; 51)
- INT_NUMBER@[50; 51) "2"
- COMMA@[51; 52) ","
- WHITESPACE@[52; 53) "\n"
- R_BRACK@[53; 54) "]"
- SEMI@[54; 55) ";"
- WHITESPACE@[55; 56) "\n"
+++ /dev/null
-pub const A: &[i64] = &[
- 1,
- #[cfg(test)]
- 2,
-];
+++ /dev/null
-SOURCE_FILE@[0; 56)
- CONST_DEF@[0; 55)
- VISIBILITY@[0; 3)
- PUB_KW@[0; 3) "pub"
- WHITESPACE@[3; 4) " "
- CONST_KW@[4; 9) "const"
- WHITESPACE@[9; 10) " "
- NAME@[10; 11)
- IDENT@[10; 11) "A"
- COLON@[11; 12) ":"
- WHITESPACE@[12; 13) " "
- REFERENCE_TYPE@[13; 19)
- AMP@[13; 14) "&"
- SLICE_TYPE@[14; 19)
- L_BRACK@[14; 15) "["
- PATH_TYPE@[15; 18)
- PATH@[15; 18)
- PATH_SEGMENT@[15; 18)
- NAME_REF@[15; 18)
- IDENT@[15; 18) "i64"
- R_BRACK@[18; 19) "]"
- WHITESPACE@[19; 20) " "
- EQ@[20; 21) "="
- WHITESPACE@[21; 22) " "
- REF_EXPR@[22; 54)
- AMP@[22; 23) "&"
- ARRAY_EXPR@[23; 54)
- L_BRACK@[23; 24) "["
- WHITESPACE@[24; 28) "\n "
- LITERAL@[28; 29)
- INT_NUMBER@[28; 29) "1"
- COMMA@[29; 30) ","
- WHITESPACE@[30; 34) "\n "
- ATTR@[34; 46)
- POUND@[34; 35) "#"
- TOKEN_TREE@[35; 46)
- L_BRACK@[35; 36) "["
- IDENT@[36; 39) "cfg"
- TOKEN_TREE@[39; 45)
- L_PAREN@[39; 40) "("
- IDENT@[40; 44) "test"
- R_PAREN@[44; 45) ")"
- R_BRACK@[45; 46) "]"
- WHITESPACE@[46; 50) "\n "
- LITERAL@[50; 51)
- INT_NUMBER@[50; 51) "2"
- COMMA@[51; 52) ","
- WHITESPACE@[52; 53) "\n"
- R_BRACK@[53; 54) "]"
- SEMI@[54; 55) ";"
- WHITESPACE@[55; 56) "\n"
+++ /dev/null
-fn foo() {
- x.await;
- x.0.await;
- x.0().await?.hello();
-}
+++ /dev/null
-SOURCE_FILE@[0; 67)
- FN_DEF@[0; 66)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 66)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- EXPR_STMT@[15; 23)
- AWAIT_EXPR@[15; 22)
- PATH_EXPR@[15; 16)
- PATH@[15; 16)
- PATH_SEGMENT@[15; 16)
- NAME_REF@[15; 16)
- IDENT@[15; 16) "x"
- DOT@[16; 17) "."
- AWAIT_KW@[17; 22) "await"
- SEMI@[22; 23) ";"
- WHITESPACE@[23; 28) "\n "
- EXPR_STMT@[28; 38)
- AWAIT_EXPR@[28; 37)
- FIELD_EXPR@[28; 31)
- PATH_EXPR@[28; 29)
- PATH@[28; 29)
- PATH_SEGMENT@[28; 29)
- NAME_REF@[28; 29)
- IDENT@[28; 29) "x"
- DOT@[29; 30) "."
- INT_NUMBER@[30; 31) "0"
- DOT@[31; 32) "."
- AWAIT_KW@[32; 37) "await"
- SEMI@[37; 38) ";"
- WHITESPACE@[38; 43) "\n "
- EXPR_STMT@[43; 64)
- METHOD_CALL_EXPR@[43; 63)
- TRY_EXPR@[43; 55)
- AWAIT_EXPR@[43; 54)
- CALL_EXPR@[43; 48)
- FIELD_EXPR@[43; 46)
- PATH_EXPR@[43; 44)
- PATH@[43; 44)
- PATH_SEGMENT@[43; 44)
- NAME_REF@[43; 44)
- IDENT@[43; 44) "x"
- DOT@[44; 45) "."
- INT_NUMBER@[45; 46) "0"
- ARG_LIST@[46; 48)
- L_PAREN@[46; 47) "("
- R_PAREN@[47; 48) ")"
- DOT@[48; 49) "."
- AWAIT_KW@[49; 54) "await"
- QUESTION@[54; 55) "?"
- DOT@[55; 56) "."
- NAME_REF@[56; 61)
- IDENT@[56; 61) "hello"
- ARG_LIST@[61; 63)
- L_PAREN@[61; 62) "("
- R_PAREN@[62; 63) ")"
- SEMI@[63; 64) ";"
- WHITESPACE@[64; 65) "\n"
- R_CURLY@[65; 66) "}"
- WHITESPACE@[66; 67) "\n"
+++ /dev/null
-SOURCE_FILE@[0; 0)
+++ /dev/null
-struct S<T: Copy> {
- f: T,
-}
+++ /dev/null
-SOURCE_FILE@[0; 32)
- STRUCT_DEF@[0; 31)
- STRUCT_KW@[0; 6) "struct"
- WHITESPACE@[6; 7) " "
- NAME@[7; 8)
- IDENT@[7; 8) "S"
- TYPE_PARAM_LIST@[8; 17)
- L_ANGLE@[8; 9) "<"
- TYPE_PARAM@[9; 16)
- NAME@[9; 10)
- IDENT@[9; 10) "T"
- COLON@[10; 11) ":"
- WHITESPACE@[11; 12) " "
- TYPE_BOUND_LIST@[12; 16)
- TYPE_BOUND@[12; 16)
- PATH_TYPE@[12; 16)
- PATH@[12; 16)
- PATH_SEGMENT@[12; 16)
- NAME_REF@[12; 16)
- IDENT@[12; 16) "Copy"
- R_ANGLE@[16; 17) ">"
- WHITESPACE@[17; 18) " "
- NAMED_FIELD_DEF_LIST@[18; 31)
- L_CURLY@[18; 19) "{"
- WHITESPACE@[19; 24) "\n "
- NAMED_FIELD_DEF@[24; 28)
- NAME@[24; 25)
- IDENT@[24; 25) "f"
- COLON@[25; 26) ":"
- WHITESPACE@[26; 27) " "
- PATH_TYPE@[27; 28)
- PATH@[27; 28)
- PATH_SEGMENT@[27; 28)
- NAME_REF@[27; 28)
- IDENT@[27; 28) "T"
- COMMA@[28; 29) ","
- WHITESPACE@[29; 30) "\n"
- R_CURLY@[30; 31) "}"
- WHITESPACE@[31; 32) "\n"
+++ /dev/null
-struct S {
- foo: u32
-}
\ No newline at end of file
+++ /dev/null
-SOURCE_FILE@[0; 25)
- STRUCT_DEF@[0; 25)
- STRUCT_KW@[0; 6) "struct"
- WHITESPACE@[6; 7) " "
- NAME@[7; 8)
- IDENT@[7; 8) "S"
- WHITESPACE@[8; 9) " "
- NAMED_FIELD_DEF_LIST@[9; 25)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- NAMED_FIELD_DEF@[15; 23)
- NAME@[15; 18)
- IDENT@[15; 18) "foo"
- COLON@[18; 19) ":"
- WHITESPACE@[19; 20) " "
- PATH_TYPE@[20; 23)
- PATH@[20; 23)
- PATH_SEGMENT@[20; 23)
- NAME_REF@[20; 23)
- IDENT@[20; 23) "u32"
- WHITESPACE@[23; 24) "\n"
- R_CURLY@[24; 25) "}"
+++ /dev/null
-#!/use/bin/env rusti
\ No newline at end of file
+++ /dev/null
-SOURCE_FILE@[0; 20)
- SHEBANG@[0; 20) "#!/use/bin/env rusti"
+++ /dev/null
-fn foo() {
-}
+++ /dev/null
-SOURCE_FILE@[0; 13)
- FN_DEF@[0; 12)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 12)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 11) "\n"
- R_CURLY@[11; 12) "}"
- WHITESPACE@[12; 13) "\n"
+++ /dev/null
-#![attr]
-#![attr(true)]
-#![attr(ident)]
-#![attr(ident, 100, true, "true", ident = 100, ident = "hello", ident(100))]
-#![attr(100)]
-#![attr(enabled = true)]
-#![enabled(true)]
-#![attr("hello")]
-#![repr(C, align = 4)]
-#![repr(C, align(4))]
\ No newline at end of file
+++ /dev/null
-SOURCE_FILE@[0; 236)
- ATTR@[0; 8)
- POUND@[0; 1) "#"
- EXCL@[1; 2) "!"
- TOKEN_TREE@[2; 8)
- L_BRACK@[2; 3) "["
- IDENT@[3; 7) "attr"
- R_BRACK@[7; 8) "]"
- WHITESPACE@[8; 9) "\n"
- ATTR@[9; 23)
- POUND@[9; 10) "#"
- EXCL@[10; 11) "!"
- TOKEN_TREE@[11; 23)
- L_BRACK@[11; 12) "["
- IDENT@[12; 16) "attr"
- TOKEN_TREE@[16; 22)
- L_PAREN@[16; 17) "("
- TRUE_KW@[17; 21) "true"
- R_PAREN@[21; 22) ")"
- R_BRACK@[22; 23) "]"
- WHITESPACE@[23; 24) "\n"
- ATTR@[24; 39)
- POUND@[24; 25) "#"
- EXCL@[25; 26) "!"
- TOKEN_TREE@[26; 39)
- L_BRACK@[26; 27) "["
- IDENT@[27; 31) "attr"
- TOKEN_TREE@[31; 38)
- L_PAREN@[31; 32) "("
- IDENT@[32; 37) "ident"
- R_PAREN@[37; 38) ")"
- R_BRACK@[38; 39) "]"
- WHITESPACE@[39; 40) "\n"
- ATTR@[40; 116)
- POUND@[40; 41) "#"
- EXCL@[41; 42) "!"
- TOKEN_TREE@[42; 116)
- L_BRACK@[42; 43) "["
- IDENT@[43; 47) "attr"
- TOKEN_TREE@[47; 115)
- L_PAREN@[47; 48) "("
- IDENT@[48; 53) "ident"
- COMMA@[53; 54) ","
- WHITESPACE@[54; 55) " "
- INT_NUMBER@[55; 58) "100"
- COMMA@[58; 59) ","
- WHITESPACE@[59; 60) " "
- TRUE_KW@[60; 64) "true"
- COMMA@[64; 65) ","
- WHITESPACE@[65; 66) " "
- STRING@[66; 72) "\"true\""
- COMMA@[72; 73) ","
- WHITESPACE@[73; 74) " "
- IDENT@[74; 79) "ident"
- WHITESPACE@[79; 80) " "
- EQ@[80; 81) "="
- WHITESPACE@[81; 82) " "
- INT_NUMBER@[82; 85) "100"
- COMMA@[85; 86) ","
- WHITESPACE@[86; 87) " "
- IDENT@[87; 92) "ident"
- WHITESPACE@[92; 93) " "
- EQ@[93; 94) "="
- WHITESPACE@[94; 95) " "
- STRING@[95; 102) "\"hello\""
- COMMA@[102; 103) ","
- WHITESPACE@[103; 104) " "
- IDENT@[104; 109) "ident"
- TOKEN_TREE@[109; 114)
- L_PAREN@[109; 110) "("
- INT_NUMBER@[110; 113) "100"
- R_PAREN@[113; 114) ")"
- R_PAREN@[114; 115) ")"
- R_BRACK@[115; 116) "]"
- WHITESPACE@[116; 117) "\n"
- ATTR@[117; 130)
- POUND@[117; 118) "#"
- EXCL@[118; 119) "!"
- TOKEN_TREE@[119; 130)
- L_BRACK@[119; 120) "["
- IDENT@[120; 124) "attr"
- TOKEN_TREE@[124; 129)
- L_PAREN@[124; 125) "("
- INT_NUMBER@[125; 128) "100"
- R_PAREN@[128; 129) ")"
- R_BRACK@[129; 130) "]"
- WHITESPACE@[130; 131) "\n"
- ATTR@[131; 155)
- POUND@[131; 132) "#"
- EXCL@[132; 133) "!"
- TOKEN_TREE@[133; 155)
- L_BRACK@[133; 134) "["
- IDENT@[134; 138) "attr"
- TOKEN_TREE@[138; 154)
- L_PAREN@[138; 139) "("
- IDENT@[139; 146) "enabled"
- WHITESPACE@[146; 147) " "
- EQ@[147; 148) "="
- WHITESPACE@[148; 149) " "
- TRUE_KW@[149; 153) "true"
- R_PAREN@[153; 154) ")"
- R_BRACK@[154; 155) "]"
- WHITESPACE@[155; 156) "\n"
- ATTR@[156; 173)
- POUND@[156; 157) "#"
- EXCL@[157; 158) "!"
- TOKEN_TREE@[158; 173)
- L_BRACK@[158; 159) "["
- IDENT@[159; 166) "enabled"
- TOKEN_TREE@[166; 172)
- L_PAREN@[166; 167) "("
- TRUE_KW@[167; 171) "true"
- R_PAREN@[171; 172) ")"
- R_BRACK@[172; 173) "]"
- WHITESPACE@[173; 174) "\n"
- ATTR@[174; 191)
- POUND@[174; 175) "#"
- EXCL@[175; 176) "!"
- TOKEN_TREE@[176; 191)
- L_BRACK@[176; 177) "["
- IDENT@[177; 181) "attr"
- TOKEN_TREE@[181; 190)
- L_PAREN@[181; 182) "("
- STRING@[182; 189) "\"hello\""
- R_PAREN@[189; 190) ")"
- R_BRACK@[190; 191) "]"
- WHITESPACE@[191; 192) "\n"
- ATTR@[192; 214)
- POUND@[192; 193) "#"
- EXCL@[193; 194) "!"
- TOKEN_TREE@[194; 214)
- L_BRACK@[194; 195) "["
- IDENT@[195; 199) "repr"
- TOKEN_TREE@[199; 213)
- L_PAREN@[199; 200) "("
- IDENT@[200; 201) "C"
- COMMA@[201; 202) ","
- WHITESPACE@[202; 203) " "
- IDENT@[203; 208) "align"
- WHITESPACE@[208; 209) " "
- EQ@[209; 210) "="
- WHITESPACE@[210; 211) " "
- INT_NUMBER@[211; 212) "4"
- R_PAREN@[212; 213) ")"
- R_BRACK@[213; 214) "]"
- WHITESPACE@[214; 215) "\n"
- ATTR@[215; 236)
- POUND@[215; 216) "#"
- EXCL@[216; 217) "!"
- TOKEN_TREE@[217; 236)
- L_BRACK@[217; 218) "["
- IDENT@[218; 222) "repr"
- TOKEN_TREE@[222; 235)
- L_PAREN@[222; 223) "("
- IDENT@[223; 224) "C"
- COMMA@[224; 225) ","
- WHITESPACE@[225; 226) " "
- IDENT@[226; 231) "align"
- TOKEN_TREE@[231; 234)
- L_PAREN@[231; 232) "("
- INT_NUMBER@[232; 233) "4"
- R_PAREN@[233; 234) ")"
- R_PAREN@[234; 235) ")"
- R_BRACK@[235; 236) "]"
+++ /dev/null
-extern crate foo;
-extern crate foo as bar;
-extern crate self as baz;
+++ /dev/null
-SOURCE_FILE@[0; 69)
- EXTERN_CRATE_ITEM@[0; 17)
- EXTERN_KW@[0; 6) "extern"
- WHITESPACE@[6; 7) " "
- CRATE_KW@[7; 12) "crate"
- WHITESPACE@[12; 13) " "
- NAME_REF@[13; 16)
- IDENT@[13; 16) "foo"
- SEMI@[16; 17) ";"
- WHITESPACE@[17; 18) "\n"
- EXTERN_CRATE_ITEM@[18; 42)
- EXTERN_KW@[18; 24) "extern"
- WHITESPACE@[24; 25) " "
- CRATE_KW@[25; 30) "crate"
- WHITESPACE@[30; 31) " "
- NAME_REF@[31; 34)
- IDENT@[31; 34) "foo"
- WHITESPACE@[34; 35) " "
- ALIAS@[35; 41)
- AS_KW@[35; 37) "as"
- WHITESPACE@[37; 38) " "
- NAME@[38; 41)
- IDENT@[38; 41) "bar"
- SEMI@[41; 42) ";"
- WHITESPACE@[42; 43) "\n"
- EXTERN_CRATE_ITEM@[43; 68)
- EXTERN_KW@[43; 49) "extern"
- WHITESPACE@[49; 50) " "
- CRATE_KW@[50; 55) "crate"
- WHITESPACE@[55; 56) " "
- SELF_KW@[56; 60)
- SELF_KW@[56; 60) "self"
- WHITESPACE@[60; 61) " "
- ALIAS@[61; 67)
- AS_KW@[61; 63) "as"
- WHITESPACE@[63; 64) " "
- NAME@[64; 67)
- IDENT@[64; 67) "baz"
- SEMI@[67; 68) ";"
- WHITESPACE@[68; 69) "\n"
+++ /dev/null
-mod a;
-
-mod b {
-}
-
-mod c {
- fn foo() {
- }
- struct S {}
-}
-
-mod d {
- #![attr]
- mod e;
- mod f {
- }
-}
\ No newline at end of file
+++ /dev/null
-SOURCE_FILE@[0; 118)
- MODULE@[0; 6)
- MOD_KW@[0; 3) "mod"
- WHITESPACE@[3; 4) " "
- NAME@[4; 5)
- IDENT@[4; 5) "a"
- SEMI@[5; 6) ";"
- WHITESPACE@[6; 8) "\n\n"
- MODULE@[8; 17)
- MOD_KW@[8; 11) "mod"
- WHITESPACE@[11; 12) " "
- NAME@[12; 13)
- IDENT@[12; 13) "b"
- WHITESPACE@[13; 14) " "
- ITEM_LIST@[14; 17)
- L_CURLY@[14; 15) "{"
- WHITESPACE@[15; 16) "\n"
- R_CURLY@[16; 17) "}"
- WHITESPACE@[17; 19) "\n\n"
- MODULE@[19; 65)
- MOD_KW@[19; 22) "mod"
- WHITESPACE@[22; 23) " "
- NAME@[23; 24)
- IDENT@[23; 24) "c"
- WHITESPACE@[24; 25) " "
- ITEM_LIST@[25; 65)
- L_CURLY@[25; 26) "{"
- WHITESPACE@[26; 31) "\n "
- FN_DEF@[31; 47)
- FN_KW@[31; 33) "fn"
- WHITESPACE@[33; 34) " "
- NAME@[34; 37)
- IDENT@[34; 37) "foo"
- PARAM_LIST@[37; 39)
- L_PAREN@[37; 38) "("
- R_PAREN@[38; 39) ")"
- WHITESPACE@[39; 40) " "
- BLOCK@[40; 47)
- L_CURLY@[40; 41) "{"
- WHITESPACE@[41; 46) "\n "
- R_CURLY@[46; 47) "}"
- WHITESPACE@[47; 52) "\n "
- STRUCT_DEF@[52; 63)
- STRUCT_KW@[52; 58) "struct"
- WHITESPACE@[58; 59) " "
- NAME@[59; 60)
- IDENT@[59; 60) "S"
- WHITESPACE@[60; 61) " "
- NAMED_FIELD_DEF_LIST@[61; 63)
- L_CURLY@[61; 62) "{"
- R_CURLY@[62; 63) "}"
- WHITESPACE@[63; 64) "\n"
- R_CURLY@[64; 65) "}"
- WHITESPACE@[65; 67) "\n\n"
- MODULE@[67; 118)
- MOD_KW@[67; 70) "mod"
- WHITESPACE@[70; 71) " "
- NAME@[71; 72)
- IDENT@[71; 72) "d"
- WHITESPACE@[72; 73) " "
- ITEM_LIST@[73; 118)
- L_CURLY@[73; 74) "{"
- WHITESPACE@[74; 79) "\n "
- ATTR@[79; 87)
- POUND@[79; 80) "#"
- EXCL@[80; 81) "!"
- TOKEN_TREE@[81; 87)
- L_BRACK@[81; 82) "["
- IDENT@[82; 86) "attr"
- R_BRACK@[86; 87) "]"
- WHITESPACE@[87; 92) "\n "
- MODULE@[92; 98)
- MOD_KW@[92; 95) "mod"
- WHITESPACE@[95; 96) " "
- NAME@[96; 97)
- IDENT@[96; 97) "e"
- SEMI@[97; 98) ";"
- WHITESPACE@[98; 103) "\n "
- MODULE@[103; 116)
- MOD_KW@[103; 106) "mod"
- WHITESPACE@[106; 107) " "
- NAME@[107; 108)
- IDENT@[107; 108) "f"
- WHITESPACE@[108; 109) " "
- ITEM_LIST@[109; 116)
- L_CURLY@[109; 110) "{"
- WHITESPACE@[110; 115) "\n "
- R_CURLY@[115; 116) "}"
- WHITESPACE@[116; 117) "\n"
- R_CURLY@[117; 118) "}"
+++ /dev/null
-use foo;
-use ::bar;
\ No newline at end of file
+++ /dev/null
-SOURCE_FILE@[0; 19)
- USE_ITEM@[0; 8)
- USE_KW@[0; 3) "use"
- WHITESPACE@[3; 4) " "
- USE_TREE@[4; 7)
- PATH@[4; 7)
- PATH_SEGMENT@[4; 7)
- NAME_REF@[4; 7)
- IDENT@[4; 7) "foo"
- SEMI@[7; 8) ";"
- WHITESPACE@[8; 9) "\n"
- USE_ITEM@[9; 19)
- USE_KW@[9; 12) "use"
- WHITESPACE@[12; 13) " "
- USE_TREE@[13; 18)
- PATH@[13; 18)
- PATH_SEGMENT@[13; 18)
- COLONCOLON@[13; 15) "::"
- NAME_REF@[15; 18)
- IDENT@[15; 18) "bar"
- SEMI@[18; 19) ";"
+++ /dev/null
-use ::foo::bar::baz;
-use foo::bar::baz;
+++ /dev/null
-SOURCE_FILE@[0; 40)
- USE_ITEM@[0; 20)
- USE_KW@[0; 3) "use"
- WHITESPACE@[3; 4) " "
- USE_TREE@[4; 19)
- PATH@[4; 19)
- PATH@[4; 14)
- PATH@[4; 9)
- PATH_SEGMENT@[4; 9)
- COLONCOLON@[4; 6) "::"
- NAME_REF@[6; 9)
- IDENT@[6; 9) "foo"
- COLONCOLON@[9; 11) "::"
- PATH_SEGMENT@[11; 14)
- NAME_REF@[11; 14)
- IDENT@[11; 14) "bar"
- COLONCOLON@[14; 16) "::"
- PATH_SEGMENT@[16; 19)
- NAME_REF@[16; 19)
- IDENT@[16; 19) "baz"
- SEMI@[19; 20) ";"
- WHITESPACE@[20; 21) "\n"
- USE_ITEM@[21; 39)
- USE_KW@[21; 24) "use"
- WHITESPACE@[24; 25) " "
- USE_TREE@[25; 38)
- PATH@[25; 38)
- PATH@[25; 33)
- PATH@[25; 28)
- PATH_SEGMENT@[25; 28)
- NAME_REF@[25; 28)
- IDENT@[25; 28) "foo"
- COLONCOLON@[28; 30) "::"
- PATH_SEGMENT@[30; 33)
- NAME_REF@[30; 33)
- IDENT@[30; 33) "bar"
- COLONCOLON@[33; 35) "::"
- PATH_SEGMENT@[35; 38)
- NAME_REF@[35; 38)
- IDENT@[35; 38) "baz"
- SEMI@[38; 39) ";"
- WHITESPACE@[39; 40) "\n"
+++ /dev/null
-#[cfg(test)]
-#[ignore]
-fn foo() {}
+++ /dev/null
-SOURCE_FILE@[0; 35)
- FN_DEF@[0; 34)
- ATTR@[0; 12)
- POUND@[0; 1) "#"
- TOKEN_TREE@[1; 12)
- L_BRACK@[1; 2) "["
- IDENT@[2; 5) "cfg"
- TOKEN_TREE@[5; 11)
- L_PAREN@[5; 6) "("
- IDENT@[6; 10) "test"
- R_PAREN@[10; 11) ")"
- R_BRACK@[11; 12) "]"
- WHITESPACE@[12; 13) "\n"
- ATTR@[13; 22)
- POUND@[13; 14) "#"
- TOKEN_TREE@[14; 22)
- L_BRACK@[14; 15) "["
- IDENT@[15; 21) "ignore"
- R_BRACK@[21; 22) "]"
- WHITESPACE@[22; 23) "\n"
- FN_KW@[23; 25) "fn"
- WHITESPACE@[25; 26) " "
- NAME@[26; 29)
- IDENT@[26; 29) "foo"
- PARAM_LIST@[29; 31)
- L_PAREN@[29; 30) "("
- R_PAREN@[30; 31) ")"
- WHITESPACE@[31; 32) " "
- BLOCK@[32; 34)
- L_CURLY@[32; 33) "{"
- R_CURLY@[33; 34) "}"
- WHITESPACE@[34; 35) "\n"
+++ /dev/null
-fn a() {}
-pub fn b() {}
-pub(crate) fn c() {}
-pub(super) fn d() {}
-pub(in foo::bar::baz) fn e() {}
+++ /dev/null
-SOURCE_FILE@[0; 98)
- FN_DEF@[0; 9)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 4)
- IDENT@[3; 4) "a"
- PARAM_LIST@[4; 6)
- L_PAREN@[4; 5) "("
- R_PAREN@[5; 6) ")"
- WHITESPACE@[6; 7) " "
- BLOCK@[7; 9)
- L_CURLY@[7; 8) "{"
- R_CURLY@[8; 9) "}"
- WHITESPACE@[9; 10) "\n"
- FN_DEF@[10; 23)
- VISIBILITY@[10; 13)
- PUB_KW@[10; 13) "pub"
- WHITESPACE@[13; 14) " "
- FN_KW@[14; 16) "fn"
- WHITESPACE@[16; 17) " "
- NAME@[17; 18)
- IDENT@[17; 18) "b"
- PARAM_LIST@[18; 20)
- L_PAREN@[18; 19) "("
- R_PAREN@[19; 20) ")"
- WHITESPACE@[20; 21) " "
- BLOCK@[21; 23)
- L_CURLY@[21; 22) "{"
- R_CURLY@[22; 23) "}"
- WHITESPACE@[23; 24) "\n"
- FN_DEF@[24; 44)
- VISIBILITY@[24; 34)
- PUB_KW@[24; 27) "pub"
- L_PAREN@[27; 28) "("
- CRATE_KW@[28; 33) "crate"
- R_PAREN@[33; 34) ")"
- WHITESPACE@[34; 35) " "
- FN_KW@[35; 37) "fn"
- WHITESPACE@[37; 38) " "
- NAME@[38; 39)
- IDENT@[38; 39) "c"
- PARAM_LIST@[39; 41)
- L_PAREN@[39; 40) "("
- R_PAREN@[40; 41) ")"
- WHITESPACE@[41; 42) " "
- BLOCK@[42; 44)
- L_CURLY@[42; 43) "{"
- R_CURLY@[43; 44) "}"
- WHITESPACE@[44; 45) "\n"
- FN_DEF@[45; 65)
- VISIBILITY@[45; 55)
- PUB_KW@[45; 48) "pub"
- L_PAREN@[48; 49) "("
- SUPER_KW@[49; 54) "super"
- R_PAREN@[54; 55) ")"
- WHITESPACE@[55; 56) " "
- FN_KW@[56; 58) "fn"
- WHITESPACE@[58; 59) " "
- NAME@[59; 60)
- IDENT@[59; 60) "d"
- PARAM_LIST@[60; 62)
- L_PAREN@[60; 61) "("
- R_PAREN@[61; 62) ")"
- WHITESPACE@[62; 63) " "
- BLOCK@[63; 65)
- L_CURLY@[63; 64) "{"
- R_CURLY@[64; 65) "}"
- WHITESPACE@[65; 66) "\n"
- FN_DEF@[66; 97)
- VISIBILITY@[66; 87)
- PUB_KW@[66; 69) "pub"
- L_PAREN@[69; 70) "("
- IN_KW@[70; 72) "in"
- WHITESPACE@[72; 73) " "
- PATH@[73; 86)
- PATH@[73; 81)
- PATH@[73; 76)
- PATH_SEGMENT@[73; 76)
- NAME_REF@[73; 76)
- IDENT@[73; 76) "foo"
- COLONCOLON@[76; 78) "::"
- PATH_SEGMENT@[78; 81)
- NAME_REF@[78; 81)
- IDENT@[78; 81) "bar"
- COLONCOLON@[81; 83) "::"
- PATH_SEGMENT@[83; 86)
- NAME_REF@[83; 86)
- IDENT@[83; 86) "baz"
- R_PAREN@[86; 87) ")"
- WHITESPACE@[87; 88) " "
- FN_KW@[88; 90) "fn"
- WHITESPACE@[90; 91) " "
- NAME@[91; 92)
- IDENT@[91; 92) "e"
- PARAM_LIST@[92; 94)
- L_PAREN@[92; 93) "("
- R_PAREN@[93; 94) ")"
- WHITESPACE@[94; 95) " "
- BLOCK@[95; 97)
- L_CURLY@[95; 96) "{"
- R_CURLY@[96; 97) "}"
- WHITESPACE@[97; 98) "\n"
+++ /dev/null
-use self::foo;
-use super::super::bar;
-use ::self::a::super::bar;
+++ /dev/null
-SOURCE_FILE@[0; 65)
- USE_ITEM@[0; 14)
- USE_KW@[0; 3) "use"
- WHITESPACE@[3; 4) " "
- USE_TREE@[4; 13)
- PATH@[4; 13)
- PATH@[4; 8)
- PATH_SEGMENT@[4; 8)
- SELF_KW@[4; 8) "self"
- COLONCOLON@[8; 10) "::"
- PATH_SEGMENT@[10; 13)
- NAME_REF@[10; 13)
- IDENT@[10; 13) "foo"
- SEMI@[13; 14) ";"
- WHITESPACE@[14; 15) "\n"
- USE_ITEM@[15; 37)
- USE_KW@[15; 18) "use"
- WHITESPACE@[18; 19) " "
- USE_TREE@[19; 36)
- PATH@[19; 36)
- PATH@[19; 31)
- PATH@[19; 24)
- PATH_SEGMENT@[19; 24)
- SUPER_KW@[19; 24) "super"
- COLONCOLON@[24; 26) "::"
- PATH_SEGMENT@[26; 31)
- SUPER_KW@[26; 31) "super"
- COLONCOLON@[31; 33) "::"
- PATH_SEGMENT@[33; 36)
- NAME_REF@[33; 36)
- IDENT@[33; 36) "bar"
- SEMI@[36; 37) ";"
- WHITESPACE@[37; 38) "\n"
- USE_ITEM@[38; 64)
- USE_KW@[38; 41) "use"
- WHITESPACE@[41; 42) " "
- USE_TREE@[42; 63)
- PATH@[42; 63)
- PATH@[42; 58)
- PATH@[42; 51)
- PATH@[42; 48)
- PATH_SEGMENT@[42; 48)
- COLONCOLON@[42; 44) "::"
- SELF_KW@[44; 48) "self"
- COLONCOLON@[48; 50) "::"
- PATH_SEGMENT@[50; 51)
- NAME_REF@[50; 51)
- IDENT@[50; 51) "a"
- COLONCOLON@[51; 53) "::"
- PATH_SEGMENT@[53; 58)
- SUPER_KW@[53; 58) "super"
- COLONCOLON@[58; 60) "::"
- PATH_SEGMENT@[60; 63)
- NAME_REF@[60; 63)
- IDENT@[60; 63) "bar"
- SEMI@[63; 64) ";"
- WHITESPACE@[64; 65) "\n"
+++ /dev/null
-use *;
-use ::*;
-use ::{};
-use {};
-use foo::*;
-use foo::{};
-use ::foo::{a, b, c};
+++ /dev/null
-SOURCE_FILE@[0; 81)
- USE_ITEM@[0; 6)
- USE_KW@[0; 3) "use"
- WHITESPACE@[3; 4) " "
- USE_TREE@[4; 5)
- STAR@[4; 5) "*"
- SEMI@[5; 6) ";"
- WHITESPACE@[6; 7) "\n"
- USE_ITEM@[7; 15)
- USE_KW@[7; 10) "use"
- WHITESPACE@[10; 11) " "
- USE_TREE@[11; 14)
- COLONCOLON@[11; 13) "::"
- STAR@[13; 14) "*"
- SEMI@[14; 15) ";"
- WHITESPACE@[15; 16) "\n"
- USE_ITEM@[16; 25)
- USE_KW@[16; 19) "use"
- WHITESPACE@[19; 20) " "
- USE_TREE@[20; 24)
- COLONCOLON@[20; 22) "::"
- USE_TREE_LIST@[22; 24)
- L_CURLY@[22; 23) "{"
- R_CURLY@[23; 24) "}"
- SEMI@[24; 25) ";"
- WHITESPACE@[25; 26) "\n"
- USE_ITEM@[26; 33)
- USE_KW@[26; 29) "use"
- WHITESPACE@[29; 30) " "
- USE_TREE@[30; 32)
- USE_TREE_LIST@[30; 32)
- L_CURLY@[30; 31) "{"
- R_CURLY@[31; 32) "}"
- SEMI@[32; 33) ";"
- WHITESPACE@[33; 34) "\n"
- USE_ITEM@[34; 45)
- USE_KW@[34; 37) "use"
- WHITESPACE@[37; 38) " "
- USE_TREE@[38; 44)
- PATH@[38; 41)
- PATH_SEGMENT@[38; 41)
- NAME_REF@[38; 41)
- IDENT@[38; 41) "foo"
- COLONCOLON@[41; 43) "::"
- STAR@[43; 44) "*"
- SEMI@[44; 45) ";"
- WHITESPACE@[45; 46) "\n"
- USE_ITEM@[46; 58)
- USE_KW@[46; 49) "use"
- WHITESPACE@[49; 50) " "
- USE_TREE@[50; 57)
- PATH@[50; 53)
- PATH_SEGMENT@[50; 53)
- NAME_REF@[50; 53)
- IDENT@[50; 53) "foo"
- COLONCOLON@[53; 55) "::"
- USE_TREE_LIST@[55; 57)
- L_CURLY@[55; 56) "{"
- R_CURLY@[56; 57) "}"
- SEMI@[57; 58) ";"
- WHITESPACE@[58; 59) "\n"
- USE_ITEM@[59; 80)
- USE_KW@[59; 62) "use"
- WHITESPACE@[62; 63) " "
- USE_TREE@[63; 79)
- PATH@[63; 68)
- PATH_SEGMENT@[63; 68)
- COLONCOLON@[63; 65) "::"
- NAME_REF@[65; 68)
- IDENT@[65; 68) "foo"
- COLONCOLON@[68; 70) "::"
- USE_TREE_LIST@[70; 79)
- L_CURLY@[70; 71) "{"
- USE_TREE@[71; 72)
- PATH@[71; 72)
- PATH_SEGMENT@[71; 72)
- NAME_REF@[71; 72)
- IDENT@[71; 72) "a"
- COMMA@[72; 73) ","
- WHITESPACE@[73; 74) " "
- USE_TREE@[74; 75)
- PATH@[74; 75)
- PATH_SEGMENT@[74; 75)
- NAME_REF@[74; 75)
- IDENT@[74; 75) "b"
- COMMA@[75; 76) ","
- WHITESPACE@[76; 77) " "
- USE_TREE@[77; 78)
- PATH@[77; 78)
- PATH_SEGMENT@[77; 78)
- NAME_REF@[77; 78)
- IDENT@[77; 78) "c"
- R_CURLY@[78; 79) "}"
- SEMI@[79; 80) ";"
- WHITESPACE@[80; 81) "\n"
+++ /dev/null
-use foo as bar;
-use foo::{a as b, *, ::*, ::foo as x};
+++ /dev/null
-SOURCE_FILE@[0; 55)
- USE_ITEM@[0; 15)
- USE_KW@[0; 3) "use"
- WHITESPACE@[3; 4) " "
- USE_TREE@[4; 14)
- PATH@[4; 7)
- PATH_SEGMENT@[4; 7)
- NAME_REF@[4; 7)
- IDENT@[4; 7) "foo"
- WHITESPACE@[7; 8) " "
- ALIAS@[8; 14)
- AS_KW@[8; 10) "as"
- WHITESPACE@[10; 11) " "
- NAME@[11; 14)
- IDENT@[11; 14) "bar"
- SEMI@[14; 15) ";"
- WHITESPACE@[15; 16) "\n"
- USE_ITEM@[16; 54)
- USE_KW@[16; 19) "use"
- WHITESPACE@[19; 20) " "
- USE_TREE@[20; 53)
- PATH@[20; 23)
- PATH_SEGMENT@[20; 23)
- NAME_REF@[20; 23)
- IDENT@[20; 23) "foo"
- COLONCOLON@[23; 25) "::"
- USE_TREE_LIST@[25; 53)
- L_CURLY@[25; 26) "{"
- USE_TREE@[26; 32)
- PATH@[26; 27)
- PATH_SEGMENT@[26; 27)
- NAME_REF@[26; 27)
- IDENT@[26; 27) "a"
- WHITESPACE@[27; 28) " "
- ALIAS@[28; 32)
- AS_KW@[28; 30) "as"
- WHITESPACE@[30; 31) " "
- NAME@[31; 32)
- IDENT@[31; 32) "b"
- COMMA@[32; 33) ","
- WHITESPACE@[33; 34) " "
- USE_TREE@[34; 35)
- STAR@[34; 35) "*"
- COMMA@[35; 36) ","
- WHITESPACE@[36; 37) " "
- USE_TREE@[37; 40)
- COLONCOLON@[37; 39) "::"
- STAR@[39; 40) "*"
- COMMA@[40; 41) ","
- WHITESPACE@[41; 42) " "
- USE_TREE@[42; 52)
- PATH@[42; 47)
- PATH_SEGMENT@[42; 47)
- COLONCOLON@[42; 44) "::"
- NAME_REF@[44; 47)
- IDENT@[44; 47) "foo"
- WHITESPACE@[47; 48) " "
- ALIAS@[48; 52)
- AS_KW@[48; 50) "as"
- WHITESPACE@[50; 51) " "
- NAME@[51; 52)
- IDENT@[51; 52) "x"
- R_CURLY@[52; 53) "}"
- SEMI@[53; 54) ";"
- WHITESPACE@[54; 55) "\n"
+++ /dev/null
-struct A;
-struct B {}
-struct C();
-
-struct D {
- a: u32,
- pub b: u32
-}
-
-struct E(pub x, y,);
+++ /dev/null
-SOURCE_FILE@[0; 97)
- STRUCT_DEF@[0; 9)
- STRUCT_KW@[0; 6) "struct"
- WHITESPACE@[6; 7) " "
- NAME@[7; 8)
- IDENT@[7; 8) "A"
- SEMI@[8; 9) ";"
- WHITESPACE@[9; 10) "\n"
- STRUCT_DEF@[10; 21)
- STRUCT_KW@[10; 16) "struct"
- WHITESPACE@[16; 17) " "
- NAME@[17; 18)
- IDENT@[17; 18) "B"
- WHITESPACE@[18; 19) " "
- NAMED_FIELD_DEF_LIST@[19; 21)
- L_CURLY@[19; 20) "{"
- R_CURLY@[20; 21) "}"
- WHITESPACE@[21; 22) "\n"
- STRUCT_DEF@[22; 33)
- STRUCT_KW@[22; 28) "struct"
- WHITESPACE@[28; 29) " "
- NAME@[29; 30)
- IDENT@[29; 30) "C"
- POS_FIELD_DEF_LIST@[30; 32)
- L_PAREN@[30; 31) "("
- R_PAREN@[31; 32) ")"
- SEMI@[32; 33) ";"
- WHITESPACE@[33; 35) "\n\n"
- STRUCT_DEF@[35; 74)
- STRUCT_KW@[35; 41) "struct"
- WHITESPACE@[41; 42) " "
- NAME@[42; 43)
- IDENT@[42; 43) "D"
- WHITESPACE@[43; 44) " "
- NAMED_FIELD_DEF_LIST@[44; 74)
- L_CURLY@[44; 45) "{"
- WHITESPACE@[45; 50) "\n "
- NAMED_FIELD_DEF@[50; 56)
- NAME@[50; 51)
- IDENT@[50; 51) "a"
- COLON@[51; 52) ":"
- WHITESPACE@[52; 53) " "
- PATH_TYPE@[53; 56)
- PATH@[53; 56)
- PATH_SEGMENT@[53; 56)
- NAME_REF@[53; 56)
- IDENT@[53; 56) "u32"
- COMMA@[56; 57) ","
- WHITESPACE@[57; 62) "\n "
- NAMED_FIELD_DEF@[62; 72)
- VISIBILITY@[62; 65)
- PUB_KW@[62; 65) "pub"
- WHITESPACE@[65; 66) " "
- NAME@[66; 67)
- IDENT@[66; 67) "b"
- COLON@[67; 68) ":"
- WHITESPACE@[68; 69) " "
- PATH_TYPE@[69; 72)
- PATH@[69; 72)
- PATH_SEGMENT@[69; 72)
- NAME_REF@[69; 72)
- IDENT@[69; 72) "u32"
- WHITESPACE@[72; 73) "\n"
- R_CURLY@[73; 74) "}"
- WHITESPACE@[74; 76) "\n\n"
- STRUCT_DEF@[76; 96)
- STRUCT_KW@[76; 82) "struct"
- WHITESPACE@[82; 83) " "
- NAME@[83; 84)
- IDENT@[83; 84) "E"
- POS_FIELD_DEF_LIST@[84; 95)
- L_PAREN@[84; 85) "("
- POS_FIELD_DEF@[85; 90)
- VISIBILITY@[85; 88)
- PUB_KW@[85; 88) "pub"
- WHITESPACE@[88; 89) " "
- PATH_TYPE@[89; 90)
- PATH@[89; 90)
- PATH_SEGMENT@[89; 90)
- NAME_REF@[89; 90)
- IDENT@[89; 90) "x"
- COMMA@[90; 91) ","
- WHITESPACE@[91; 92) " "
- POS_FIELD_DEF@[92; 93)
- PATH_TYPE@[92; 93)
- PATH@[92; 93)
- PATH_SEGMENT@[92; 93)
- NAME_REF@[92; 93)
- IDENT@[92; 93) "y"
- COMMA@[93; 94) ","
- R_PAREN@[94; 95) ")"
- SEMI@[95; 96) ";"
- WHITESPACE@[96; 97) "\n"
+++ /dev/null
-#[foo(a,)]
-fn foo() {}
+++ /dev/null
-SOURCE_FILE@[0; 23)
- FN_DEF@[0; 22)
- ATTR@[0; 10)
- POUND@[0; 1) "#"
- TOKEN_TREE@[1; 10)
- L_BRACK@[1; 2) "["
- IDENT@[2; 5) "foo"
- TOKEN_TREE@[5; 9)
- L_PAREN@[5; 6) "("
- IDENT@[6; 7) "a"
- COMMA@[7; 8) ","
- R_PAREN@[8; 9) ")"
- R_BRACK@[9; 10) "]"
- WHITESPACE@[10; 11) "\n"
- FN_KW@[11; 13) "fn"
- WHITESPACE@[13; 14) " "
- NAME@[14; 17)
- IDENT@[14; 17) "foo"
- PARAM_LIST@[17; 19)
- L_PAREN@[17; 18) "("
- R_PAREN@[18; 19) ")"
- WHITESPACE@[19; 20) " "
- BLOCK@[20; 22)
- L_CURLY@[20; 21) "{"
- R_CURLY@[21; 22) "}"
- WHITESPACE@[22; 23) "\n"
+++ /dev/null
-struct S1<T>;
-struct S2<T>(u32);
-struct S3<T> { u: u32 }
-
-struct S4<>;
-struct S5<'a>;
-struct S6<'a:>;
-struct S7<'a: 'b>;
-struct S8<'a: 'b + >;
-struct S9<'a: 'b + 'c>;
-struct S10<'a,>;
-struct S11<'a, 'b>;
-struct S12<'a: 'b+, 'b: 'c,>;
-
-struct S13<T>;
-struct S14<T, U>;
-struct S15<'a, T, U>;
+++ /dev/null
-SOURCE_FILE@[0; 290)
- STRUCT_DEF@[0; 13)
- STRUCT_KW@[0; 6) "struct"
- WHITESPACE@[6; 7) " "
- NAME@[7; 9)
- IDENT@[7; 9) "S1"
- TYPE_PARAM_LIST@[9; 12)
- L_ANGLE@[9; 10) "<"
- TYPE_PARAM@[10; 11)
- NAME@[10; 11)
- IDENT@[10; 11) "T"
- R_ANGLE@[11; 12) ">"
- SEMI@[12; 13) ";"
- WHITESPACE@[13; 14) "\n"
- STRUCT_DEF@[14; 32)
- STRUCT_KW@[14; 20) "struct"
- WHITESPACE@[20; 21) " "
- NAME@[21; 23)
- IDENT@[21; 23) "S2"
- TYPE_PARAM_LIST@[23; 26)
- L_ANGLE@[23; 24) "<"
- TYPE_PARAM@[24; 25)
- NAME@[24; 25)
- IDENT@[24; 25) "T"
- R_ANGLE@[25; 26) ">"
- POS_FIELD_DEF_LIST@[26; 31)
- L_PAREN@[26; 27) "("
- POS_FIELD_DEF@[27; 30)
- PATH_TYPE@[27; 30)
- PATH@[27; 30)
- PATH_SEGMENT@[27; 30)
- NAME_REF@[27; 30)
- IDENT@[27; 30) "u32"
- R_PAREN@[30; 31) ")"
- SEMI@[31; 32) ";"
- WHITESPACE@[32; 33) "\n"
- STRUCT_DEF@[33; 56)
- STRUCT_KW@[33; 39) "struct"
- WHITESPACE@[39; 40) " "
- NAME@[40; 42)
- IDENT@[40; 42) "S3"
- TYPE_PARAM_LIST@[42; 45)
- L_ANGLE@[42; 43) "<"
- TYPE_PARAM@[43; 44)
- NAME@[43; 44)
- IDENT@[43; 44) "T"
- R_ANGLE@[44; 45) ">"
- WHITESPACE@[45; 46) " "
- NAMED_FIELD_DEF_LIST@[46; 56)
- L_CURLY@[46; 47) "{"
- WHITESPACE@[47; 48) " "
- NAMED_FIELD_DEF@[48; 54)
- NAME@[48; 49)
- IDENT@[48; 49) "u"
- COLON@[49; 50) ":"
- WHITESPACE@[50; 51) " "
- PATH_TYPE@[51; 54)
- PATH@[51; 54)
- PATH_SEGMENT@[51; 54)
- NAME_REF@[51; 54)
- IDENT@[51; 54) "u32"
- WHITESPACE@[54; 55) " "
- R_CURLY@[55; 56) "}"
- WHITESPACE@[56; 58) "\n\n"
- STRUCT_DEF@[58; 70)
- STRUCT_KW@[58; 64) "struct"
- WHITESPACE@[64; 65) " "
- NAME@[65; 67)
- IDENT@[65; 67) "S4"
- TYPE_PARAM_LIST@[67; 69)
- L_ANGLE@[67; 68) "<"
- R_ANGLE@[68; 69) ">"
- SEMI@[69; 70) ";"
- WHITESPACE@[70; 71) "\n"
- STRUCT_DEF@[71; 85)
- STRUCT_KW@[71; 77) "struct"
- WHITESPACE@[77; 78) " "
- NAME@[78; 80)
- IDENT@[78; 80) "S5"
- TYPE_PARAM_LIST@[80; 84)
- L_ANGLE@[80; 81) "<"
- LIFETIME_PARAM@[81; 83)
- LIFETIME@[81; 83) "\'a"
- R_ANGLE@[83; 84) ">"
- SEMI@[84; 85) ";"
- WHITESPACE@[85; 86) "\n"
- STRUCT_DEF@[86; 101)
- STRUCT_KW@[86; 92) "struct"
- WHITESPACE@[92; 93) " "
- NAME@[93; 95)
- IDENT@[93; 95) "S6"
- TYPE_PARAM_LIST@[95; 100)
- L_ANGLE@[95; 96) "<"
- LIFETIME_PARAM@[96; 99)
- LIFETIME@[96; 98) "\'a"
- COLON@[98; 99) ":"
- R_ANGLE@[99; 100) ">"
- SEMI@[100; 101) ";"
- WHITESPACE@[101; 102) "\n"
- STRUCT_DEF@[102; 120)
- STRUCT_KW@[102; 108) "struct"
- WHITESPACE@[108; 109) " "
- NAME@[109; 111)
- IDENT@[109; 111) "S7"
- TYPE_PARAM_LIST@[111; 119)
- L_ANGLE@[111; 112) "<"
- LIFETIME_PARAM@[112; 118)
- LIFETIME@[112; 114) "\'a"
- COLON@[114; 115) ":"
- WHITESPACE@[115; 116) " "
- LIFETIME@[116; 118) "\'b"
- R_ANGLE@[118; 119) ">"
- SEMI@[119; 120) ";"
- WHITESPACE@[120; 121) "\n"
- STRUCT_DEF@[121; 142)
- STRUCT_KW@[121; 127) "struct"
- WHITESPACE@[127; 128) " "
- NAME@[128; 130)
- IDENT@[128; 130) "S8"
- TYPE_PARAM_LIST@[130; 141)
- L_ANGLE@[130; 131) "<"
- LIFETIME_PARAM@[131; 139)
- LIFETIME@[131; 133) "\'a"
- COLON@[133; 134) ":"
- WHITESPACE@[134; 135) " "
- LIFETIME@[135; 137) "\'b"
- WHITESPACE@[137; 138) " "
- PLUS@[138; 139) "+"
- WHITESPACE@[139; 140) " "
- R_ANGLE@[140; 141) ">"
- SEMI@[141; 142) ";"
- WHITESPACE@[142; 143) "\n"
- STRUCT_DEF@[143; 166)
- STRUCT_KW@[143; 149) "struct"
- WHITESPACE@[149; 150) " "
- NAME@[150; 152)
- IDENT@[150; 152) "S9"
- TYPE_PARAM_LIST@[152; 165)
- L_ANGLE@[152; 153) "<"
- LIFETIME_PARAM@[153; 164)
- LIFETIME@[153; 155) "\'a"
- COLON@[155; 156) ":"
- WHITESPACE@[156; 157) " "
- LIFETIME@[157; 159) "\'b"
- WHITESPACE@[159; 160) " "
- PLUS@[160; 161) "+"
- WHITESPACE@[161; 162) " "
- LIFETIME@[162; 164) "\'c"
- R_ANGLE@[164; 165) ">"
- SEMI@[165; 166) ";"
- WHITESPACE@[166; 167) "\n"
- STRUCT_DEF@[167; 183)
- STRUCT_KW@[167; 173) "struct"
- WHITESPACE@[173; 174) " "
- NAME@[174; 177)
- IDENT@[174; 177) "S10"
- TYPE_PARAM_LIST@[177; 182)
- L_ANGLE@[177; 178) "<"
- LIFETIME_PARAM@[178; 180)
- LIFETIME@[178; 180) "\'a"
- COMMA@[180; 181) ","
- R_ANGLE@[181; 182) ">"
- SEMI@[182; 183) ";"
- WHITESPACE@[183; 184) "\n"
- STRUCT_DEF@[184; 203)
- STRUCT_KW@[184; 190) "struct"
- WHITESPACE@[190; 191) " "
- NAME@[191; 194)
- IDENT@[191; 194) "S11"
- TYPE_PARAM_LIST@[194; 202)
- L_ANGLE@[194; 195) "<"
- LIFETIME_PARAM@[195; 197)
- LIFETIME@[195; 197) "\'a"
- COMMA@[197; 198) ","
- WHITESPACE@[198; 199) " "
- LIFETIME_PARAM@[199; 201)
- LIFETIME@[199; 201) "\'b"
- R_ANGLE@[201; 202) ">"
- SEMI@[202; 203) ";"
- WHITESPACE@[203; 204) "\n"
- STRUCT_DEF@[204; 233)
- STRUCT_KW@[204; 210) "struct"
- WHITESPACE@[210; 211) " "
- NAME@[211; 214)
- IDENT@[211; 214) "S12"
- TYPE_PARAM_LIST@[214; 232)
- L_ANGLE@[214; 215) "<"
- LIFETIME_PARAM@[215; 222)
- LIFETIME@[215; 217) "\'a"
- COLON@[217; 218) ":"
- WHITESPACE@[218; 219) " "
- LIFETIME@[219; 221) "\'b"
- PLUS@[221; 222) "+"
- COMMA@[222; 223) ","
- WHITESPACE@[223; 224) " "
- LIFETIME_PARAM@[224; 230)
- LIFETIME@[224; 226) "\'b"
- COLON@[226; 227) ":"
- WHITESPACE@[227; 228) " "
- LIFETIME@[228; 230) "\'c"
- COMMA@[230; 231) ","
- R_ANGLE@[231; 232) ">"
- SEMI@[232; 233) ";"
- WHITESPACE@[233; 235) "\n\n"
- STRUCT_DEF@[235; 249)
- STRUCT_KW@[235; 241) "struct"
- WHITESPACE@[241; 242) " "
- NAME@[242; 245)
- IDENT@[242; 245) "S13"
- TYPE_PARAM_LIST@[245; 248)
- L_ANGLE@[245; 246) "<"
- TYPE_PARAM@[246; 247)
- NAME@[246; 247)
- IDENT@[246; 247) "T"
- R_ANGLE@[247; 248) ">"
- SEMI@[248; 249) ";"
- WHITESPACE@[249; 250) "\n"
- STRUCT_DEF@[250; 267)
- STRUCT_KW@[250; 256) "struct"
- WHITESPACE@[256; 257) " "
- NAME@[257; 260)
- IDENT@[257; 260) "S14"
- TYPE_PARAM_LIST@[260; 266)
- L_ANGLE@[260; 261) "<"
- TYPE_PARAM@[261; 262)
- NAME@[261; 262)
- IDENT@[261; 262) "T"
- COMMA@[262; 263) ","
- WHITESPACE@[263; 264) " "
- TYPE_PARAM@[264; 265)
- NAME@[264; 265)
- IDENT@[264; 265) "U"
- R_ANGLE@[265; 266) ">"
- SEMI@[266; 267) ";"
- WHITESPACE@[267; 268) "\n"
- STRUCT_DEF@[268; 289)
- STRUCT_KW@[268; 274) "struct"
- WHITESPACE@[274; 275) " "
- NAME@[275; 278)
- IDENT@[275; 278) "S15"
- TYPE_PARAM_LIST@[278; 288)
- L_ANGLE@[278; 279) "<"
- LIFETIME_PARAM@[279; 281)
- LIFETIME@[279; 281) "\'a"
- COMMA@[281; 282) ","
- WHITESPACE@[282; 283) " "
- TYPE_PARAM@[283; 284)
- NAME@[283; 284)
- IDENT@[283; 284) "T"
- COMMA@[284; 285) ","
- WHITESPACE@[285; 286) " "
- TYPE_PARAM@[286; 287)
- NAME@[286; 287)
- IDENT@[286; 287) "U"
- R_ANGLE@[287; 288) ">"
- SEMI@[288; 289) ";"
- WHITESPACE@[289; 290) "\n"
+++ /dev/null
-enum E1 {
-}
-
-enum E2<T> {
-}
-
-enum E3 {
- X
-}
-
-enum E4 {
- X,
-}
-
-enum E5 {
- A,
- B = 92,
- C {
- a: u32,
- pub b: f64,
- },
- F {},
- D(u32,),
- E(),
-}
+++ /dev/null
-SOURCE_FILE@[0; 182)
- ENUM_DEF@[0; 11)
- ENUM_KW@[0; 4) "enum"
- WHITESPACE@[4; 5) " "
- NAME@[5; 7)
- IDENT@[5; 7) "E1"
- WHITESPACE@[7; 8) " "
- ENUM_VARIANT_LIST@[8; 11)
- L_CURLY@[8; 9) "{"
- WHITESPACE@[9; 10) "\n"
- R_CURLY@[10; 11) "}"
- WHITESPACE@[11; 13) "\n\n"
- ENUM_DEF@[13; 27)
- ENUM_KW@[13; 17) "enum"
- WHITESPACE@[17; 18) " "
- NAME@[18; 20)
- IDENT@[18; 20) "E2"
- TYPE_PARAM_LIST@[20; 23)
- L_ANGLE@[20; 21) "<"
- TYPE_PARAM@[21; 22)
- NAME@[21; 22)
- IDENT@[21; 22) "T"
- R_ANGLE@[22; 23) ">"
- WHITESPACE@[23; 24) " "
- ENUM_VARIANT_LIST@[24; 27)
- L_CURLY@[24; 25) "{"
- WHITESPACE@[25; 26) "\n"
- R_CURLY@[26; 27) "}"
- WHITESPACE@[27; 29) "\n\n"
- ENUM_DEF@[29; 46)
- ENUM_KW@[29; 33) "enum"
- WHITESPACE@[33; 34) " "
- NAME@[34; 36)
- IDENT@[34; 36) "E3"
- WHITESPACE@[36; 37) " "
- ENUM_VARIANT_LIST@[37; 46)
- L_CURLY@[37; 38) "{"
- WHITESPACE@[38; 43) "\n "
- ENUM_VARIANT@[43; 44)
- NAME@[43; 44)
- IDENT@[43; 44) "X"
- WHITESPACE@[44; 45) "\n"
- R_CURLY@[45; 46) "}"
- WHITESPACE@[46; 48) "\n\n"
- ENUM_DEF@[48; 66)
- ENUM_KW@[48; 52) "enum"
- WHITESPACE@[52; 53) " "
- NAME@[53; 55)
- IDENT@[53; 55) "E4"
- WHITESPACE@[55; 56) " "
- ENUM_VARIANT_LIST@[56; 66)
- L_CURLY@[56; 57) "{"
- WHITESPACE@[57; 62) "\n "
- ENUM_VARIANT@[62; 63)
- NAME@[62; 63)
- IDENT@[62; 63) "X"
- COMMA@[63; 64) ","
- WHITESPACE@[64; 65) "\n"
- R_CURLY@[65; 66) "}"
- WHITESPACE@[66; 68) "\n\n"
- ENUM_DEF@[68; 181)
- ENUM_KW@[68; 72) "enum"
- WHITESPACE@[72; 73) " "
- NAME@[73; 75)
- IDENT@[73; 75) "E5"
- WHITESPACE@[75; 76) " "
- ENUM_VARIANT_LIST@[76; 181)
- L_CURLY@[76; 77) "{"
- WHITESPACE@[77; 82) "\n "
- ENUM_VARIANT@[82; 83)
- NAME@[82; 83)
- IDENT@[82; 83) "A"
- COMMA@[83; 84) ","
- WHITESPACE@[84; 89) "\n "
- ENUM_VARIANT@[89; 95)
- NAME@[89; 90)
- IDENT@[89; 90) "B"
- WHITESPACE@[90; 91) " "
- EQ@[91; 92) "="
- WHITESPACE@[92; 93) " "
- LITERAL@[93; 95)
- INT_NUMBER@[93; 95) "92"
- COMMA@[95; 96) ","
- WHITESPACE@[96; 101) "\n "
- ENUM_VARIANT@[101; 146)
- NAME@[101; 102)
- IDENT@[101; 102) "C"
- WHITESPACE@[102; 103) " "
- NAMED_FIELD_DEF_LIST@[103; 146)
- L_CURLY@[103; 104) "{"
- WHITESPACE@[104; 113) "\n "
- NAMED_FIELD_DEF@[113; 119)
- NAME@[113; 114)
- IDENT@[113; 114) "a"
- COLON@[114; 115) ":"
- WHITESPACE@[115; 116) " "
- PATH_TYPE@[116; 119)
- PATH@[116; 119)
- PATH_SEGMENT@[116; 119)
- NAME_REF@[116; 119)
- IDENT@[116; 119) "u32"
- COMMA@[119; 120) ","
- WHITESPACE@[120; 129) "\n "
- NAMED_FIELD_DEF@[129; 139)
- VISIBILITY@[129; 132)
- PUB_KW@[129; 132) "pub"
- WHITESPACE@[132; 133) " "
- NAME@[133; 134)
- IDENT@[133; 134) "b"
- COLON@[134; 135) ":"
- WHITESPACE@[135; 136) " "
- PATH_TYPE@[136; 139)
- PATH@[136; 139)
- PATH_SEGMENT@[136; 139)
- NAME_REF@[136; 139)
- IDENT@[136; 139) "f64"
- COMMA@[139; 140) ","
- WHITESPACE@[140; 145) "\n "
- R_CURLY@[145; 146) "}"
- COMMA@[146; 147) ","
- WHITESPACE@[147; 152) "\n "
- ENUM_VARIANT@[152; 156)
- NAME@[152; 153)
- IDENT@[152; 153) "F"
- WHITESPACE@[153; 154) " "
- NAMED_FIELD_DEF_LIST@[154; 156)
- L_CURLY@[154; 155) "{"
- R_CURLY@[155; 156) "}"
- COMMA@[156; 157) ","
- WHITESPACE@[157; 162) "\n "
- ENUM_VARIANT@[162; 169)
- NAME@[162; 163)
- IDENT@[162; 163) "D"
- POS_FIELD_DEF_LIST@[163; 169)
- L_PAREN@[163; 164) "("
- POS_FIELD_DEF@[164; 167)
- PATH_TYPE@[164; 167)
- PATH@[164; 167)
- PATH_SEGMENT@[164; 167)
- NAME_REF@[164; 167)
- IDENT@[164; 167) "u32"
- COMMA@[167; 168) ","
- R_PAREN@[168; 169) ")"
- COMMA@[169; 170) ","
- WHITESPACE@[170; 175) "\n "
- ENUM_VARIANT@[175; 178)
- NAME@[175; 176)
- IDENT@[175; 176) "E"
- POS_FIELD_DEF_LIST@[176; 178)
- L_PAREN@[176; 177) "("
- R_PAREN@[177; 178) ")"
- COMMA@[178; 179) ","
- WHITESPACE@[179; 180) "\n"
- R_CURLY@[180; 181) "}"
- WHITESPACE@[181; 182) "\n"
+++ /dev/null
-struct A<T>;
-struct B<T:>;
-struct C<T: 'a>;
-struct D<T: 'a + >;
-struct E<T: 'a + 'd >;
-struct F<T: 'a + 'd + Clone>;
-struct G<T: Clone + Copy>;
-struct H<T: ::Foo + self::Bar + 'a>;
-struct I<T:, U:,>;
-struct K<'a: 'd, 'd: 'a + 'b, T: 'a + 'd + Clone>;
\ No newline at end of file
+++ /dev/null
-SOURCE_FILE@[0; 250)
- STRUCT_DEF@[0; 12)
- STRUCT_KW@[0; 6) "struct"
- WHITESPACE@[6; 7) " "
- NAME@[7; 8)
- IDENT@[7; 8) "A"
- TYPE_PARAM_LIST@[8; 11)
- L_ANGLE@[8; 9) "<"
- TYPE_PARAM@[9; 10)
- NAME@[9; 10)
- IDENT@[9; 10) "T"
- R_ANGLE@[10; 11) ">"
- SEMI@[11; 12) ";"
- WHITESPACE@[12; 13) "\n"
- STRUCT_DEF@[13; 26)
- STRUCT_KW@[13; 19) "struct"
- WHITESPACE@[19; 20) " "
- NAME@[20; 21)
- IDENT@[20; 21) "B"
- TYPE_PARAM_LIST@[21; 25)
- L_ANGLE@[21; 22) "<"
- TYPE_PARAM@[22; 24)
- NAME@[22; 23)
- IDENT@[22; 23) "T"
- COLON@[23; 24) ":"
- TYPE_BOUND_LIST@[24; 24)
- R_ANGLE@[24; 25) ">"
- SEMI@[25; 26) ";"
- WHITESPACE@[26; 27) "\n"
- STRUCT_DEF@[27; 43)
- STRUCT_KW@[27; 33) "struct"
- WHITESPACE@[33; 34) " "
- NAME@[34; 35)
- IDENT@[34; 35) "C"
- TYPE_PARAM_LIST@[35; 42)
- L_ANGLE@[35; 36) "<"
- TYPE_PARAM@[36; 41)
- NAME@[36; 37)
- IDENT@[36; 37) "T"
- COLON@[37; 38) ":"
- WHITESPACE@[38; 39) " "
- TYPE_BOUND_LIST@[39; 41)
- TYPE_BOUND@[39; 41)
- LIFETIME@[39; 41) "\'a"
- R_ANGLE@[41; 42) ">"
- SEMI@[42; 43) ";"
- WHITESPACE@[43; 44) "\n"
- STRUCT_DEF@[44; 63)
- STRUCT_KW@[44; 50) "struct"
- WHITESPACE@[50; 51) " "
- NAME@[51; 52)
- IDENT@[51; 52) "D"
- TYPE_PARAM_LIST@[52; 62)
- L_ANGLE@[52; 53) "<"
- TYPE_PARAM@[53; 60)
- NAME@[53; 54)
- IDENT@[53; 54) "T"
- COLON@[54; 55) ":"
- WHITESPACE@[55; 56) " "
- TYPE_BOUND_LIST@[56; 60)
- TYPE_BOUND@[56; 58)
- LIFETIME@[56; 58) "\'a"
- WHITESPACE@[58; 59) " "
- PLUS@[59; 60) "+"
- WHITESPACE@[60; 61) " "
- R_ANGLE@[61; 62) ">"
- SEMI@[62; 63) ";"
- WHITESPACE@[63; 64) "\n"
- STRUCT_DEF@[64; 86)
- STRUCT_KW@[64; 70) "struct"
- WHITESPACE@[70; 71) " "
- NAME@[71; 72)
- IDENT@[71; 72) "E"
- TYPE_PARAM_LIST@[72; 85)
- L_ANGLE@[72; 73) "<"
- TYPE_PARAM@[73; 83)
- NAME@[73; 74)
- IDENT@[73; 74) "T"
- COLON@[74; 75) ":"
- WHITESPACE@[75; 76) " "
- TYPE_BOUND_LIST@[76; 83)
- TYPE_BOUND@[76; 78)
- LIFETIME@[76; 78) "\'a"
- WHITESPACE@[78; 79) " "
- PLUS@[79; 80) "+"
- WHITESPACE@[80; 81) " "
- TYPE_BOUND@[81; 83)
- LIFETIME@[81; 83) "\'d"
- WHITESPACE@[83; 84) " "
- R_ANGLE@[84; 85) ">"
- SEMI@[85; 86) ";"
- WHITESPACE@[86; 87) "\n"
- STRUCT_DEF@[87; 116)
- STRUCT_KW@[87; 93) "struct"
- WHITESPACE@[93; 94) " "
- NAME@[94; 95)
- IDENT@[94; 95) "F"
- TYPE_PARAM_LIST@[95; 115)
- L_ANGLE@[95; 96) "<"
- TYPE_PARAM@[96; 114)
- NAME@[96; 97)
- IDENT@[96; 97) "T"
- COLON@[97; 98) ":"
- WHITESPACE@[98; 99) " "
- TYPE_BOUND_LIST@[99; 114)
- TYPE_BOUND@[99; 101)
- LIFETIME@[99; 101) "\'a"
- WHITESPACE@[101; 102) " "
- PLUS@[102; 103) "+"
- WHITESPACE@[103; 104) " "
- TYPE_BOUND@[104; 106)
- LIFETIME@[104; 106) "\'d"
- WHITESPACE@[106; 107) " "
- PLUS@[107; 108) "+"
- WHITESPACE@[108; 109) " "
- TYPE_BOUND@[109; 114)
- PATH_TYPE@[109; 114)
- PATH@[109; 114)
- PATH_SEGMENT@[109; 114)
- NAME_REF@[109; 114)
- IDENT@[109; 114) "Clone"
- R_ANGLE@[114; 115) ">"
- SEMI@[115; 116) ";"
- WHITESPACE@[116; 117) "\n"
- STRUCT_DEF@[117; 143)
- STRUCT_KW@[117; 123) "struct"
- WHITESPACE@[123; 124) " "
- NAME@[124; 125)
- IDENT@[124; 125) "G"
- TYPE_PARAM_LIST@[125; 142)
- L_ANGLE@[125; 126) "<"
- TYPE_PARAM@[126; 141)
- NAME@[126; 127)
- IDENT@[126; 127) "T"
- COLON@[127; 128) ":"
- WHITESPACE@[128; 129) " "
- TYPE_BOUND_LIST@[129; 141)
- TYPE_BOUND@[129; 134)
- PATH_TYPE@[129; 134)
- PATH@[129; 134)
- PATH_SEGMENT@[129; 134)
- NAME_REF@[129; 134)
- IDENT@[129; 134) "Clone"
- WHITESPACE@[134; 135) " "
- PLUS@[135; 136) "+"
- WHITESPACE@[136; 137) " "
- TYPE_BOUND@[137; 141)
- PATH_TYPE@[137; 141)
- PATH@[137; 141)
- PATH_SEGMENT@[137; 141)
- NAME_REF@[137; 141)
- IDENT@[137; 141) "Copy"
- R_ANGLE@[141; 142) ">"
- SEMI@[142; 143) ";"
- WHITESPACE@[143; 144) "\n"
- STRUCT_DEF@[144; 180)
- STRUCT_KW@[144; 150) "struct"
- WHITESPACE@[150; 151) " "
- NAME@[151; 152)
- IDENT@[151; 152) "H"
- TYPE_PARAM_LIST@[152; 179)
- L_ANGLE@[152; 153) "<"
- TYPE_PARAM@[153; 178)
- NAME@[153; 154)
- IDENT@[153; 154) "T"
- COLON@[154; 155) ":"
- WHITESPACE@[155; 156) " "
- TYPE_BOUND_LIST@[156; 178)
- TYPE_BOUND@[156; 161)
- PATH_TYPE@[156; 161)
- PATH@[156; 161)
- PATH_SEGMENT@[156; 161)
- COLONCOLON@[156; 158) "::"
- NAME_REF@[158; 161)
- IDENT@[158; 161) "Foo"
- WHITESPACE@[161; 162) " "
- PLUS@[162; 163) "+"
- WHITESPACE@[163; 164) " "
- TYPE_BOUND@[164; 173)
- PATH_TYPE@[164; 173)
- PATH@[164; 173)
- PATH@[164; 168)
- PATH_SEGMENT@[164; 168)
- SELF_KW@[164; 168) "self"
- COLONCOLON@[168; 170) "::"
- PATH_SEGMENT@[170; 173)
- NAME_REF@[170; 173)
- IDENT@[170; 173) "Bar"
- WHITESPACE@[173; 174) " "
- PLUS@[174; 175) "+"
- WHITESPACE@[175; 176) " "
- TYPE_BOUND@[176; 178)
- LIFETIME@[176; 178) "\'a"
- R_ANGLE@[178; 179) ">"
- SEMI@[179; 180) ";"
- WHITESPACE@[180; 181) "\n"
- STRUCT_DEF@[181; 199)
- STRUCT_KW@[181; 187) "struct"
- WHITESPACE@[187; 188) " "
- NAME@[188; 189)
- IDENT@[188; 189) "I"
- TYPE_PARAM_LIST@[189; 198)
- L_ANGLE@[189; 190) "<"
- TYPE_PARAM@[190; 192)
- NAME@[190; 191)
- IDENT@[190; 191) "T"
- COLON@[191; 192) ":"
- TYPE_BOUND_LIST@[192; 192)
- COMMA@[192; 193) ","
- WHITESPACE@[193; 194) " "
- TYPE_PARAM@[194; 196)
- NAME@[194; 195)
- IDENT@[194; 195) "U"
- COLON@[195; 196) ":"
- TYPE_BOUND_LIST@[196; 196)
- COMMA@[196; 197) ","
- R_ANGLE@[197; 198) ">"
- SEMI@[198; 199) ";"
- WHITESPACE@[199; 200) "\n"
- STRUCT_DEF@[200; 250)
- STRUCT_KW@[200; 206) "struct"
- WHITESPACE@[206; 207) " "
- NAME@[207; 208)
- IDENT@[207; 208) "K"
- TYPE_PARAM_LIST@[208; 249)
- L_ANGLE@[208; 209) "<"
- LIFETIME_PARAM@[209; 215)
- LIFETIME@[209; 211) "\'a"
- COLON@[211; 212) ":"
- WHITESPACE@[212; 213) " "
- LIFETIME@[213; 215) "\'d"
- COMMA@[215; 216) ","
- WHITESPACE@[216; 217) " "
- LIFETIME_PARAM@[217; 228)
- LIFETIME@[217; 219) "\'d"
- COLON@[219; 220) ":"
- WHITESPACE@[220; 221) " "
- LIFETIME@[221; 223) "\'a"
- WHITESPACE@[223; 224) " "
- PLUS@[224; 225) "+"
- WHITESPACE@[225; 226) " "
- LIFETIME@[226; 228) "\'b"
- COMMA@[228; 229) ","
- WHITESPACE@[229; 230) " "
- TYPE_PARAM@[230; 248)
- NAME@[230; 231)
- IDENT@[230; 231) "T"
- COLON@[231; 232) ":"
- WHITESPACE@[232; 233) " "
- TYPE_BOUND_LIST@[233; 248)
- TYPE_BOUND@[233; 235)
- LIFETIME@[233; 235) "\'a"
- WHITESPACE@[235; 236) " "
- PLUS@[236; 237) "+"
- WHITESPACE@[237; 238) " "
- TYPE_BOUND@[238; 240)
- LIFETIME@[238; 240) "\'d"
- WHITESPACE@[240; 241) " "
- PLUS@[241; 242) "+"
- WHITESPACE@[242; 243) " "
- TYPE_BOUND@[243; 248)
- PATH_TYPE@[243; 248)
- PATH@[243; 248)
- PATH_SEGMENT@[243; 248)
- NAME_REF@[243; 248)
- IDENT@[243; 248) "Clone"
- R_ANGLE@[248; 249) ">"
- SEMI@[249; 250) ";"
+++ /dev/null
-extern fn foo() {
-}
-
-extern "C" fn bar() {
-}
-
-extern r"D" fn baz() {
-}
+++ /dev/null
-SOURCE_FILE@[0; 71)
- FN_DEF@[0; 19)
- ABI@[0; 6)
- EXTERN_KW@[0; 6) "extern"
- WHITESPACE@[6; 7) " "
- FN_KW@[7; 9) "fn"
- WHITESPACE@[9; 10) " "
- NAME@[10; 13)
- IDENT@[10; 13) "foo"
- PARAM_LIST@[13; 15)
- L_PAREN@[13; 14) "("
- R_PAREN@[14; 15) ")"
- WHITESPACE@[15; 16) " "
- BLOCK@[16; 19)
- L_CURLY@[16; 17) "{"
- WHITESPACE@[17; 18) "\n"
- R_CURLY@[18; 19) "}"
- WHITESPACE@[19; 21) "\n\n"
- FN_DEF@[21; 44)
- ABI@[21; 31)
- EXTERN_KW@[21; 27) "extern"
- WHITESPACE@[27; 28) " "
- STRING@[28; 31) "\"C\""
- WHITESPACE@[31; 32) " "
- FN_KW@[32; 34) "fn"
- WHITESPACE@[34; 35) " "
- NAME@[35; 38)
- IDENT@[35; 38) "bar"
- PARAM_LIST@[38; 40)
- L_PAREN@[38; 39) "("
- R_PAREN@[39; 40) ")"
- WHITESPACE@[40; 41) " "
- BLOCK@[41; 44)
- L_CURLY@[41; 42) "{"
- WHITESPACE@[42; 43) "\n"
- R_CURLY@[43; 44) "}"
- WHITESPACE@[44; 46) "\n\n"
- FN_DEF@[46; 70)
- ABI@[46; 57)
- EXTERN_KW@[46; 52) "extern"
- WHITESPACE@[52; 53) " "
- RAW_STRING@[53; 57) "r\"D\""
- WHITESPACE@[57; 58) " "
- FN_KW@[58; 60) "fn"
- WHITESPACE@[60; 61) " "
- NAME@[61; 64)
- IDENT@[61; 64) "baz"
- PARAM_LIST@[64; 66)
- L_PAREN@[64; 65) "("
- R_PAREN@[65; 66) ")"
- WHITESPACE@[66; 67) " "
- BLOCK@[67; 70)
- L_CURLY@[67; 68) "{"
- WHITESPACE@[68; 69) "\n"
- R_CURLY@[69; 70) "}"
- WHITESPACE@[70; 71) "\n"
+++ /dev/null
-extern {
-}
-
-extern "C" {
-}
+++ /dev/null
-SOURCE_FILE@[0; 27)
- EXTERN_BLOCK@[0; 10)
- ABI@[0; 6)
- EXTERN_KW@[0; 6) "extern"
- WHITESPACE@[6; 7) " "
- EXTERN_ITEM_LIST@[7; 10)
- L_CURLY@[7; 8) "{"
- WHITESPACE@[8; 9) "\n"
- R_CURLY@[9; 10) "}"
- WHITESPACE@[10; 12) "\n\n"
- EXTERN_BLOCK@[12; 26)
- ABI@[12; 22)
- EXTERN_KW@[12; 18) "extern"
- WHITESPACE@[18; 19) " "
- STRING@[19; 22) "\"C\""
- WHITESPACE@[22; 23) " "
- EXTERN_ITEM_LIST@[23; 26)
- L_CURLY@[23; 24) "{"
- WHITESPACE@[24; 25) "\n"
- R_CURLY@[25; 26) "}"
- WHITESPACE@[26; 27) "\n"
+++ /dev/null
-static FOO: u32 = 1;
-static mut BAR: i32 = 92;
+++ /dev/null
-SOURCE_FILE@[0; 47)
- STATIC_DEF@[0; 20)
- STATIC_KW@[0; 6) "static"
- WHITESPACE@[6; 7) " "
- NAME@[7; 10)
- IDENT@[7; 10) "FOO"
- COLON@[10; 11) ":"
- WHITESPACE@[11; 12) " "
- PATH_TYPE@[12; 15)
- PATH@[12; 15)
- PATH_SEGMENT@[12; 15)
- NAME_REF@[12; 15)
- IDENT@[12; 15) "u32"
- WHITESPACE@[15; 16) " "
- EQ@[16; 17) "="
- WHITESPACE@[17; 18) " "
- LITERAL@[18; 19)
- INT_NUMBER@[18; 19) "1"
- SEMI@[19; 20) ";"
- WHITESPACE@[20; 21) "\n"
- STATIC_DEF@[21; 46)
- STATIC_KW@[21; 27) "static"
- WHITESPACE@[27; 28) " "
- MUT_KW@[28; 31) "mut"
- WHITESPACE@[31; 32) " "
- NAME@[32; 35)
- IDENT@[32; 35) "BAR"
- COLON@[35; 36) ":"
- WHITESPACE@[36; 37) " "
- PATH_TYPE@[37; 40)
- PATH@[37; 40)
- PATH_SEGMENT@[37; 40)
- NAME_REF@[37; 40)
- IDENT@[37; 40) "i32"
- WHITESPACE@[40; 41) " "
- EQ@[41; 42) "="
- WHITESPACE@[42; 43) " "
- LITERAL@[43; 45)
- INT_NUMBER@[43; 45) "92"
- SEMI@[45; 46) ";"
- WHITESPACE@[46; 47) "\n"
+++ /dev/null
-const FOO: u32 = 92;
-const mut BAR: u32 = 62;
+++ /dev/null
-SOURCE_FILE@[0; 46)
- CONST_DEF@[0; 20)
- CONST_KW@[0; 5) "const"
- WHITESPACE@[5; 6) " "
- NAME@[6; 9)
- IDENT@[6; 9) "FOO"
- COLON@[9; 10) ":"
- WHITESPACE@[10; 11) " "
- PATH_TYPE@[11; 14)
- PATH@[11; 14)
- PATH_SEGMENT@[11; 14)
- NAME_REF@[11; 14)
- IDENT@[11; 14) "u32"
- WHITESPACE@[14; 15) " "
- EQ@[15; 16) "="
- WHITESPACE@[16; 17) " "
- LITERAL@[17; 19)
- INT_NUMBER@[17; 19) "92"
- SEMI@[19; 20) ";"
- WHITESPACE@[20; 21) "\n"
- CONST_DEF@[21; 45)
- CONST_KW@[21; 26) "const"
- WHITESPACE@[26; 27) " "
- MUT_KW@[27; 30) "mut"
- WHITESPACE@[30; 31) " "
- NAME@[31; 34)
- IDENT@[31; 34) "BAR"
- COLON@[34; 35) ":"
- WHITESPACE@[35; 36) " "
- PATH_TYPE@[36; 39)
- PATH@[36; 39)
- PATH_SEGMENT@[36; 39)
- NAME_REF@[36; 39)
- IDENT@[36; 39) "u32"
- WHITESPACE@[39; 40) " "
- EQ@[40; 41) "="
- WHITESPACE@[41; 42) " "
- LITERAL@[42; 44)
- INT_NUMBER@[42; 44) "62"
- SEMI@[44; 45) ";"
- WHITESPACE@[45; 46) "\n"
+++ /dev/null
-fn main() {
- extern fn f() {}
-}
+++ /dev/null
-SOURCE_FILE@[0; 35)
- FN_DEF@[0; 34)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 7)
- IDENT@[3; 7) "main"
- PARAM_LIST@[7; 9)
- L_PAREN@[7; 8) "("
- R_PAREN@[8; 9) ")"
- WHITESPACE@[9; 10) " "
- BLOCK@[10; 34)
- L_CURLY@[10; 11) "{"
- WHITESPACE@[11; 16) "\n "
- FN_DEF@[16; 32)
- ABI@[16; 22)
- EXTERN_KW@[16; 22) "extern"
- WHITESPACE@[22; 23) " "
- FN_KW@[23; 25) "fn"
- WHITESPACE@[25; 26) " "
- NAME@[26; 27)
- IDENT@[26; 27) "f"
- PARAM_LIST@[27; 29)
- L_PAREN@[27; 28) "("
- R_PAREN@[28; 29) ")"
- WHITESPACE@[29; 30) " "
- BLOCK@[30; 32)
- L_CURLY@[30; 31) "{"
- R_CURLY@[31; 32) "}"
- WHITESPACE@[32; 33) "\n"
- R_CURLY@[33; 34) "}"
- WHITESPACE@[34; 35) "\n"
+++ /dev/null
-fn main() {
- const fn f() {}
-}
+++ /dev/null
-SOURCE_FILE@[0; 34)
- FN_DEF@[0; 33)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 7)
- IDENT@[3; 7) "main"
- PARAM_LIST@[7; 9)
- L_PAREN@[7; 8) "("
- R_PAREN@[8; 9) ")"
- WHITESPACE@[9; 10) " "
- BLOCK@[10; 33)
- L_CURLY@[10; 11) "{"
- WHITESPACE@[11; 16) "\n "
- FN_DEF@[16; 31)
- CONST_KW@[16; 21) "const"
- WHITESPACE@[21; 22) " "
- FN_KW@[22; 24) "fn"
- WHITESPACE@[24; 25) " "
- NAME@[25; 26)
- IDENT@[25; 26) "f"
- PARAM_LIST@[26; 28)
- L_PAREN@[26; 27) "("
- R_PAREN@[27; 28) ")"
- WHITESPACE@[28; 29) " "
- BLOCK@[29; 31)
- L_CURLY@[29; 30) "{"
- R_CURLY@[30; 31) "}"
- WHITESPACE@[31; 32) "\n"
- R_CURLY@[32; 33) "}"
- WHITESPACE@[33; 34) "\n"
+++ /dev/null
-fn main() {
- unsafe fn f() {}
- unsafe { 92 }
-}
+++ /dev/null
-SOURCE_FILE@[0; 53)
- FN_DEF@[0; 52)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 7)
- IDENT@[3; 7) "main"
- PARAM_LIST@[7; 9)
- L_PAREN@[7; 8) "("
- R_PAREN@[8; 9) ")"
- WHITESPACE@[9; 10) " "
- BLOCK@[10; 52)
- L_CURLY@[10; 11) "{"
- WHITESPACE@[11; 16) "\n "
- FN_DEF@[16; 32)
- UNSAFE_KW@[16; 22) "unsafe"
- WHITESPACE@[22; 23) " "
- FN_KW@[23; 25) "fn"
- WHITESPACE@[25; 26) " "
- NAME@[26; 27)
- IDENT@[26; 27) "f"
- PARAM_LIST@[27; 29)
- L_PAREN@[27; 28) "("
- R_PAREN@[28; 29) ")"
- WHITESPACE@[29; 30) " "
- BLOCK@[30; 32)
- L_CURLY@[30; 31) "{"
- R_CURLY@[31; 32) "}"
- WHITESPACE@[32; 37) "\n "
- BLOCK_EXPR@[37; 50)
- UNSAFE_KW@[37; 43) "unsafe"
- WHITESPACE@[43; 44) " "
- BLOCK@[44; 50)
- L_CURLY@[44; 45) "{"
- WHITESPACE@[45; 46) " "
- LITERAL@[46; 48)
- INT_NUMBER@[46; 48) "92"
- WHITESPACE@[48; 49) " "
- R_CURLY@[49; 50) "}"
- WHITESPACE@[50; 51) "\n"
- R_CURLY@[51; 52) "}"
- WHITESPACE@[52; 53) "\n"
+++ /dev/null
-fn binding_power() {
- let x = 1 + 2 * 3 % 4 - 5 / 6;
- 1 + 2 * 3;
- 1 << 2 + 3;
- 1 & 2 >> 3;
- 1 ^ 2 & 3;
- 1 | 2 ^ 3;
- 1 == 2 | 3;
- 1 && 2 == 3;
- //1 || 2 && 2;
- //1 .. 2 || 3;
- //1 = 2 .. 3;
- //---&*1 - --2 * 9;
-}
+++ /dev/null
-SOURCE_FILE@[0; 248)
- FN_DEF@[0; 247)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 16)
- IDENT@[3; 16) "binding_power"
- PARAM_LIST@[16; 18)
- L_PAREN@[16; 17) "("
- R_PAREN@[17; 18) ")"
- WHITESPACE@[18; 19) " "
- BLOCK@[19; 247)
- L_CURLY@[19; 20) "{"
- WHITESPACE@[20; 25) "\n "
- LET_STMT@[25; 55)
- LET_KW@[25; 28) "let"
- WHITESPACE@[28; 29) " "
- BIND_PAT@[29; 30)
- NAME@[29; 30)
- IDENT@[29; 30) "x"
- WHITESPACE@[30; 31) " "
- EQ@[31; 32) "="
- WHITESPACE@[32; 33) " "
- BIN_EXPR@[33; 54)
- BIN_EXPR@[33; 46)
- LITERAL@[33; 34)
- INT_NUMBER@[33; 34) "1"
- WHITESPACE@[34; 35) " "
- PLUS@[35; 36) "+"
- WHITESPACE@[36; 37) " "
- BIN_EXPR@[37; 46)
- BIN_EXPR@[37; 42)
- LITERAL@[37; 38)
- INT_NUMBER@[37; 38) "2"
- WHITESPACE@[38; 39) " "
- STAR@[39; 40) "*"
- WHITESPACE@[40; 41) " "
- LITERAL@[41; 42)
- INT_NUMBER@[41; 42) "3"
- WHITESPACE@[42; 43) " "
- PERCENT@[43; 44) "%"
- WHITESPACE@[44; 45) " "
- LITERAL@[45; 46)
- INT_NUMBER@[45; 46) "4"
- WHITESPACE@[46; 47) " "
- MINUS@[47; 48) "-"
- WHITESPACE@[48; 49) " "
- BIN_EXPR@[49; 54)
- LITERAL@[49; 50)
- INT_NUMBER@[49; 50) "5"
- WHITESPACE@[50; 51) " "
- SLASH@[51; 52) "/"
- WHITESPACE@[52; 53) " "
- LITERAL@[53; 54)
- INT_NUMBER@[53; 54) "6"
- SEMI@[54; 55) ";"
- WHITESPACE@[55; 60) "\n "
- EXPR_STMT@[60; 70)
- BIN_EXPR@[60; 69)
- LITERAL@[60; 61)
- INT_NUMBER@[60; 61) "1"
- WHITESPACE@[61; 62) " "
- PLUS@[62; 63) "+"
- WHITESPACE@[63; 64) " "
- BIN_EXPR@[64; 69)
- LITERAL@[64; 65)
- INT_NUMBER@[64; 65) "2"
- WHITESPACE@[65; 66) " "
- STAR@[66; 67) "*"
- WHITESPACE@[67; 68) " "
- LITERAL@[68; 69)
- INT_NUMBER@[68; 69) "3"
- SEMI@[69; 70) ";"
- WHITESPACE@[70; 75) "\n "
- EXPR_STMT@[75; 86)
- BIN_EXPR@[75; 85)
- LITERAL@[75; 76)
- INT_NUMBER@[75; 76) "1"
- WHITESPACE@[76; 77) " "
- SHL@[77; 79) "<<"
- WHITESPACE@[79; 80) " "
- BIN_EXPR@[80; 85)
- LITERAL@[80; 81)
- INT_NUMBER@[80; 81) "2"
- WHITESPACE@[81; 82) " "
- PLUS@[82; 83) "+"
- WHITESPACE@[83; 84) " "
- LITERAL@[84; 85)
- INT_NUMBER@[84; 85) "3"
- SEMI@[85; 86) ";"
- WHITESPACE@[86; 91) "\n "
- EXPR_STMT@[91; 102)
- BIN_EXPR@[91; 101)
- LITERAL@[91; 92)
- INT_NUMBER@[91; 92) "1"
- WHITESPACE@[92; 93) " "
- AMP@[93; 94) "&"
- WHITESPACE@[94; 95) " "
- BIN_EXPR@[95; 101)
- LITERAL@[95; 96)
- INT_NUMBER@[95; 96) "2"
- WHITESPACE@[96; 97) " "
- SHR@[97; 99) ">>"
- WHITESPACE@[99; 100) " "
- LITERAL@[100; 101)
- INT_NUMBER@[100; 101) "3"
- SEMI@[101; 102) ";"
- WHITESPACE@[102; 107) "\n "
- EXPR_STMT@[107; 117)
- BIN_EXPR@[107; 116)
- LITERAL@[107; 108)
- INT_NUMBER@[107; 108) "1"
- WHITESPACE@[108; 109) " "
- CARET@[109; 110) "^"
- WHITESPACE@[110; 111) " "
- BIN_EXPR@[111; 116)
- LITERAL@[111; 112)
- INT_NUMBER@[111; 112) "2"
- WHITESPACE@[112; 113) " "
- AMP@[113; 114) "&"
- WHITESPACE@[114; 115) " "
- LITERAL@[115; 116)
- INT_NUMBER@[115; 116) "3"
- SEMI@[116; 117) ";"
- WHITESPACE@[117; 122) "\n "
- EXPR_STMT@[122; 132)
- BIN_EXPR@[122; 131)
- LITERAL@[122; 123)
- INT_NUMBER@[122; 123) "1"
- WHITESPACE@[123; 124) " "
- PIPE@[124; 125) "|"
- WHITESPACE@[125; 126) " "
- BIN_EXPR@[126; 131)
- LITERAL@[126; 127)
- INT_NUMBER@[126; 127) "2"
- WHITESPACE@[127; 128) " "
- CARET@[128; 129) "^"
- WHITESPACE@[129; 130) " "
- LITERAL@[130; 131)
- INT_NUMBER@[130; 131) "3"
- SEMI@[131; 132) ";"
- WHITESPACE@[132; 137) "\n "
- EXPR_STMT@[137; 148)
- BIN_EXPR@[137; 147)
- LITERAL@[137; 138)
- INT_NUMBER@[137; 138) "1"
- WHITESPACE@[138; 139) " "
- EQEQ@[139; 141) "=="
- WHITESPACE@[141; 142) " "
- BIN_EXPR@[142; 147)
- LITERAL@[142; 143)
- INT_NUMBER@[142; 143) "2"
- WHITESPACE@[143; 144) " "
- PIPE@[144; 145) "|"
- WHITESPACE@[145; 146) " "
- LITERAL@[146; 147)
- INT_NUMBER@[146; 147) "3"
- SEMI@[147; 148) ";"
- WHITESPACE@[148; 153) "\n "
- EXPR_STMT@[153; 165)
- BIN_EXPR@[153; 164)
- LITERAL@[153; 154)
- INT_NUMBER@[153; 154) "1"
- WHITESPACE@[154; 155) " "
- AMPAMP@[155; 157) "&&"
- WHITESPACE@[157; 158) " "
- BIN_EXPR@[158; 164)
- LITERAL@[158; 159)
- INT_NUMBER@[158; 159) "2"
- WHITESPACE@[159; 160) " "
- EQEQ@[160; 162) "=="
- WHITESPACE@[162; 163) " "
- LITERAL@[163; 164)
- INT_NUMBER@[163; 164) "3"
- SEMI@[164; 165) ";"
- WHITESPACE@[165; 170) "\n "
- COMMENT@[170; 184) "//1 || 2 && 2;"
- WHITESPACE@[184; 189) "\n "
- COMMENT@[189; 203) "//1 .. 2 || 3;"
- WHITESPACE@[203; 208) "\n "
- COMMENT@[208; 221) "//1 = 2 .. 3;"
- WHITESPACE@[221; 226) "\n "
- COMMENT@[226; 245) "//---&*1 - --2 * 9;"
- WHITESPACE@[245; 246) "\n"
- R_CURLY@[246; 247) "}"
- WHITESPACE@[247; 248) "\n"
+++ /dev/null
-fn foo() {
- ..1 + 1;
- ..z = 2;
- x = false..1 == 1;
- let x = 1..;
-
- ..=1 + 1;
- ..=z = 2;
- x = false..=1 == 1;
- let x = 1..;
-}
+++ /dev/null
-SOURCE_FILE@[0; 153)
- FN_DEF@[0; 152)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 152)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- EXPR_STMT@[15; 23)
- RANGE_EXPR@[15; 22)
- DOTDOT@[15; 17) ".."
- BIN_EXPR@[17; 22)
- LITERAL@[17; 18)
- INT_NUMBER@[17; 18) "1"
- WHITESPACE@[18; 19) " "
- PLUS@[19; 20) "+"
- WHITESPACE@[20; 21) " "
- LITERAL@[21; 22)
- INT_NUMBER@[21; 22) "1"
- SEMI@[22; 23) ";"
- WHITESPACE@[23; 28) "\n "
- EXPR_STMT@[28; 36)
- BIN_EXPR@[28; 35)
- RANGE_EXPR@[28; 31)
- DOTDOT@[28; 30) ".."
- PATH_EXPR@[30; 31)
- PATH@[30; 31)
- PATH_SEGMENT@[30; 31)
- NAME_REF@[30; 31)
- IDENT@[30; 31) "z"
- WHITESPACE@[31; 32) " "
- EQ@[32; 33) "="
- WHITESPACE@[33; 34) " "
- LITERAL@[34; 35)
- INT_NUMBER@[34; 35) "2"
- SEMI@[35; 36) ";"
- WHITESPACE@[36; 41) "\n "
- EXPR_STMT@[41; 59)
- BIN_EXPR@[41; 58)
- PATH_EXPR@[41; 42)
- PATH@[41; 42)
- PATH_SEGMENT@[41; 42)
- NAME_REF@[41; 42)
- IDENT@[41; 42) "x"
- WHITESPACE@[42; 43) " "
- EQ@[43; 44) "="
- WHITESPACE@[44; 45) " "
- RANGE_EXPR@[45; 58)
- LITERAL@[45; 50)
- FALSE_KW@[45; 50) "false"
- DOTDOT@[50; 52) ".."
- BIN_EXPR@[52; 58)
- LITERAL@[52; 53)
- INT_NUMBER@[52; 53) "1"
- WHITESPACE@[53; 54) " "
- EQEQ@[54; 56) "=="
- WHITESPACE@[56; 57) " "
- LITERAL@[57; 58)
- INT_NUMBER@[57; 58) "1"
- SEMI@[58; 59) ";"
- WHITESPACE@[59; 64) "\n "
- LET_STMT@[64; 76)
- LET_KW@[64; 67) "let"
- WHITESPACE@[67; 68) " "
- BIND_PAT@[68; 69)
- NAME@[68; 69)
- IDENT@[68; 69) "x"
- WHITESPACE@[69; 70) " "
- EQ@[70; 71) "="
- WHITESPACE@[71; 72) " "
- RANGE_EXPR@[72; 75)
- LITERAL@[72; 73)
- INT_NUMBER@[72; 73) "1"
- DOTDOT@[73; 75) ".."
- SEMI@[75; 76) ";"
- WHITESPACE@[76; 86) "\n \n "
- EXPR_STMT@[86; 95)
- RANGE_EXPR@[86; 94)
- DOTDOTEQ@[86; 89) "..="
- BIN_EXPR@[89; 94)
- LITERAL@[89; 90)
- INT_NUMBER@[89; 90) "1"
- WHITESPACE@[90; 91) " "
- PLUS@[91; 92) "+"
- WHITESPACE@[92; 93) " "
- LITERAL@[93; 94)
- INT_NUMBER@[93; 94) "1"
- SEMI@[94; 95) ";"
- WHITESPACE@[95; 100) "\n "
- EXPR_STMT@[100; 109)
- BIN_EXPR@[100; 108)
- RANGE_EXPR@[100; 104)
- DOTDOTEQ@[100; 103) "..="
- PATH_EXPR@[103; 104)
- PATH@[103; 104)
- PATH_SEGMENT@[103; 104)
- NAME_REF@[103; 104)
- IDENT@[103; 104) "z"
- WHITESPACE@[104; 105) " "
- EQ@[105; 106) "="
- WHITESPACE@[106; 107) " "
- LITERAL@[107; 108)
- INT_NUMBER@[107; 108) "2"
- SEMI@[108; 109) ";"
- WHITESPACE@[109; 114) "\n "
- EXPR_STMT@[114; 133)
- BIN_EXPR@[114; 132)
- PATH_EXPR@[114; 115)
- PATH@[114; 115)
- PATH_SEGMENT@[114; 115)
- NAME_REF@[114; 115)
- IDENT@[114; 115) "x"
- WHITESPACE@[115; 116) " "
- EQ@[116; 117) "="
- WHITESPACE@[117; 118) " "
- RANGE_EXPR@[118; 132)
- LITERAL@[118; 123)
- FALSE_KW@[118; 123) "false"
- DOTDOTEQ@[123; 126) "..="
- BIN_EXPR@[126; 132)
- LITERAL@[126; 127)
- INT_NUMBER@[126; 127) "1"
- WHITESPACE@[127; 128) " "
- EQEQ@[128; 130) "=="
- WHITESPACE@[130; 131) " "
- LITERAL@[131; 132)
- INT_NUMBER@[131; 132) "1"
- SEMI@[132; 133) ";"
- WHITESPACE@[133; 138) "\n "
- LET_STMT@[138; 150)
- LET_KW@[138; 141) "let"
- WHITESPACE@[141; 142) " "
- BIND_PAT@[142; 143)
- NAME@[142; 143)
- IDENT@[142; 143) "x"
- WHITESPACE@[143; 144) " "
- EQ@[144; 145) "="
- WHITESPACE@[145; 146) " "
- RANGE_EXPR@[146; 149)
- LITERAL@[146; 147)
- INT_NUMBER@[146; 147) "1"
- DOTDOT@[147; 149) ".."
- SEMI@[149; 150) ";"
- WHITESPACE@[150; 151) "\n"
- R_CURLY@[151; 152) "}"
- WHITESPACE@[152; 153) "\n"
+++ /dev/null
-fn main() {
- let _ = 'c'u32;
- let _ = "string"invalid;
- let _ = b'b'_suff;
- let _ = b"bs"invalid;
-}
+++ /dev/null
-SOURCE_FILE@[0; 112)
- FN_DEF@[0; 111)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 7)
- IDENT@[3; 7) "main"
- PARAM_LIST@[7; 9)
- L_PAREN@[7; 8) "("
- R_PAREN@[8; 9) ")"
- WHITESPACE@[9; 10) " "
- BLOCK@[10; 111)
- L_CURLY@[10; 11) "{"
- WHITESPACE@[11; 16) "\n "
- LET_STMT@[16; 31)
- LET_KW@[16; 19) "let"
- WHITESPACE@[19; 20) " "
- PLACEHOLDER_PAT@[20; 21)
- UNDERSCORE@[20; 21) "_"
- WHITESPACE@[21; 22) " "
- EQ@[22; 23) "="
- WHITESPACE@[23; 24) " "
- LITERAL@[24; 30)
- CHAR@[24; 30) "\'c\'u32"
- SEMI@[30; 31) ";"
- WHITESPACE@[31; 36) "\n "
- LET_STMT@[36; 60)
- LET_KW@[36; 39) "let"
- WHITESPACE@[39; 40) " "
- PLACEHOLDER_PAT@[40; 41)
- UNDERSCORE@[40; 41) "_"
- WHITESPACE@[41; 42) " "
- EQ@[42; 43) "="
- WHITESPACE@[43; 44) " "
- LITERAL@[44; 59)
- STRING@[44; 59) "\"string\"invalid"
- SEMI@[59; 60) ";"
- WHITESPACE@[60; 65) "\n "
- LET_STMT@[65; 83)
- LET_KW@[65; 68) "let"
- WHITESPACE@[68; 69) " "
- PLACEHOLDER_PAT@[69; 70)
- UNDERSCORE@[69; 70) "_"
- WHITESPACE@[70; 71) " "
- EQ@[71; 72) "="
- WHITESPACE@[72; 73) " "
- LITERAL@[73; 82)
- BYTE@[73; 82) "b\'b\'_suff"
- SEMI@[82; 83) ";"
- WHITESPACE@[83; 88) "\n "
- LET_STMT@[88; 109)
- LET_KW@[88; 91) "let"
- WHITESPACE@[91; 92) " "
- PLACEHOLDER_PAT@[92; 93)
- UNDERSCORE@[92; 93) "_"
- WHITESPACE@[93; 94) " "
- EQ@[94; 95) "="
- WHITESPACE@[95; 96) " "
- LITERAL@[96; 108)
- BYTE_STRING@[96; 108) "b\"bs\"invalid"
- SEMI@[108; 109) ";"
- WHITESPACE@[109; 110) "\n"
- R_CURLY@[110; 111) "}"
- WHITESPACE@[111; 112) "\n"
+++ /dev/null
-pub trait WriteMessage {
- fn write_message(&FrontendMessage);
-}
-
-trait Runnable {
- fn handler();
-}
-
-trait TraitWithExpr {
- fn fn_with_expr(x: [i32; 1]);
-}
+++ /dev/null
-SOURCE_FILE@[0; 164)
- TRAIT_DEF@[0; 66)
- VISIBILITY@[0; 3)
- PUB_KW@[0; 3) "pub"
- WHITESPACE@[3; 4) " "
- TRAIT_KW@[4; 9) "trait"
- WHITESPACE@[9; 10) " "
- NAME@[10; 22)
- IDENT@[10; 22) "WriteMessage"
- WHITESPACE@[22; 23) " "
- ITEM_LIST@[23; 66)
- L_CURLY@[23; 24) "{"
- WHITESPACE@[24; 29) "\n "
- FN_DEF@[29; 64)
- FN_KW@[29; 31) "fn"
- WHITESPACE@[31; 32) " "
- NAME@[32; 45)
- IDENT@[32; 45) "write_message"
- PARAM_LIST@[45; 63)
- L_PAREN@[45; 46) "("
- PARAM@[46; 62)
- REFERENCE_TYPE@[46; 62)
- AMP@[46; 47) "&"
- PATH_TYPE@[47; 62)
- PATH@[47; 62)
- PATH_SEGMENT@[47; 62)
- NAME_REF@[47; 62)
- IDENT@[47; 62) "FrontendMessage"
- R_PAREN@[62; 63) ")"
- SEMI@[63; 64) ";"
- WHITESPACE@[64; 65) "\n"
- R_CURLY@[65; 66) "}"
- WHITESPACE@[66; 68) "\n\n"
- TRAIT_DEF@[68; 104)
- TRAIT_KW@[68; 73) "trait"
- WHITESPACE@[73; 74) " "
- NAME@[74; 82)
- IDENT@[74; 82) "Runnable"
- WHITESPACE@[82; 83) " "
- ITEM_LIST@[83; 104)
- L_CURLY@[83; 84) "{"
- WHITESPACE@[84; 89) "\n "
- FN_DEF@[89; 102)
- FN_KW@[89; 91) "fn"
- WHITESPACE@[91; 92) " "
- NAME@[92; 99)
- IDENT@[92; 99) "handler"
- PARAM_LIST@[99; 101)
- L_PAREN@[99; 100) "("
- R_PAREN@[100; 101) ")"
- SEMI@[101; 102) ";"
- WHITESPACE@[102; 103) "\n"
- R_CURLY@[103; 104) "}"
- WHITESPACE@[104; 106) "\n\n"
- TRAIT_DEF@[106; 163)
- TRAIT_KW@[106; 111) "trait"
- WHITESPACE@[111; 112) " "
- NAME@[112; 125)
- IDENT@[112; 125) "TraitWithExpr"
- WHITESPACE@[125; 126) " "
- ITEM_LIST@[126; 163)
- L_CURLY@[126; 127) "{"
- WHITESPACE@[127; 132) "\n "
- FN_DEF@[132; 161)
- FN_KW@[132; 134) "fn"
- WHITESPACE@[134; 135) " "
- NAME@[135; 147)
- IDENT@[135; 147) "fn_with_expr"
- PARAM_LIST@[147; 160)
- L_PAREN@[147; 148) "("
- PARAM@[148; 159)
- BIND_PAT@[148; 149)
- NAME@[148; 149)
- IDENT@[148; 149) "x"
- COLON@[149; 150) ":"
- WHITESPACE@[150; 151) " "
- ARRAY_TYPE@[151; 159)
- L_BRACK@[151; 152) "["
- PATH_TYPE@[152; 155)
- PATH@[152; 155)
- PATH_SEGMENT@[152; 155)
- NAME_REF@[152; 155)
- IDENT@[152; 155) "i32"
- SEMI@[155; 156) ";"
- WHITESPACE@[156; 157) " "
- LITERAL@[157; 158)
- INT_NUMBER@[157; 158) "1"
- R_BRACK@[158; 159) "]"
- R_PAREN@[159; 160) ")"
- SEMI@[160; 161) ";"
- WHITESPACE@[161; 162) "\n"
- R_CURLY@[162; 163) "}"
- WHITESPACE@[163; 164) "\n"
+++ /dev/null
-extern {
- pub fn socket(domain: ::c_int, ty: ::c_int, protocol: ::c_int) -> ::c_int;
- pub fn bind(fd: ::c_int, addr: *const sockaddr, len: socklen_t) -> ::c_int;
- pub fn connect(socket: ::c_int, address: *const sockaddr,
- len: socklen_t) -> ::c_int;
- pub fn listen(socket: ::c_int, backlog: ::c_int) -> ::c_int;
- pub fn getsockname(socket: ::c_int, address: *mut sockaddr,
- address_len: *mut socklen_t) -> ::c_int;
- pub fn getsockopt(sockfd: ::c_int,
- level: ::c_int,
- optname: ::c_int,
- optval: *mut ::c_void,
- optlen: *mut ::socklen_t) -> ::c_int;
- pub fn setsockopt(socket: ::c_int, level: ::c_int, name: ::c_int,
- value: *const ::c_void,
- option_len: socklen_t) -> ::c_int;
- pub fn getpeername(socket: ::c_int, address: *mut sockaddr,
- address_len: *mut socklen_t) -> ::c_int;
- pub fn sendto(socket: ::c_int, buf: *const ::c_void, len: ::size_t,
- flags: ::c_int, addr: *const sockaddr,
- addrlen: socklen_t) -> ::ssize_t;
- pub fn send(socket: ::c_int, buf: *const ::c_void, len: ::size_t,
- flags: ::c_int) -> ::ssize_t;
- pub fn recvfrom(socket: ::c_int, buf: *mut ::c_void, len: ::size_t,
- flags: ::c_int, addr: *mut ::sockaddr,
- addrlen: *mut ::socklen_t) -> ::ssize_t;
- pub fn recv(socket: ::c_int, buf: *mut ::c_void, len: ::size_t,
- flags: ::c_int) -> ::ssize_t;
-}
+++ /dev/null
-SOURCE_FILE@[0; 1598)
- EXTERN_BLOCK@[0; 1597)
- ABI@[0; 6)
- EXTERN_KW@[0; 6) "extern"
- WHITESPACE@[6; 7) " "
- EXTERN_ITEM_LIST@[7; 1597)
- L_CURLY@[7; 8) "{"
- WHITESPACE@[8; 13) "\n "
- FN_DEF@[13; 87)
- VISIBILITY@[13; 16)
- PUB_KW@[13; 16) "pub"
- WHITESPACE@[16; 17) " "
- FN_KW@[17; 19) "fn"
- WHITESPACE@[19; 20) " "
- NAME@[20; 26)
- IDENT@[20; 26) "socket"
- PARAM_LIST@[26; 75)
- L_PAREN@[26; 27) "("
- PARAM@[27; 42)
- BIND_PAT@[27; 33)
- NAME@[27; 33)
- IDENT@[27; 33) "domain"
- COLON@[33; 34) ":"
- WHITESPACE@[34; 35) " "
- PATH_TYPE@[35; 42)
- PATH@[35; 42)
- PATH_SEGMENT@[35; 42)
- COLONCOLON@[35; 37) "::"
- NAME_REF@[37; 42)
- IDENT@[37; 42) "c_int"
- COMMA@[42; 43) ","
- WHITESPACE@[43; 44) " "
- PARAM@[44; 55)
- BIND_PAT@[44; 46)
- NAME@[44; 46)
- IDENT@[44; 46) "ty"
- COLON@[46; 47) ":"
- WHITESPACE@[47; 48) " "
- PATH_TYPE@[48; 55)
- PATH@[48; 55)
- PATH_SEGMENT@[48; 55)
- COLONCOLON@[48; 50) "::"
- NAME_REF@[50; 55)
- IDENT@[50; 55) "c_int"
- COMMA@[55; 56) ","
- WHITESPACE@[56; 57) " "
- PARAM@[57; 74)
- BIND_PAT@[57; 65)
- NAME@[57; 65)
- IDENT@[57; 65) "protocol"
- COLON@[65; 66) ":"
- WHITESPACE@[66; 67) " "
- PATH_TYPE@[67; 74)
- PATH@[67; 74)
- PATH_SEGMENT@[67; 74)
- COLONCOLON@[67; 69) "::"
- NAME_REF@[69; 74)
- IDENT@[69; 74) "c_int"
- R_PAREN@[74; 75) ")"
- WHITESPACE@[75; 76) " "
- RET_TYPE@[76; 86)
- THIN_ARROW@[76; 78) "->"
- WHITESPACE@[78; 79) " "
- PATH_TYPE@[79; 86)
- PATH@[79; 86)
- PATH_SEGMENT@[79; 86)
- COLONCOLON@[79; 81) "::"
- NAME_REF@[81; 86)
- IDENT@[81; 86) "c_int"
- SEMI@[86; 87) ";"
- WHITESPACE@[87; 92) "\n "
- FN_DEF@[92; 167)
- VISIBILITY@[92; 95)
- PUB_KW@[92; 95) "pub"
- WHITESPACE@[95; 96) " "
- FN_KW@[96; 98) "fn"
- WHITESPACE@[98; 99) " "
- NAME@[99; 103)
- IDENT@[99; 103) "bind"
- PARAM_LIST@[103; 155)
- L_PAREN@[103; 104) "("
- PARAM@[104; 115)
- BIND_PAT@[104; 106)
- NAME@[104; 106)
- IDENT@[104; 106) "fd"
- COLON@[106; 107) ":"
- WHITESPACE@[107; 108) " "
- PATH_TYPE@[108; 115)
- PATH@[108; 115)
- PATH_SEGMENT@[108; 115)
- COLONCOLON@[108; 110) "::"
- NAME_REF@[110; 115)
- IDENT@[110; 115) "c_int"
- COMMA@[115; 116) ","
- WHITESPACE@[116; 117) " "
- PARAM@[117; 138)
- BIND_PAT@[117; 121)
- NAME@[117; 121)
- IDENT@[117; 121) "addr"
- COLON@[121; 122) ":"
- WHITESPACE@[122; 123) " "
- POINTER_TYPE@[123; 138)
- STAR@[123; 124) "*"
- CONST_KW@[124; 129) "const"
- WHITESPACE@[129; 130) " "
- PATH_TYPE@[130; 138)
- PATH@[130; 138)
- PATH_SEGMENT@[130; 138)
- NAME_REF@[130; 138)
- IDENT@[130; 138) "sockaddr"
- COMMA@[138; 139) ","
- WHITESPACE@[139; 140) " "
- PARAM@[140; 154)
- BIND_PAT@[140; 143)
- NAME@[140; 143)
- IDENT@[140; 143) "len"
- COLON@[143; 144) ":"
- WHITESPACE@[144; 145) " "
- PATH_TYPE@[145; 154)
- PATH@[145; 154)
- PATH_SEGMENT@[145; 154)
- NAME_REF@[145; 154)
- IDENT@[145; 154) "socklen_t"
- R_PAREN@[154; 155) ")"
- WHITESPACE@[155; 156) " "
- RET_TYPE@[156; 166)
- THIN_ARROW@[156; 158) "->"
- WHITESPACE@[158; 159) " "
- PATH_TYPE@[159; 166)
- PATH@[159; 166)
- PATH_SEGMENT@[159; 166)
- COLONCOLON@[159; 161) "::"
- NAME_REF@[161; 166)
- IDENT@[161; 166) "c_int"
- SEMI@[166; 167) ";"
- WHITESPACE@[167; 172) "\n "
- FN_DEF@[172; 276)
- VISIBILITY@[172; 175)
- PUB_KW@[172; 175) "pub"
- WHITESPACE@[175; 176) " "
- FN_KW@[176; 178) "fn"
- WHITESPACE@[178; 179) " "
- NAME@[179; 186)
- IDENT@[179; 186) "connect"
- PARAM_LIST@[186; 264)
- L_PAREN@[186; 187) "("
- PARAM@[187; 202)
- BIND_PAT@[187; 193)
- NAME@[187; 193)
- IDENT@[187; 193) "socket"
- COLON@[193; 194) ":"
- WHITESPACE@[194; 195) " "
- PATH_TYPE@[195; 202)
- PATH@[195; 202)
- PATH_SEGMENT@[195; 202)
- COLONCOLON@[195; 197) "::"
- NAME_REF@[197; 202)
- IDENT@[197; 202) "c_int"
- COMMA@[202; 203) ","
- WHITESPACE@[203; 204) " "
- PARAM@[204; 228)
- BIND_PAT@[204; 211)
- NAME@[204; 211)
- IDENT@[204; 211) "address"
- COLON@[211; 212) ":"
- WHITESPACE@[212; 213) " "
- POINTER_TYPE@[213; 228)
- STAR@[213; 214) "*"
- CONST_KW@[214; 219) "const"
- WHITESPACE@[219; 220) " "
- PATH_TYPE@[220; 228)
- PATH@[220; 228)
- PATH_SEGMENT@[220; 228)
- NAME_REF@[220; 228)
- IDENT@[220; 228) "sockaddr"
- COMMA@[228; 229) ","
- WHITESPACE@[229; 249) "\n "
- PARAM@[249; 263)
- BIND_PAT@[249; 252)
- NAME@[249; 252)
- IDENT@[249; 252) "len"
- COLON@[252; 253) ":"
- WHITESPACE@[253; 254) " "
- PATH_TYPE@[254; 263)
- PATH@[254; 263)
- PATH_SEGMENT@[254; 263)
- NAME_REF@[254; 263)
- IDENT@[254; 263) "socklen_t"
- R_PAREN@[263; 264) ")"
- WHITESPACE@[264; 265) " "
- RET_TYPE@[265; 275)
- THIN_ARROW@[265; 267) "->"
- WHITESPACE@[267; 268) " "
- PATH_TYPE@[268; 275)
- PATH@[268; 275)
- PATH_SEGMENT@[268; 275)
- COLONCOLON@[268; 270) "::"
- NAME_REF@[270; 275)
- IDENT@[270; 275) "c_int"
- SEMI@[275; 276) ";"
- WHITESPACE@[276; 281) "\n "
- FN_DEF@[281; 341)
- VISIBILITY@[281; 284)
- PUB_KW@[281; 284) "pub"
- WHITESPACE@[284; 285) " "
- FN_KW@[285; 287) "fn"
- WHITESPACE@[287; 288) " "
- NAME@[288; 294)
- IDENT@[288; 294) "listen"
- PARAM_LIST@[294; 329)
- L_PAREN@[294; 295) "("
- PARAM@[295; 310)
- BIND_PAT@[295; 301)
- NAME@[295; 301)
- IDENT@[295; 301) "socket"
- COLON@[301; 302) ":"
- WHITESPACE@[302; 303) " "
- PATH_TYPE@[303; 310)
- PATH@[303; 310)
- PATH_SEGMENT@[303; 310)
- COLONCOLON@[303; 305) "::"
- NAME_REF@[305; 310)
- IDENT@[305; 310) "c_int"
- COMMA@[310; 311) ","
- WHITESPACE@[311; 312) " "
- PARAM@[312; 328)
- BIND_PAT@[312; 319)
- NAME@[312; 319)
- IDENT@[312; 319) "backlog"
- COLON@[319; 320) ":"
- WHITESPACE@[320; 321) " "
- PATH_TYPE@[321; 328)
- PATH@[321; 328)
- PATH_SEGMENT@[321; 328)
- COLONCOLON@[321; 323) "::"
- NAME_REF@[323; 328)
- IDENT@[323; 328) "c_int"
- R_PAREN@[328; 329) ")"
- WHITESPACE@[329; 330) " "
- RET_TYPE@[330; 340)
- THIN_ARROW@[330; 332) "->"
- WHITESPACE@[332; 333) " "
- PATH_TYPE@[333; 340)
- PATH@[333; 340)
- PATH_SEGMENT@[333; 340)
- COLONCOLON@[333; 335) "::"
- NAME_REF@[335; 340)
- IDENT@[335; 340) "c_int"
- SEMI@[340; 341) ";"
- WHITESPACE@[341; 346) "\n "
- FN_DEF@[346; 469)
- VISIBILITY@[346; 349)
- PUB_KW@[346; 349) "pub"
- WHITESPACE@[349; 350) " "
- FN_KW@[350; 352) "fn"
- WHITESPACE@[352; 353) " "
- NAME@[353; 364)
- IDENT@[353; 364) "getsockname"
- PARAM_LIST@[364; 457)
- L_PAREN@[364; 365) "("
- PARAM@[365; 380)
- BIND_PAT@[365; 371)
- NAME@[365; 371)
- IDENT@[365; 371) "socket"
- COLON@[371; 372) ":"
- WHITESPACE@[372; 373) " "
- PATH_TYPE@[373; 380)
- PATH@[373; 380)
- PATH_SEGMENT@[373; 380)
- COLONCOLON@[373; 375) "::"
- NAME_REF@[375; 380)
- IDENT@[375; 380) "c_int"
- COMMA@[380; 381) ","
- WHITESPACE@[381; 382) " "
- PARAM@[382; 404)
- BIND_PAT@[382; 389)
- NAME@[382; 389)
- IDENT@[382; 389) "address"
- COLON@[389; 390) ":"
- WHITESPACE@[390; 391) " "
- POINTER_TYPE@[391; 404)
- STAR@[391; 392) "*"
- MUT_KW@[392; 395) "mut"
- WHITESPACE@[395; 396) " "
- PATH_TYPE@[396; 404)
- PATH@[396; 404)
- PATH_SEGMENT@[396; 404)
- NAME_REF@[396; 404)
- IDENT@[396; 404) "sockaddr"
- COMMA@[404; 405) ","
- WHITESPACE@[405; 429) "\n "
- PARAM@[429; 456)
- BIND_PAT@[429; 440)
- NAME@[429; 440)
- IDENT@[429; 440) "address_len"
- COLON@[440; 441) ":"
- WHITESPACE@[441; 442) " "
- POINTER_TYPE@[442; 456)
- STAR@[442; 443) "*"
- MUT_KW@[443; 446) "mut"
- WHITESPACE@[446; 447) " "
- PATH_TYPE@[447; 456)
- PATH@[447; 456)
- PATH_SEGMENT@[447; 456)
- NAME_REF@[447; 456)
- IDENT@[447; 456) "socklen_t"
- R_PAREN@[456; 457) ")"
- WHITESPACE@[457; 458) " "
- RET_TYPE@[458; 468)
- THIN_ARROW@[458; 460) "->"
- WHITESPACE@[460; 461) " "
- PATH_TYPE@[461; 468)
- PATH@[461; 468)
- PATH_SEGMENT@[461; 468)
- COLONCOLON@[461; 463) "::"
- NAME_REF@[463; 468)
- IDENT@[463; 468) "c_int"
- SEMI@[468; 469) ";"
- WHITESPACE@[469; 474) "\n "
- FN_DEF@[474; 691)
- VISIBILITY@[474; 477)
- PUB_KW@[474; 477) "pub"
- WHITESPACE@[477; 478) " "
- FN_KW@[478; 480) "fn"
- WHITESPACE@[480; 481) " "
- NAME@[481; 491)
- IDENT@[481; 491) "getsockopt"
- PARAM_LIST@[491; 679)
- L_PAREN@[491; 492) "("
- PARAM@[492; 507)
- BIND_PAT@[492; 498)
- NAME@[492; 498)
- IDENT@[492; 498) "sockfd"
- COLON@[498; 499) ":"
- WHITESPACE@[499; 500) " "
- PATH_TYPE@[500; 507)
- PATH@[500; 507)
- PATH_SEGMENT@[500; 507)
- COLONCOLON@[500; 502) "::"
- NAME_REF@[502; 507)
- IDENT@[502; 507) "c_int"
- COMMA@[507; 508) ","
- WHITESPACE@[508; 531) "\n "
- PARAM@[531; 545)
- BIND_PAT@[531; 536)
- NAME@[531; 536)
- IDENT@[531; 536) "level"
- COLON@[536; 537) ":"
- WHITESPACE@[537; 538) " "
- PATH_TYPE@[538; 545)
- PATH@[538; 545)
- PATH_SEGMENT@[538; 545)
- COLONCOLON@[538; 540) "::"
- NAME_REF@[540; 545)
- IDENT@[540; 545) "c_int"
- COMMA@[545; 546) ","
- WHITESPACE@[546; 569) "\n "
- PARAM@[569; 585)
- BIND_PAT@[569; 576)
- NAME@[569; 576)
- IDENT@[569; 576) "optname"
- COLON@[576; 577) ":"
- WHITESPACE@[577; 578) " "
- PATH_TYPE@[578; 585)
- PATH@[578; 585)
- PATH_SEGMENT@[578; 585)
- COLONCOLON@[578; 580) "::"
- NAME_REF@[580; 585)
- IDENT@[580; 585) "c_int"
- COMMA@[585; 586) ","
- WHITESPACE@[586; 609) "\n "
- PARAM@[609; 630)
- BIND_PAT@[609; 615)
- NAME@[609; 615)
- IDENT@[609; 615) "optval"
- COLON@[615; 616) ":"
- WHITESPACE@[616; 617) " "
- POINTER_TYPE@[617; 630)
- STAR@[617; 618) "*"
- MUT_KW@[618; 621) "mut"
- WHITESPACE@[621; 622) " "
- PATH_TYPE@[622; 630)
- PATH@[622; 630)
- PATH_SEGMENT@[622; 630)
- COLONCOLON@[622; 624) "::"
- NAME_REF@[624; 630)
- IDENT@[624; 630) "c_void"
- COMMA@[630; 631) ","
- WHITESPACE@[631; 654) "\n "
- PARAM@[654; 678)
- BIND_PAT@[654; 660)
- NAME@[654; 660)
- IDENT@[654; 660) "optlen"
- COLON@[660; 661) ":"
- WHITESPACE@[661; 662) " "
- POINTER_TYPE@[662; 678)
- STAR@[662; 663) "*"
- MUT_KW@[663; 666) "mut"
- WHITESPACE@[666; 667) " "
- PATH_TYPE@[667; 678)
- PATH@[667; 678)
- PATH_SEGMENT@[667; 678)
- COLONCOLON@[667; 669) "::"
- NAME_REF@[669; 678)
- IDENT@[669; 678) "socklen_t"
- R_PAREN@[678; 679) ")"
- WHITESPACE@[679; 680) " "
- RET_TYPE@[680; 690)
- THIN_ARROW@[680; 682) "->"
- WHITESPACE@[682; 683) " "
- PATH_TYPE@[683; 690)
- PATH@[683; 690)
- PATH_SEGMENT@[683; 690)
- COLONCOLON@[683; 685) "::"
- NAME_REF@[685; 690)
- IDENT@[685; 690) "c_int"
- SEMI@[690; 691) ";"
- WHITESPACE@[691; 696) "\n "
- FN_DEF@[696; 864)
- VISIBILITY@[696; 699)
- PUB_KW@[696; 699) "pub"
- WHITESPACE@[699; 700) " "
- FN_KW@[700; 702) "fn"
- WHITESPACE@[702; 703) " "
- NAME@[703; 713)
- IDENT@[703; 713) "setsockopt"
- PARAM_LIST@[713; 852)
- L_PAREN@[713; 714) "("
- PARAM@[714; 729)
- BIND_PAT@[714; 720)
- NAME@[714; 720)
- IDENT@[714; 720) "socket"
- COLON@[720; 721) ":"
- WHITESPACE@[721; 722) " "
- PATH_TYPE@[722; 729)
- PATH@[722; 729)
- PATH_SEGMENT@[722; 729)
- COLONCOLON@[722; 724) "::"
- NAME_REF@[724; 729)
- IDENT@[724; 729) "c_int"
- COMMA@[729; 730) ","
- WHITESPACE@[730; 731) " "
- PARAM@[731; 745)
- BIND_PAT@[731; 736)
- NAME@[731; 736)
- IDENT@[731; 736) "level"
- COLON@[736; 737) ":"
- WHITESPACE@[737; 738) " "
- PATH_TYPE@[738; 745)
- PATH@[738; 745)
- PATH_SEGMENT@[738; 745)
- COLONCOLON@[738; 740) "::"
- NAME_REF@[740; 745)
- IDENT@[740; 745) "c_int"
- COMMA@[745; 746) ","
- WHITESPACE@[746; 747) " "
- PARAM@[747; 760)
- BIND_PAT@[747; 751)
- NAME@[747; 751)
- IDENT@[747; 751) "name"
- COLON@[751; 752) ":"
- WHITESPACE@[752; 753) " "
- PATH_TYPE@[753; 760)
- PATH@[753; 760)
- PATH_SEGMENT@[753; 760)
- COLONCOLON@[753; 755) "::"
- NAME_REF@[755; 760)
- IDENT@[755; 760) "c_int"
- COMMA@[760; 761) ","
- WHITESPACE@[761; 784) "\n "
- PARAM@[784; 806)
- BIND_PAT@[784; 789)
- NAME@[784; 789)
- IDENT@[784; 789) "value"
- COLON@[789; 790) ":"
- WHITESPACE@[790; 791) " "
- POINTER_TYPE@[791; 806)
- STAR@[791; 792) "*"
- CONST_KW@[792; 797) "const"
- WHITESPACE@[797; 798) " "
- PATH_TYPE@[798; 806)
- PATH@[798; 806)
- PATH_SEGMENT@[798; 806)
- COLONCOLON@[798; 800) "::"
- NAME_REF@[800; 806)
- IDENT@[800; 806) "c_void"
- COMMA@[806; 807) ","
- WHITESPACE@[807; 830) "\n "
- PARAM@[830; 851)
- BIND_PAT@[830; 840)
- NAME@[830; 840)
- IDENT@[830; 840) "option_len"
- COLON@[840; 841) ":"
- WHITESPACE@[841; 842) " "
- PATH_TYPE@[842; 851)
- PATH@[842; 851)
- PATH_SEGMENT@[842; 851)
- NAME_REF@[842; 851)
- IDENT@[842; 851) "socklen_t"
- R_PAREN@[851; 852) ")"
- WHITESPACE@[852; 853) " "
- RET_TYPE@[853; 863)
- THIN_ARROW@[853; 855) "->"
- WHITESPACE@[855; 856) " "
- PATH_TYPE@[856; 863)
- PATH@[856; 863)
- PATH_SEGMENT@[856; 863)
- COLONCOLON@[856; 858) "::"
- NAME_REF@[858; 863)
- IDENT@[858; 863) "c_int"
- SEMI@[863; 864) ";"
- WHITESPACE@[864; 869) "\n "
- FN_DEF@[869; 992)
- VISIBILITY@[869; 872)
- PUB_KW@[869; 872) "pub"
- WHITESPACE@[872; 873) " "
- FN_KW@[873; 875) "fn"
- WHITESPACE@[875; 876) " "
- NAME@[876; 887)
- IDENT@[876; 887) "getpeername"
- PARAM_LIST@[887; 980)
- L_PAREN@[887; 888) "("
- PARAM@[888; 903)
- BIND_PAT@[888; 894)
- NAME@[888; 894)
- IDENT@[888; 894) "socket"
- COLON@[894; 895) ":"
- WHITESPACE@[895; 896) " "
- PATH_TYPE@[896; 903)
- PATH@[896; 903)
- PATH_SEGMENT@[896; 903)
- COLONCOLON@[896; 898) "::"
- NAME_REF@[898; 903)
- IDENT@[898; 903) "c_int"
- COMMA@[903; 904) ","
- WHITESPACE@[904; 905) " "
- PARAM@[905; 927)
- BIND_PAT@[905; 912)
- NAME@[905; 912)
- IDENT@[905; 912) "address"
- COLON@[912; 913) ":"
- WHITESPACE@[913; 914) " "
- POINTER_TYPE@[914; 927)
- STAR@[914; 915) "*"
- MUT_KW@[915; 918) "mut"
- WHITESPACE@[918; 919) " "
- PATH_TYPE@[919; 927)
- PATH@[919; 927)
- PATH_SEGMENT@[919; 927)
- NAME_REF@[919; 927)
- IDENT@[919; 927) "sockaddr"
- COMMA@[927; 928) ","
- WHITESPACE@[928; 952) "\n "
- PARAM@[952; 979)
- BIND_PAT@[952; 963)
- NAME@[952; 963)
- IDENT@[952; 963) "address_len"
- COLON@[963; 964) ":"
- WHITESPACE@[964; 965) " "
- POINTER_TYPE@[965; 979)
- STAR@[965; 966) "*"
- MUT_KW@[966; 969) "mut"
- WHITESPACE@[969; 970) " "
- PATH_TYPE@[970; 979)
- PATH@[970; 979)
- PATH_SEGMENT@[970; 979)
- NAME_REF@[970; 979)
- IDENT@[970; 979) "socklen_t"
- R_PAREN@[979; 980) ")"
- WHITESPACE@[980; 981) " "
- RET_TYPE@[981; 991)
- THIN_ARROW@[981; 983) "->"
- WHITESPACE@[983; 984) " "
- PATH_TYPE@[984; 991)
- PATH@[984; 991)
- PATH_SEGMENT@[984; 991)
- COLONCOLON@[984; 986) "::"
- NAME_REF@[986; 991)
- IDENT@[986; 991) "c_int"
- SEMI@[991; 992) ";"
- WHITESPACE@[992; 997) "\n "
- FN_DEF@[997; 1173)
- VISIBILITY@[997; 1000)
- PUB_KW@[997; 1000) "pub"
- WHITESPACE@[1000; 1001) " "
- FN_KW@[1001; 1003) "fn"
- WHITESPACE@[1003; 1004) " "
- NAME@[1004; 1010)
- IDENT@[1004; 1010) "sendto"
- PARAM_LIST@[1010; 1159)
- L_PAREN@[1010; 1011) "("
- PARAM@[1011; 1026)
- BIND_PAT@[1011; 1017)
- NAME@[1011; 1017)
- IDENT@[1011; 1017) "socket"
- COLON@[1017; 1018) ":"
- WHITESPACE@[1018; 1019) " "
- PATH_TYPE@[1019; 1026)
- PATH@[1019; 1026)
- PATH_SEGMENT@[1019; 1026)
- COLONCOLON@[1019; 1021) "::"
- NAME_REF@[1021; 1026)
- IDENT@[1021; 1026) "c_int"
- COMMA@[1026; 1027) ","
- WHITESPACE@[1027; 1028) " "
- PARAM@[1028; 1048)
- BIND_PAT@[1028; 1031)
- NAME@[1028; 1031)
- IDENT@[1028; 1031) "buf"
- COLON@[1031; 1032) ":"
- WHITESPACE@[1032; 1033) " "
- POINTER_TYPE@[1033; 1048)
- STAR@[1033; 1034) "*"
- CONST_KW@[1034; 1039) "const"
- WHITESPACE@[1039; 1040) " "
- PATH_TYPE@[1040; 1048)
- PATH@[1040; 1048)
- PATH_SEGMENT@[1040; 1048)
- COLONCOLON@[1040; 1042) "::"
- NAME_REF@[1042; 1048)
- IDENT@[1042; 1048) "c_void"
- COMMA@[1048; 1049) ","
- WHITESPACE@[1049; 1050) " "
- PARAM@[1050; 1063)
- BIND_PAT@[1050; 1053)
- NAME@[1050; 1053)
- IDENT@[1050; 1053) "len"
- COLON@[1053; 1054) ":"
- WHITESPACE@[1054; 1055) " "
- PATH_TYPE@[1055; 1063)
- PATH@[1055; 1063)
- PATH_SEGMENT@[1055; 1063)
- COLONCOLON@[1055; 1057) "::"
- NAME_REF@[1057; 1063)
- IDENT@[1057; 1063) "size_t"
- COMMA@[1063; 1064) ","
- WHITESPACE@[1064; 1083) "\n "
- PARAM@[1083; 1097)
- BIND_PAT@[1083; 1088)
- NAME@[1083; 1088)
- IDENT@[1083; 1088) "flags"
- COLON@[1088; 1089) ":"
- WHITESPACE@[1089; 1090) " "
- PATH_TYPE@[1090; 1097)
- PATH@[1090; 1097)
- PATH_SEGMENT@[1090; 1097)
- COLONCOLON@[1090; 1092) "::"
- NAME_REF@[1092; 1097)
- IDENT@[1092; 1097) "c_int"
- COMMA@[1097; 1098) ","
- WHITESPACE@[1098; 1099) " "
- PARAM@[1099; 1120)
- BIND_PAT@[1099; 1103)
- NAME@[1099; 1103)
- IDENT@[1099; 1103) "addr"
- COLON@[1103; 1104) ":"
- WHITESPACE@[1104; 1105) " "
- POINTER_TYPE@[1105; 1120)
- STAR@[1105; 1106) "*"
- CONST_KW@[1106; 1111) "const"
- WHITESPACE@[1111; 1112) " "
- PATH_TYPE@[1112; 1120)
- PATH@[1112; 1120)
- PATH_SEGMENT@[1112; 1120)
- NAME_REF@[1112; 1120)
- IDENT@[1112; 1120) "sockaddr"
- COMMA@[1120; 1121) ","
- WHITESPACE@[1121; 1140) "\n "
- PARAM@[1140; 1158)
- BIND_PAT@[1140; 1147)
- NAME@[1140; 1147)
- IDENT@[1140; 1147) "addrlen"
- COLON@[1147; 1148) ":"
- WHITESPACE@[1148; 1149) " "
- PATH_TYPE@[1149; 1158)
- PATH@[1149; 1158)
- PATH_SEGMENT@[1149; 1158)
- NAME_REF@[1149; 1158)
- IDENT@[1149; 1158) "socklen_t"
- R_PAREN@[1158; 1159) ")"
- WHITESPACE@[1159; 1160) " "
- RET_TYPE@[1160; 1172)
- THIN_ARROW@[1160; 1162) "->"
- WHITESPACE@[1162; 1163) " "
- PATH_TYPE@[1163; 1172)
- PATH@[1163; 1172)
- PATH_SEGMENT@[1163; 1172)
- COLONCOLON@[1163; 1165) "::"
- NAME_REF@[1165; 1172)
- IDENT@[1165; 1172) "ssize_t"
- SEMI@[1172; 1173) ";"
- WHITESPACE@[1173; 1178) "\n "
- FN_DEF@[1178; 1289)
- VISIBILITY@[1178; 1181)
- PUB_KW@[1178; 1181) "pub"
- WHITESPACE@[1181; 1182) " "
- FN_KW@[1182; 1184) "fn"
- WHITESPACE@[1184; 1185) " "
- NAME@[1185; 1189)
- IDENT@[1185; 1189) "send"
- PARAM_LIST@[1189; 1275)
- L_PAREN@[1189; 1190) "("
- PARAM@[1190; 1205)
- BIND_PAT@[1190; 1196)
- NAME@[1190; 1196)
- IDENT@[1190; 1196) "socket"
- COLON@[1196; 1197) ":"
- WHITESPACE@[1197; 1198) " "
- PATH_TYPE@[1198; 1205)
- PATH@[1198; 1205)
- PATH_SEGMENT@[1198; 1205)
- COLONCOLON@[1198; 1200) "::"
- NAME_REF@[1200; 1205)
- IDENT@[1200; 1205) "c_int"
- COMMA@[1205; 1206) ","
- WHITESPACE@[1206; 1207) " "
- PARAM@[1207; 1227)
- BIND_PAT@[1207; 1210)
- NAME@[1207; 1210)
- IDENT@[1207; 1210) "buf"
- COLON@[1210; 1211) ":"
- WHITESPACE@[1211; 1212) " "
- POINTER_TYPE@[1212; 1227)
- STAR@[1212; 1213) "*"
- CONST_KW@[1213; 1218) "const"
- WHITESPACE@[1218; 1219) " "
- PATH_TYPE@[1219; 1227)
- PATH@[1219; 1227)
- PATH_SEGMENT@[1219; 1227)
- COLONCOLON@[1219; 1221) "::"
- NAME_REF@[1221; 1227)
- IDENT@[1221; 1227) "c_void"
- COMMA@[1227; 1228) ","
- WHITESPACE@[1228; 1229) " "
- PARAM@[1229; 1242)
- BIND_PAT@[1229; 1232)
- NAME@[1229; 1232)
- IDENT@[1229; 1232) "len"
- COLON@[1232; 1233) ":"
- WHITESPACE@[1233; 1234) " "
- PATH_TYPE@[1234; 1242)
- PATH@[1234; 1242)
- PATH_SEGMENT@[1234; 1242)
- COLONCOLON@[1234; 1236) "::"
- NAME_REF@[1236; 1242)
- IDENT@[1236; 1242) "size_t"
- COMMA@[1242; 1243) ","
- WHITESPACE@[1243; 1260) "\n "
- PARAM@[1260; 1274)
- BIND_PAT@[1260; 1265)
- NAME@[1260; 1265)
- IDENT@[1260; 1265) "flags"
- COLON@[1265; 1266) ":"
- WHITESPACE@[1266; 1267) " "
- PATH_TYPE@[1267; 1274)
- PATH@[1267; 1274)
- PATH_SEGMENT@[1267; 1274)
- COLONCOLON@[1267; 1269) "::"
- NAME_REF@[1269; 1274)
- IDENT@[1269; 1274) "c_int"
- R_PAREN@[1274; 1275) ")"
- WHITESPACE@[1275; 1276) " "
- RET_TYPE@[1276; 1288)
- THIN_ARROW@[1276; 1278) "->"
- WHITESPACE@[1278; 1279) " "
- PATH_TYPE@[1279; 1288)
- PATH@[1279; 1288)
- PATH_SEGMENT@[1279; 1288)
- COLONCOLON@[1279; 1281) "::"
- NAME_REF@[1281; 1288)
- IDENT@[1281; 1288) "ssize_t"
- SEMI@[1288; 1289) ";"
- WHITESPACE@[1289; 1294) "\n "
- FN_DEF@[1294; 1481)
- VISIBILITY@[1294; 1297)
- PUB_KW@[1294; 1297) "pub"
- WHITESPACE@[1297; 1298) " "
- FN_KW@[1298; 1300) "fn"
- WHITESPACE@[1300; 1301) " "
- NAME@[1301; 1309)
- IDENT@[1301; 1309) "recvfrom"
- PARAM_LIST@[1309; 1467)
- L_PAREN@[1309; 1310) "("
- PARAM@[1310; 1325)
- BIND_PAT@[1310; 1316)
- NAME@[1310; 1316)
- IDENT@[1310; 1316) "socket"
- COLON@[1316; 1317) ":"
- WHITESPACE@[1317; 1318) " "
- PATH_TYPE@[1318; 1325)
- PATH@[1318; 1325)
- PATH_SEGMENT@[1318; 1325)
- COLONCOLON@[1318; 1320) "::"
- NAME_REF@[1320; 1325)
- IDENT@[1320; 1325) "c_int"
- COMMA@[1325; 1326) ","
- WHITESPACE@[1326; 1327) " "
- PARAM@[1327; 1345)
- BIND_PAT@[1327; 1330)
- NAME@[1327; 1330)
- IDENT@[1327; 1330) "buf"
- COLON@[1330; 1331) ":"
- WHITESPACE@[1331; 1332) " "
- POINTER_TYPE@[1332; 1345)
- STAR@[1332; 1333) "*"
- MUT_KW@[1333; 1336) "mut"
- WHITESPACE@[1336; 1337) " "
- PATH_TYPE@[1337; 1345)
- PATH@[1337; 1345)
- PATH_SEGMENT@[1337; 1345)
- COLONCOLON@[1337; 1339) "::"
- NAME_REF@[1339; 1345)
- IDENT@[1339; 1345) "c_void"
- COMMA@[1345; 1346) ","
- WHITESPACE@[1346; 1347) " "
- PARAM@[1347; 1360)
- BIND_PAT@[1347; 1350)
- NAME@[1347; 1350)
- IDENT@[1347; 1350) "len"
- COLON@[1350; 1351) ":"
- WHITESPACE@[1351; 1352) " "
- PATH_TYPE@[1352; 1360)
- PATH@[1352; 1360)
- PATH_SEGMENT@[1352; 1360)
- COLONCOLON@[1352; 1354) "::"
- NAME_REF@[1354; 1360)
- IDENT@[1354; 1360) "size_t"
- COMMA@[1360; 1361) ","
- WHITESPACE@[1361; 1382) "\n "
- PARAM@[1382; 1396)
- BIND_PAT@[1382; 1387)
- NAME@[1382; 1387)
- IDENT@[1382; 1387) "flags"
- COLON@[1387; 1388) ":"
- WHITESPACE@[1388; 1389) " "
- PATH_TYPE@[1389; 1396)
- PATH@[1389; 1396)
- PATH_SEGMENT@[1389; 1396)
- COLONCOLON@[1389; 1391) "::"
- NAME_REF@[1391; 1396)
- IDENT@[1391; 1396) "c_int"
- COMMA@[1396; 1397) ","
- WHITESPACE@[1397; 1398) " "
- PARAM@[1398; 1419)
- BIND_PAT@[1398; 1402)
- NAME@[1398; 1402)
- IDENT@[1398; 1402) "addr"
- COLON@[1402; 1403) ":"
- WHITESPACE@[1403; 1404) " "
- POINTER_TYPE@[1404; 1419)
- STAR@[1404; 1405) "*"
- MUT_KW@[1405; 1408) "mut"
- WHITESPACE@[1408; 1409) " "
- PATH_TYPE@[1409; 1419)
- PATH@[1409; 1419)
- PATH_SEGMENT@[1409; 1419)
- COLONCOLON@[1409; 1411) "::"
- NAME_REF@[1411; 1419)
- IDENT@[1411; 1419) "sockaddr"
- COMMA@[1419; 1420) ","
- WHITESPACE@[1420; 1441) "\n "
- PARAM@[1441; 1466)
- BIND_PAT@[1441; 1448)
- NAME@[1441; 1448)
- IDENT@[1441; 1448) "addrlen"
- COLON@[1448; 1449) ":"
- WHITESPACE@[1449; 1450) " "
- POINTER_TYPE@[1450; 1466)
- STAR@[1450; 1451) "*"
- MUT_KW@[1451; 1454) "mut"
- WHITESPACE@[1454; 1455) " "
- PATH_TYPE@[1455; 1466)
- PATH@[1455; 1466)
- PATH_SEGMENT@[1455; 1466)
- COLONCOLON@[1455; 1457) "::"
- NAME_REF@[1457; 1466)
- IDENT@[1457; 1466) "socklen_t"
- R_PAREN@[1466; 1467) ")"
- WHITESPACE@[1467; 1468) " "
- RET_TYPE@[1468; 1480)
- THIN_ARROW@[1468; 1470) "->"
- WHITESPACE@[1470; 1471) " "
- PATH_TYPE@[1471; 1480)
- PATH@[1471; 1480)
- PATH_SEGMENT@[1471; 1480)
- COLONCOLON@[1471; 1473) "::"
- NAME_REF@[1473; 1480)
- IDENT@[1473; 1480) "ssize_t"
- SEMI@[1480; 1481) ";"
- WHITESPACE@[1481; 1486) "\n "
- FN_DEF@[1486; 1595)
- VISIBILITY@[1486; 1489)
- PUB_KW@[1486; 1489) "pub"
- WHITESPACE@[1489; 1490) " "
- FN_KW@[1490; 1492) "fn"
- WHITESPACE@[1492; 1493) " "
- NAME@[1493; 1497)
- IDENT@[1493; 1497) "recv"
- PARAM_LIST@[1497; 1581)
- L_PAREN@[1497; 1498) "("
- PARAM@[1498; 1513)
- BIND_PAT@[1498; 1504)
- NAME@[1498; 1504)
- IDENT@[1498; 1504) "socket"
- COLON@[1504; 1505) ":"
- WHITESPACE@[1505; 1506) " "
- PATH_TYPE@[1506; 1513)
- PATH@[1506; 1513)
- PATH_SEGMENT@[1506; 1513)
- COLONCOLON@[1506; 1508) "::"
- NAME_REF@[1508; 1513)
- IDENT@[1508; 1513) "c_int"
- COMMA@[1513; 1514) ","
- WHITESPACE@[1514; 1515) " "
- PARAM@[1515; 1533)
- BIND_PAT@[1515; 1518)
- NAME@[1515; 1518)
- IDENT@[1515; 1518) "buf"
- COLON@[1518; 1519) ":"
- WHITESPACE@[1519; 1520) " "
- POINTER_TYPE@[1520; 1533)
- STAR@[1520; 1521) "*"
- MUT_KW@[1521; 1524) "mut"
- WHITESPACE@[1524; 1525) " "
- PATH_TYPE@[1525; 1533)
- PATH@[1525; 1533)
- PATH_SEGMENT@[1525; 1533)
- COLONCOLON@[1525; 1527) "::"
- NAME_REF@[1527; 1533)
- IDENT@[1527; 1533) "c_void"
- COMMA@[1533; 1534) ","
- WHITESPACE@[1534; 1535) " "
- PARAM@[1535; 1548)
- BIND_PAT@[1535; 1538)
- NAME@[1535; 1538)
- IDENT@[1535; 1538) "len"
- COLON@[1538; 1539) ":"
- WHITESPACE@[1539; 1540) " "
- PATH_TYPE@[1540; 1548)
- PATH@[1540; 1548)
- PATH_SEGMENT@[1540; 1548)
- COLONCOLON@[1540; 1542) "::"
- NAME_REF@[1542; 1548)
- IDENT@[1542; 1548) "size_t"
- COMMA@[1548; 1549) ","
- WHITESPACE@[1549; 1566) "\n "
- PARAM@[1566; 1580)
- BIND_PAT@[1566; 1571)
- NAME@[1566; 1571)
- IDENT@[1566; 1571) "flags"
- COLON@[1571; 1572) ":"
- WHITESPACE@[1572; 1573) " "
- PATH_TYPE@[1573; 1580)
- PATH@[1573; 1580)
- PATH_SEGMENT@[1573; 1580)
- COLONCOLON@[1573; 1575) "::"
- NAME_REF@[1575; 1580)
- IDENT@[1575; 1580) "c_int"
- R_PAREN@[1580; 1581) ")"
- WHITESPACE@[1581; 1582) " "
- RET_TYPE@[1582; 1594)
- THIN_ARROW@[1582; 1584) "->"
- WHITESPACE@[1584; 1585) " "
- PATH_TYPE@[1585; 1594)
- PATH@[1585; 1594)
- PATH_SEGMENT@[1585; 1594)
- COLONCOLON@[1585; 1587) "::"
- NAME_REF@[1587; 1594)
- IDENT@[1587; 1594) "ssize_t"
- SEMI@[1594; 1595) ";"
- WHITESPACE@[1595; 1596) "\n"
- R_CURLY@[1596; 1597) "}"
- WHITESPACE@[1597; 1598) "\n"
+++ /dev/null
-fn test_serialization<SER>()
-where
- SER: Serialize + for<'de> Deserialize<'de> + PartialEq + std::fmt::Debug,
-{}
+++ /dev/null
-SOURCE_FILE@[0; 116)
- FN_DEF@[0; 115)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 21)
- IDENT@[3; 21) "test_serialization"
- TYPE_PARAM_LIST@[21; 26)
- L_ANGLE@[21; 22) "<"
- TYPE_PARAM@[22; 25)
- NAME@[22; 25)
- IDENT@[22; 25) "SER"
- R_ANGLE@[25; 26) ">"
- PARAM_LIST@[26; 28)
- L_PAREN@[26; 27) "("
- R_PAREN@[27; 28) ")"
- WHITESPACE@[28; 29) "\n"
- WHERE_CLAUSE@[29; 112)
- WHERE_KW@[29; 34) "where"
- WHITESPACE@[34; 39) "\n "
- WHERE_PRED@[39; 111)
- PATH_TYPE@[39; 42)
- PATH@[39; 42)
- PATH_SEGMENT@[39; 42)
- NAME_REF@[39; 42)
- IDENT@[39; 42) "SER"
- COLON@[42; 43) ":"
- WHITESPACE@[43; 44) " "
- TYPE_BOUND_LIST@[44; 111)
- TYPE_BOUND@[44; 53)
- PATH_TYPE@[44; 53)
- PATH@[44; 53)
- PATH_SEGMENT@[44; 53)
- NAME_REF@[44; 53)
- IDENT@[44; 53) "Serialize"
- WHITESPACE@[53; 54) " "
- PLUS@[54; 55) "+"
- WHITESPACE@[55; 56) " "
- TYPE_BOUND@[56; 81)
- FOR_TYPE@[56; 81)
- FOR_KW@[56; 59) "for"
- TYPE_PARAM_LIST@[59; 64)
- L_ANGLE@[59; 60) "<"
- LIFETIME_PARAM@[60; 63)
- LIFETIME@[60; 63) "\'de"
- R_ANGLE@[63; 64) ">"
- WHITESPACE@[64; 65) " "
- PATH_TYPE@[65; 81)
- PATH@[65; 81)
- PATH_SEGMENT@[65; 81)
- NAME_REF@[65; 76)
- IDENT@[65; 76) "Deserialize"
- TYPE_ARG_LIST@[76; 81)
- L_ANGLE@[76; 77) "<"
- LIFETIME_ARG@[77; 80)
- LIFETIME@[77; 80) "\'de"
- R_ANGLE@[80; 81) ">"
- WHITESPACE@[81; 82) " "
- PLUS@[82; 83) "+"
- WHITESPACE@[83; 84) " "
- TYPE_BOUND@[84; 93)
- PATH_TYPE@[84; 93)
- PATH@[84; 93)
- PATH_SEGMENT@[84; 93)
- NAME_REF@[84; 93)
- IDENT@[84; 93) "PartialEq"
- WHITESPACE@[93; 94) " "
- PLUS@[94; 95) "+"
- WHITESPACE@[95; 96) " "
- TYPE_BOUND@[96; 111)
- PATH_TYPE@[96; 111)
- PATH@[96; 111)
- PATH@[96; 104)
- PATH@[96; 99)
- PATH_SEGMENT@[96; 99)
- NAME_REF@[96; 99)
- IDENT@[96; 99) "std"
- COLONCOLON@[99; 101) "::"
- PATH_SEGMENT@[101; 104)
- NAME_REF@[101; 104)
- IDENT@[101; 104) "fmt"
- COLONCOLON@[104; 106) "::"
- PATH_SEGMENT@[106; 111)
- NAME_REF@[106; 111)
- IDENT@[106; 111) "Debug"
- COMMA@[111; 112) ","
- WHITESPACE@[112; 113) "\n"
- BLOCK@[113; 115)
- L_CURLY@[113; 114) "{"
- R_CURLY@[114; 115) "}"
- WHITESPACE@[115; 116) "\n"
+++ /dev/null
-// format with label break value.
-fn main() {
- 'empty_block: {}
-
- 'block: {
- do_thing();
- if condition_not_met() {
- break 'block;
- }
- do_next_thing();
- if condition_not_met() {
- break 'block;
- }
- do_last_thing();
- }
-
- let result = 'block: {
- if foo() {
- // comment
- break 'block 1;
- }
- if bar() {
- /* comment */
- break 'block 2;
- }
- 3
- };
-}
+++ /dev/null
-SOURCE_FILE@[0; 506)
- FN_DEF@[0; 505)
- COMMENT@[0; 33) "// format with label ..."
- WHITESPACE@[33; 34) "\n"
- FN_KW@[34; 36) "fn"
- WHITESPACE@[36; 37) " "
- NAME@[37; 41)
- IDENT@[37; 41) "main"
- PARAM_LIST@[41; 43)
- L_PAREN@[41; 42) "("
- R_PAREN@[42; 43) ")"
- WHITESPACE@[43; 44) " "
- BLOCK@[44; 505)
- L_CURLY@[44; 45) "{"
- WHITESPACE@[45; 50) "\n "
- EXPR_STMT@[50; 66)
- BLOCK_EXPR@[50; 66)
- LABEL@[50; 63)
- LIFETIME@[50; 62) "\'empty_block"
- COLON@[62; 63) ":"
- WHITESPACE@[63; 64) " "
- BLOCK@[64; 66)
- L_CURLY@[64; 65) "{"
- R_CURLY@[65; 66) "}"
- WHITESPACE@[66; 72) "\n\n "
- EXPR_STMT@[72; 295)
- BLOCK_EXPR@[72; 295)
- LABEL@[72; 79)
- LIFETIME@[72; 78) "\'block"
- COLON@[78; 79) ":"
- WHITESPACE@[79; 80) " "
- BLOCK@[80; 295)
- L_CURLY@[80; 81) "{"
- WHITESPACE@[81; 90) "\n "
- EXPR_STMT@[90; 101)
- CALL_EXPR@[90; 100)
- PATH_EXPR@[90; 98)
- PATH@[90; 98)
- PATH_SEGMENT@[90; 98)
- NAME_REF@[90; 98)
- IDENT@[90; 98) "do_thing"
- ARG_LIST@[98; 100)
- L_PAREN@[98; 99) "("
- R_PAREN@[99; 100) ")"
- SEMI@[100; 101) ";"
- WHITESPACE@[101; 110) "\n "
- EXPR_STMT@[110; 170)
- IF_EXPR@[110; 170)
- IF_KW@[110; 112) "if"
- WHITESPACE@[112; 113) " "
- CONDITION@[113; 132)
- CALL_EXPR@[113; 132)
- PATH_EXPR@[113; 130)
- PATH@[113; 130)
- PATH_SEGMENT@[113; 130)
- NAME_REF@[113; 130)
- IDENT@[113; 130) "condition_not_met"
- ARG_LIST@[130; 132)
- L_PAREN@[130; 131) "("
- R_PAREN@[131; 132) ")"
- WHITESPACE@[132; 133) " "
- BLOCK@[133; 170)
- L_CURLY@[133; 134) "{"
- WHITESPACE@[134; 147) "\n "
- EXPR_STMT@[147; 160)
- BREAK_EXPR@[147; 159)
- BREAK_KW@[147; 152) "break"
- WHITESPACE@[152; 153) " "
- LIFETIME@[153; 159) "\'block"
- SEMI@[159; 160) ";"
- WHITESPACE@[160; 169) "\n "
- R_CURLY@[169; 170) "}"
- WHITESPACE@[170; 179) "\n "
- EXPR_STMT@[179; 195)
- CALL_EXPR@[179; 194)
- PATH_EXPR@[179; 192)
- PATH@[179; 192)
- PATH_SEGMENT@[179; 192)
- NAME_REF@[179; 192)
- IDENT@[179; 192) "do_next_thing"
- ARG_LIST@[192; 194)
- L_PAREN@[192; 193) "("
- R_PAREN@[193; 194) ")"
- SEMI@[194; 195) ";"
- WHITESPACE@[195; 204) "\n "
- EXPR_STMT@[204; 264)
- IF_EXPR@[204; 264)
- IF_KW@[204; 206) "if"
- WHITESPACE@[206; 207) " "
- CONDITION@[207; 226)
- CALL_EXPR@[207; 226)
- PATH_EXPR@[207; 224)
- PATH@[207; 224)
- PATH_SEGMENT@[207; 224)
- NAME_REF@[207; 224)
- IDENT@[207; 224) "condition_not_met"
- ARG_LIST@[224; 226)
- L_PAREN@[224; 225) "("
- R_PAREN@[225; 226) ")"
- WHITESPACE@[226; 227) " "
- BLOCK@[227; 264)
- L_CURLY@[227; 228) "{"
- WHITESPACE@[228; 241) "\n "
- EXPR_STMT@[241; 254)
- BREAK_EXPR@[241; 253)
- BREAK_KW@[241; 246) "break"
- WHITESPACE@[246; 247) " "
- LIFETIME@[247; 253) "\'block"
- SEMI@[253; 254) ";"
- WHITESPACE@[254; 263) "\n "
- R_CURLY@[263; 264) "}"
- WHITESPACE@[264; 273) "\n "
- EXPR_STMT@[273; 289)
- CALL_EXPR@[273; 288)
- PATH_EXPR@[273; 286)
- PATH@[273; 286)
- PATH_SEGMENT@[273; 286)
- NAME_REF@[273; 286)
- IDENT@[273; 286) "do_last_thing"
- ARG_LIST@[286; 288)
- L_PAREN@[286; 287) "("
- R_PAREN@[287; 288) ")"
- SEMI@[288; 289) ";"
- WHITESPACE@[289; 294) "\n "
- R_CURLY@[294; 295) "}"
- WHITESPACE@[295; 301) "\n\n "
- LET_STMT@[301; 503)
- LET_KW@[301; 304) "let"
- WHITESPACE@[304; 305) " "
- BIND_PAT@[305; 311)
- NAME@[305; 311)
- IDENT@[305; 311) "result"
- WHITESPACE@[311; 312) " "
- EQ@[312; 313) "="
- WHITESPACE@[313; 314) " "
- BLOCK_EXPR@[314; 502)
- LABEL@[314; 321)
- LIFETIME@[314; 320) "\'block"
- COLON@[320; 321) ":"
- WHITESPACE@[321; 322) " "
- BLOCK@[322; 502)
- L_CURLY@[322; 323) "{"
- WHITESPACE@[323; 332) "\n "
- EXPR_STMT@[332; 403)
- IF_EXPR@[332; 403)
- IF_KW@[332; 334) "if"
- WHITESPACE@[334; 335) " "
- CONDITION@[335; 340)
- CALL_EXPR@[335; 340)
- PATH_EXPR@[335; 338)
- PATH@[335; 338)
- PATH_SEGMENT@[335; 338)
- NAME_REF@[335; 338)
- IDENT@[335; 338) "foo"
- ARG_LIST@[338; 340)
- L_PAREN@[338; 339) "("
- R_PAREN@[339; 340) ")"
- WHITESPACE@[340; 341) " "
- BLOCK@[341; 403)
- L_CURLY@[341; 342) "{"
- WHITESPACE@[342; 355) "\n "
- COMMENT@[355; 365) "// comment"
- WHITESPACE@[365; 378) "\n "
- EXPR_STMT@[378; 393)
- BREAK_EXPR@[378; 392)
- BREAK_KW@[378; 383) "break"
- WHITESPACE@[383; 384) " "
- LIFETIME@[384; 390) "\'block"
- WHITESPACE@[390; 391) " "
- LITERAL@[391; 392)
- INT_NUMBER@[391; 392) "1"
- SEMI@[392; 393) ";"
- WHITESPACE@[393; 402) "\n "
- R_CURLY@[402; 403) "}"
- WHITESPACE@[403; 412) "\n "
- EXPR_STMT@[412; 486)
- IF_EXPR@[412; 486)
- IF_KW@[412; 414) "if"
- WHITESPACE@[414; 415) " "
- CONDITION@[415; 420)
- CALL_EXPR@[415; 420)
- PATH_EXPR@[415; 418)
- PATH@[415; 418)
- PATH_SEGMENT@[415; 418)
- NAME_REF@[415; 418)
- IDENT@[415; 418) "bar"
- ARG_LIST@[418; 420)
- L_PAREN@[418; 419) "("
- R_PAREN@[419; 420) ")"
- WHITESPACE@[420; 421) " "
- BLOCK@[421; 486)
- L_CURLY@[421; 422) "{"
- WHITESPACE@[422; 435) "\n "
- COMMENT@[435; 448) "/* comment */"
- WHITESPACE@[448; 461) "\n "
- EXPR_STMT@[461; 476)
- BREAK_EXPR@[461; 475)
- BREAK_KW@[461; 466) "break"
- WHITESPACE@[466; 467) " "
- LIFETIME@[467; 473) "\'block"
- WHITESPACE@[473; 474) " "
- LITERAL@[474; 475)
- INT_NUMBER@[474; 475) "2"
- SEMI@[475; 476) ";"
- WHITESPACE@[476; 485) "\n "
- R_CURLY@[485; 486) "}"
- WHITESPACE@[486; 495) "\n "
- LITERAL@[495; 496)
- INT_NUMBER@[495; 496) "3"
- WHITESPACE@[496; 501) "\n "
- R_CURLY@[501; 502) "}"
- SEMI@[502; 503) ";"
- WHITESPACE@[503; 504) "\n"
- R_CURLY@[504; 505) "}"
- WHITESPACE@[505; 506) "\n"
+++ /dev/null
-fn main() {
- make_query(crate::module_map::module_tree);
-}
+++ /dev/null
-SOURCE_FILE@[0; 62)
- FN_DEF@[0; 61)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 7)
- IDENT@[3; 7) "main"
- PARAM_LIST@[7; 9)
- L_PAREN@[7; 8) "("
- R_PAREN@[8; 9) ")"
- WHITESPACE@[9; 10) " "
- BLOCK@[10; 61)
- L_CURLY@[10; 11) "{"
- WHITESPACE@[11; 16) "\n "
- EXPR_STMT@[16; 59)
- CALL_EXPR@[16; 58)
- PATH_EXPR@[16; 26)
- PATH@[16; 26)
- PATH_SEGMENT@[16; 26)
- NAME_REF@[16; 26)
- IDENT@[16; 26) "make_query"
- ARG_LIST@[26; 58)
- L_PAREN@[26; 27) "("
- PATH_EXPR@[27; 57)
- PATH@[27; 57)
- PATH@[27; 44)
- PATH@[27; 32)
- PATH_SEGMENT@[27; 32)
- CRATE_KW@[27; 32) "crate"
- COLONCOLON@[32; 34) "::"
- PATH_SEGMENT@[34; 44)
- NAME_REF@[34; 44)
- IDENT@[34; 44) "module_map"
- COLONCOLON@[44; 46) "::"
- PATH_SEGMENT@[46; 57)
- NAME_REF@[46; 57)
- IDENT@[46; 57) "module_tree"
- R_PAREN@[57; 58) ")"
- SEMI@[58; 59) ";"
- WHITESPACE@[59; 60) "\n"
- R_CURLY@[60; 61) "}"
- WHITESPACE@[61; 62) "\n"
+++ /dev/null
-//! Adapted from a `rustc` test, which can be found at
-//! https://github.com/rust-lang/rust/blob/6d34ec18c7d7e574553f6347ecf08e1e1c45c13d/src/test/run-pass/weird-exprs.rs.
-//!
-//! Reported to rust-analyzer in https://github.com/rust-analyzer/rust-analyzer/issues/290
-
-#![allow(non_camel_case_types)]
-#![allow(dead_code)]
-#![allow(unreachable_code)]
-#![allow(unused_parens)]
-
-#![recursion_limit = "128"]
-
-use std::cell::Cell;
-use std::mem::swap;
-
-// Just a grab bag of stuff that you wouldn't want to actually write.
-
-fn strange() -> bool { let _x: bool = return true; }
-
-fn funny() {
- fn f(_x: ()) { }
- f(return);
-}
-
-fn what() {
- fn the(x: &Cell<bool>) {
- return while !x.get() { x.set(true); };
- }
- let i = &Cell::new(false);
- let dont = {||the(i)};
- dont();
- assert!((i.get()));
-}
-
-fn zombiejesus() {
- loop {
- while (return) {
- if (return) {
- match (return) {
- 1 => {
- if (return) {
- return
- } else {
- return
- }
- }
- _ => { return }
- };
- } else if (return) {
- return;
- }
- }
- if (return) { break; }
- }
-}
-
-fn notsure() {
- let mut _x: isize;
- let mut _y = (_x = 0) == (_x = 0);
- let mut _z = (_x = 0) < (_x = 0);
- let _a = (_x += 0) == (_x = 0);
- let _b = swap(&mut _y, &mut _z) == swap(&mut _y, &mut _z);
-}
-
-fn canttouchthis() -> usize {
- fn p() -> bool { true }
- let _a = (assert!((true)) == (assert!(p())));
- let _c = (assert!((p())) == ());
- let _b: bool = (println!("{}", 0) == (return 0));
-}
-
-fn angrydome() {
- loop { if break { } }
- let mut i = 0;
- loop { i += 1; if i == 1 { match (continue) { 1 => { }, _ => panic!("wat") } }
- break; }
-}
-
-fn evil_lincoln() { let _evil = println!("lincoln"); }
-
-fn dots() {
- assert_eq!(String::from(".................................................."),
- format!("{:?}", .. .. .. .. .. .. .. .. .. .. .. .. ..
- .. .. .. .. .. .. .. .. .. .. .. ..));
-}
-
-fn u8(u8: u8) {
- if u8 != 0u8 {
- assert_eq!(8u8, {
- macro_rules! u8 {
- (u8) => {
- mod u8 {
- pub fn u8<'u8: 'u8 + 'u8>(u8: &'u8 u8) -> &'u8 u8 {
- "u8";
- u8
- }
- }
- };
- }
-
- u8!(u8);
- let &u8: &u8 = u8::u8(&8u8);
- crate::u8(0u8);
- u8
- });
- }
-}
-
-fn fishy() {
- assert_eq!(String::from("><>"),
- String::<>::from::<>("><>").chars::<>().rev::<>().collect::<String>());
-}
-
-fn union() {
- union union<'union> { union: &'union union<'union>, }
-}
-
-fn special_characters() {
- let val = !((|(..):(_,_),__@_|__)((&*"\\",'🤔')/**/,{})=={&[..=..][..];})//
- ;
- assert!(!val);
-}
-
-fn punch_card() -> impl std::fmt::Debug {
- ..=..=.. .. .. .. .. .. .. .. .. .. .. ..=.. ..
- ..=.. ..=.. .. .. .. .. .. .. .. .. ..=..=..=..
- ..=.. ..=.. ..=.. ..=.. .. ..=..=.. .. ..=.. ..
- ..=..=.. .. ..=.. ..=.. ..=.. .. .. .. ..=.. ..
- ..=.. ..=.. ..=.. ..=.. .. ..=.. .. .. ..=.. ..
- ..=.. ..=.. ..=.. ..=.. .. .. ..=.. .. ..=.. ..
- ..=.. ..=.. .. ..=..=.. ..=..=.. .. .. ..=.. ..
-}
-
-fn ktulhu() {
- ;;;();;;;;;;;;()
-}
-
-pub fn main() {
- strange();
- funny();
- what();
- zombiejesus();
- notsure();
- canttouchthis();
- angrydome();
- evil_lincoln();
- dots();
- u8(8u8);
- fishy();
- union();
- special_characters();
- punch_card();
- ktulhu();
-}
+++ /dev/null
-SOURCE_FILE@[0; 3813)
- COMMENT@[0; 55) "//! Adapted from a `r ..."
- WHITESPACE@[55; 56) "\n"
- COMMENT@[56; 173) "//! https://github.co ..."
- WHITESPACE@[173; 174) "\n"
- COMMENT@[174; 178) "//! "
- WHITESPACE@[178; 179) "\n"
- COMMENT@[179; 269) "//! Reported to rust- ..."
- WHITESPACE@[269; 271) "\n\n"
- ATTR@[271; 302)
- POUND@[271; 272) "#"
- EXCL@[272; 273) "!"
- TOKEN_TREE@[273; 302)
- L_BRACK@[273; 274) "["
- IDENT@[274; 279) "allow"
- TOKEN_TREE@[279; 301)
- L_PAREN@[279; 280) "("
- IDENT@[280; 300) "non_camel_case_types"
- R_PAREN@[300; 301) ")"
- R_BRACK@[301; 302) "]"
- WHITESPACE@[302; 303) "\n"
- ATTR@[303; 323)
- POUND@[303; 304) "#"
- EXCL@[304; 305) "!"
- TOKEN_TREE@[305; 323)
- L_BRACK@[305; 306) "["
- IDENT@[306; 311) "allow"
- TOKEN_TREE@[311; 322)
- L_PAREN@[311; 312) "("
- IDENT@[312; 321) "dead_code"
- R_PAREN@[321; 322) ")"
- R_BRACK@[322; 323) "]"
- WHITESPACE@[323; 324) "\n"
- ATTR@[324; 351)
- POUND@[324; 325) "#"
- EXCL@[325; 326) "!"
- TOKEN_TREE@[326; 351)
- L_BRACK@[326; 327) "["
- IDENT@[327; 332) "allow"
- TOKEN_TREE@[332; 350)
- L_PAREN@[332; 333) "("
- IDENT@[333; 349) "unreachable_code"
- R_PAREN@[349; 350) ")"
- R_BRACK@[350; 351) "]"
- WHITESPACE@[351; 352) "\n"
- ATTR@[352; 376)
- POUND@[352; 353) "#"
- EXCL@[353; 354) "!"
- TOKEN_TREE@[354; 376)
- L_BRACK@[354; 355) "["
- IDENT@[355; 360) "allow"
- TOKEN_TREE@[360; 375)
- L_PAREN@[360; 361) "("
- IDENT@[361; 374) "unused_parens"
- R_PAREN@[374; 375) ")"
- R_BRACK@[375; 376) "]"
- WHITESPACE@[376; 378) "\n\n"
- ATTR@[378; 405)
- POUND@[378; 379) "#"
- EXCL@[379; 380) "!"
- TOKEN_TREE@[380; 405)
- L_BRACK@[380; 381) "["
- IDENT@[381; 396) "recursion_limit"
- WHITESPACE@[396; 397) " "
- EQ@[397; 398) "="
- WHITESPACE@[398; 399) " "
- STRING@[399; 404) "\"128\""
- R_BRACK@[404; 405) "]"
- WHITESPACE@[405; 407) "\n\n"
- USE_ITEM@[407; 427)
- USE_KW@[407; 410) "use"
- WHITESPACE@[410; 411) " "
- USE_TREE@[411; 426)
- PATH@[411; 426)
- PATH@[411; 420)
- PATH@[411; 414)
- PATH_SEGMENT@[411; 414)
- NAME_REF@[411; 414)
- IDENT@[411; 414) "std"
- COLONCOLON@[414; 416) "::"
- PATH_SEGMENT@[416; 420)
- NAME_REF@[416; 420)
- IDENT@[416; 420) "cell"
- COLONCOLON@[420; 422) "::"
- PATH_SEGMENT@[422; 426)
- NAME_REF@[422; 426)
- IDENT@[422; 426) "Cell"
- SEMI@[426; 427) ";"
- WHITESPACE@[427; 428) "\n"
- USE_ITEM@[428; 447)
- USE_KW@[428; 431) "use"
- WHITESPACE@[431; 432) " "
- USE_TREE@[432; 446)
- PATH@[432; 446)
- PATH@[432; 440)
- PATH@[432; 435)
- PATH_SEGMENT@[432; 435)
- NAME_REF@[432; 435)
- IDENT@[432; 435) "std"
- COLONCOLON@[435; 437) "::"
- PATH_SEGMENT@[437; 440)
- NAME_REF@[437; 440)
- IDENT@[437; 440) "mem"
- COLONCOLON@[440; 442) "::"
- PATH_SEGMENT@[442; 446)
- NAME_REF@[442; 446)
- IDENT@[442; 446) "swap"
- SEMI@[446; 447) ";"
- WHITESPACE@[447; 449) "\n\n"
- COMMENT@[449; 518) "// Just a grab bag of ..."
- WHITESPACE@[518; 520) "\n\n"
- FN_DEF@[520; 572)
- FN_KW@[520; 522) "fn"
- WHITESPACE@[522; 523) " "
- NAME@[523; 530)
- IDENT@[523; 530) "strange"
- PARAM_LIST@[530; 532)
- L_PAREN@[530; 531) "("
- R_PAREN@[531; 532) ")"
- WHITESPACE@[532; 533) " "
- RET_TYPE@[533; 540)
- THIN_ARROW@[533; 535) "->"
- WHITESPACE@[535; 536) " "
- PATH_TYPE@[536; 540)
- PATH@[536; 540)
- PATH_SEGMENT@[536; 540)
- NAME_REF@[536; 540)
- IDENT@[536; 540) "bool"
- WHITESPACE@[540; 541) " "
- BLOCK@[541; 572)
- L_CURLY@[541; 542) "{"
- WHITESPACE@[542; 543) " "
- LET_STMT@[543; 570)
- LET_KW@[543; 546) "let"
- WHITESPACE@[546; 547) " "
- BIND_PAT@[547; 549)
- NAME@[547; 549)
- IDENT@[547; 549) "_x"
- COLON@[549; 550) ":"
- WHITESPACE@[550; 551) " "
- PATH_TYPE@[551; 555)
- PATH@[551; 555)
- PATH_SEGMENT@[551; 555)
- NAME_REF@[551; 555)
- IDENT@[551; 555) "bool"
- WHITESPACE@[555; 556) " "
- EQ@[556; 557) "="
- WHITESPACE@[557; 558) " "
- RETURN_EXPR@[558; 569)
- RETURN_KW@[558; 564) "return"
- WHITESPACE@[564; 565) " "
- LITERAL@[565; 569)
- TRUE_KW@[565; 569) "true"
- SEMI@[569; 570) ";"
- WHITESPACE@[570; 571) " "
- R_CURLY@[571; 572) "}"
- WHITESPACE@[572; 574) "\n\n"
- FN_DEF@[574; 624)
- FN_KW@[574; 576) "fn"
- WHITESPACE@[576; 577) " "
- NAME@[577; 582)
- IDENT@[577; 582) "funny"
- PARAM_LIST@[582; 584)
- L_PAREN@[582; 583) "("
- R_PAREN@[583; 584) ")"
- WHITESPACE@[584; 585) " "
- BLOCK@[585; 624)
- L_CURLY@[585; 586) "{"
- WHITESPACE@[586; 591) "\n "
- FN_DEF@[591; 607)
- FN_KW@[591; 593) "fn"
- WHITESPACE@[593; 594) " "
- NAME@[594; 595)
- IDENT@[594; 595) "f"
- PARAM_LIST@[595; 603)
- L_PAREN@[595; 596) "("
- PARAM@[596; 602)
- BIND_PAT@[596; 598)
- NAME@[596; 598)
- IDENT@[596; 598) "_x"
- COLON@[598; 599) ":"
- WHITESPACE@[599; 600) " "
- TUPLE_TYPE@[600; 602)
- L_PAREN@[600; 601) "("
- R_PAREN@[601; 602) ")"
- R_PAREN@[602; 603) ")"
- WHITESPACE@[603; 604) " "
- BLOCK@[604; 607)
- L_CURLY@[604; 605) "{"
- WHITESPACE@[605; 606) " "
- R_CURLY@[606; 607) "}"
- WHITESPACE@[607; 612) "\n "
- EXPR_STMT@[612; 622)
- CALL_EXPR@[612; 621)
- PATH_EXPR@[612; 613)
- PATH@[612; 613)
- PATH_SEGMENT@[612; 613)
- NAME_REF@[612; 613)
- IDENT@[612; 613) "f"
- ARG_LIST@[613; 621)
- L_PAREN@[613; 614) "("
- RETURN_EXPR@[614; 620)
- RETURN_KW@[614; 620) "return"
- R_PAREN@[620; 621) ")"
- SEMI@[621; 622) ";"
- WHITESPACE@[622; 623) "\n"
- R_CURLY@[623; 624) "}"
- WHITESPACE@[624; 626) "\n\n"
- FN_DEF@[626; 816)
- FN_KW@[626; 628) "fn"
- WHITESPACE@[628; 629) " "
- NAME@[629; 633)
- IDENT@[629; 633) "what"
- PARAM_LIST@[633; 635)
- L_PAREN@[633; 634) "("
- R_PAREN@[634; 635) ")"
- WHITESPACE@[635; 636) " "
- BLOCK@[636; 816)
- L_CURLY@[636; 637) "{"
- WHITESPACE@[637; 642) "\n "
- FN_DEF@[642; 720)
- FN_KW@[642; 644) "fn"
- WHITESPACE@[644; 645) " "
- NAME@[645; 648)
- IDENT@[645; 648) "the"
- PARAM_LIST@[648; 664)
- L_PAREN@[648; 649) "("
- PARAM@[649; 663)
- BIND_PAT@[649; 650)
- NAME@[649; 650)
- IDENT@[649; 650) "x"
- COLON@[650; 651) ":"
- WHITESPACE@[651; 652) " "
- REFERENCE_TYPE@[652; 663)
- AMP@[652; 653) "&"
- PATH_TYPE@[653; 663)
- PATH@[653; 663)
- PATH_SEGMENT@[653; 663)
- NAME_REF@[653; 657)
- IDENT@[653; 657) "Cell"
- TYPE_ARG_LIST@[657; 663)
- L_ANGLE@[657; 658) "<"
- TYPE_ARG@[658; 662)
- PATH_TYPE@[658; 662)
- PATH@[658; 662)
- PATH_SEGMENT@[658; 662)
- NAME_REF@[658; 662)
- IDENT@[658; 662) "bool"
- R_ANGLE@[662; 663) ">"
- R_PAREN@[663; 664) ")"
- WHITESPACE@[664; 665) " "
- BLOCK@[665; 720)
- L_CURLY@[665; 666) "{"
- WHITESPACE@[666; 675) "\n "
- EXPR_STMT@[675; 714)
- RETURN_EXPR@[675; 713)
- RETURN_KW@[675; 681) "return"
- WHITESPACE@[681; 682) " "
- WHILE_EXPR@[682; 713)
- WHILE_KW@[682; 687) "while"
- WHITESPACE@[687; 688) " "
- CONDITION@[688; 696)
- PREFIX_EXPR@[688; 696)
- EXCL@[688; 689) "!"
- METHOD_CALL_EXPR@[689; 696)
- PATH_EXPR@[689; 690)
- PATH@[689; 690)
- PATH_SEGMENT@[689; 690)
- NAME_REF@[689; 690)
- IDENT@[689; 690) "x"
- DOT@[690; 691) "."
- NAME_REF@[691; 694)
- IDENT@[691; 694) "get"
- ARG_LIST@[694; 696)
- L_PAREN@[694; 695) "("
- R_PAREN@[695; 696) ")"
- WHITESPACE@[696; 697) " "
- BLOCK@[697; 713)
- L_CURLY@[697; 698) "{"
- WHITESPACE@[698; 699) " "
- EXPR_STMT@[699; 711)
- METHOD_CALL_EXPR@[699; 710)
- PATH_EXPR@[699; 700)
- PATH@[699; 700)
- PATH_SEGMENT@[699; 700)
- NAME_REF@[699; 700)
- IDENT@[699; 700) "x"
- DOT@[700; 701) "."
- NAME_REF@[701; 704)
- IDENT@[701; 704) "set"
- ARG_LIST@[704; 710)
- L_PAREN@[704; 705) "("
- LITERAL@[705; 709)
- TRUE_KW@[705; 709) "true"
- R_PAREN@[709; 710) ")"
- SEMI@[710; 711) ";"
- WHITESPACE@[711; 712) " "
- R_CURLY@[712; 713) "}"
- SEMI@[713; 714) ";"
- WHITESPACE@[714; 719) "\n "
- R_CURLY@[719; 720) "}"
- WHITESPACE@[720; 725) "\n "
- LET_STMT@[725; 751)
- LET_KW@[725; 728) "let"
- WHITESPACE@[728; 729) " "
- BIND_PAT@[729; 730)
- NAME@[729; 730)
- IDENT@[729; 730) "i"
- WHITESPACE@[730; 731) " "
- EQ@[731; 732) "="
- WHITESPACE@[732; 733) " "
- REF_EXPR@[733; 750)
- AMP@[733; 734) "&"
- CALL_EXPR@[734; 750)
- PATH_EXPR@[734; 743)
- PATH@[734; 743)
- PATH@[734; 738)
- PATH_SEGMENT@[734; 738)
- NAME_REF@[734; 738)
- IDENT@[734; 738) "Cell"
- COLONCOLON@[738; 740) "::"
- PATH_SEGMENT@[740; 743)
- NAME_REF@[740; 743)
- IDENT@[740; 743) "new"
- ARG_LIST@[743; 750)
- L_PAREN@[743; 744) "("
- LITERAL@[744; 749)
- FALSE_KW@[744; 749) "false"
- R_PAREN@[749; 750) ")"
- SEMI@[750; 751) ";"
- WHITESPACE@[751; 756) "\n "
- LET_STMT@[756; 778)
- LET_KW@[756; 759) "let"
- WHITESPACE@[759; 760) " "
- BIND_PAT@[760; 764)
- NAME@[760; 764)
- IDENT@[760; 764) "dont"
- WHITESPACE@[764; 765) " "
- EQ@[765; 766) "="
- WHITESPACE@[766; 767) " "
- BLOCK_EXPR@[767; 777)
- BLOCK@[767; 777)
- L_CURLY@[767; 768) "{"
- LAMBDA_EXPR@[768; 776)
- PARAM_LIST@[768; 770)
- PIPE@[768; 769) "|"
- PIPE@[769; 770) "|"
- CALL_EXPR@[770; 776)
- PATH_EXPR@[770; 773)
- PATH@[770; 773)
- PATH_SEGMENT@[770; 773)
- NAME_REF@[770; 773)
- IDENT@[770; 773) "the"
- ARG_LIST@[773; 776)
- L_PAREN@[773; 774) "("
- PATH_EXPR@[774; 775)
- PATH@[774; 775)
- PATH_SEGMENT@[774; 775)
- NAME_REF@[774; 775)
- IDENT@[774; 775) "i"
- R_PAREN@[775; 776) ")"
- R_CURLY@[776; 777) "}"
- SEMI@[777; 778) ";"
- WHITESPACE@[778; 783) "\n "
- EXPR_STMT@[783; 790)
- CALL_EXPR@[783; 789)
- PATH_EXPR@[783; 787)
- PATH@[783; 787)
- PATH_SEGMENT@[783; 787)
- NAME_REF@[783; 787)
- IDENT@[783; 787) "dont"
- ARG_LIST@[787; 789)
- L_PAREN@[787; 788) "("
- R_PAREN@[788; 789) ")"
- SEMI@[789; 790) ";"
- WHITESPACE@[790; 795) "\n "
- EXPR_STMT@[795; 814)
- MACRO_CALL@[795; 813)
- PATH@[795; 801)
- PATH_SEGMENT@[795; 801)
- NAME_REF@[795; 801)
- IDENT@[795; 801) "assert"
- EXCL@[801; 802) "!"
- TOKEN_TREE@[802; 813)
- L_PAREN@[802; 803) "("
- TOKEN_TREE@[803; 812)
- L_PAREN@[803; 804) "("
- IDENT@[804; 805) "i"
- DOT@[805; 806) "."
- IDENT@[806; 809) "get"
- TOKEN_TREE@[809; 811)
- L_PAREN@[809; 810) "("
- R_PAREN@[810; 811) ")"
- R_PAREN@[811; 812) ")"
- R_PAREN@[812; 813) ")"
- SEMI@[813; 814) ";"
- WHITESPACE@[814; 815) "\n"
- R_CURLY@[815; 816) "}"
- WHITESPACE@[816; 818) "\n\n"
- FN_DEF@[818; 1322)
- FN_KW@[818; 820) "fn"
- WHITESPACE@[820; 821) " "
- NAME@[821; 832)
- IDENT@[821; 832) "zombiejesus"
- PARAM_LIST@[832; 834)
- L_PAREN@[832; 833) "("
- R_PAREN@[833; 834) ")"
- WHITESPACE@[834; 835) " "
- BLOCK@[835; 1322)
- L_CURLY@[835; 836) "{"
- WHITESPACE@[836; 841) "\n "
- LOOP_EXPR@[841; 1320)
- LOOP_KW@[841; 845) "loop"
- WHITESPACE@[845; 846) " "
- BLOCK@[846; 1320)
- L_CURLY@[846; 847) "{"
- WHITESPACE@[847; 856) "\n "
- EXPR_STMT@[856; 1283)
- WHILE_EXPR@[856; 1283)
- WHILE_KW@[856; 861) "while"
- WHITESPACE@[861; 862) " "
- CONDITION@[862; 870)
- PAREN_EXPR@[862; 870)
- L_PAREN@[862; 863) "("
- RETURN_EXPR@[863; 869)
- RETURN_KW@[863; 869) "return"
- R_PAREN@[869; 870) ")"
- WHITESPACE@[870; 871) " "
- BLOCK@[871; 1283)
- L_CURLY@[871; 872) "{"
- WHITESPACE@[872; 885) "\n "
- IF_EXPR@[885; 1273)
- IF_KW@[885; 887) "if"
- WHITESPACE@[887; 888) " "
- CONDITION@[888; 896)
- PAREN_EXPR@[888; 896)
- L_PAREN@[888; 889) "("
- RETURN_EXPR@[889; 895)
- RETURN_KW@[889; 895) "return"
- R_PAREN@[895; 896) ")"
- WHITESPACE@[896; 897) " "
- BLOCK@[897; 1216)
- L_CURLY@[897; 898) "{"
- WHITESPACE@[898; 915) "\n "
- EXPR_STMT@[915; 1202)
- MATCH_EXPR@[915; 1201)
- MATCH_KW@[915; 920) "match"
- WHITESPACE@[920; 921) " "
- PAREN_EXPR@[921; 929)
- L_PAREN@[921; 922) "("
- RETURN_EXPR@[922; 928)
- RETURN_KW@[922; 928) "return"
- R_PAREN@[928; 929) ")"
- WHITESPACE@[929; 930) " "
- MATCH_ARM_LIST@[930; 1201)
- L_CURLY@[930; 931) "{"
- WHITESPACE@[931; 952) "\n "
- MATCH_ARM@[952; 1147)
- LITERAL_PAT@[952; 953)
- LITERAL@[952; 953)
- INT_NUMBER@[952; 953) "1"
- WHITESPACE@[953; 954) " "
- FAT_ARROW@[954; 956) "=>"
- WHITESPACE@[956; 957) " "
- BLOCK_EXPR@[957; 1147)
- BLOCK@[957; 1147)
- L_CURLY@[957; 958) "{"
- WHITESPACE@[958; 983) "\n ..."
- IF_EXPR@[983; 1125)
- IF_KW@[983; 985) "if"
- WHITESPACE@[985; 986) " "
- CONDITION@[986; 994)
- PAREN_EXPR@[986; 994)
- L_PAREN@[986; 987) "("
- RETURN_EXPR@[987; 993)
- RETURN_KW@[987; 993) "return"
- R_PAREN@[993; 994) ")"
- WHITESPACE@[994; 995) " "
- BLOCK@[995; 1057)
- L_CURLY@[995; 996) "{"
- WHITESPACE@[996; 1025) "\n ..."
- RETURN_EXPR@[1025; 1031)
- RETURN_KW@[1025; 1031) "return"
- WHITESPACE@[1031; 1056) "\n ..."
- R_CURLY@[1056; 1057) "}"
- WHITESPACE@[1057; 1058) " "
- ELSE_KW@[1058; 1062) "else"
- WHITESPACE@[1062; 1063) " "
- BLOCK@[1063; 1125)
- L_CURLY@[1063; 1064) "{"
- WHITESPACE@[1064; 1093) "\n ..."
- RETURN_EXPR@[1093; 1099)
- RETURN_KW@[1093; 1099) "return"
- WHITESPACE@[1099; 1124) "\n ..."
- R_CURLY@[1124; 1125) "}"
- WHITESPACE@[1125; 1146) "\n "
- R_CURLY@[1146; 1147) "}"
- WHITESPACE@[1147; 1168) "\n "
- MATCH_ARM@[1168; 1183)
- PLACEHOLDER_PAT@[1168; 1169)
- UNDERSCORE@[1168; 1169) "_"
- WHITESPACE@[1169; 1170) " "
- FAT_ARROW@[1170; 1172) "=>"
- WHITESPACE@[1172; 1173) " "
- BLOCK_EXPR@[1173; 1183)
- BLOCK@[1173; 1183)
- L_CURLY@[1173; 1174) "{"
- WHITESPACE@[1174; 1175) " "
- RETURN_EXPR@[1175; 1181)
- RETURN_KW@[1175; 1181) "return"
- WHITESPACE@[1181; 1182) " "
- R_CURLY@[1182; 1183) "}"
- WHITESPACE@[1183; 1200) "\n "
- R_CURLY@[1200; 1201) "}"
- SEMI@[1201; 1202) ";"
- WHITESPACE@[1202; 1215) "\n "
- R_CURLY@[1215; 1216) "}"
- WHITESPACE@[1216; 1217) " "
- ELSE_KW@[1217; 1221) "else"
- WHITESPACE@[1221; 1222) " "
- IF_EXPR@[1222; 1273)
- IF_KW@[1222; 1224) "if"
- WHITESPACE@[1224; 1225) " "
- CONDITION@[1225; 1233)
- PAREN_EXPR@[1225; 1233)
- L_PAREN@[1225; 1226) "("
- RETURN_EXPR@[1226; 1232)
- RETURN_KW@[1226; 1232) "return"
- R_PAREN@[1232; 1233) ")"
- WHITESPACE@[1233; 1234) " "
- BLOCK@[1234; 1273)
- L_CURLY@[1234; 1235) "{"
- WHITESPACE@[1235; 1252) "\n "
- EXPR_STMT@[1252; 1259)
- RETURN_EXPR@[1252; 1258)
- RETURN_KW@[1252; 1258) "return"
- SEMI@[1258; 1259) ";"
- WHITESPACE@[1259; 1272) "\n "
- R_CURLY@[1272; 1273) "}"
- WHITESPACE@[1273; 1282) "\n "
- R_CURLY@[1282; 1283) "}"
- WHITESPACE@[1283; 1292) "\n "
- IF_EXPR@[1292; 1314)
- IF_KW@[1292; 1294) "if"
- WHITESPACE@[1294; 1295) " "
- CONDITION@[1295; 1303)
- PAREN_EXPR@[1295; 1303)
- L_PAREN@[1295; 1296) "("
- RETURN_EXPR@[1296; 1302)
- RETURN_KW@[1296; 1302) "return"
- R_PAREN@[1302; 1303) ")"
- WHITESPACE@[1303; 1304) " "
- BLOCK@[1304; 1314)
- L_CURLY@[1304; 1305) "{"
- WHITESPACE@[1305; 1306) " "
- EXPR_STMT@[1306; 1312)
- BREAK_EXPR@[1306; 1311)
- BREAK_KW@[1306; 1311) "break"
- SEMI@[1311; 1312) ";"
- WHITESPACE@[1312; 1313) " "
- R_CURLY@[1313; 1314) "}"
- WHITESPACE@[1314; 1319) "\n "
- R_CURLY@[1319; 1320) "}"
- WHITESPACE@[1320; 1321) "\n"
- R_CURLY@[1321; 1322) "}"
- WHITESPACE@[1322; 1324) "\n\n"
- FN_DEF@[1324; 1539)
- FN_KW@[1324; 1326) "fn"
- WHITESPACE@[1326; 1327) " "
- NAME@[1327; 1334)
- IDENT@[1327; 1334) "notsure"
- PARAM_LIST@[1334; 1336)
- L_PAREN@[1334; 1335) "("
- R_PAREN@[1335; 1336) ")"
- WHITESPACE@[1336; 1337) " "
- BLOCK@[1337; 1539)
- L_CURLY@[1337; 1338) "{"
- WHITESPACE@[1338; 1343) "\n "
- LET_STMT@[1343; 1361)
- LET_KW@[1343; 1346) "let"
- WHITESPACE@[1346; 1347) " "
- BIND_PAT@[1347; 1353)
- MUT_KW@[1347; 1350) "mut"
- WHITESPACE@[1350; 1351) " "
- NAME@[1351; 1353)
- IDENT@[1351; 1353) "_x"
- COLON@[1353; 1354) ":"
- WHITESPACE@[1354; 1355) " "
- PATH_TYPE@[1355; 1360)
- PATH@[1355; 1360)
- PATH_SEGMENT@[1355; 1360)
- NAME_REF@[1355; 1360)
- IDENT@[1355; 1360) "isize"
- SEMI@[1360; 1361) ";"
- WHITESPACE@[1361; 1366) "\n "
- LET_STMT@[1366; 1400)
- LET_KW@[1366; 1369) "let"
- WHITESPACE@[1369; 1370) " "
- BIND_PAT@[1370; 1376)
- MUT_KW@[1370; 1373) "mut"
- WHITESPACE@[1373; 1374) " "
- NAME@[1374; 1376)
- IDENT@[1374; 1376) "_y"
- WHITESPACE@[1376; 1377) " "
- EQ@[1377; 1378) "="
- WHITESPACE@[1378; 1379) " "
- BIN_EXPR@[1379; 1399)
- PAREN_EXPR@[1379; 1387)
- L_PAREN@[1379; 1380) "("
- BIN_EXPR@[1380; 1386)
- PATH_EXPR@[1380; 1382)
- PATH@[1380; 1382)
- PATH_SEGMENT@[1380; 1382)
- NAME_REF@[1380; 1382)
- IDENT@[1380; 1382) "_x"
- WHITESPACE@[1382; 1383) " "
- EQ@[1383; 1384) "="
- WHITESPACE@[1384; 1385) " "
- LITERAL@[1385; 1386)
- INT_NUMBER@[1385; 1386) "0"
- R_PAREN@[1386; 1387) ")"
- WHITESPACE@[1387; 1388) " "
- EQEQ@[1388; 1390) "=="
- WHITESPACE@[1390; 1391) " "
- PAREN_EXPR@[1391; 1399)
- L_PAREN@[1391; 1392) "("
- BIN_EXPR@[1392; 1398)
- PATH_EXPR@[1392; 1394)
- PATH@[1392; 1394)
- PATH_SEGMENT@[1392; 1394)
- NAME_REF@[1392; 1394)
- IDENT@[1392; 1394) "_x"
- WHITESPACE@[1394; 1395) " "
- EQ@[1395; 1396) "="
- WHITESPACE@[1396; 1397) " "
- LITERAL@[1397; 1398)
- INT_NUMBER@[1397; 1398) "0"
- R_PAREN@[1398; 1399) ")"
- SEMI@[1399; 1400) ";"
- WHITESPACE@[1400; 1405) "\n "
- LET_STMT@[1405; 1438)
- LET_KW@[1405; 1408) "let"
- WHITESPACE@[1408; 1409) " "
- BIND_PAT@[1409; 1415)
- MUT_KW@[1409; 1412) "mut"
- WHITESPACE@[1412; 1413) " "
- NAME@[1413; 1415)
- IDENT@[1413; 1415) "_z"
- WHITESPACE@[1415; 1416) " "
- EQ@[1416; 1417) "="
- WHITESPACE@[1417; 1418) " "
- BIN_EXPR@[1418; 1437)
- PAREN_EXPR@[1418; 1426)
- L_PAREN@[1418; 1419) "("
- BIN_EXPR@[1419; 1425)
- PATH_EXPR@[1419; 1421)
- PATH@[1419; 1421)
- PATH_SEGMENT@[1419; 1421)
- NAME_REF@[1419; 1421)
- IDENT@[1419; 1421) "_x"
- WHITESPACE@[1421; 1422) " "
- EQ@[1422; 1423) "="
- WHITESPACE@[1423; 1424) " "
- LITERAL@[1424; 1425)
- INT_NUMBER@[1424; 1425) "0"
- R_PAREN@[1425; 1426) ")"
- WHITESPACE@[1426; 1427) " "
- L_ANGLE@[1427; 1428) "<"
- WHITESPACE@[1428; 1429) " "
- PAREN_EXPR@[1429; 1437)
- L_PAREN@[1429; 1430) "("
- BIN_EXPR@[1430; 1436)
- PATH_EXPR@[1430; 1432)
- PATH@[1430; 1432)
- PATH_SEGMENT@[1430; 1432)
- NAME_REF@[1430; 1432)
- IDENT@[1430; 1432) "_x"
- WHITESPACE@[1432; 1433) " "
- EQ@[1433; 1434) "="
- WHITESPACE@[1434; 1435) " "
- LITERAL@[1435; 1436)
- INT_NUMBER@[1435; 1436) "0"
- R_PAREN@[1436; 1437) ")"
- SEMI@[1437; 1438) ";"
- WHITESPACE@[1438; 1443) "\n "
- LET_STMT@[1443; 1474)
- LET_KW@[1443; 1446) "let"
- WHITESPACE@[1446; 1447) " "
- BIND_PAT@[1447; 1449)
- NAME@[1447; 1449)
- IDENT@[1447; 1449) "_a"
- WHITESPACE@[1449; 1450) " "
- EQ@[1450; 1451) "="
- WHITESPACE@[1451; 1452) " "
- BIN_EXPR@[1452; 1473)
- PAREN_EXPR@[1452; 1461)
- L_PAREN@[1452; 1453) "("
- BIN_EXPR@[1453; 1460)
- PATH_EXPR@[1453; 1455)
- PATH@[1453; 1455)
- PATH_SEGMENT@[1453; 1455)
- NAME_REF@[1453; 1455)
- IDENT@[1453; 1455) "_x"
- WHITESPACE@[1455; 1456) " "
- PLUSEQ@[1456; 1458) "+="
- WHITESPACE@[1458; 1459) " "
- LITERAL@[1459; 1460)
- INT_NUMBER@[1459; 1460) "0"
- R_PAREN@[1460; 1461) ")"
- WHITESPACE@[1461; 1462) " "
- EQEQ@[1462; 1464) "=="
- WHITESPACE@[1464; 1465) " "
- PAREN_EXPR@[1465; 1473)
- L_PAREN@[1465; 1466) "("
- BIN_EXPR@[1466; 1472)
- PATH_EXPR@[1466; 1468)
- PATH@[1466; 1468)
- PATH_SEGMENT@[1466; 1468)
- NAME_REF@[1466; 1468)
- IDENT@[1466; 1468) "_x"
- WHITESPACE@[1468; 1469) " "
- EQ@[1469; 1470) "="
- WHITESPACE@[1470; 1471) " "
- LITERAL@[1471; 1472)
- INT_NUMBER@[1471; 1472) "0"
- R_PAREN@[1472; 1473) ")"
- SEMI@[1473; 1474) ";"
- WHITESPACE@[1474; 1479) "\n "
- LET_STMT@[1479; 1537)
- LET_KW@[1479; 1482) "let"
- WHITESPACE@[1482; 1483) " "
- BIND_PAT@[1483; 1485)
- NAME@[1483; 1485)
- IDENT@[1483; 1485) "_b"
- WHITESPACE@[1485; 1486) " "
- EQ@[1486; 1487) "="
- WHITESPACE@[1487; 1488) " "
- BIN_EXPR@[1488; 1536)
- CALL_EXPR@[1488; 1510)
- PATH_EXPR@[1488; 1492)
- PATH@[1488; 1492)
- PATH_SEGMENT@[1488; 1492)
- NAME_REF@[1488; 1492)
- IDENT@[1488; 1492) "swap"
- ARG_LIST@[1492; 1510)
- L_PAREN@[1492; 1493) "("
- REF_EXPR@[1493; 1500)
- AMP@[1493; 1494) "&"
- MUT_KW@[1494; 1497) "mut"
- WHITESPACE@[1497; 1498) " "
- PATH_EXPR@[1498; 1500)
- PATH@[1498; 1500)
- PATH_SEGMENT@[1498; 1500)
- NAME_REF@[1498; 1500)
- IDENT@[1498; 1500) "_y"
- COMMA@[1500; 1501) ","
- WHITESPACE@[1501; 1502) " "
- REF_EXPR@[1502; 1509)
- AMP@[1502; 1503) "&"
- MUT_KW@[1503; 1506) "mut"
- WHITESPACE@[1506; 1507) " "
- PATH_EXPR@[1507; 1509)
- PATH@[1507; 1509)
- PATH_SEGMENT@[1507; 1509)
- NAME_REF@[1507; 1509)
- IDENT@[1507; 1509) "_z"
- R_PAREN@[1509; 1510) ")"
- WHITESPACE@[1510; 1511) " "
- EQEQ@[1511; 1513) "=="
- WHITESPACE@[1513; 1514) " "
- CALL_EXPR@[1514; 1536)
- PATH_EXPR@[1514; 1518)
- PATH@[1514; 1518)
- PATH_SEGMENT@[1514; 1518)
- NAME_REF@[1514; 1518)
- IDENT@[1514; 1518) "swap"
- ARG_LIST@[1518; 1536)
- L_PAREN@[1518; 1519) "("
- REF_EXPR@[1519; 1526)
- AMP@[1519; 1520) "&"
- MUT_KW@[1520; 1523) "mut"
- WHITESPACE@[1523; 1524) " "
- PATH_EXPR@[1524; 1526)
- PATH@[1524; 1526)
- PATH_SEGMENT@[1524; 1526)
- NAME_REF@[1524; 1526)
- IDENT@[1524; 1526) "_y"
- COMMA@[1526; 1527) ","
- WHITESPACE@[1527; 1528) " "
- REF_EXPR@[1528; 1535)
- AMP@[1528; 1529) "&"
- MUT_KW@[1529; 1532) "mut"
- WHITESPACE@[1532; 1533) " "
- PATH_EXPR@[1533; 1535)
- PATH@[1533; 1535)
- PATH_SEGMENT@[1533; 1535)
- NAME_REF@[1533; 1535)
- IDENT@[1533; 1535) "_z"
- R_PAREN@[1535; 1536) ")"
- SEMI@[1536; 1537) ";"
- WHITESPACE@[1537; 1538) "\n"
- R_CURLY@[1538; 1539) "}"
- WHITESPACE@[1539; 1541) "\n\n"
- FN_DEF@[1541; 1741)
- FN_KW@[1541; 1543) "fn"
- WHITESPACE@[1543; 1544) " "
- NAME@[1544; 1557)
- IDENT@[1544; 1557) "canttouchthis"
- PARAM_LIST@[1557; 1559)
- L_PAREN@[1557; 1558) "("
- R_PAREN@[1558; 1559) ")"
- WHITESPACE@[1559; 1560) " "
- RET_TYPE@[1560; 1568)
- THIN_ARROW@[1560; 1562) "->"
- WHITESPACE@[1562; 1563) " "
- PATH_TYPE@[1563; 1568)
- PATH@[1563; 1568)
- PATH_SEGMENT@[1563; 1568)
- NAME_REF@[1563; 1568)
- IDENT@[1563; 1568) "usize"
- WHITESPACE@[1568; 1569) " "
- BLOCK@[1569; 1741)
- L_CURLY@[1569; 1570) "{"
- WHITESPACE@[1570; 1575) "\n "
- FN_DEF@[1575; 1598)
- FN_KW@[1575; 1577) "fn"
- WHITESPACE@[1577; 1578) " "
- NAME@[1578; 1579)
- IDENT@[1578; 1579) "p"
- PARAM_LIST@[1579; 1581)
- L_PAREN@[1579; 1580) "("
- R_PAREN@[1580; 1581) ")"
- WHITESPACE@[1581; 1582) " "
- RET_TYPE@[1582; 1589)
- THIN_ARROW@[1582; 1584) "->"
- WHITESPACE@[1584; 1585) " "
- PATH_TYPE@[1585; 1589)
- PATH@[1585; 1589)
- PATH_SEGMENT@[1585; 1589)
- NAME_REF@[1585; 1589)
- IDENT@[1585; 1589) "bool"
- WHITESPACE@[1589; 1590) " "
- BLOCK@[1590; 1598)
- L_CURLY@[1590; 1591) "{"
- WHITESPACE@[1591; 1592) " "
- LITERAL@[1592; 1596)
- TRUE_KW@[1592; 1596) "true"
- WHITESPACE@[1596; 1597) " "
- R_CURLY@[1597; 1598) "}"
- WHITESPACE@[1598; 1603) "\n "
- LET_STMT@[1603; 1648)
- LET_KW@[1603; 1606) "let"
- WHITESPACE@[1606; 1607) " "
- BIND_PAT@[1607; 1609)
- NAME@[1607; 1609)
- IDENT@[1607; 1609) "_a"
- WHITESPACE@[1609; 1610) " "
- EQ@[1610; 1611) "="
- WHITESPACE@[1611; 1612) " "
- PAREN_EXPR@[1612; 1647)
- L_PAREN@[1612; 1613) "("
- BIN_EXPR@[1613; 1646)
- MACRO_CALL@[1613; 1628)
- PATH@[1613; 1619)
- PATH_SEGMENT@[1613; 1619)
- NAME_REF@[1613; 1619)
- IDENT@[1613; 1619) "assert"
- EXCL@[1619; 1620) "!"
- TOKEN_TREE@[1620; 1628)
- L_PAREN@[1620; 1621) "("
- TOKEN_TREE@[1621; 1627)
- L_PAREN@[1621; 1622) "("
- TRUE_KW@[1622; 1626) "true"
- R_PAREN@[1626; 1627) ")"
- R_PAREN@[1627; 1628) ")"
- WHITESPACE@[1628; 1629) " "
- EQEQ@[1629; 1631) "=="
- WHITESPACE@[1631; 1632) " "
- PAREN_EXPR@[1632; 1646)
- L_PAREN@[1632; 1633) "("
- MACRO_CALL@[1633; 1645)
- PATH@[1633; 1639)
- PATH_SEGMENT@[1633; 1639)
- NAME_REF@[1633; 1639)
- IDENT@[1633; 1639) "assert"
- EXCL@[1639; 1640) "!"
- TOKEN_TREE@[1640; 1645)
- L_PAREN@[1640; 1641) "("
- IDENT@[1641; 1642) "p"
- TOKEN_TREE@[1642; 1644)
- L_PAREN@[1642; 1643) "("
- R_PAREN@[1643; 1644) ")"
- R_PAREN@[1644; 1645) ")"
- R_PAREN@[1645; 1646) ")"
- R_PAREN@[1646; 1647) ")"
- SEMI@[1647; 1648) ";"
- WHITESPACE@[1648; 1653) "\n "
- LET_STMT@[1653; 1685)
- LET_KW@[1653; 1656) "let"
- WHITESPACE@[1656; 1657) " "
- BIND_PAT@[1657; 1659)
- NAME@[1657; 1659)
- IDENT@[1657; 1659) "_c"
- WHITESPACE@[1659; 1660) " "
- EQ@[1660; 1661) "="
- WHITESPACE@[1661; 1662) " "
- PAREN_EXPR@[1662; 1684)
- L_PAREN@[1662; 1663) "("
- BIN_EXPR@[1663; 1683)
- MACRO_CALL@[1663; 1677)
- PATH@[1663; 1669)
- PATH_SEGMENT@[1663; 1669)
- NAME_REF@[1663; 1669)
- IDENT@[1663; 1669) "assert"
- EXCL@[1669; 1670) "!"
- TOKEN_TREE@[1670; 1677)
- L_PAREN@[1670; 1671) "("
- TOKEN_TREE@[1671; 1676)
- L_PAREN@[1671; 1672) "("
- IDENT@[1672; 1673) "p"
- TOKEN_TREE@[1673; 1675)
- L_PAREN@[1673; 1674) "("
- R_PAREN@[1674; 1675) ")"
- R_PAREN@[1675; 1676) ")"
- R_PAREN@[1676; 1677) ")"
- WHITESPACE@[1677; 1678) " "
- EQEQ@[1678; 1680) "=="
- WHITESPACE@[1680; 1681) " "
- TUPLE_EXPR@[1681; 1683)
- L_PAREN@[1681; 1682) "("
- R_PAREN@[1682; 1683) ")"
- R_PAREN@[1683; 1684) ")"
- SEMI@[1684; 1685) ";"
- WHITESPACE@[1685; 1690) "\n "
- LET_STMT@[1690; 1739)
- LET_KW@[1690; 1693) "let"
- WHITESPACE@[1693; 1694) " "
- BIND_PAT@[1694; 1696)
- NAME@[1694; 1696)
- IDENT@[1694; 1696) "_b"
- COLON@[1696; 1697) ":"
- WHITESPACE@[1697; 1698) " "
- PATH_TYPE@[1698; 1702)
- PATH@[1698; 1702)
- PATH_SEGMENT@[1698; 1702)
- NAME_REF@[1698; 1702)
- IDENT@[1698; 1702) "bool"
- WHITESPACE@[1702; 1703) " "
- EQ@[1703; 1704) "="
- WHITESPACE@[1704; 1705) " "
- PAREN_EXPR@[1705; 1738)
- L_PAREN@[1705; 1706) "("
- BIN_EXPR@[1706; 1737)
- MACRO_CALL@[1706; 1723)
- PATH@[1706; 1713)
- PATH_SEGMENT@[1706; 1713)
- NAME_REF@[1706; 1713)
- IDENT@[1706; 1713) "println"
- EXCL@[1713; 1714) "!"
- TOKEN_TREE@[1714; 1723)
- L_PAREN@[1714; 1715) "("
- STRING@[1715; 1719) "\"{}\""
- COMMA@[1719; 1720) ","
- WHITESPACE@[1720; 1721) " "
- INT_NUMBER@[1721; 1722) "0"
- R_PAREN@[1722; 1723) ")"
- WHITESPACE@[1723; 1724) " "
- EQEQ@[1724; 1726) "=="
- WHITESPACE@[1726; 1727) " "
- PAREN_EXPR@[1727; 1737)
- L_PAREN@[1727; 1728) "("
- RETURN_EXPR@[1728; 1736)
- RETURN_KW@[1728; 1734) "return"
- WHITESPACE@[1734; 1735) " "
- LITERAL@[1735; 1736)
- INT_NUMBER@[1735; 1736) "0"
- R_PAREN@[1736; 1737) ")"
- R_PAREN@[1737; 1738) ")"
- SEMI@[1738; 1739) ";"
- WHITESPACE@[1739; 1740) "\n"
- R_CURLY@[1740; 1741) "}"
- WHITESPACE@[1741; 1743) "\n\n"
- FN_DEF@[1743; 1904)
- FN_KW@[1743; 1745) "fn"
- WHITESPACE@[1745; 1746) " "
- NAME@[1746; 1755)
- IDENT@[1746; 1755) "angrydome"
- PARAM_LIST@[1755; 1757)
- L_PAREN@[1755; 1756) "("
- R_PAREN@[1756; 1757) ")"
- WHITESPACE@[1757; 1758) " "
- BLOCK@[1758; 1904)
- L_CURLY@[1758; 1759) "{"
- WHITESPACE@[1759; 1764) "\n "
- EXPR_STMT@[1764; 1785)
- LOOP_EXPR@[1764; 1785)
- LOOP_KW@[1764; 1768) "loop"
- WHITESPACE@[1768; 1769) " "
- BLOCK@[1769; 1785)
- L_CURLY@[1769; 1770) "{"
- WHITESPACE@[1770; 1771) " "
- IF_EXPR@[1771; 1783)
- IF_KW@[1771; 1773) "if"
- WHITESPACE@[1773; 1774) " "
- CONDITION@[1774; 1779)
- BREAK_EXPR@[1774; 1779)
- BREAK_KW@[1774; 1779) "break"
- WHITESPACE@[1779; 1780) " "
- BLOCK@[1780; 1783)
- L_CURLY@[1780; 1781) "{"
- WHITESPACE@[1781; 1782) " "
- R_CURLY@[1782; 1783) "}"
- WHITESPACE@[1783; 1784) " "
- R_CURLY@[1784; 1785) "}"
- WHITESPACE@[1785; 1790) "\n "
- LET_STMT@[1790; 1804)
- LET_KW@[1790; 1793) "let"
- WHITESPACE@[1793; 1794) " "
- BIND_PAT@[1794; 1799)
- MUT_KW@[1794; 1797) "mut"
- WHITESPACE@[1797; 1798) " "
- NAME@[1798; 1799)
- IDENT@[1798; 1799) "i"
- WHITESPACE@[1799; 1800) " "
- EQ@[1800; 1801) "="
- WHITESPACE@[1801; 1802) " "
- LITERAL@[1802; 1803)
- INT_NUMBER@[1802; 1803) "0"
- SEMI@[1803; 1804) ";"
- WHITESPACE@[1804; 1809) "\n "
- LOOP_EXPR@[1809; 1902)
- LOOP_KW@[1809; 1813) "loop"
- WHITESPACE@[1813; 1814) " "
- BLOCK@[1814; 1902)
- L_CURLY@[1814; 1815) "{"
- WHITESPACE@[1815; 1816) " "
- EXPR_STMT@[1816; 1823)
- BIN_EXPR@[1816; 1822)
- PATH_EXPR@[1816; 1817)
- PATH@[1816; 1817)
- PATH_SEGMENT@[1816; 1817)
- NAME_REF@[1816; 1817)
- IDENT@[1816; 1817) "i"
- WHITESPACE@[1817; 1818) " "
- PLUSEQ@[1818; 1820) "+="
- WHITESPACE@[1820; 1821) " "
- LITERAL@[1821; 1822)
- INT_NUMBER@[1821; 1822) "1"
- SEMI@[1822; 1823) ";"
- WHITESPACE@[1823; 1824) " "
- EXPR_STMT@[1824; 1887)
- IF_EXPR@[1824; 1887)
- IF_KW@[1824; 1826) "if"
- WHITESPACE@[1826; 1827) " "
- CONDITION@[1827; 1833)
- BIN_EXPR@[1827; 1833)
- PATH_EXPR@[1827; 1828)
- PATH@[1827; 1828)
- PATH_SEGMENT@[1827; 1828)
- NAME_REF@[1827; 1828)
- IDENT@[1827; 1828) "i"
- WHITESPACE@[1828; 1829) " "
- EQEQ@[1829; 1831) "=="
- WHITESPACE@[1831; 1832) " "
- LITERAL@[1832; 1833)
- INT_NUMBER@[1832; 1833) "1"
- WHITESPACE@[1833; 1834) " "
- BLOCK@[1834; 1887)
- L_CURLY@[1834; 1835) "{"
- WHITESPACE@[1835; 1836) " "
- MATCH_EXPR@[1836; 1885)
- MATCH_KW@[1836; 1841) "match"
- WHITESPACE@[1841; 1842) " "
- PAREN_EXPR@[1842; 1852)
- L_PAREN@[1842; 1843) "("
- CONTINUE_EXPR@[1843; 1851)
- CONTINUE_KW@[1843; 1851) "continue"
- R_PAREN@[1851; 1852) ")"
- WHITESPACE@[1852; 1853) " "
- MATCH_ARM_LIST@[1853; 1885)
- L_CURLY@[1853; 1854) "{"
- WHITESPACE@[1854; 1855) " "
- MATCH_ARM@[1855; 1863)
- LITERAL_PAT@[1855; 1856)
- LITERAL@[1855; 1856)
- INT_NUMBER@[1855; 1856) "1"
- WHITESPACE@[1856; 1857) " "
- FAT_ARROW@[1857; 1859) "=>"
- WHITESPACE@[1859; 1860) " "
- BLOCK_EXPR@[1860; 1863)
- BLOCK@[1860; 1863)
- L_CURLY@[1860; 1861) "{"
- WHITESPACE@[1861; 1862) " "
- R_CURLY@[1862; 1863) "}"
- COMMA@[1863; 1864) ","
- WHITESPACE@[1864; 1865) " "
- MATCH_ARM@[1865; 1883)
- PLACEHOLDER_PAT@[1865; 1866)
- UNDERSCORE@[1865; 1866) "_"
- WHITESPACE@[1866; 1867) " "
- FAT_ARROW@[1867; 1869) "=>"
- WHITESPACE@[1869; 1870) " "
- MACRO_CALL@[1870; 1883)
- PATH@[1870; 1875)
- PATH_SEGMENT@[1870; 1875)
- NAME_REF@[1870; 1875)
- IDENT@[1870; 1875) "panic"
- EXCL@[1875; 1876) "!"
- TOKEN_TREE@[1876; 1883)
- L_PAREN@[1876; 1877) "("
- STRING@[1877; 1882) "\"wat\""
- R_PAREN@[1882; 1883) ")"
- WHITESPACE@[1883; 1884) " "
- R_CURLY@[1884; 1885) "}"
- WHITESPACE@[1885; 1886) " "
- R_CURLY@[1886; 1887) "}"
- WHITESPACE@[1887; 1894) "\n "
- EXPR_STMT@[1894; 1900)
- BREAK_EXPR@[1894; 1899)
- BREAK_KW@[1894; 1899) "break"
- SEMI@[1899; 1900) ";"
- WHITESPACE@[1900; 1901) " "
- R_CURLY@[1901; 1902) "}"
- WHITESPACE@[1902; 1903) "\n"
- R_CURLY@[1903; 1904) "}"
- WHITESPACE@[1904; 1906) "\n\n"
- FN_DEF@[1906; 1960)
- FN_KW@[1906; 1908) "fn"
- WHITESPACE@[1908; 1909) " "
- NAME@[1909; 1921)
- IDENT@[1909; 1921) "evil_lincoln"
- PARAM_LIST@[1921; 1923)
- L_PAREN@[1921; 1922) "("
- R_PAREN@[1922; 1923) ")"
- WHITESPACE@[1923; 1924) " "
- BLOCK@[1924; 1960)
- L_CURLY@[1924; 1925) "{"
- WHITESPACE@[1925; 1926) " "
- LET_STMT@[1926; 1958)
- LET_KW@[1926; 1929) "let"
- WHITESPACE@[1929; 1930) " "
- BIND_PAT@[1930; 1935)
- NAME@[1930; 1935)
- IDENT@[1930; 1935) "_evil"
- WHITESPACE@[1935; 1936) " "
- EQ@[1936; 1937) "="
- WHITESPACE@[1937; 1938) " "
- MACRO_CALL@[1938; 1957)
- PATH@[1938; 1945)
- PATH_SEGMENT@[1938; 1945)
- NAME_REF@[1938; 1945)
- IDENT@[1938; 1945) "println"
- EXCL@[1945; 1946) "!"
- TOKEN_TREE@[1946; 1957)
- L_PAREN@[1946; 1947) "("
- STRING@[1947; 1956) "\"lincoln\""
- R_PAREN@[1956; 1957) ")"
- SEMI@[1957; 1958) ";"
- WHITESPACE@[1958; 1959) " "
- R_CURLY@[1959; 1960) "}"
- WHITESPACE@[1960; 1962) "\n\n"
- FN_DEF@[1962; 2198)
- FN_KW@[1962; 1964) "fn"
- WHITESPACE@[1964; 1965) " "
- NAME@[1965; 1969)
- IDENT@[1965; 1969) "dots"
- PARAM_LIST@[1969; 1971)
- L_PAREN@[1969; 1970) "("
- R_PAREN@[1970; 1971) ")"
- WHITESPACE@[1971; 1972) " "
- BLOCK@[1972; 2198)
- L_CURLY@[1972; 1973) "{"
- WHITESPACE@[1973; 1978) "\n "
- EXPR_STMT@[1978; 2196)
- MACRO_CALL@[1978; 2195)
- PATH@[1978; 1987)
- PATH_SEGMENT@[1978; 1987)
- NAME_REF@[1978; 1987)
- IDENT@[1978; 1987) "assert_eq"
- EXCL@[1987; 1988) "!"
- TOKEN_TREE@[1988; 2195)
- L_PAREN@[1988; 1989) "("
- IDENT@[1989; 1995) "String"
- COLON@[1995; 1996) ":"
- COLON@[1996; 1997) ":"
- IDENT@[1997; 2001) "from"
- TOKEN_TREE@[2001; 2055)
- L_PAREN@[2001; 2002) "("
- STRING@[2002; 2054) "\".................... ..."
- R_PAREN@[2054; 2055) ")"
- COMMA@[2055; 2056) ","
- WHITESPACE@[2056; 2072) "\n "
- IDENT@[2072; 2078) "format"
- EXCL@[2078; 2079) "!"
- TOKEN_TREE@[2079; 2194)
- L_PAREN@[2079; 2080) "("
- STRING@[2080; 2086) "\"{:?}\""
- COMMA@[2086; 2087) ","
- WHITESPACE@[2087; 2088) " "
- DOT@[2088; 2089) "."
- DOT@[2089; 2090) "."
- WHITESPACE@[2090; 2091) " "
- DOT@[2091; 2092) "."
- DOT@[2092; 2093) "."
- WHITESPACE@[2093; 2094) " "
- DOT@[2094; 2095) "."
- DOT@[2095; 2096) "."
- WHITESPACE@[2096; 2097) " "
- DOT@[2097; 2098) "."
- DOT@[2098; 2099) "."
- WHITESPACE@[2099; 2100) " "
- DOT@[2100; 2101) "."
- DOT@[2101; 2102) "."
- WHITESPACE@[2102; 2103) " "
- DOT@[2103; 2104) "."
- DOT@[2104; 2105) "."
- WHITESPACE@[2105; 2106) " "
- DOT@[2106; 2107) "."
- DOT@[2107; 2108) "."
- WHITESPACE@[2108; 2109) " "
- DOT@[2109; 2110) "."
- DOT@[2110; 2111) "."
- WHITESPACE@[2111; 2112) " "
- DOT@[2112; 2113) "."
- DOT@[2113; 2114) "."
- WHITESPACE@[2114; 2115) " "
- DOT@[2115; 2116) "."
- DOT@[2116; 2117) "."
- WHITESPACE@[2117; 2118) " "
- DOT@[2118; 2119) "."
- DOT@[2119; 2120) "."
- WHITESPACE@[2120; 2121) " "
- DOT@[2121; 2122) "."
- DOT@[2122; 2123) "."
- WHITESPACE@[2123; 2124) " "
- DOT@[2124; 2125) "."
- DOT@[2125; 2126) "."
- WHITESPACE@[2126; 2158) "\n ..."
- DOT@[2158; 2159) "."
- DOT@[2159; 2160) "."
- WHITESPACE@[2160; 2161) " "
- DOT@[2161; 2162) "."
- DOT@[2162; 2163) "."
- WHITESPACE@[2163; 2164) " "
- DOT@[2164; 2165) "."
- DOT@[2165; 2166) "."
- WHITESPACE@[2166; 2167) " "
- DOT@[2167; 2168) "."
- DOT@[2168; 2169) "."
- WHITESPACE@[2169; 2170) " "
- DOT@[2170; 2171) "."
- DOT@[2171; 2172) "."
- WHITESPACE@[2172; 2173) " "
- DOT@[2173; 2174) "."
- DOT@[2174; 2175) "."
- WHITESPACE@[2175; 2176) " "
- DOT@[2176; 2177) "."
- DOT@[2177; 2178) "."
- WHITESPACE@[2178; 2179) " "
- DOT@[2179; 2180) "."
- DOT@[2180; 2181) "."
- WHITESPACE@[2181; 2182) " "
- DOT@[2182; 2183) "."
- DOT@[2183; 2184) "."
- WHITESPACE@[2184; 2185) " "
- DOT@[2185; 2186) "."
- DOT@[2186; 2187) "."
- WHITESPACE@[2187; 2188) " "
- DOT@[2188; 2189) "."
- DOT@[2189; 2190) "."
- WHITESPACE@[2190; 2191) " "
- DOT@[2191; 2192) "."
- DOT@[2192; 2193) "."
- R_PAREN@[2193; 2194) ")"
- R_PAREN@[2194; 2195) ")"
- SEMI@[2195; 2196) ";"
- WHITESPACE@[2196; 2197) "\n"
- R_CURLY@[2197; 2198) "}"
- WHITESPACE@[2198; 2200) "\n\n"
- FN_DEF@[2200; 2693)
- FN_KW@[2200; 2202) "fn"
- WHITESPACE@[2202; 2203) " "
- NAME@[2203; 2205)
- IDENT@[2203; 2205) "u8"
- PARAM_LIST@[2205; 2213)
- L_PAREN@[2205; 2206) "("
- PARAM@[2206; 2212)
- BIND_PAT@[2206; 2208)
- NAME@[2206; 2208)
- IDENT@[2206; 2208) "u8"
- COLON@[2208; 2209) ":"
- WHITESPACE@[2209; 2210) " "
- PATH_TYPE@[2210; 2212)
- PATH@[2210; 2212)
- PATH_SEGMENT@[2210; 2212)
- NAME_REF@[2210; 2212)
- IDENT@[2210; 2212) "u8"
- R_PAREN@[2212; 2213) ")"
- WHITESPACE@[2213; 2214) " "
- BLOCK@[2214; 2693)
- L_CURLY@[2214; 2215) "{"
- WHITESPACE@[2215; 2220) "\n "
- IF_EXPR@[2220; 2691)
- IF_KW@[2220; 2222) "if"
- WHITESPACE@[2222; 2223) " "
- CONDITION@[2223; 2232)
- BIN_EXPR@[2223; 2232)
- PATH_EXPR@[2223; 2225)
- PATH@[2223; 2225)
- PATH_SEGMENT@[2223; 2225)
- NAME_REF@[2223; 2225)
- IDENT@[2223; 2225) "u8"
- WHITESPACE@[2225; 2226) " "
- NEQ@[2226; 2228) "!="
- WHITESPACE@[2228; 2229) " "
- LITERAL@[2229; 2232)
- INT_NUMBER@[2229; 2232) "0u8"
- WHITESPACE@[2232; 2233) " "
- BLOCK@[2233; 2691)
- L_CURLY@[2233; 2234) "{"
- WHITESPACE@[2234; 2243) "\n "
- EXPR_STMT@[2243; 2685)
- MACRO_CALL@[2243; 2684)
- PATH@[2243; 2252)
- PATH_SEGMENT@[2243; 2252)
- NAME_REF@[2243; 2252)
- IDENT@[2243; 2252) "assert_eq"
- EXCL@[2252; 2253) "!"
- TOKEN_TREE@[2253; 2684)
- L_PAREN@[2253; 2254) "("
- INT_NUMBER@[2254; 2257) "8u8"
- COMMA@[2257; 2258) ","
- WHITESPACE@[2258; 2259) " "
- TOKEN_TREE@[2259; 2683)
- L_CURLY@[2259; 2260) "{"
- WHITESPACE@[2260; 2273) "\n "
- IDENT@[2273; 2284) "macro_rules"
- EXCL@[2284; 2285) "!"
- WHITESPACE@[2285; 2286) " "
- IDENT@[2286; 2288) "u8"
- WHITESPACE@[2288; 2289) " "
- TOKEN_TREE@[2289; 2567)
- L_CURLY@[2289; 2290) "{"
- WHITESPACE@[2290; 2307) "\n "
- TOKEN_TREE@[2307; 2311)
- L_PAREN@[2307; 2308) "("
- IDENT@[2308; 2310) "u8"
- R_PAREN@[2310; 2311) ")"
- WHITESPACE@[2311; 2312) " "
- EQ@[2312; 2313) "="
- R_ANGLE@[2313; 2314) ">"
- WHITESPACE@[2314; 2315) " "
- TOKEN_TREE@[2315; 2552)
- L_CURLY@[2315; 2316) "{"
- WHITESPACE@[2316; 2337) "\n "
- MOD_KW@[2337; 2340) "mod"
- WHITESPACE@[2340; 2341) " "
- IDENT@[2341; 2343) "u8"
- WHITESPACE@[2343; 2344) " "
- TOKEN_TREE@[2344; 2534)
- L_CURLY@[2344; 2345) "{"
- WHITESPACE@[2345; 2370) "\n ..."
- PUB_KW@[2370; 2373) "pub"
- WHITESPACE@[2373; 2374) " "
- FN_KW@[2374; 2376) "fn"
- WHITESPACE@[2376; 2377) " "
- IDENT@[2377; 2379) "u8"
- L_ANGLE@[2379; 2380) "<"
- LIFETIME@[2380; 2383) "\'u8"
- COLON@[2383; 2384) ":"
- WHITESPACE@[2384; 2385) " "
- LIFETIME@[2385; 2388) "\'u8"
- WHITESPACE@[2388; 2389) " "
- PLUS@[2389; 2390) "+"
- WHITESPACE@[2390; 2391) " "
- LIFETIME@[2391; 2394) "\'u8"
- R_ANGLE@[2394; 2395) ">"
- TOKEN_TREE@[2395; 2408)
- L_PAREN@[2395; 2396) "("
- IDENT@[2396; 2398) "u8"
- COLON@[2398; 2399) ":"
- WHITESPACE@[2399; 2400) " "
- AMP@[2400; 2401) "&"
- LIFETIME@[2401; 2404) "\'u8"
- WHITESPACE@[2404; 2405) " "
- IDENT@[2405; 2407) "u8"
- R_PAREN@[2407; 2408) ")"
- WHITESPACE@[2408; 2409) " "
- MINUS@[2409; 2410) "-"
- R_ANGLE@[2410; 2411) ">"
- WHITESPACE@[2411; 2412) " "
- AMP@[2412; 2413) "&"
- LIFETIME@[2413; 2416) "\'u8"
- WHITESPACE@[2416; 2417) " "
- IDENT@[2417; 2419) "u8"
- WHITESPACE@[2419; 2420) " "
- TOKEN_TREE@[2420; 2512)
- L_CURLY@[2420; 2421) "{"
- WHITESPACE@[2421; 2450) "\n ..."
- STRING@[2450; 2454) "\"u8\""
- SEMI@[2454; 2455) ";"
- WHITESPACE@[2455; 2484) "\n ..."
- IDENT@[2484; 2486) "u8"
- WHITESPACE@[2486; 2511) "\n ..."
- R_CURLY@[2511; 2512) "}"
- WHITESPACE@[2512; 2533) "\n "
- R_CURLY@[2533; 2534) "}"
- WHITESPACE@[2534; 2551) "\n "
- R_CURLY@[2551; 2552) "}"
- SEMI@[2552; 2553) ";"
- WHITESPACE@[2553; 2566) "\n "
- R_CURLY@[2566; 2567) "}"
- WHITESPACE@[2567; 2581) "\n\n "
- IDENT@[2581; 2583) "u8"
- EXCL@[2583; 2584) "!"
- TOKEN_TREE@[2584; 2588)
- L_PAREN@[2584; 2585) "("
- IDENT@[2585; 2587) "u8"
- R_PAREN@[2587; 2588) ")"
- SEMI@[2588; 2589) ";"
- WHITESPACE@[2589; 2602) "\n "
- LET_KW@[2602; 2605) "let"
- WHITESPACE@[2605; 2606) " "
- AMP@[2606; 2607) "&"
- IDENT@[2607; 2609) "u8"
- COLON@[2609; 2610) ":"
- WHITESPACE@[2610; 2611) " "
- AMP@[2611; 2612) "&"
- IDENT@[2612; 2614) "u8"
- WHITESPACE@[2614; 2615) " "
- EQ@[2615; 2616) "="
- WHITESPACE@[2616; 2617) " "
- IDENT@[2617; 2619) "u8"
- COLON@[2619; 2620) ":"
- COLON@[2620; 2621) ":"
- IDENT@[2621; 2623) "u8"
- TOKEN_TREE@[2623; 2629)
- L_PAREN@[2623; 2624) "("
- AMP@[2624; 2625) "&"
- INT_NUMBER@[2625; 2628) "8u8"
- R_PAREN@[2628; 2629) ")"
- SEMI@[2629; 2630) ";"
- WHITESPACE@[2630; 2643) "\n "
- CRATE_KW@[2643; 2648) "crate"
- COLON@[2648; 2649) ":"
- COLON@[2649; 2650) ":"
- IDENT@[2650; 2652) "u8"
- TOKEN_TREE@[2652; 2657)
- L_PAREN@[2652; 2653) "("
- INT_NUMBER@[2653; 2656) "0u8"
- R_PAREN@[2656; 2657) ")"
- SEMI@[2657; 2658) ";"
- WHITESPACE@[2658; 2671) "\n "
- IDENT@[2671; 2673) "u8"
- WHITESPACE@[2673; 2682) "\n "
- R_CURLY@[2682; 2683) "}"
- R_PAREN@[2683; 2684) ")"
- SEMI@[2684; 2685) ";"
- WHITESPACE@[2685; 2690) "\n "
- R_CURLY@[2690; 2691) "}"
- WHITESPACE@[2691; 2692) "\n"
- R_CURLY@[2692; 2693) "}"
- WHITESPACE@[2693; 2695) "\n\n"
- FN_DEF@[2695; 2832)
- FN_KW@[2695; 2697) "fn"
- WHITESPACE@[2697; 2698) " "
- NAME@[2698; 2703)
- IDENT@[2698; 2703) "fishy"
- PARAM_LIST@[2703; 2705)
- L_PAREN@[2703; 2704) "("
- R_PAREN@[2704; 2705) ")"
- WHITESPACE@[2705; 2706) " "
- BLOCK@[2706; 2832)
- L_CURLY@[2706; 2707) "{"
- WHITESPACE@[2707; 2712) "\n "
- EXPR_STMT@[2712; 2830)
- MACRO_CALL@[2712; 2829)
- PATH@[2712; 2721)
- PATH_SEGMENT@[2712; 2721)
- NAME_REF@[2712; 2721)
- IDENT@[2712; 2721) "assert_eq"
- EXCL@[2721; 2722) "!"
- TOKEN_TREE@[2722; 2829)
- L_PAREN@[2722; 2723) "("
- IDENT@[2723; 2729) "String"
- COLON@[2729; 2730) ":"
- COLON@[2730; 2731) ":"
- IDENT@[2731; 2735) "from"
- TOKEN_TREE@[2735; 2742)
- L_PAREN@[2735; 2736) "("
- STRING@[2736; 2741) "\"><>\""
- R_PAREN@[2741; 2742) ")"
- COMMA@[2742; 2743) ","
- WHITESPACE@[2743; 2759) "\n "
- IDENT@[2759; 2765) "String"
- COLON@[2765; 2766) ":"
- COLON@[2766; 2767) ":"
- L_ANGLE@[2767; 2768) "<"
- R_ANGLE@[2768; 2769) ">"
- COLON@[2769; 2770) ":"
- COLON@[2770; 2771) ":"
- IDENT@[2771; 2775) "from"
- COLON@[2775; 2776) ":"
- COLON@[2776; 2777) ":"
- L_ANGLE@[2777; 2778) "<"
- R_ANGLE@[2778; 2779) ">"
- TOKEN_TREE@[2779; 2786)
- L_PAREN@[2779; 2780) "("
- STRING@[2780; 2785) "\"><>\""
- R_PAREN@[2785; 2786) ")"
- DOT@[2786; 2787) "."
- IDENT@[2787; 2792) "chars"
- COLON@[2792; 2793) ":"
- COLON@[2793; 2794) ":"
- L_ANGLE@[2794; 2795) "<"
- R_ANGLE@[2795; 2796) ">"
- TOKEN_TREE@[2796; 2798)
- L_PAREN@[2796; 2797) "("
- R_PAREN@[2797; 2798) ")"
- DOT@[2798; 2799) "."
- IDENT@[2799; 2802) "rev"
- COLON@[2802; 2803) ":"
- COLON@[2803; 2804) ":"
- L_ANGLE@[2804; 2805) "<"
- R_ANGLE@[2805; 2806) ">"
- TOKEN_TREE@[2806; 2808)
- L_PAREN@[2806; 2807) "("
- R_PAREN@[2807; 2808) ")"
- DOT@[2808; 2809) "."
- IDENT@[2809; 2816) "collect"
- COLON@[2816; 2817) ":"
- COLON@[2817; 2818) ":"
- L_ANGLE@[2818; 2819) "<"
- IDENT@[2819; 2825) "String"
- R_ANGLE@[2825; 2826) ">"
- TOKEN_TREE@[2826; 2828)
- L_PAREN@[2826; 2827) "("
- R_PAREN@[2827; 2828) ")"
- R_PAREN@[2828; 2829) ")"
- SEMI@[2829; 2830) ";"
- WHITESPACE@[2830; 2831) "\n"
- R_CURLY@[2831; 2832) "}"
- WHITESPACE@[2832; 2834) "\n\n"
- FN_DEF@[2834; 2906)
- FN_KW@[2834; 2836) "fn"
- WHITESPACE@[2836; 2837) " "
- NAME@[2837; 2842)
- IDENT@[2837; 2842) "union"
- PARAM_LIST@[2842; 2844)
- L_PAREN@[2842; 2843) "("
- R_PAREN@[2843; 2844) ")"
- WHITESPACE@[2844; 2845) " "
- BLOCK@[2845; 2906)
- L_CURLY@[2845; 2846) "{"
- WHITESPACE@[2846; 2851) "\n "
- STRUCT_DEF@[2851; 2904)
- UNION_KW@[2851; 2856) "union"
- WHITESPACE@[2856; 2857) " "
- NAME@[2857; 2862)
- IDENT@[2857; 2862) "union"
- TYPE_PARAM_LIST@[2862; 2870)
- L_ANGLE@[2862; 2863) "<"
- LIFETIME_PARAM@[2863; 2869)
- LIFETIME@[2863; 2869) "\'union"
- R_ANGLE@[2869; 2870) ">"
- WHITESPACE@[2870; 2871) " "
- NAMED_FIELD_DEF_LIST@[2871; 2904)
- L_CURLY@[2871; 2872) "{"
- WHITESPACE@[2872; 2873) " "
- NAMED_FIELD_DEF@[2873; 2901)
- NAME@[2873; 2878)
- IDENT@[2873; 2878) "union"
- COLON@[2878; 2879) ":"
- WHITESPACE@[2879; 2880) " "
- REFERENCE_TYPE@[2880; 2901)
- AMP@[2880; 2881) "&"
- LIFETIME@[2881; 2887) "\'union"
- WHITESPACE@[2887; 2888) " "
- PATH_TYPE@[2888; 2901)
- PATH@[2888; 2901)
- PATH_SEGMENT@[2888; 2901)
- NAME_REF@[2888; 2893)
- IDENT@[2888; 2893) "union"
- TYPE_ARG_LIST@[2893; 2901)
- L_ANGLE@[2893; 2894) "<"
- LIFETIME_ARG@[2894; 2900)
- LIFETIME@[2894; 2900) "\'union"
- R_ANGLE@[2900; 2901) ">"
- COMMA@[2901; 2902) ","
- WHITESPACE@[2902; 2903) " "
- R_CURLY@[2903; 2904) "}"
- WHITESPACE@[2904; 2905) "\n"
- R_CURLY@[2905; 2906) "}"
- WHITESPACE@[2906; 2908) "\n\n"
- FN_DEF@[2908; 3042)
- FN_KW@[2908; 2910) "fn"
- WHITESPACE@[2910; 2911) " "
- NAME@[2911; 2929)
- IDENT@[2911; 2929) "special_characters"
- PARAM_LIST@[2929; 2931)
- L_PAREN@[2929; 2930) "("
- R_PAREN@[2930; 2931) ")"
- WHITESPACE@[2931; 2932) " "
- BLOCK@[2932; 3042)
- L_CURLY@[2932; 2933) "{"
- WHITESPACE@[2933; 2938) "\n "
- LET_STMT@[2938; 3021)
- LET_KW@[2938; 2941) "let"
- WHITESPACE@[2941; 2942) " "
- BIND_PAT@[2942; 2945)
- NAME@[2942; 2945)
- IDENT@[2942; 2945) "val"
- WHITESPACE@[2945; 2946) " "
- EQ@[2946; 2947) "="
- WHITESPACE@[2947; 2948) " "
- PREFIX_EXPR@[2948; 3013)
- EXCL@[2948; 2949) "!"
- PAREN_EXPR@[2949; 3013)
- L_PAREN@[2949; 2950) "("
- BIN_EXPR@[2950; 3012)
- CALL_EXPR@[2950; 2995)
- PAREN_EXPR@[2950; 2971)
- L_PAREN@[2950; 2951) "("
- LAMBDA_EXPR@[2951; 2970)
- PARAM_LIST@[2951; 2968)
- PIPE@[2951; 2952) "|"
- PARAM@[2952; 2962)
- TUPLE_PAT@[2952; 2956)
- L_PAREN@[2952; 2953) "("
- DOTDOT@[2953; 2955) ".."
- R_PAREN@[2955; 2956) ")"
- COLON@[2956; 2957) ":"
- TUPLE_TYPE@[2957; 2962)
- L_PAREN@[2957; 2958) "("
- PLACEHOLDER_TYPE@[2958; 2959)
- UNDERSCORE@[2958; 2959) "_"
- COMMA@[2959; 2960) ","
- PLACEHOLDER_TYPE@[2960; 2961)
- UNDERSCORE@[2960; 2961) "_"
- R_PAREN@[2961; 2962) ")"
- COMMA@[2962; 2963) ","
- PARAM@[2963; 2967)
- BIND_PAT@[2963; 2967)
- NAME@[2963; 2965)
- IDENT@[2963; 2965) "__"
- AT@[2965; 2966) "@"
- PLACEHOLDER_PAT@[2966; 2967)
- UNDERSCORE@[2966; 2967) "_"
- PIPE@[2967; 2968) "|"
- PATH_EXPR@[2968; 2970)
- PATH@[2968; 2970)
- PATH_SEGMENT@[2968; 2970)
- NAME_REF@[2968; 2970)
- IDENT@[2968; 2970) "__"
- R_PAREN@[2970; 2971) ")"
- ARG_LIST@[2971; 2995)
- L_PAREN@[2971; 2972) "("
- TUPLE_EXPR@[2972; 2987)
- L_PAREN@[2972; 2973) "("
- REF_EXPR@[2973; 2979)
- AMP@[2973; 2974) "&"
- PREFIX_EXPR@[2974; 2979)
- STAR@[2974; 2975) "*"
- LITERAL@[2975; 2979)
- STRING@[2975; 2979) "\"\\\\\""
- COMMA@[2979; 2980) ","
- LITERAL@[2980; 2986)
- CHAR@[2980; 2986) "\'🤔\'"
- R_PAREN@[2986; 2987) ")"
- COMMENT@[2987; 2991) "/**/"
- COMMA@[2991; 2992) ","
- BLOCK_EXPR@[2992; 2994)
- BLOCK@[2992; 2994)
- L_CURLY@[2992; 2993) "{"
- R_CURLY@[2993; 2994) "}"
- R_PAREN@[2994; 2995) ")"
- EQEQ@[2995; 2997) "=="
- BLOCK_EXPR@[2997; 3012)
- BLOCK@[2997; 3012)
- L_CURLY@[2997; 2998) "{"
- EXPR_STMT@[2998; 3011)
- REF_EXPR@[2998; 3010)
- AMP@[2998; 2999) "&"
- INDEX_EXPR@[2999; 3010)
- ARRAY_EXPR@[2999; 3006)
- L_BRACK@[2999; 3000) "["
- RANGE_EXPR@[3000; 3005)
- DOTDOTEQ@[3000; 3003) "..="
- RANGE_EXPR@[3003; 3005)
- DOTDOT@[3003; 3005) ".."
- R_BRACK@[3005; 3006) "]"
- L_BRACK@[3006; 3007) "["
- RANGE_EXPR@[3007; 3009)
- DOTDOT@[3007; 3009) ".."
- R_BRACK@[3009; 3010) "]"
- SEMI@[3010; 3011) ";"
- R_CURLY@[3011; 3012) "}"
- R_PAREN@[3012; 3013) ")"
- COMMENT@[3013; 3015) "//"
- WHITESPACE@[3015; 3020) "\n "
- SEMI@[3020; 3021) ";"
- WHITESPACE@[3021; 3026) "\n "
- EXPR_STMT@[3026; 3040)
- MACRO_CALL@[3026; 3039)
- PATH@[3026; 3032)
- PATH_SEGMENT@[3026; 3032)
- NAME_REF@[3026; 3032)
- IDENT@[3026; 3032) "assert"
- EXCL@[3032; 3033) "!"
- TOKEN_TREE@[3033; 3039)
- L_PAREN@[3033; 3034) "("
- EXCL@[3034; 3035) "!"
- IDENT@[3035; 3038) "val"
- R_PAREN@[3038; 3039) ")"
- SEMI@[3039; 3040) ";"
- WHITESPACE@[3040; 3041) "\n"
- R_CURLY@[3041; 3042) "}"
- WHITESPACE@[3042; 3044) "\n\n"
- FN_DEF@[3044; 3514)
- FN_KW@[3044; 3046) "fn"
- WHITESPACE@[3046; 3047) " "
- NAME@[3047; 3057)
- IDENT@[3047; 3057) "punch_card"
- PARAM_LIST@[3057; 3059)
- L_PAREN@[3057; 3058) "("
- R_PAREN@[3058; 3059) ")"
- WHITESPACE@[3059; 3060) " "
- RET_TYPE@[3060; 3083)
- THIN_ARROW@[3060; 3062) "->"
- WHITESPACE@[3062; 3063) " "
- IMPL_TRAIT_TYPE@[3063; 3083)
- IMPL_KW@[3063; 3067) "impl"
- WHITESPACE@[3067; 3068) " "
- TYPE_BOUND_LIST@[3068; 3083)
- TYPE_BOUND@[3068; 3083)
- PATH_TYPE@[3068; 3083)
- PATH@[3068; 3083)
- PATH@[3068; 3076)
- PATH@[3068; 3071)
- PATH_SEGMENT@[3068; 3071)
- NAME_REF@[3068; 3071)
- IDENT@[3068; 3071) "std"
- COLONCOLON@[3071; 3073) "::"
- PATH_SEGMENT@[3073; 3076)
- NAME_REF@[3073; 3076)
- IDENT@[3073; 3076) "fmt"
- COLONCOLON@[3076; 3078) "::"
- PATH_SEGMENT@[3078; 3083)
- NAME_REF@[3078; 3083)
- IDENT@[3078; 3083) "Debug"
- WHITESPACE@[3083; 3084) " "
- BLOCK@[3084; 3514)
- L_CURLY@[3084; 3085) "{"
- WHITESPACE@[3085; 3090) "\n "
- RANGE_EXPR@[3090; 3512)
- DOTDOTEQ@[3090; 3093) "..="
- RANGE_EXPR@[3093; 3512)
- DOTDOTEQ@[3093; 3096) "..="
- RANGE_EXPR@[3096; 3512)
- DOTDOT@[3096; 3098) ".."
- WHITESPACE@[3098; 3099) " "
- RANGE_EXPR@[3099; 3512)
- DOTDOT@[3099; 3101) ".."
- WHITESPACE@[3101; 3105) " "
- RANGE_EXPR@[3105; 3512)
- DOTDOT@[3105; 3107) ".."
- WHITESPACE@[3107; 3108) " "
- RANGE_EXPR@[3108; 3512)
- DOTDOT@[3108; 3110) ".."
- WHITESPACE@[3110; 3111) " "
- RANGE_EXPR@[3111; 3512)
- DOTDOT@[3111; 3113) ".."
- WHITESPACE@[3113; 3114) " "
- RANGE_EXPR@[3114; 3512)
- DOTDOT@[3114; 3116) ".."
- WHITESPACE@[3116; 3120) " "
- RANGE_EXPR@[3120; 3512)
- DOTDOT@[3120; 3122) ".."
- WHITESPACE@[3122; 3123) " "
- RANGE_EXPR@[3123; 3512)
- DOTDOT@[3123; 3125) ".."
- WHITESPACE@[3125; 3126) " "
- RANGE_EXPR@[3126; 3512)
- DOTDOT@[3126; 3128) ".."
- WHITESPACE@[3128; 3129) " "
- RANGE_EXPR@[3129; 3512)
- DOTDOT@[3129; 3131) ".."
- WHITESPACE@[3131; 3135) " "
- RANGE_EXPR@[3135; 3512)
- DOTDOT@[3135; 3137) ".."
- WHITESPACE@[3137; 3138) " "
- RANGE_EXPR@[3138; 3512)
- DOTDOTEQ@[3138; 3141) "..="
- RANGE_EXPR@[3141; 3512)
- DOTDOT@[3141; 3143) ".."
- WHITESPACE@[3143; 3144) " "
- RANGE_EXPR@[3144; 3512)
- DOTDOT@[3144; 3146) ".."
- WHITESPACE@[3146; 3151) "\n "
- RANGE_EXPR@[3151; 3512)
- DOTDOTEQ@[3151; 3154) "..="
- RANGE_EXPR@[3154; 3512)
- DOTDOT@[3154; 3156) ".."
- WHITESPACE@[3156; 3157) " "
- RANGE_EXPR@[3157; 3512)
- DOTDOTEQ@[3157; 3160) "..="
- RANGE_EXPR@[3160; 3512)
- DOTDOT@[3160; 3162) ".."
- WHITESPACE@[3162; 3166) " "
- RANGE_EXPR@[3166; 3512)
- DOTDOT@[3166; 3168) ".."
- WHITESPACE@[3168; 3169) " "
- RANGE_EXPR@[3169; 3512)
- DOTDOT@[3169; 3171) ".."
- WHITESPACE@[3171; 3172) " "
- RANGE_EXPR@[3172; 3512)
- DOTDOT@[3172; 3174) ".."
- WHITESPACE@[3174; 3175) " "
- RANGE_EXPR@[3175; 3512)
- DOTDOT@[3175; 3177) ".."
- WHITESPACE@[3177; 3181) " "
- RANGE_EXPR@[3181; 3512)
- DOTDOT@[3181; 3183) ".."
- WHITESPACE@[3183; 3184) " "
- RANGE_EXPR@[3184; 3512)
- DOTDOT@[3184; 3186) ".."
- WHITESPACE@[3186; 3187) " "
- RANGE_EXPR@[3187; 3512)
- DOTDOT@[3187; 3189) ".."
- WHITESPACE@[3189; 3190) " "
- RANGE_EXPR@[3190; 3512)
- DOTDOT@[3190; 3192) ".."
- WHITESPACE@[3192; 3196) " "
- RANGE_EXPR@[3196; 3512)
- DOTDOTEQ@[3196; 3199) "..="
- RANGE_EXPR@[3199; 3512)
- DOTDOTEQ@[3199; 3202) "..="
- RANGE_EXPR@[3202; 3512)
- DOTDOTEQ@[3202; 3205) "..="
- RANGE_EXPR@[3205; 3512)
- DOTDOT@[3205; 3207) ".."
- WHITESPACE@[3207; 3212) "\n "
- RANGE_EXPR@[3212; 3512)
- DOTDOTEQ@[3212; 3215) "..="
- RANGE_EXPR@[3215; 3512)
- DOTDOT@[3215; 3217) ".."
- WHITESPACE@[3217; 3218) " "
- RANGE_EXPR@[3218; 3512)
- DOTDOTEQ@[3218; 3221) "..="
- RANGE_EXPR@[3221; 3512)
- DOTDOT@[3221; 3223) ".."
- WHITESPACE@[3223; 3227) " "
- RANGE_EXPR@[3227; 3512)
- DOTDOTEQ@[3227; 3230) "..="
- RANGE_EXPR@[3230; 3512)
- DOTDOT@[3230; 3232) ".."
- WHITESPACE@[3232; 3233) " "
- RANGE_EXPR@[3233; 3512)
- DOTDOTEQ@[3233; 3236) "..="
- RANGE_EXPR@[3236; 3512)
- DOTDOT@[3236; 3238) ".."
- WHITESPACE@[3238; 3242) " "
- RANGE_EXPR@[3242; 3512)
- DOTDOT@[3242; 3244) ".."
- WHITESPACE@[3244; 3245) " "
- RANGE_EXPR@[3245; 3512)
- DOTDOTEQ@[3245; 3248) "..="
- RANGE_EXPR@[3248; 3512)
- DOTDOTEQ@[3248; 3251) "..="
- RANGE_EXPR@[3251; 3512)
- DOTDOT@[3251; 3253) ".."
- WHITESPACE@[3253; 3257) " "
- RANGE_EXPR@[3257; 3512)
- DOTDOT@[3257; 3259) ".."
- WHITESPACE@[3259; 3260) " "
- RANGE_EXPR@[3260; 3512)
- DOTDOTEQ@[3260; 3263) "..="
- RANGE_EXPR@[3263; 3512)
- DOTDOT@[3263; 3265) ".."
- WHITESPACE@[3265; 3266) " "
- RANGE_EXPR@[3266; 3512)
- DOTDOT@[3266; 3268) ".."
- WHITESPACE@[3268; 3273) "\n "
- RANGE_EXPR@[3273; 3512)
- DOTDOTEQ@[3273; 3276) "..="
- RANGE_EXPR@[3276; 3512)
- DOTDOTEQ@[3276; 3279) "..="
- RANGE_EXPR@[3279; 3512)
- DOTDOT@[3279; 3281) ".."
- WHITESPACE@[3281; 3282) " "
- RANGE_EXPR@[3282; 3512)
- DOTDOT@[3282; 3284) ".."
- WHITESPACE@[3284; 3288) " "
- RANGE_EXPR@[3288; 3512)
- DOTDOTEQ@[3288; 3291) "..="
- RANGE_EXPR@[3291; 3512)
- DOTDOT@[3291; 3293) ".."
- WHITESPACE@[3293; 3294) " "
- RANGE_EXPR@[3294; 3512)
- DOTDOTEQ@[3294; 3297) "..="
- RANGE_EXPR@[3297; 3512)
- DOTDOT@[3297; 3299) ".."
- WHITESPACE@[3299; 3303) " "
- RANGE_EXPR@[3303; 3512)
- DOTDOTEQ@[3303; 3306) "..="
- RANGE_EXPR@[3306; 3512)
- DOTDOT@[3306; 3308) ".."
- WHITESPACE@[3308; 3309) " "
- RANGE_EXPR@[3309; 3512)
- DOTDOT@[3309; 3311) ".."
- WHITESPACE@[3311; 3312) " "
- RANGE_EXPR@[3312; 3512)
- DOTDOT@[3312; 3314) ".."
- WHITESPACE@[3314; 3318) " "
- RANGE_EXPR@[3318; 3512)
- DOTDOT@[3318; 3320) ".."
- WHITESPACE@[3320; 3321) " "
- RANGE_EXPR@[3321; 3512)
- DOTDOTEQ@[3321; 3324) "..="
- RANGE_EXPR@[3324; 3512)
- DOTDOT@[3324; 3326) ".."
- WHITESPACE@[3326; 3327) " "
- RANGE_EXPR@[3327; 3512)
- DOTDOT@[3327; 3329) ".."
- WHITESPACE@[3329; 3334) "\n "
- RANGE_EXPR@[3334; 3512)
- DOTDOTEQ@[3334; 3337) "..="
- RANGE_EXPR@[3337; 3512)
- DOTDOT@[3337; 3339) ".."
- WHITESPACE@[3339; 3340) " "
- RANGE_EXPR@[3340; 3512)
- DOTDOTEQ@[3340; 3343) "..="
- RANGE_EXPR@[3343; 3512)
- DOTDOT@[3343; 3345) ".."
- WHITESPACE@[3345; 3349) " "
- RANGE_EXPR@[3349; 3512)
- DOTDOTEQ@[3349; 3352) "..="
- RANGE_EXPR@[3352; 3512)
- DOTDOT@[3352; 3354) ".."
- WHITESPACE@[3354; 3355) " "
- RANGE_EXPR@[3355; 3512)
- DOTDOTEQ@[3355; 3358) "..="
- RANGE_EXPR@[3358; 3512)
- DOTDOT@[3358; 3360) ".."
- WHITESPACE@[3360; 3364) " "
- RANGE_EXPR@[3364; 3512)
- DOTDOT@[3364; 3366) ".."
- WHITESPACE@[3366; 3367) " "
- RANGE_EXPR@[3367; 3512)
- DOTDOTEQ@[3367; 3370) "..="
- RANGE_EXPR@[3370; 3512)
- DOTDOT@[3370; 3372) ".."
- WHITESPACE@[3372; 3373) " "
- RANGE_EXPR@[3373; 3512)
- DOTDOT@[3373; 3375) ".."
- WHITESPACE@[3375; 3379) " "
- RANGE_EXPR@[3379; 3512)
- DOTDOT@[3379; 3381) ".."
- WHITESPACE@[3381; 3382) " "
- RANGE_EXPR@[3382; 3512)
- DOTDOTEQ@[3382; 3385) "..="
- RANGE_EXPR@[3385; 3512)
- DOTDOT@[3385; 3387) ".."
- WHITESPACE@[3387; 3388) " "
- RANGE_EXPR@[3388; 3512)
- DOTDOT@[3388; 3390) ".."
- WHITESPACE@[3390; 3395) "\n "
- RANGE_EXPR@[3395; 3512)
- DOTDOTEQ@[3395; 3398) "..="
- RANGE_EXPR@[3398; 3512)
- DOTDOT@[3398; 3400) ".."
- WHITESPACE@[3400; 3401) " "
- RANGE_EXPR@[3401; 3512)
- DOTDOTEQ@[3401; 3404) "..="
- RANGE_EXPR@[3404; 3512)
- DOTDOT@[3404; 3406) ".."
- WHITESPACE@[3406; 3410) " "
- RANGE_EXPR@[3410; 3512)
- DOTDOTEQ@[3410; 3413) "..="
- RANGE_EXPR@[3413; 3512)
- DOTDOT@[3413; 3415) ".."
- WHITESPACE@[3415; 3416) " "
- RANGE_EXPR@[3416; 3512)
- DOTDOTEQ@[3416; 3419) "..="
- RANGE_EXPR@[3419; 3512)
- DOTDOT@[3419; 3421) ".."
- WHITESPACE@[3421; 3425) " "
- RANGE_EXPR@[3425; 3512)
- DOTDOT@[3425; 3427) ".."
- WHITESPACE@[3427; 3428) " "
- RANGE_EXPR@[3428; 3512)
- DOTDOT@[3428; 3430) ".."
- WHITESPACE@[3430; 3431) " "
- RANGE_EXPR@[3431; 3512)
- DOTDOTEQ@[3431; 3434) "..="
- RANGE_EXPR@[3434; 3512)
- DOTDOT@[3434; 3436) ".."
- WHITESPACE@[3436; 3440) " "
- RANGE_EXPR@[3440; 3512)
- DOTDOT@[3440; 3442) ".."
- WHITESPACE@[3442; 3443) " "
- RANGE_EXPR@[3443; 3512)
- DOTDOTEQ@[3443; 3446) "..="
- RANGE_EXPR@[3446; 3512)
- DOTDOT@[3446; 3448) ".."
- WHITESPACE@[3448; 3449) " "
- RANGE_EXPR@[3449; 3512)
- DOTDOT@[3449; 3451) ".."
- WHITESPACE@[3451; 3456) "\n "
- RANGE_EXPR@[3456; 3512)
- DOTDOTEQ@[3456; 3459) "..="
- RANGE_EXPR@[3459; 3512)
- DOTDOT@[3459; 3461) ".."
- WHITESPACE@[3461; 3462) " "
- RANGE_EXPR@[3462; 3512)
- DOTDOTEQ@[3462; 3465) "..="
- RANGE_EXPR@[3465; 3512)
- DOTDOT@[3465; 3467) ".."
- WHITESPACE@[3467; 3471) " "
- RANGE_EXPR@[3471; 3512)
- DOTDOT@[3471; 3473) ".."
- WHITESPACE@[3473; 3474) " "
- RANGE_EXPR@[3474; 3512)
- DOTDOTEQ@[3474; 3477) "..="
- RANGE_EXPR@[3477; 3512)
- DOTDOTEQ@[3477; 3480) "..="
- RANGE_EXPR@[3480; 3512)
- DOTDOT@[3480; 3482) ".."
- WHITESPACE@[3482; 3486) " "
- RANGE_EXPR@[3486; 3512)
- DOTDOTEQ@[3486; 3489) "..="
- RANGE_EXPR@[3489; 3512)
- DOTDOTEQ@[3489; 3492) "..="
- RANGE_EXPR@[3492; 3512)
- DOTDOT@[3492; 3494) ".."
- WHITESPACE@[3494; 3495) " "
- RANGE_EXPR@[3495; 3512)
- DOTDOT@[3495; 3497) ".."
- WHITESPACE@[3497; 3501) " "
- RANGE_EXPR@[3501; 3512)
- DOTDOT@[3501; 3503) ".."
- WHITESPACE@[3503; 3504) " "
- RANGE_EXPR@[3504; 3512)
- DOTDOTEQ@[3504; 3507) "..="
- RANGE_EXPR@[3507; 3512)
- DOTDOT@[3507; 3509) ".."
- WHITESPACE@[3509; 3510) " "
- RANGE_EXPR@[3510; 3512)
- DOTDOT@[3510; 3512) ".."
- WHITESPACE@[3512; 3513) "\n"
- R_CURLY@[3513; 3514) "}"
- WHITESPACE@[3514; 3516) "\n\n"
- FN_DEF@[3516; 3552)
- FN_KW@[3516; 3518) "fn"
- WHITESPACE@[3518; 3519) " "
- NAME@[3519; 3525)
- IDENT@[3519; 3525) "ktulhu"
- PARAM_LIST@[3525; 3527)
- L_PAREN@[3525; 3526) "("
- R_PAREN@[3526; 3527) ")"
- WHITESPACE@[3527; 3528) " "
- BLOCK@[3528; 3552)
- L_CURLY@[3528; 3529) "{"
- WHITESPACE@[3529; 3534) "\n "
- SEMI@[3534; 3535) ";"
- SEMI@[3535; 3536) ";"
- SEMI@[3536; 3537) ";"
- EXPR_STMT@[3537; 3540)
- TUPLE_EXPR@[3537; 3539)
- L_PAREN@[3537; 3538) "("
- R_PAREN@[3538; 3539) ")"
- SEMI@[3539; 3540) ";"
- SEMI@[3540; 3541) ";"
- SEMI@[3541; 3542) ";"
- SEMI@[3542; 3543) ";"
- SEMI@[3543; 3544) ";"
- SEMI@[3544; 3545) ";"
- SEMI@[3545; 3546) ";"
- SEMI@[3546; 3547) ";"
- SEMI@[3547; 3548) ";"
- TUPLE_EXPR@[3548; 3550)
- L_PAREN@[3548; 3549) "("
- R_PAREN@[3549; 3550) ")"
- WHITESPACE@[3550; 3551) "\n"
- R_CURLY@[3551; 3552) "}"
- WHITESPACE@[3552; 3554) "\n\n"
- FN_DEF@[3554; 3812)
- VISIBILITY@[3554; 3557)
- PUB_KW@[3554; 3557) "pub"
- WHITESPACE@[3557; 3558) " "
- FN_KW@[3558; 3560) "fn"
- WHITESPACE@[3560; 3561) " "
- NAME@[3561; 3565)
- IDENT@[3561; 3565) "main"
- PARAM_LIST@[3565; 3567)
- L_PAREN@[3565; 3566) "("
- R_PAREN@[3566; 3567) ")"
- WHITESPACE@[3567; 3568) " "
- BLOCK@[3568; 3812)
- L_CURLY@[3568; 3569) "{"
- WHITESPACE@[3569; 3574) "\n "
- EXPR_STMT@[3574; 3584)
- CALL_EXPR@[3574; 3583)
- PATH_EXPR@[3574; 3581)
- PATH@[3574; 3581)
- PATH_SEGMENT@[3574; 3581)
- NAME_REF@[3574; 3581)
- IDENT@[3574; 3581) "strange"
- ARG_LIST@[3581; 3583)
- L_PAREN@[3581; 3582) "("
- R_PAREN@[3582; 3583) ")"
- SEMI@[3583; 3584) ";"
- WHITESPACE@[3584; 3589) "\n "
- EXPR_STMT@[3589; 3597)
- CALL_EXPR@[3589; 3596)
- PATH_EXPR@[3589; 3594)
- PATH@[3589; 3594)
- PATH_SEGMENT@[3589; 3594)
- NAME_REF@[3589; 3594)
- IDENT@[3589; 3594) "funny"
- ARG_LIST@[3594; 3596)
- L_PAREN@[3594; 3595) "("
- R_PAREN@[3595; 3596) ")"
- SEMI@[3596; 3597) ";"
- WHITESPACE@[3597; 3602) "\n "
- EXPR_STMT@[3602; 3609)
- CALL_EXPR@[3602; 3608)
- PATH_EXPR@[3602; 3606)
- PATH@[3602; 3606)
- PATH_SEGMENT@[3602; 3606)
- NAME_REF@[3602; 3606)
- IDENT@[3602; 3606) "what"
- ARG_LIST@[3606; 3608)
- L_PAREN@[3606; 3607) "("
- R_PAREN@[3607; 3608) ")"
- SEMI@[3608; 3609) ";"
- WHITESPACE@[3609; 3614) "\n "
- EXPR_STMT@[3614; 3628)
- CALL_EXPR@[3614; 3627)
- PATH_EXPR@[3614; 3625)
- PATH@[3614; 3625)
- PATH_SEGMENT@[3614; 3625)
- NAME_REF@[3614; 3625)
- IDENT@[3614; 3625) "zombiejesus"
- ARG_LIST@[3625; 3627)
- L_PAREN@[3625; 3626) "("
- R_PAREN@[3626; 3627) ")"
- SEMI@[3627; 3628) ";"
- WHITESPACE@[3628; 3633) "\n "
- EXPR_STMT@[3633; 3643)
- CALL_EXPR@[3633; 3642)
- PATH_EXPR@[3633; 3640)
- PATH@[3633; 3640)
- PATH_SEGMENT@[3633; 3640)
- NAME_REF@[3633; 3640)
- IDENT@[3633; 3640) "notsure"
- ARG_LIST@[3640; 3642)
- L_PAREN@[3640; 3641) "("
- R_PAREN@[3641; 3642) ")"
- SEMI@[3642; 3643) ";"
- WHITESPACE@[3643; 3648) "\n "
- EXPR_STMT@[3648; 3664)
- CALL_EXPR@[3648; 3663)
- PATH_EXPR@[3648; 3661)
- PATH@[3648; 3661)
- PATH_SEGMENT@[3648; 3661)
- NAME_REF@[3648; 3661)
- IDENT@[3648; 3661) "canttouchthis"
- ARG_LIST@[3661; 3663)
- L_PAREN@[3661; 3662) "("
- R_PAREN@[3662; 3663) ")"
- SEMI@[3663; 3664) ";"
- WHITESPACE@[3664; 3669) "\n "
- EXPR_STMT@[3669; 3681)
- CALL_EXPR@[3669; 3680)
- PATH_EXPR@[3669; 3678)
- PATH@[3669; 3678)
- PATH_SEGMENT@[3669; 3678)
- NAME_REF@[3669; 3678)
- IDENT@[3669; 3678) "angrydome"
- ARG_LIST@[3678; 3680)
- L_PAREN@[3678; 3679) "("
- R_PAREN@[3679; 3680) ")"
- SEMI@[3680; 3681) ";"
- WHITESPACE@[3681; 3686) "\n "
- EXPR_STMT@[3686; 3701)
- CALL_EXPR@[3686; 3700)
- PATH_EXPR@[3686; 3698)
- PATH@[3686; 3698)
- PATH_SEGMENT@[3686; 3698)
- NAME_REF@[3686; 3698)
- IDENT@[3686; 3698) "evil_lincoln"
- ARG_LIST@[3698; 3700)
- L_PAREN@[3698; 3699) "("
- R_PAREN@[3699; 3700) ")"
- SEMI@[3700; 3701) ";"
- WHITESPACE@[3701; 3706) "\n "
- EXPR_STMT@[3706; 3713)
- CALL_EXPR@[3706; 3712)
- PATH_EXPR@[3706; 3710)
- PATH@[3706; 3710)
- PATH_SEGMENT@[3706; 3710)
- NAME_REF@[3706; 3710)
- IDENT@[3706; 3710) "dots"
- ARG_LIST@[3710; 3712)
- L_PAREN@[3710; 3711) "("
- R_PAREN@[3711; 3712) ")"
- SEMI@[3712; 3713) ";"
- WHITESPACE@[3713; 3718) "\n "
- EXPR_STMT@[3718; 3726)
- CALL_EXPR@[3718; 3725)
- PATH_EXPR@[3718; 3720)
- PATH@[3718; 3720)
- PATH_SEGMENT@[3718; 3720)
- NAME_REF@[3718; 3720)
- IDENT@[3718; 3720) "u8"
- ARG_LIST@[3720; 3725)
- L_PAREN@[3720; 3721) "("
- LITERAL@[3721; 3724)
- INT_NUMBER@[3721; 3724) "8u8"
- R_PAREN@[3724; 3725) ")"
- SEMI@[3725; 3726) ";"
- WHITESPACE@[3726; 3731) "\n "
- EXPR_STMT@[3731; 3739)
- CALL_EXPR@[3731; 3738)
- PATH_EXPR@[3731; 3736)
- PATH@[3731; 3736)
- PATH_SEGMENT@[3731; 3736)
- NAME_REF@[3731; 3736)
- IDENT@[3731; 3736) "fishy"
- ARG_LIST@[3736; 3738)
- L_PAREN@[3736; 3737) "("
- R_PAREN@[3737; 3738) ")"
- SEMI@[3738; 3739) ";"
- WHITESPACE@[3739; 3744) "\n "
- EXPR_STMT@[3744; 3752)
- CALL_EXPR@[3744; 3751)
- PATH_EXPR@[3744; 3749)
- PATH@[3744; 3749)
- PATH_SEGMENT@[3744; 3749)
- NAME_REF@[3744; 3749)
- IDENT@[3744; 3749) "union"
- ARG_LIST@[3749; 3751)
- L_PAREN@[3749; 3750) "("
- R_PAREN@[3750; 3751) ")"
- SEMI@[3751; 3752) ";"
- WHITESPACE@[3752; 3757) "\n "
- EXPR_STMT@[3757; 3778)
- CALL_EXPR@[3757; 3777)
- PATH_EXPR@[3757; 3775)
- PATH@[3757; 3775)
- PATH_SEGMENT@[3757; 3775)
- NAME_REF@[3757; 3775)
- IDENT@[3757; 3775) "special_characters"
- ARG_LIST@[3775; 3777)
- L_PAREN@[3775; 3776) "("
- R_PAREN@[3776; 3777) ")"
- SEMI@[3777; 3778) ";"
- WHITESPACE@[3778; 3783) "\n "
- EXPR_STMT@[3783; 3796)
- CALL_EXPR@[3783; 3795)
- PATH_EXPR@[3783; 3793)
- PATH@[3783; 3793)
- PATH_SEGMENT@[3783; 3793)
- NAME_REF@[3783; 3793)
- IDENT@[3783; 3793) "punch_card"
- ARG_LIST@[3793; 3795)
- L_PAREN@[3793; 3794) "("
- R_PAREN@[3794; 3795) ")"
- SEMI@[3795; 3796) ";"
- WHITESPACE@[3796; 3801) "\n "
- EXPR_STMT@[3801; 3810)
- CALL_EXPR@[3801; 3809)
- PATH_EXPR@[3801; 3807)
- PATH@[3801; 3807)
- PATH_SEGMENT@[3801; 3807)
- NAME_REF@[3801; 3807)
- IDENT@[3801; 3807) "ktulhu"
- ARG_LIST@[3807; 3809)
- L_PAREN@[3807; 3808) "("
- R_PAREN@[3808; 3809) ")"
- SEMI@[3809; 3810) ";"
- WHITESPACE@[3810; 3811) "\n"
- R_CURLY@[3811; 3812) "}"
- WHITESPACE@[3812; 3813) "\n"
+++ /dev/null
-// https://github.com/rust-analyzer/rust-analyzer/issues/311
-
-pub fn foo<S: Iterator>() -> String
-where
- <S as Iterator>::Item: Eq,
-{
- "".to_owned()
-}
+++ /dev/null
-SOURCE_FILE@[0; 157)
- COMMENT@[0; 60) "// https://github.com ..."
- WHITESPACE@[60; 62) "\n\n"
- FN_DEF@[62; 156)
- VISIBILITY@[62; 65)
- PUB_KW@[62; 65) "pub"
- WHITESPACE@[65; 66) " "
- FN_KW@[66; 68) "fn"
- WHITESPACE@[68; 69) " "
- NAME@[69; 72)
- IDENT@[69; 72) "foo"
- TYPE_PARAM_LIST@[72; 85)
- L_ANGLE@[72; 73) "<"
- TYPE_PARAM@[73; 84)
- NAME@[73; 74)
- IDENT@[73; 74) "S"
- COLON@[74; 75) ":"
- WHITESPACE@[75; 76) " "
- TYPE_BOUND_LIST@[76; 84)
- TYPE_BOUND@[76; 84)
- PATH_TYPE@[76; 84)
- PATH@[76; 84)
- PATH_SEGMENT@[76; 84)
- NAME_REF@[76; 84)
- IDENT@[76; 84) "Iterator"
- R_ANGLE@[84; 85) ">"
- PARAM_LIST@[85; 87)
- L_PAREN@[85; 86) "("
- R_PAREN@[86; 87) ")"
- WHITESPACE@[87; 88) " "
- RET_TYPE@[88; 97)
- THIN_ARROW@[88; 90) "->"
- WHITESPACE@[90; 91) " "
- PATH_TYPE@[91; 97)
- PATH@[91; 97)
- PATH_SEGMENT@[91; 97)
- NAME_REF@[91; 97)
- IDENT@[91; 97) "String"
- WHITESPACE@[97; 98) "\n"
- WHERE_CLAUSE@[98; 134)
- WHERE_KW@[98; 103) "where"
- WHITESPACE@[103; 108) "\n "
- WHERE_PRED@[108; 133)
- PATH_TYPE@[108; 129)
- PATH@[108; 129)
- PATH@[108; 123)
- PATH_SEGMENT@[108; 123)
- L_ANGLE@[108; 109) "<"
- PATH_TYPE@[109; 110)
- PATH@[109; 110)
- PATH_SEGMENT@[109; 110)
- NAME_REF@[109; 110)
- IDENT@[109; 110) "S"
- WHITESPACE@[110; 111) " "
- AS_KW@[111; 113) "as"
- WHITESPACE@[113; 114) " "
- PATH_TYPE@[114; 122)
- PATH@[114; 122)
- PATH_SEGMENT@[114; 122)
- NAME_REF@[114; 122)
- IDENT@[114; 122) "Iterator"
- R_ANGLE@[122; 123) ">"
- COLONCOLON@[123; 125) "::"
- PATH_SEGMENT@[125; 129)
- NAME_REF@[125; 129)
- IDENT@[125; 129) "Item"
- COLON@[129; 130) ":"
- WHITESPACE@[130; 131) " "
- TYPE_BOUND_LIST@[131; 133)
- TYPE_BOUND@[131; 133)
- PATH_TYPE@[131; 133)
- PATH@[131; 133)
- PATH_SEGMENT@[131; 133)
- NAME_REF@[131; 133)
- IDENT@[131; 133) "Eq"
- COMMA@[133; 134) ","
- WHITESPACE@[134; 135) "\n"
- BLOCK@[135; 156)
- L_CURLY@[135; 136) "{"
- WHITESPACE@[136; 141) "\n "
- METHOD_CALL_EXPR@[141; 154)
- LITERAL@[141; 143)
- STRING@[141; 143) "\"\""
- DOT@[143; 144) "."
- NAME_REF@[144; 152)
- IDENT@[144; 152) "to_owned"
- ARG_LIST@[152; 154)
- L_PAREN@[152; 153) "("
- R_PAREN@[153; 154) ")"
- WHITESPACE@[154; 155) "\n"
- R_CURLY@[155; 156) "}"
- WHITESPACE@[156; 157) "\n"
+++ /dev/null
-// https://github.com/rust-analyzer/rust-analyzer/issues/357
-
-//! docs
-// non-docs
-mod foo {}
\ No newline at end of file
+++ /dev/null
-SOURCE_FILE@[0; 93)
- COMMENT@[0; 60) "// https://github.com ..."
- WHITESPACE@[60; 62) "\n\n"
- MODULE@[62; 93)
- COMMENT@[62; 70) "//! docs"
- WHITESPACE@[70; 71) "\n"
- COMMENT@[71; 82) "// non-docs"
- WHITESPACE@[82; 83) "\n"
- MOD_KW@[83; 86) "mod"
- WHITESPACE@[86; 87) " "
- NAME@[87; 90)
- IDENT@[87; 90) "foo"
- WHITESPACE@[90; 91) " "
- ITEM_LIST@[91; 93)
- L_CURLY@[91; 92) "{"
- R_CURLY@[92; 93) "}"
+++ /dev/null
-fn test() where (u64, u64): Foo {}
\ No newline at end of file
+++ /dev/null
-SOURCE_FILE@[0; 34)
- FN_DEF@[0; 34)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 7)
- IDENT@[3; 7) "test"
- PARAM_LIST@[7; 9)
- L_PAREN@[7; 8) "("
- R_PAREN@[8; 9) ")"
- WHITESPACE@[9; 10) " "
- WHERE_CLAUSE@[10; 31)
- WHERE_KW@[10; 15) "where"
- WHITESPACE@[15; 16) " "
- WHERE_PRED@[16; 31)
- TUPLE_TYPE@[16; 26)
- L_PAREN@[16; 17) "("
- PATH_TYPE@[17; 20)
- PATH@[17; 20)
- PATH_SEGMENT@[17; 20)
- NAME_REF@[17; 20)
- IDENT@[17; 20) "u64"
- COMMA@[20; 21) ","
- WHITESPACE@[21; 22) " "
- PATH_TYPE@[22; 25)
- PATH@[22; 25)
- PATH_SEGMENT@[22; 25)
- NAME_REF@[22; 25)
- IDENT@[22; 25) "u64"
- R_PAREN@[25; 26) ")"
- COLON@[26; 27) ":"
- WHITESPACE@[27; 28) " "
- TYPE_BOUND_LIST@[28; 31)
- TYPE_BOUND@[28; 31)
- PATH_TYPE@[28; 31)
- PATH@[28; 31)
- PATH_SEGMENT@[28; 31)
- NAME_REF@[28; 31)
- IDENT@[28; 31) "Foo"
- WHITESPACE@[31; 32) " "
- BLOCK@[32; 34)
- L_CURLY@[32; 33) "{"
- R_CURLY@[33; 34) "}"
+++ /dev/null
-fn r#foo() {
-}
+++ /dev/null
-SOURCE_FILE@[0; 15)
- FN_DEF@[0; 14)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 8)
- IDENT@[3; 8) "r#foo"
- PARAM_LIST@[8; 10)
- L_PAREN@[8; 9) "("
- R_PAREN@[9; 10) ")"
- WHITESPACE@[10; 11) " "
- BLOCK@[11; 14)
- L_CURLY@[11; 12) "{"
- WHITESPACE@[12; 13) "\n"
- R_CURLY@[13; 14) "}"
- WHITESPACE@[14; 15) "\n"
+++ /dev/null
-struct S {
- r#foo: u32
-}
\ No newline at end of file
+++ /dev/null
-SOURCE_FILE@[0; 27)
- STRUCT_DEF@[0; 27)
- STRUCT_KW@[0; 6) "struct"
- WHITESPACE@[6; 7) " "
- NAME@[7; 8)
- IDENT@[7; 8) "S"
- WHITESPACE@[8; 9) " "
- NAMED_FIELD_DEF_LIST@[9; 27)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- NAMED_FIELD_DEF@[15; 25)
- NAME@[15; 20)
- IDENT@[15; 20) "r#foo"
- COLON@[20; 21) ":"
- WHITESPACE@[21; 22) " "
- PATH_TYPE@[22; 25)
- PATH@[22; 25)
- PATH_SEGMENT@[22; 25)
- NAME_REF@[22; 25)
- IDENT@[22; 25) "u32"
- WHITESPACE@[25; 26) "\n"
- R_CURLY@[26; 27) "}"
+++ /dev/null
-fn foo() { let r#struct = 92; let r#trait = r#struct * 2; }
\ No newline at end of file
+++ /dev/null
-SOURCE_FILE@[0; 59)
- FN_DEF@[0; 59)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 59)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 11) " "
- LET_STMT@[11; 29)
- LET_KW@[11; 14) "let"
- WHITESPACE@[14; 15) " "
- BIND_PAT@[15; 23)
- NAME@[15; 23)
- IDENT@[15; 23) "r#struct"
- WHITESPACE@[23; 24) " "
- EQ@[24; 25) "="
- WHITESPACE@[25; 26) " "
- LITERAL@[26; 28)
- INT_NUMBER@[26; 28) "92"
- SEMI@[28; 29) ";"
- WHITESPACE@[29; 30) " "
- LET_STMT@[30; 57)
- LET_KW@[30; 33) "let"
- WHITESPACE@[33; 34) " "
- BIND_PAT@[34; 41)
- NAME@[34; 41)
- IDENT@[34; 41) "r#trait"
- WHITESPACE@[41; 42) " "
- EQ@[42; 43) "="
- WHITESPACE@[43; 44) " "
- BIN_EXPR@[44; 56)
- PATH_EXPR@[44; 52)
- PATH@[44; 52)
- PATH_SEGMENT@[44; 52)
- NAME_REF@[44; 52)
- IDENT@[44; 52) "r#struct"
- WHITESPACE@[52; 53) " "
- STAR@[53; 54) "*"
- WHITESPACE@[54; 55) " "
- LITERAL@[55; 56)
- INT_NUMBER@[55; 56) "2"
- SEMI@[56; 57) ";"
- WHITESPACE@[57; 58) " "
- R_CURLY@[58; 59) "}"
+++ /dev/null
-// https://github.com/rust-analyzer/rust-analyzer/issues/596
-
-struct Foo;
-
-impl Foo {
- fn bar() -> bool {
- unimplemented!()
- }
-}
-
-fn baz(_: bool) {}
-
-fn main() {
- baz(<Foo>::bar())
-}
+++ /dev/null
-SOURCE_FILE@[0; 199)
- COMMENT@[0; 60) "// https://github.com ..."
- WHITESPACE@[60; 62) "\n\n"
- STRUCT_DEF@[62; 73)
- STRUCT_KW@[62; 68) "struct"
- WHITESPACE@[68; 69) " "
- NAME@[69; 72)
- IDENT@[69; 72) "Foo"
- SEMI@[72; 73) ";"
- WHITESPACE@[73; 75) "\n\n"
- IMPL_BLOCK@[75; 141)
- IMPL_KW@[75; 79) "impl"
- WHITESPACE@[79; 80) " "
- PATH_TYPE@[80; 83)
- PATH@[80; 83)
- PATH_SEGMENT@[80; 83)
- NAME_REF@[80; 83)
- IDENT@[80; 83) "Foo"
- WHITESPACE@[83; 84) " "
- ITEM_LIST@[84; 141)
- L_CURLY@[84; 85) "{"
- WHITESPACE@[85; 90) "\n "
- FN_DEF@[90; 139)
- FN_KW@[90; 92) "fn"
- WHITESPACE@[92; 93) " "
- NAME@[93; 96)
- IDENT@[93; 96) "bar"
- PARAM_LIST@[96; 98)
- L_PAREN@[96; 97) "("
- R_PAREN@[97; 98) ")"
- WHITESPACE@[98; 99) " "
- RET_TYPE@[99; 106)
- THIN_ARROW@[99; 101) "->"
- WHITESPACE@[101; 102) " "
- PATH_TYPE@[102; 106)
- PATH@[102; 106)
- PATH_SEGMENT@[102; 106)
- NAME_REF@[102; 106)
- IDENT@[102; 106) "bool"
- WHITESPACE@[106; 107) " "
- BLOCK@[107; 139)
- L_CURLY@[107; 108) "{"
- WHITESPACE@[108; 117) "\n "
- MACRO_CALL@[117; 133)
- PATH@[117; 130)
- PATH_SEGMENT@[117; 130)
- NAME_REF@[117; 130)
- IDENT@[117; 130) "unimplemented"
- EXCL@[130; 131) "!"
- TOKEN_TREE@[131; 133)
- L_PAREN@[131; 132) "("
- R_PAREN@[132; 133) ")"
- WHITESPACE@[133; 138) "\n "
- R_CURLY@[138; 139) "}"
- WHITESPACE@[139; 140) "\n"
- R_CURLY@[140; 141) "}"
- WHITESPACE@[141; 143) "\n\n"
- FN_DEF@[143; 161)
- FN_KW@[143; 145) "fn"
- WHITESPACE@[145; 146) " "
- NAME@[146; 149)
- IDENT@[146; 149) "baz"
- PARAM_LIST@[149; 158)
- L_PAREN@[149; 150) "("
- PARAM@[150; 157)
- PLACEHOLDER_PAT@[150; 151)
- UNDERSCORE@[150; 151) "_"
- COLON@[151; 152) ":"
- WHITESPACE@[152; 153) " "
- PATH_TYPE@[153; 157)
- PATH@[153; 157)
- PATH_SEGMENT@[153; 157)
- NAME_REF@[153; 157)
- IDENT@[153; 157) "bool"
- R_PAREN@[157; 158) ")"
- WHITESPACE@[158; 159) " "
- BLOCK@[159; 161)
- L_CURLY@[159; 160) "{"
- R_CURLY@[160; 161) "}"
- WHITESPACE@[161; 163) "\n\n"
- FN_DEF@[163; 198)
- FN_KW@[163; 165) "fn"
- WHITESPACE@[165; 166) " "
- NAME@[166; 170)
- IDENT@[166; 170) "main"
- PARAM_LIST@[170; 172)
- L_PAREN@[170; 171) "("
- R_PAREN@[171; 172) ")"
- WHITESPACE@[172; 173) " "
- BLOCK@[173; 198)
- L_CURLY@[173; 174) "{"
- WHITESPACE@[174; 179) "\n "
- CALL_EXPR@[179; 196)
- PATH_EXPR@[179; 182)
- PATH@[179; 182)
- PATH_SEGMENT@[179; 182)
- NAME_REF@[179; 182)
- IDENT@[179; 182) "baz"
- ARG_LIST@[182; 196)
- L_PAREN@[182; 183) "("
- CALL_EXPR@[183; 195)
- PATH_EXPR@[183; 193)
- PATH@[183; 193)
- PATH@[183; 188)
- PATH_SEGMENT@[183; 188)
- L_ANGLE@[183; 184) "<"
- PATH_TYPE@[184; 187)
- PATH@[184; 187)
- PATH_SEGMENT@[184; 187)
- NAME_REF@[184; 187)
- IDENT@[184; 187) "Foo"
- R_ANGLE@[187; 188) ">"
- COLONCOLON@[188; 190) "::"
- PATH_SEGMENT@[190; 193)
- NAME_REF@[190; 193)
- IDENT@[190; 193) "bar"
- ARG_LIST@[193; 195)
- L_PAREN@[193; 194) "("
- R_PAREN@[194; 195) ")"
- R_PAREN@[195; 196) ")"
- WHITESPACE@[196; 197) "\n"
- R_CURLY@[197; 198) "}"
- WHITESPACE@[198; 199) "\n"
+++ /dev/null
-// https://github.com/rust-analyzer/rust-analyzer/issues/674
-
-struct Repr { raw: [u8; 1] }
-
-fn abc() {
- Repr { raw: [0] }.raw[0] = 0;
- Repr{raw:[0]}();
-}
+++ /dev/null
-SOURCE_FILE@[0; 160)
- COMMENT@[0; 60) "// https://github.com ..."
- WHITESPACE@[60; 62) "\n\n"
- STRUCT_DEF@[62; 90)
- STRUCT_KW@[62; 68) "struct"
- WHITESPACE@[68; 69) " "
- NAME@[69; 73)
- IDENT@[69; 73) "Repr"
- WHITESPACE@[73; 74) " "
- NAMED_FIELD_DEF_LIST@[74; 90)
- L_CURLY@[74; 75) "{"
- WHITESPACE@[75; 76) " "
- NAMED_FIELD_DEF@[76; 88)
- NAME@[76; 79)
- IDENT@[76; 79) "raw"
- COLON@[79; 80) ":"
- WHITESPACE@[80; 81) " "
- ARRAY_TYPE@[81; 88)
- L_BRACK@[81; 82) "["
- PATH_TYPE@[82; 84)
- PATH@[82; 84)
- PATH_SEGMENT@[82; 84)
- NAME_REF@[82; 84)
- IDENT@[82; 84) "u8"
- SEMI@[84; 85) ";"
- WHITESPACE@[85; 86) " "
- LITERAL@[86; 87)
- INT_NUMBER@[86; 87) "1"
- R_BRACK@[87; 88) "]"
- WHITESPACE@[88; 89) " "
- R_CURLY@[89; 90) "}"
- WHITESPACE@[90; 92) "\n\n"
- FN_DEF@[92; 159)
- FN_KW@[92; 94) "fn"
- WHITESPACE@[94; 95) " "
- NAME@[95; 98)
- IDENT@[95; 98) "abc"
- PARAM_LIST@[98; 100)
- L_PAREN@[98; 99) "("
- R_PAREN@[99; 100) ")"
- WHITESPACE@[100; 101) " "
- BLOCK@[101; 159)
- L_CURLY@[101; 102) "{"
- WHITESPACE@[102; 107) "\n "
- EXPR_STMT@[107; 136)
- BIN_EXPR@[107; 135)
- INDEX_EXPR@[107; 131)
- FIELD_EXPR@[107; 128)
- STRUCT_LIT@[107; 124)
- PATH@[107; 111)
- PATH_SEGMENT@[107; 111)
- NAME_REF@[107; 111)
- IDENT@[107; 111) "Repr"
- WHITESPACE@[111; 112) " "
- NAMED_FIELD_LIST@[112; 124)
- L_CURLY@[112; 113) "{"
- WHITESPACE@[113; 114) " "
- NAMED_FIELD@[114; 122)
- NAME_REF@[114; 117)
- IDENT@[114; 117) "raw"
- COLON@[117; 118) ":"
- WHITESPACE@[118; 119) " "
- ARRAY_EXPR@[119; 122)
- L_BRACK@[119; 120) "["
- LITERAL@[120; 121)
- INT_NUMBER@[120; 121) "0"
- R_BRACK@[121; 122) "]"
- WHITESPACE@[122; 123) " "
- R_CURLY@[123; 124) "}"
- DOT@[124; 125) "."
- NAME_REF@[125; 128)
- IDENT@[125; 128) "raw"
- L_BRACK@[128; 129) "["
- LITERAL@[129; 130)
- INT_NUMBER@[129; 130) "0"
- R_BRACK@[130; 131) "]"
- WHITESPACE@[131; 132) " "
- EQ@[132; 133) "="
- WHITESPACE@[133; 134) " "
- LITERAL@[134; 135)
- INT_NUMBER@[134; 135) "0"
- SEMI@[135; 136) ";"
- WHITESPACE@[136; 141) "\n "
- EXPR_STMT@[141; 157)
- CALL_EXPR@[141; 156)
- STRUCT_LIT@[141; 154)
- PATH@[141; 145)
- PATH_SEGMENT@[141; 145)
- NAME_REF@[141; 145)
- IDENT@[141; 145) "Repr"
- NAMED_FIELD_LIST@[145; 154)
- L_CURLY@[145; 146) "{"
- NAMED_FIELD@[146; 153)
- NAME_REF@[146; 149)
- IDENT@[146; 149) "raw"
- COLON@[149; 150) ":"
- ARRAY_EXPR@[150; 153)
- L_BRACK@[150; 151) "["
- LITERAL@[151; 152)
- INT_NUMBER@[151; 152) "0"
- R_BRACK@[152; 153) "]"
- R_CURLY@[153; 154) "}"
- ARG_LIST@[154; 156)
- L_PAREN@[154; 155) "("
- R_PAREN@[155; 156) ")"
- SEMI@[156; 157) ";"
- WHITESPACE@[157; 158) "\n"
- R_CURLY@[158; 159) "}"
- WHITESPACE@[159; 160) "\n"
+++ /dev/null
-// https://github.com/rust-analyzer/rust-analyzer/issues/677
-fn main() {
- #[cfg(feature = "backtrace")]
- let exit_code = panic::catch_unwind(move || main());
-}
+++ /dev/null
-SOURCE_FILE@[0; 166)
- FN_DEF@[0; 165)
- COMMENT@[0; 60) "// https://github.com ..."
- WHITESPACE@[60; 61) "\n"
- FN_KW@[61; 63) "fn"
- WHITESPACE@[63; 64) " "
- NAME@[64; 68)
- IDENT@[64; 68) "main"
- PARAM_LIST@[68; 70)
- L_PAREN@[68; 69) "("
- R_PAREN@[69; 70) ")"
- WHITESPACE@[70; 71) " "
- BLOCK@[71; 165)
- L_CURLY@[71; 72) "{"
- WHITESPACE@[72; 77) "\n "
- LET_STMT@[77; 163)
- ATTR@[77; 106)
- POUND@[77; 78) "#"
- TOKEN_TREE@[78; 106)
- L_BRACK@[78; 79) "["
- IDENT@[79; 82) "cfg"
- TOKEN_TREE@[82; 105)
- L_PAREN@[82; 83) "("
- IDENT@[83; 90) "feature"
- WHITESPACE@[90; 91) " "
- EQ@[91; 92) "="
- WHITESPACE@[92; 93) " "
- STRING@[93; 104) "\"backtrace\""
- R_PAREN@[104; 105) ")"
- R_BRACK@[105; 106) "]"
- WHITESPACE@[106; 111) "\n "
- LET_KW@[111; 114) "let"
- WHITESPACE@[114; 115) " "
- BIND_PAT@[115; 124)
- NAME@[115; 124)
- IDENT@[115; 124) "exit_code"
- WHITESPACE@[124; 125) " "
- EQ@[125; 126) "="
- WHITESPACE@[126; 127) " "
- CALL_EXPR@[127; 162)
- PATH_EXPR@[127; 146)
- PATH@[127; 146)
- PATH@[127; 132)
- PATH_SEGMENT@[127; 132)
- NAME_REF@[127; 132)
- IDENT@[127; 132) "panic"
- COLONCOLON@[132; 134) "::"
- PATH_SEGMENT@[134; 146)
- NAME_REF@[134; 146)
- IDENT@[134; 146) "catch_unwind"
- ARG_LIST@[146; 162)
- L_PAREN@[146; 147) "("
- LAMBDA_EXPR@[147; 161)
- MOVE_KW@[147; 151) "move"
- WHITESPACE@[151; 152) " "
- PARAM_LIST@[152; 154)
- PIPE@[152; 153) "|"
- PIPE@[153; 154) "|"
- WHITESPACE@[154; 155) " "
- CALL_EXPR@[155; 161)
- PATH_EXPR@[155; 159)
- PATH@[155; 159)
- PATH_SEGMENT@[155; 159)
- NAME_REF@[155; 159)
- IDENT@[155; 159) "main"
- ARG_LIST@[159; 161)
- L_PAREN@[159; 160) "("
- R_PAREN@[160; 161) ")"
- R_PAREN@[161; 162) ")"
- SEMI@[162; 163) ";"
- WHITESPACE@[163; 164) "\n"
- R_CURLY@[164; 165) "}"
- WHITESPACE@[165; 166) "\n"
+++ /dev/null
-fn block() {
- #![doc("Inner attributes allowed here")]
- //! As are ModuleDoc style comments
- {
- #![doc("Inner attributes are allowed in blocks used as statements")]
- #![doc("Being validated is not affected by duplcates")]
- //! As are ModuleDoc style comments
- };
- {
- #![doc("Inner attributes are allowed in blocks when they are the last statement of another block")]
- //! As are ModuleDoc style comments
- }
-}
-
-// https://github.com/rust-analyzer/rust-analyzer/issues/689
-impl Whatever {
- fn salsa_event(&self, event_fn: impl Fn() -> Event<Self>) {
- #![allow(unused_variables)] // this is `inner_attr` of the block
- }
-}
+++ /dev/null
-SOURCE_FILE@[0; 686)
- FN_DEF@[0; 461)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 8)
- IDENT@[3; 8) "block"
- PARAM_LIST@[8; 10)
- L_PAREN@[8; 9) "("
- R_PAREN@[9; 10) ")"
- WHITESPACE@[10; 11) " "
- BLOCK@[11; 461)
- L_CURLY@[11; 12) "{"
- WHITESPACE@[12; 17) "\n "
- ATTR@[17; 57)
- POUND@[17; 18) "#"
- EXCL@[18; 19) "!"
- TOKEN_TREE@[19; 57)
- L_BRACK@[19; 20) "["
- IDENT@[20; 23) "doc"
- TOKEN_TREE@[23; 56)
- L_PAREN@[23; 24) "("
- STRING@[24; 55) "\"Inner attributes all ..."
- R_PAREN@[55; 56) ")"
- R_BRACK@[56; 57) "]"
- WHITESPACE@[57; 62) "\n "
- COMMENT@[62; 97) "//! As are ModuleDoc ..."
- WHITESPACE@[97; 102) "\n "
- EXPR_STMT@[102; 295)
- BLOCK_EXPR@[102; 294)
- BLOCK@[102; 294)
- L_CURLY@[102; 103) "{"
- WHITESPACE@[103; 112) "\n "
- ATTR@[112; 180)
- POUND@[112; 113) "#"
- EXCL@[113; 114) "!"
- TOKEN_TREE@[114; 180)
- L_BRACK@[114; 115) "["
- IDENT@[115; 118) "doc"
- TOKEN_TREE@[118; 179)
- L_PAREN@[118; 119) "("
- STRING@[119; 178) "\"Inner attributes are ..."
- R_PAREN@[178; 179) ")"
- R_BRACK@[179; 180) "]"
- WHITESPACE@[180; 189) "\n "
- ATTR@[189; 244)
- POUND@[189; 190) "#"
- EXCL@[190; 191) "!"
- TOKEN_TREE@[191; 244)
- L_BRACK@[191; 192) "["
- IDENT@[192; 195) "doc"
- TOKEN_TREE@[195; 243)
- L_PAREN@[195; 196) "("
- STRING@[196; 242) "\"Being validated is n ..."
- R_PAREN@[242; 243) ")"
- R_BRACK@[243; 244) "]"
- WHITESPACE@[244; 253) "\n "
- COMMENT@[253; 288) "//! As are ModuleDoc ..."
- WHITESPACE@[288; 293) "\n "
- R_CURLY@[293; 294) "}"
- SEMI@[294; 295) ";"
- WHITESPACE@[295; 300) "\n "
- BLOCK_EXPR@[300; 459)
- BLOCK@[300; 459)
- L_CURLY@[300; 301) "{"
- WHITESPACE@[301; 310) "\n "
- ATTR@[310; 409)
- POUND@[310; 311) "#"
- EXCL@[311; 312) "!"
- TOKEN_TREE@[312; 409)
- L_BRACK@[312; 313) "["
- IDENT@[313; 316) "doc"
- TOKEN_TREE@[316; 408)
- L_PAREN@[316; 317) "("
- STRING@[317; 407) "\"Inner attributes are ..."
- R_PAREN@[407; 408) ")"
- R_BRACK@[408; 409) "]"
- WHITESPACE@[409; 418) "\n "
- COMMENT@[418; 453) "//! As are ModuleDoc ..."
- WHITESPACE@[453; 458) "\n "
- R_CURLY@[458; 459) "}"
- WHITESPACE@[459; 460) "\n"
- R_CURLY@[460; 461) "}"
- WHITESPACE@[461; 463) "\n\n"
- COMMENT@[463; 523) "// https://github.com ..."
- WHITESPACE@[523; 524) "\n"
- IMPL_BLOCK@[524; 685)
- IMPL_KW@[524; 528) "impl"
- WHITESPACE@[528; 529) " "
- PATH_TYPE@[529; 537)
- PATH@[529; 537)
- PATH_SEGMENT@[529; 537)
- NAME_REF@[529; 537)
- IDENT@[529; 537) "Whatever"
- WHITESPACE@[537; 538) " "
- ITEM_LIST@[538; 685)
- L_CURLY@[538; 539) "{"
- WHITESPACE@[539; 544) "\n "
- FN_DEF@[544; 683)
- FN_KW@[544; 546) "fn"
- WHITESPACE@[546; 547) " "
- NAME@[547; 558)
- IDENT@[547; 558) "salsa_event"
- PARAM_LIST@[558; 601)
- L_PAREN@[558; 559) "("
- SELF_PARAM@[559; 564)
- AMP@[559; 560) "&"
- SELF_KW@[560; 564) "self"
- COMMA@[564; 565) ","
- WHITESPACE@[565; 566) " "
- PARAM@[566; 600)
- BIND_PAT@[566; 574)
- NAME@[566; 574)
- IDENT@[566; 574) "event_fn"
- COLON@[574; 575) ":"
- WHITESPACE@[575; 576) " "
- IMPL_TRAIT_TYPE@[576; 600)
- IMPL_KW@[576; 580) "impl"
- WHITESPACE@[580; 581) " "
- TYPE_BOUND_LIST@[581; 600)
- TYPE_BOUND@[581; 600)
- PATH_TYPE@[581; 600)
- PATH@[581; 600)
- PATH_SEGMENT@[581; 600)
- NAME_REF@[581; 583)
- IDENT@[581; 583) "Fn"
- PARAM_LIST@[583; 585)
- L_PAREN@[583; 584) "("
- R_PAREN@[584; 585) ")"
- WHITESPACE@[585; 586) " "
- RET_TYPE@[586; 600)
- THIN_ARROW@[586; 588) "->"
- WHITESPACE@[588; 589) " "
- PATH_TYPE@[589; 600)
- PATH@[589; 600)
- PATH_SEGMENT@[589; 600)
- NAME_REF@[589; 594)
- IDENT@[589; 594) "Event"
- TYPE_ARG_LIST@[594; 600)
- L_ANGLE@[594; 595) "<"
- TYPE_ARG@[595; 599)
- PATH_TYPE@[595; 599)
- PATH@[595; 599)
- PATH_SEGMENT@[595; 599)
- NAME_REF@[595; 599)
- IDENT@[595; 599) "Self"
- R_ANGLE@[599; 600) ">"
- R_PAREN@[600; 601) ")"
- WHITESPACE@[601; 602) " "
- BLOCK@[602; 683)
- L_CURLY@[602; 603) "{"
- WHITESPACE@[603; 612) "\n "
- ATTR@[612; 639)
- POUND@[612; 613) "#"
- EXCL@[613; 614) "!"
- TOKEN_TREE@[614; 639)
- L_BRACK@[614; 615) "["
- IDENT@[615; 620) "allow"
- TOKEN_TREE@[620; 638)
- L_PAREN@[620; 621) "("
- IDENT@[621; 637) "unused_variables"
- R_PAREN@[637; 638) ")"
- R_BRACK@[638; 639) "]"
- WHITESPACE@[639; 640) " "
- COMMENT@[640; 677) "// this is `inner_at ..."
- WHITESPACE@[677; 682) "\n "
- R_CURLY@[682; 683) "}"
- WHITESPACE@[683; 684) "\n"
- R_CURLY@[684; 685) "}"
- WHITESPACE@[685; 686) "\n"
+++ /dev/null
-extern "C" {
- //! This is a doc comment
- #![doc("This is also a doc comment")]
-}
+++ /dev/null
-SOURCE_FILE@[0; 87)
- EXTERN_BLOCK@[0; 86)
- ABI@[0; 10)
- EXTERN_KW@[0; 6) "extern"
- WHITESPACE@[6; 7) " "
- STRING@[7; 10) "\"C\""
- WHITESPACE@[10; 11) " "
- EXTERN_ITEM_LIST@[11; 86)
- L_CURLY@[11; 12) "{"
- WHITESPACE@[12; 17) "\n "
- COMMENT@[17; 42) "//! This is a doc com ..."
- WHITESPACE@[42; 47) "\n "
- ATTR@[47; 84)
- POUND@[47; 48) "#"
- EXCL@[48; 49) "!"
- TOKEN_TREE@[49; 84)
- L_BRACK@[49; 50) "["
- IDENT@[50; 53) "doc"
- TOKEN_TREE@[53; 83)
- L_PAREN@[53; 54) "("
- STRING@[54; 82) "\"This is also a doc c ..."
- R_PAREN@[82; 83) ")"
- R_BRACK@[83; 84) "]"
- WHITESPACE@[84; 85) "\n"
- R_CURLY@[85; 86) "}"
- WHITESPACE@[86; 87) "\n"
+++ /dev/null
-// https://github.com/rust-analyzer/rust-analyzer/issues/972
-
-fn main() {
- match Some(-1) {
- Some(-1) => (),
- _ => (),
- }
-
- match Some((-1, -1)) {
- Some((-1, -1)) => (),
- _ => (),
- }
-
- match A::B(-1, -1) {
- A::B(-1, -1) => (),
- _ => (),
- }
-
- if let Some(-1) = Some(-1) {
- }
-}
-
-enum A {
- B(i8, i8)
-}
-
-fn foo(-128..=127: i8) {}
+++ /dev/null
-SOURCE_FILE@[0; 395)
- COMMENT@[0; 60) "// https://github.com ..."
- WHITESPACE@[60; 62) "\n\n"
- FN_DEF@[62; 341)
- FN_KW@[62; 64) "fn"
- WHITESPACE@[64; 65) " "
- NAME@[65; 69)
- IDENT@[65; 69) "main"
- PARAM_LIST@[69; 71)
- L_PAREN@[69; 70) "("
- R_PAREN@[70; 71) ")"
- WHITESPACE@[71; 72) " "
- BLOCK@[72; 341)
- L_CURLY@[72; 73) "{"
- WHITESPACE@[73; 78) "\n "
- EXPR_STMT@[78; 141)
- MATCH_EXPR@[78; 141)
- MATCH_KW@[78; 83) "match"
- WHITESPACE@[83; 84) " "
- CALL_EXPR@[84; 92)
- PATH_EXPR@[84; 88)
- PATH@[84; 88)
- PATH_SEGMENT@[84; 88)
- NAME_REF@[84; 88)
- IDENT@[84; 88) "Some"
- ARG_LIST@[88; 92)
- L_PAREN@[88; 89) "("
- PREFIX_EXPR@[89; 91)
- MINUS@[89; 90) "-"
- LITERAL@[90; 91)
- INT_NUMBER@[90; 91) "1"
- R_PAREN@[91; 92) ")"
- WHITESPACE@[92; 93) " "
- MATCH_ARM_LIST@[93; 141)
- L_CURLY@[93; 94) "{"
- WHITESPACE@[94; 103) "\n "
- MATCH_ARM@[103; 117)
- TUPLE_STRUCT_PAT@[103; 111)
- PATH@[103; 107)
- PATH_SEGMENT@[103; 107)
- NAME_REF@[103; 107)
- IDENT@[103; 107) "Some"
- L_PAREN@[107; 108) "("
- LITERAL_PAT@[108; 110)
- MINUS@[108; 109) "-"
- LITERAL@[109; 110)
- INT_NUMBER@[109; 110) "1"
- R_PAREN@[110; 111) ")"
- WHITESPACE@[111; 112) " "
- FAT_ARROW@[112; 114) "=>"
- WHITESPACE@[114; 115) " "
- TUPLE_EXPR@[115; 117)
- L_PAREN@[115; 116) "("
- R_PAREN@[116; 117) ")"
- COMMA@[117; 118) ","
- WHITESPACE@[118; 127) "\n "
- MATCH_ARM@[127; 134)
- PLACEHOLDER_PAT@[127; 128)
- UNDERSCORE@[127; 128) "_"
- WHITESPACE@[128; 129) " "
- FAT_ARROW@[129; 131) "=>"
- WHITESPACE@[131; 132) " "
- TUPLE_EXPR@[132; 134)
- L_PAREN@[132; 133) "("
- R_PAREN@[133; 134) ")"
- COMMA@[134; 135) ","
- WHITESPACE@[135; 140) "\n "
- R_CURLY@[140; 141) "}"
- WHITESPACE@[141; 147) "\n\n "
- EXPR_STMT@[147; 222)
- MATCH_EXPR@[147; 222)
- MATCH_KW@[147; 152) "match"
- WHITESPACE@[152; 153) " "
- CALL_EXPR@[153; 167)
- PATH_EXPR@[153; 157)
- PATH@[153; 157)
- PATH_SEGMENT@[153; 157)
- NAME_REF@[153; 157)
- IDENT@[153; 157) "Some"
- ARG_LIST@[157; 167)
- L_PAREN@[157; 158) "("
- TUPLE_EXPR@[158; 166)
- L_PAREN@[158; 159) "("
- PREFIX_EXPR@[159; 161)
- MINUS@[159; 160) "-"
- LITERAL@[160; 161)
- INT_NUMBER@[160; 161) "1"
- COMMA@[161; 162) ","
- WHITESPACE@[162; 163) " "
- PREFIX_EXPR@[163; 165)
- MINUS@[163; 164) "-"
- LITERAL@[164; 165)
- INT_NUMBER@[164; 165) "1"
- R_PAREN@[165; 166) ")"
- R_PAREN@[166; 167) ")"
- WHITESPACE@[167; 168) " "
- MATCH_ARM_LIST@[168; 222)
- L_CURLY@[168; 169) "{"
- WHITESPACE@[169; 178) "\n "
- MATCH_ARM@[178; 198)
- TUPLE_STRUCT_PAT@[178; 192)
- PATH@[178; 182)
- PATH_SEGMENT@[178; 182)
- NAME_REF@[178; 182)
- IDENT@[178; 182) "Some"
- L_PAREN@[182; 183) "("
- TUPLE_PAT@[183; 191)
- L_PAREN@[183; 184) "("
- LITERAL_PAT@[184; 186)
- MINUS@[184; 185) "-"
- LITERAL@[185; 186)
- INT_NUMBER@[185; 186) "1"
- COMMA@[186; 187) ","
- WHITESPACE@[187; 188) " "
- LITERAL_PAT@[188; 190)
- MINUS@[188; 189) "-"
- LITERAL@[189; 190)
- INT_NUMBER@[189; 190) "1"
- R_PAREN@[190; 191) ")"
- R_PAREN@[191; 192) ")"
- WHITESPACE@[192; 193) " "
- FAT_ARROW@[193; 195) "=>"
- WHITESPACE@[195; 196) " "
- TUPLE_EXPR@[196; 198)
- L_PAREN@[196; 197) "("
- R_PAREN@[197; 198) ")"
- COMMA@[198; 199) ","
- WHITESPACE@[199; 208) "\n "
- MATCH_ARM@[208; 215)
- PLACEHOLDER_PAT@[208; 209)
- UNDERSCORE@[208; 209) "_"
- WHITESPACE@[209; 210) " "
- FAT_ARROW@[210; 212) "=>"
- WHITESPACE@[212; 213) " "
- TUPLE_EXPR@[213; 215)
- L_PAREN@[213; 214) "("
- R_PAREN@[214; 215) ")"
- COMMA@[215; 216) ","
- WHITESPACE@[216; 221) "\n "
- R_CURLY@[221; 222) "}"
- WHITESPACE@[222; 228) "\n\n "
- EXPR_STMT@[228; 299)
- MATCH_EXPR@[228; 299)
- MATCH_KW@[228; 233) "match"
- WHITESPACE@[233; 234) " "
- CALL_EXPR@[234; 246)
- PATH_EXPR@[234; 238)
- PATH@[234; 238)
- PATH@[234; 235)
- PATH_SEGMENT@[234; 235)
- NAME_REF@[234; 235)
- IDENT@[234; 235) "A"
- COLONCOLON@[235; 237) "::"
- PATH_SEGMENT@[237; 238)
- NAME_REF@[237; 238)
- IDENT@[237; 238) "B"
- ARG_LIST@[238; 246)
- L_PAREN@[238; 239) "("
- PREFIX_EXPR@[239; 241)
- MINUS@[239; 240) "-"
- LITERAL@[240; 241)
- INT_NUMBER@[240; 241) "1"
- COMMA@[241; 242) ","
- WHITESPACE@[242; 243) " "
- PREFIX_EXPR@[243; 245)
- MINUS@[243; 244) "-"
- LITERAL@[244; 245)
- INT_NUMBER@[244; 245) "1"
- R_PAREN@[245; 246) ")"
- WHITESPACE@[246; 247) " "
- MATCH_ARM_LIST@[247; 299)
- L_CURLY@[247; 248) "{"
- WHITESPACE@[248; 257) "\n "
- MATCH_ARM@[257; 275)
- TUPLE_STRUCT_PAT@[257; 269)
- PATH@[257; 261)
- PATH@[257; 258)
- PATH_SEGMENT@[257; 258)
- NAME_REF@[257; 258)
- IDENT@[257; 258) "A"
- COLONCOLON@[258; 260) "::"
- PATH_SEGMENT@[260; 261)
- NAME_REF@[260; 261)
- IDENT@[260; 261) "B"
- L_PAREN@[261; 262) "("
- LITERAL_PAT@[262; 264)
- MINUS@[262; 263) "-"
- LITERAL@[263; 264)
- INT_NUMBER@[263; 264) "1"
- COMMA@[264; 265) ","
- WHITESPACE@[265; 266) " "
- LITERAL_PAT@[266; 268)
- MINUS@[266; 267) "-"
- LITERAL@[267; 268)
- INT_NUMBER@[267; 268) "1"
- R_PAREN@[268; 269) ")"
- WHITESPACE@[269; 270) " "
- FAT_ARROW@[270; 272) "=>"
- WHITESPACE@[272; 273) " "
- TUPLE_EXPR@[273; 275)
- L_PAREN@[273; 274) "("
- R_PAREN@[274; 275) ")"
- COMMA@[275; 276) ","
- WHITESPACE@[276; 285) "\n "
- MATCH_ARM@[285; 292)
- PLACEHOLDER_PAT@[285; 286)
- UNDERSCORE@[285; 286) "_"
- WHITESPACE@[286; 287) " "
- FAT_ARROW@[287; 289) "=>"
- WHITESPACE@[289; 290) " "
- TUPLE_EXPR@[290; 292)
- L_PAREN@[290; 291) "("
- R_PAREN@[291; 292) ")"
- COMMA@[292; 293) ","
- WHITESPACE@[293; 298) "\n "
- R_CURLY@[298; 299) "}"
- WHITESPACE@[299; 305) "\n\n "
- IF_EXPR@[305; 339)
- IF_KW@[305; 307) "if"
- WHITESPACE@[307; 308) " "
- CONDITION@[308; 331)
- LET_KW@[308; 311) "let"
- WHITESPACE@[311; 312) " "
- TUPLE_STRUCT_PAT@[312; 320)
- PATH@[312; 316)
- PATH_SEGMENT@[312; 316)
- NAME_REF@[312; 316)
- IDENT@[312; 316) "Some"
- L_PAREN@[316; 317) "("
- LITERAL_PAT@[317; 319)
- MINUS@[317; 318) "-"
- LITERAL@[318; 319)
- INT_NUMBER@[318; 319) "1"
- R_PAREN@[319; 320) ")"
- WHITESPACE@[320; 321) " "
- EQ@[321; 322) "="
- WHITESPACE@[322; 323) " "
- CALL_EXPR@[323; 331)
- PATH_EXPR@[323; 327)
- PATH@[323; 327)
- PATH_SEGMENT@[323; 327)
- NAME_REF@[323; 327)
- IDENT@[323; 327) "Some"
- ARG_LIST@[327; 331)
- L_PAREN@[327; 328) "("
- PREFIX_EXPR@[328; 330)
- MINUS@[328; 329) "-"
- LITERAL@[329; 330)
- INT_NUMBER@[329; 330) "1"
- R_PAREN@[330; 331) ")"
- WHITESPACE@[331; 332) " "
- BLOCK@[332; 339)
- L_CURLY@[332; 333) "{"
- WHITESPACE@[333; 338) "\n "
- R_CURLY@[338; 339) "}"
- WHITESPACE@[339; 340) "\n"
- R_CURLY@[340; 341) "}"
- WHITESPACE@[341; 343) "\n\n"
- ENUM_DEF@[343; 367)
- ENUM_KW@[343; 347) "enum"
- WHITESPACE@[347; 348) " "
- NAME@[348; 349)
- IDENT@[348; 349) "A"
- WHITESPACE@[349; 350) " "
- ENUM_VARIANT_LIST@[350; 367)
- L_CURLY@[350; 351) "{"
- WHITESPACE@[351; 356) "\n "
- ENUM_VARIANT@[356; 365)
- NAME@[356; 357)
- IDENT@[356; 357) "B"
- POS_FIELD_DEF_LIST@[357; 365)
- L_PAREN@[357; 358) "("
- POS_FIELD_DEF@[358; 360)
- PATH_TYPE@[358; 360)
- PATH@[358; 360)
- PATH_SEGMENT@[358; 360)
- NAME_REF@[358; 360)
- IDENT@[358; 360) "i8"
- COMMA@[360; 361) ","
- WHITESPACE@[361; 362) " "
- POS_FIELD_DEF@[362; 364)
- PATH_TYPE@[362; 364)
- PATH@[362; 364)
- PATH_SEGMENT@[362; 364)
- NAME_REF@[362; 364)
- IDENT@[362; 364) "i8"
- R_PAREN@[364; 365) ")"
- WHITESPACE@[365; 366) "\n"
- R_CURLY@[366; 367) "}"
- WHITESPACE@[367; 369) "\n\n"
- FN_DEF@[369; 394)
- FN_KW@[369; 371) "fn"
- WHITESPACE@[371; 372) " "
- NAME@[372; 375)
- IDENT@[372; 375) "foo"
- PARAM_LIST@[375; 391)
- L_PAREN@[375; 376) "("
- PARAM@[376; 390)
- RANGE_PAT@[376; 386)
- LITERAL_PAT@[376; 380)
- MINUS@[376; 377) "-"
- LITERAL@[377; 380)
- INT_NUMBER@[377; 380) "128"
- DOTDOTEQ@[380; 383) "..="
- LITERAL_PAT@[383; 386)
- LITERAL@[383; 386)
- INT_NUMBER@[383; 386) "127"
- COLON@[386; 387) ":"
- WHITESPACE@[387; 388) " "
- PATH_TYPE@[388; 390)
- PATH@[388; 390)
- PATH_SEGMENT@[388; 390)
- NAME_REF@[388; 390)
- IDENT@[388; 390) "i8"
- R_PAREN@[390; 391) ")"
- WHITESPACE@[391; 392) " "
- BLOCK@[392; 394)
- L_CURLY@[392; 393) "{"
- R_CURLY@[393; 394) "}"
- WHITESPACE@[394; 395) "\n"
+++ /dev/null
-// https://github.com/rust-analyzer/rust-analyzer/pull/983
-
-fn compound_assignment() {
- let mut a = 0;
- a += 1;
- a -= 2;
- a *= 3;
- a %= 4;
- a /= 5;
- a |= 6;
- a &= 7;
- a ^= 8;
- a <= 9;
- a >= 10;
- a >>= 11;
- a <<= 12;
-}
+++ /dev/null
-SOURCE_FILE@[0; 257)
- COMMENT@[0; 58) "// https://github.com ..."
- WHITESPACE@[58; 60) "\n\n"
- FN_DEF@[60; 256)
- FN_KW@[60; 62) "fn"
- WHITESPACE@[62; 63) " "
- NAME@[63; 82)
- IDENT@[63; 82) "compound_assignment"
- PARAM_LIST@[82; 84)
- L_PAREN@[82; 83) "("
- R_PAREN@[83; 84) ")"
- WHITESPACE@[84; 85) " "
- BLOCK@[85; 256)
- L_CURLY@[85; 86) "{"
- WHITESPACE@[86; 91) "\n "
- LET_STMT@[91; 105)
- LET_KW@[91; 94) "let"
- WHITESPACE@[94; 95) " "
- BIND_PAT@[95; 100)
- MUT_KW@[95; 98) "mut"
- WHITESPACE@[98; 99) " "
- NAME@[99; 100)
- IDENT@[99; 100) "a"
- WHITESPACE@[100; 101) " "
- EQ@[101; 102) "="
- WHITESPACE@[102; 103) " "
- LITERAL@[103; 104)
- INT_NUMBER@[103; 104) "0"
- SEMI@[104; 105) ";"
- WHITESPACE@[105; 110) "\n "
- EXPR_STMT@[110; 117)
- BIN_EXPR@[110; 116)
- PATH_EXPR@[110; 111)
- PATH@[110; 111)
- PATH_SEGMENT@[110; 111)
- NAME_REF@[110; 111)
- IDENT@[110; 111) "a"
- WHITESPACE@[111; 112) " "
- PLUSEQ@[112; 114) "+="
- WHITESPACE@[114; 115) " "
- LITERAL@[115; 116)
- INT_NUMBER@[115; 116) "1"
- SEMI@[116; 117) ";"
- WHITESPACE@[117; 122) "\n "
- EXPR_STMT@[122; 129)
- BIN_EXPR@[122; 128)
- PATH_EXPR@[122; 123)
- PATH@[122; 123)
- PATH_SEGMENT@[122; 123)
- NAME_REF@[122; 123)
- IDENT@[122; 123) "a"
- WHITESPACE@[123; 124) " "
- MINUSEQ@[124; 126) "-="
- WHITESPACE@[126; 127) " "
- LITERAL@[127; 128)
- INT_NUMBER@[127; 128) "2"
- SEMI@[128; 129) ";"
- WHITESPACE@[129; 134) "\n "
- EXPR_STMT@[134; 141)
- BIN_EXPR@[134; 140)
- PATH_EXPR@[134; 135)
- PATH@[134; 135)
- PATH_SEGMENT@[134; 135)
- NAME_REF@[134; 135)
- IDENT@[134; 135) "a"
- WHITESPACE@[135; 136) " "
- STAREQ@[136; 138) "*="
- WHITESPACE@[138; 139) " "
- LITERAL@[139; 140)
- INT_NUMBER@[139; 140) "3"
- SEMI@[140; 141) ";"
- WHITESPACE@[141; 146) "\n "
- EXPR_STMT@[146; 153)
- BIN_EXPR@[146; 152)
- PATH_EXPR@[146; 147)
- PATH@[146; 147)
- PATH_SEGMENT@[146; 147)
- NAME_REF@[146; 147)
- IDENT@[146; 147) "a"
- WHITESPACE@[147; 148) " "
- PERCENTEQ@[148; 150) "%="
- WHITESPACE@[150; 151) " "
- LITERAL@[151; 152)
- INT_NUMBER@[151; 152) "4"
- SEMI@[152; 153) ";"
- WHITESPACE@[153; 158) "\n "
- EXPR_STMT@[158; 165)
- BIN_EXPR@[158; 164)
- PATH_EXPR@[158; 159)
- PATH@[158; 159)
- PATH_SEGMENT@[158; 159)
- NAME_REF@[158; 159)
- IDENT@[158; 159) "a"
- WHITESPACE@[159; 160) " "
- SLASHEQ@[160; 162) "/="
- WHITESPACE@[162; 163) " "
- LITERAL@[163; 164)
- INT_NUMBER@[163; 164) "5"
- SEMI@[164; 165) ";"
- WHITESPACE@[165; 170) "\n "
- EXPR_STMT@[170; 177)
- BIN_EXPR@[170; 176)
- PATH_EXPR@[170; 171)
- PATH@[170; 171)
- PATH_SEGMENT@[170; 171)
- NAME_REF@[170; 171)
- IDENT@[170; 171) "a"
- WHITESPACE@[171; 172) " "
- PIPEEQ@[172; 174) "|="
- WHITESPACE@[174; 175) " "
- LITERAL@[175; 176)
- INT_NUMBER@[175; 176) "6"
- SEMI@[176; 177) ";"
- WHITESPACE@[177; 182) "\n "
- EXPR_STMT@[182; 189)
- BIN_EXPR@[182; 188)
- PATH_EXPR@[182; 183)
- PATH@[182; 183)
- PATH_SEGMENT@[182; 183)
- NAME_REF@[182; 183)
- IDENT@[182; 183) "a"
- WHITESPACE@[183; 184) " "
- AMPEQ@[184; 186) "&="
- WHITESPACE@[186; 187) " "
- LITERAL@[187; 188)
- INT_NUMBER@[187; 188) "7"
- SEMI@[188; 189) ";"
- WHITESPACE@[189; 194) "\n "
- EXPR_STMT@[194; 201)
- BIN_EXPR@[194; 200)
- PATH_EXPR@[194; 195)
- PATH@[194; 195)
- PATH_SEGMENT@[194; 195)
- NAME_REF@[194; 195)
- IDENT@[194; 195) "a"
- WHITESPACE@[195; 196) " "
- CARETEQ@[196; 198) "^="
- WHITESPACE@[198; 199) " "
- LITERAL@[199; 200)
- INT_NUMBER@[199; 200) "8"
- SEMI@[200; 201) ";"
- WHITESPACE@[201; 206) "\n "
- EXPR_STMT@[206; 213)
- BIN_EXPR@[206; 212)
- PATH_EXPR@[206; 207)
- PATH@[206; 207)
- PATH_SEGMENT@[206; 207)
- NAME_REF@[206; 207)
- IDENT@[206; 207) "a"
- WHITESPACE@[207; 208) " "
- LTEQ@[208; 210) "<="
- WHITESPACE@[210; 211) " "
- LITERAL@[211; 212)
- INT_NUMBER@[211; 212) "9"
- SEMI@[212; 213) ";"
- WHITESPACE@[213; 218) "\n "
- EXPR_STMT@[218; 226)
- BIN_EXPR@[218; 225)
- PATH_EXPR@[218; 219)
- PATH@[218; 219)
- PATH_SEGMENT@[218; 219)
- NAME_REF@[218; 219)
- IDENT@[218; 219) "a"
- WHITESPACE@[219; 220) " "
- GTEQ@[220; 222) ">="
- WHITESPACE@[222; 223) " "
- LITERAL@[223; 225)
- INT_NUMBER@[223; 225) "10"
- SEMI@[225; 226) ";"
- WHITESPACE@[226; 231) "\n "
- EXPR_STMT@[231; 240)
- BIN_EXPR@[231; 239)
- PATH_EXPR@[231; 232)
- PATH@[231; 232)
- PATH_SEGMENT@[231; 232)
- NAME_REF@[231; 232)
- IDENT@[231; 232) "a"
- WHITESPACE@[232; 233) " "
- SHREQ@[233; 236) ">>="
- WHITESPACE@[236; 237) " "
- LITERAL@[237; 239)
- INT_NUMBER@[237; 239) "11"
- SEMI@[239; 240) ";"
- WHITESPACE@[240; 245) "\n "
- EXPR_STMT@[245; 254)
- BIN_EXPR@[245; 253)
- PATH_EXPR@[245; 246)
- PATH@[245; 246)
- PATH_SEGMENT@[245; 246)
- NAME_REF@[245; 246)
- IDENT@[245; 246) "a"
- WHITESPACE@[246; 247) " "
- SHLEQ@[247; 250) "<<="
- WHITESPACE@[250; 251) " "
- LITERAL@[251; 253)
- INT_NUMBER@[251; 253) "12"
- SEMI@[253; 254) ";"
- WHITESPACE@[254; 255) "\n"
- R_CURLY@[255; 256) "}"
- WHITESPACE@[256; 257) "\n"
+++ /dev/null
-fn foo() {
- async {};
- async move {};
-}
-
+++ /dev/null
-SOURCE_FILE@[0; 47)
- FN_DEF@[0; 45)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 8)
- L_PAREN@[6; 7) "("
- R_PAREN@[7; 8) ")"
- WHITESPACE@[8; 9) " "
- BLOCK@[9; 45)
- L_CURLY@[9; 10) "{"
- WHITESPACE@[10; 15) "\n "
- EXPR_STMT@[15; 24)
- BLOCK_EXPR@[15; 23)
- ASYNC_KW@[15; 20) "async"
- WHITESPACE@[20; 21) " "
- BLOCK@[21; 23)
- L_CURLY@[21; 22) "{"
- R_CURLY@[22; 23) "}"
- SEMI@[23; 24) ";"
- WHITESPACE@[24; 29) "\n "
- EXPR_STMT@[29; 43)
- BLOCK_EXPR@[29; 42)
- ASYNC_KW@[29; 34) "async"
- WHITESPACE@[34; 35) " "
- MOVE_KW@[35; 39) "move"
- WHITESPACE@[39; 40) " "
- BLOCK@[40; 42)
- L_CURLY@[40; 41) "{"
- R_CURLY@[41; 42) "}"
- SEMI@[42; 43) ";"
- WHITESPACE@[43; 44) "\n"
- R_CURLY@[44; 45) "}"
- WHITESPACE@[45; 47) "\n\n"
+++ /dev/null
-fn foo(x: impl std::future::Future<Output = i32>) {}
-
-fn main() {
- foo(async move { 12 })
-}
+++ /dev/null
-SOURCE_FILE@[0; 95)
- FN_DEF@[0; 52)
- FN_KW@[0; 2) "fn"
- WHITESPACE@[2; 3) " "
- NAME@[3; 6)
- IDENT@[3; 6) "foo"
- PARAM_LIST@[6; 49)
- L_PAREN@[6; 7) "("
- PARAM@[7; 48)
- BIND_PAT@[7; 8)
- NAME@[7; 8)
- IDENT@[7; 8) "x"
- COLON@[8; 9) ":"
- WHITESPACE@[9; 10) " "
- IMPL_TRAIT_TYPE@[10; 48)
- IMPL_KW@[10; 14) "impl"
- WHITESPACE@[14; 15) " "
- TYPE_BOUND_LIST@[15; 48)
- TYPE_BOUND@[15; 48)
- PATH_TYPE@[15; 48)
- PATH@[15; 48)
- PATH@[15; 26)
- PATH@[15; 18)
- PATH_SEGMENT@[15; 18)
- NAME_REF@[15; 18)
- IDENT@[15; 18) "std"
- COLONCOLON@[18; 20) "::"
- PATH_SEGMENT@[20; 26)
- NAME_REF@[20; 26)
- IDENT@[20; 26) "future"
- COLONCOLON@[26; 28) "::"
- PATH_SEGMENT@[28; 48)
- NAME_REF@[28; 34)
- IDENT@[28; 34) "Future"
- TYPE_ARG_LIST@[34; 48)
- L_ANGLE@[34; 35) "<"
- ASSOC_TYPE_ARG@[35; 47)
- NAME_REF@[35; 41)
- IDENT@[35; 41) "Output"
- WHITESPACE@[41; 42) " "
- EQ@[42; 43) "="
- WHITESPACE@[43; 44) " "
- PATH_TYPE@[44; 47)
- PATH@[44; 47)
- PATH_SEGMENT@[44; 47)
- NAME_REF@[44; 47)
- IDENT@[44; 47) "i32"
- R_ANGLE@[47; 48) ">"
- R_PAREN@[48; 49) ")"
- WHITESPACE@[49; 50) " "
- BLOCK@[50; 52)
- L_CURLY@[50; 51) "{"
- R_CURLY@[51; 52) "}"
- WHITESPACE@[52; 54) "\n\n"
- FN_DEF@[54; 94)
- FN_KW@[54; 56) "fn"
- WHITESPACE@[56; 57) " "
- NAME@[57; 61)
- IDENT@[57; 61) "main"
- PARAM_LIST@[61; 63)
- L_PAREN@[61; 62) "("
- R_PAREN@[62; 63) ")"
- WHITESPACE@[63; 64) " "
- BLOCK@[64; 94)
- L_CURLY@[64; 65) "{"
- WHITESPACE@[65; 70) "\n "
- CALL_EXPR@[70; 92)
- PATH_EXPR@[70; 73)
- PATH@[70; 73)
- PATH_SEGMENT@[70; 73)
- NAME_REF@[70; 73)
- IDENT@[70; 73) "foo"
- ARG_LIST@[73; 92)
- L_PAREN@[73; 74) "("
- BLOCK_EXPR@[74; 91)
- ASYNC_KW@[74; 79) "async"
- WHITESPACE@[79; 80) " "
- MOVE_KW@[80; 84) "move"
- WHITESPACE@[84; 85) " "
- BLOCK@[85; 91)
- L_CURLY@[85; 86) "{"
- WHITESPACE@[86; 87) " "
- LITERAL@[87; 89)
- INT_NUMBER@[87; 89) "12"
- WHITESPACE@[89; 90) " "
- R_CURLY@[90; 91) "}"
- R_PAREN@[91; 92) ")"
- WHITESPACE@[92; 93) "\n"
- R_CURLY@[93; 94) "}"
- WHITESPACE@[94; 95) "\n"
+++ /dev/null
-0
-1
-
-
-
-0
\ No newline at end of file
+++ /dev/null
-0
-1
-
-bb"
\ No newline at end of file
+++ /dev/null
-1
-1
-
-""!
\ No newline at end of file
+++ /dev/null
-0
-0
-}
-{;
\ No newline at end of file
+++ /dev/null
-05
-1
-
-
-
-b'\ 1
-
\ No newline at end of file
+++ /dev/null
-extern crate ra_syntax;
-extern crate test_utils;
-extern crate walkdir;
-
-use std::{
- fmt::Write,
- path::{Component, PathBuf},
-};
-
-use ra_syntax::{fuzz, SourceFile};
-use test_utils::{collect_tests, dir_tests, project_dir, read_text};
-
-#[test]
-fn lexer_tests() {
- dir_tests(&test_data_dir(), &["lexer"], |text, _| {
- let tokens = ra_syntax::tokenize(text);
- dump_tokens(&tokens, text)
- })
-}
-
-#[test]
-fn parser_tests() {
- dir_tests(&test_data_dir(), &["parser/inline/ok", "parser/ok"], |text, path| {
- let parse = SourceFile::parse(text);
- let errors = parse.errors();
- assert_eq!(
- errors,
- &[] as &[ra_syntax::SyntaxError],
- "There should be no errors in the file {:?}",
- path.display(),
- );
- parse.debug_dump()
- });
- dir_tests(&test_data_dir(), &["parser/err", "parser/inline/err"], |text, path| {
- let parse = SourceFile::parse(text);
- let errors = parse.errors();
- assert!(!errors.is_empty(), "There should be errors in the file {:?}", path.display());
- parse.debug_dump()
- });
-}
-
-#[test]
-fn parser_fuzz_tests() {
- for (_, text) in collect_tests(&test_data_dir(), &["parser/fuzz-failures"]) {
- fuzz::check_parser(&text)
- }
-}
-
-#[test]
-fn reparse_fuzz_tests() {
- for (_, text) in collect_tests(&test_data_dir(), &["reparse/fuzz-failures"]) {
- let check = fuzz::CheckReparse::from_data(text.as_bytes()).unwrap();
- println!("{:?}", check);
- check.run();
- }
-}
-
-/// Test that Rust-analyzer can parse and validate the rust-analyzer
-/// FIXME: Use this as a benchmark
-#[test]
-fn self_hosting_parsing() {
- use std::ffi::OsStr;
- let dir = project_dir().join("crates");
- let mut count = 0;
- for entry in walkdir::WalkDir::new(dir)
- .into_iter()
- .filter_entry(|entry| {
- !entry.path().components().any(|component| {
- // Get all files which are not in the crates/ra_syntax/tests/data folder
- component == Component::Normal(OsStr::new("data"))
- })
- })
- .map(|e| e.unwrap())
- .filter(|entry| {
- // Get all `.rs ` files
- !entry.path().is_dir() && (entry.path().extension() == Some(OsStr::new("rs")))
- })
- {
- count += 1;
- let text = read_text(entry.path());
- SourceFile::parse(&text).ok().expect("There should be no errors in the file");
- }
- assert!(
- count > 30,
- "self_hosting_parsing found too few files - is it running in the right directory?"
- )
-}
-
-fn test_data_dir() -> PathBuf {
- project_dir().join("crates/ra_syntax/tests/data")
-}
-
-fn dump_tokens(tokens: &[ra_syntax::Token], text: &str) -> String {
- let mut acc = String::new();
- let mut offset = 0;
- for token in tokens {
- let len: u32 = token.len.into();
- let len = len as usize;
- let token_text = &text[offset..offset + len];
- offset += len;
- write!(acc, "{:?} {} {:?}\n", token.kind, token.len, token_text).unwrap()
- }
- acc
-}
pub const GRAMMAR: &str = "crates/ra_syntax/src/grammar.ron";
const GRAMMAR_DIR: &str = "crates/ra_parser/src/grammar";
-const OK_INLINE_TESTS_DIR: &str = "crates/ra_syntax/tests/data/parser/inline/ok";
-const ERR_INLINE_TESTS_DIR: &str = "crates/ra_syntax/tests/data/parser/inline/err";
+const OK_INLINE_TESTS_DIR: &str = "crates/ra_syntax/test_data/parser/inline/ok";
+const ERR_INLINE_TESTS_DIR: &str = "crates/ra_syntax/test_data/parser/inline/err";
pub const SYNTAX_KINDS: &str = "crates/ra_parser/src/syntax_kind/generated.rs.tera";
pub const AST: &str = "crates/ra_syntax/src/ast/generated.rs.tera";