mirror of
				https://github.com/rust-lang/rust-analyzer.git
				synced 2025-11-03 13:13:18 +00:00 
			
		
		
		
	Merge #54
54: G: value_parameters, patterns & let statement r=matklad a=matklad bors r+
This commit is contained in:
		
						commit
						9500ad5211
					
				
							
								
								
									
										11
									
								
								grammar.ron
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								grammar.ron
									
									
									
									
									
								
							@ -27,6 +27,8 @@ Grammar(
 | 
			
		||||
        "mut",
 | 
			
		||||
        "unsafe",
 | 
			
		||||
        "type",
 | 
			
		||||
        "ref",
 | 
			
		||||
        "let",
 | 
			
		||||
    ],
 | 
			
		||||
    contextual_keywords: [
 | 
			
		||||
        "auto",
 | 
			
		||||
@ -113,6 +115,12 @@ Grammar(
 | 
			
		||||
        "FN_POINTER_TYPE",
 | 
			
		||||
        "FOR_TYPE",
 | 
			
		||||
 | 
			
		||||
        "REF_PAT",
 | 
			
		||||
        "BIND_PAT",
 | 
			
		||||
        "PLACEHOLDER_PAT",
 | 
			
		||||
 | 
			
		||||
        "TUPLE_EXPR",
 | 
			
		||||
 | 
			
		||||
        "EXTERN_BLOCK",
 | 
			
		||||
        "ENUM_VARIANT",
 | 
			
		||||
        "NAMED_FIELD",
 | 
			
		||||
@ -132,5 +140,8 @@ Grammar(
 | 
			
		||||
        "ABI",
 | 
			
		||||
        "NAME",
 | 
			
		||||
        "NAME_REF",
 | 
			
		||||
        "VALUE_PARAMETER",
 | 
			
		||||
        "BLOCK",
 | 
			
		||||
        "LET_STMT",
 | 
			
		||||
    ]
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@ -14,7 +14,20 @@ pub(super) fn literal(p: &mut Parser) -> bool {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub(super) fn expr(p: &mut Parser) {
 | 
			
		||||
    if !literal(p) {
 | 
			
		||||
        p.error("expected expression");
 | 
			
		||||
    if literal(p) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    match p.current() {
 | 
			
		||||
        L_PAREN => tuple_expr(p),
 | 
			
		||||
        _ => p.error("expected expression"),
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn tuple_expr(p: &mut Parser) {
 | 
			
		||||
    assert!(p.at(L_PAREN));
 | 
			
		||||
    let m = p.start();
 | 
			
		||||
    p.expect(L_PAREN);
 | 
			
		||||
    p.expect(R_PAREN);
 | 
			
		||||
    m.complete(p, TUPLE_EXPR);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -218,9 +218,33 @@ fn fn_item(p: &mut Parser) {
 | 
			
		||||
        p.error("expected function arguments");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if p.at(L_CURLY) {
 | 
			
		||||
        p.expect(L_CURLY);
 | 
			
		||||
    block(p);
 | 
			
		||||
 | 
			
		||||
    fn block(p: &mut Parser) {
 | 
			
		||||
        if !p.at(L_CURLY) {
 | 
			
		||||
            p.error("expected block");
 | 
			
		||||
        }
 | 
			
		||||
        let m = p.start();
 | 
			
		||||
        p.bump();
 | 
			
		||||
        while !p.at(EOF) && !p.at(R_CURLY) {
 | 
			
		||||
            match p.current() {
 | 
			
		||||
                LET_KW => let_stmt(p),
 | 
			
		||||
                _ => p.err_and_bump("expected statement"),
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        p.expect(R_CURLY);
 | 
			
		||||
        m.complete(p, BLOCK);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn let_stmt(p: &mut Parser) {
 | 
			
		||||
        assert!(p.at(LET_KW));
 | 
			
		||||
        let m = p.start();
 | 
			
		||||
        p.bump();
 | 
			
		||||
        patterns::pattern(p);
 | 
			
		||||
        p.expect(EQ);
 | 
			
		||||
        expressions::expr(p);
 | 
			
		||||
        p.expect(SEMI);
 | 
			
		||||
        m.complete(p, LET_STMT);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -30,6 +30,7 @@ mod items;
 | 
			
		||||
mod attributes;
 | 
			
		||||
mod expressions;
 | 
			
		||||
mod types;
 | 
			
		||||
mod patterns;
 | 
			
		||||
mod paths;
 | 
			
		||||
mod type_params;
 | 
			
		||||
 | 
			
		||||
@ -85,10 +86,29 @@ fn abi(p: &mut Parser) {
 | 
			
		||||
    abi.complete(p, ABI);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// test fn_value_parameters
 | 
			
		||||
// fn a() {}
 | 
			
		||||
// fn b(x: i32) {}
 | 
			
		||||
// fn c(x: i32, ) {}
 | 
			
		||||
// fn d(x: i32, y: ()) {}
 | 
			
		||||
fn fn_value_parameters(p: &mut Parser) {
 | 
			
		||||
    assert!(p.at(L_PAREN));
 | 
			
		||||
    p.bump();
 | 
			
		||||
    while !p.at(EOF) && !p.at(R_PAREN) {
 | 
			
		||||
        value_parameter(p);
 | 
			
		||||
        if !p.at(R_PAREN) {
 | 
			
		||||
            p.expect(COMMA);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    p.expect(R_PAREN);
 | 
			
		||||
 | 
			
		||||
    fn value_parameter(p: &mut Parser) {
 | 
			
		||||
        let m = p.start();
 | 
			
		||||
        patterns::pattern(p);
 | 
			
		||||
        p.expect(COLON);
 | 
			
		||||
        types::type_(p);
 | 
			
		||||
        m.complete(p, VALUE_PARAMETER);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn fn_ret_type(p: &mut Parser) {
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										52
									
								
								src/parser/grammar/patterns.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								src/parser/grammar/patterns.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,52 @@
 | 
			
		||||
use super::*;
 | 
			
		||||
 | 
			
		||||
pub(super) fn pattern(p: &mut Parser) {
 | 
			
		||||
    match p.current() {
 | 
			
		||||
        UNDERSCORE => placeholder_pat(p),
 | 
			
		||||
        AMPERSAND => ref_pat(p),
 | 
			
		||||
        IDENT | REF_KW => bind_pat(p),
 | 
			
		||||
        _ => p.err_and_bump("expected pattern"),
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// test placeholder_pat
 | 
			
		||||
// fn main() { let _ = (); }
 | 
			
		||||
fn placeholder_pat(p: &mut Parser) {
 | 
			
		||||
    assert!(p.at(UNDERSCORE));
 | 
			
		||||
    let m = p.start();
 | 
			
		||||
    p.bump();
 | 
			
		||||
    m.complete(p, PLACEHOLDER_PAT);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// test ref_pat
 | 
			
		||||
// fn main() {
 | 
			
		||||
//     let &a = ();
 | 
			
		||||
//     let &mut b = ();
 | 
			
		||||
// }
 | 
			
		||||
fn ref_pat(p: &mut Parser) {
 | 
			
		||||
    assert!(p.at(AMPERSAND));
 | 
			
		||||
    let m = p.start();
 | 
			
		||||
    p.bump();
 | 
			
		||||
    p.eat(MUT_KW);
 | 
			
		||||
    pattern(p);
 | 
			
		||||
    m.complete(p, REF_PAT);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// test bind_pat
 | 
			
		||||
// fn main() {
 | 
			
		||||
//     let a = ();
 | 
			
		||||
//     let ref b = ();
 | 
			
		||||
//     let ref mut c = ();
 | 
			
		||||
//     let d @ _ = ();
 | 
			
		||||
// }
 | 
			
		||||
fn bind_pat(p: &mut Parser) {
 | 
			
		||||
    let m = p.start();
 | 
			
		||||
    if p.eat(REF_KW) {
 | 
			
		||||
        p.eat(MUT_KW);
 | 
			
		||||
    }
 | 
			
		||||
    name(p);
 | 
			
		||||
    if p.eat(AT) {
 | 
			
		||||
        pattern(p);
 | 
			
		||||
    }
 | 
			
		||||
    m.complete(p, BIND_PAT);
 | 
			
		||||
}
 | 
			
		||||
@ -84,6 +84,8 @@ pub enum SyntaxKind {
 | 
			
		||||
    MUT_KW,
 | 
			
		||||
    UNSAFE_KW,
 | 
			
		||||
    TYPE_KW,
 | 
			
		||||
    REF_KW,
 | 
			
		||||
    LET_KW,
 | 
			
		||||
    AUTO_KW,
 | 
			
		||||
    DEFAULT_KW,
 | 
			
		||||
    UNION_KW,
 | 
			
		||||
@ -110,6 +112,10 @@ pub enum SyntaxKind {
 | 
			
		||||
    PLACEHOLDER_TYPE,
 | 
			
		||||
    FN_POINTER_TYPE,
 | 
			
		||||
    FOR_TYPE,
 | 
			
		||||
    REF_PAT,
 | 
			
		||||
    BIND_PAT,
 | 
			
		||||
    PLACEHOLDER_PAT,
 | 
			
		||||
    TUPLE_EXPR,
 | 
			
		||||
    EXTERN_BLOCK,
 | 
			
		||||
    ENUM_VARIANT,
 | 
			
		||||
    NAMED_FIELD,
 | 
			
		||||
@ -129,6 +135,9 @@ pub enum SyntaxKind {
 | 
			
		||||
    ABI,
 | 
			
		||||
    NAME,
 | 
			
		||||
    NAME_REF,
 | 
			
		||||
    VALUE_PARAMETER,
 | 
			
		||||
    BLOCK,
 | 
			
		||||
    LET_STMT,
 | 
			
		||||
 | 
			
		||||
    // Technical SyntaxKinds: they appear temporally during parsing,
 | 
			
		||||
    // but never end up in the final tree
 | 
			
		||||
@ -220,6 +229,8 @@ impl SyntaxKind {
 | 
			
		||||
            MUT_KW => &SyntaxInfo { name: "MUT_KW" },
 | 
			
		||||
            UNSAFE_KW => &SyntaxInfo { name: "UNSAFE_KW" },
 | 
			
		||||
            TYPE_KW => &SyntaxInfo { name: "TYPE_KW" },
 | 
			
		||||
            REF_KW => &SyntaxInfo { name: "REF_KW" },
 | 
			
		||||
            LET_KW => &SyntaxInfo { name: "LET_KW" },
 | 
			
		||||
            AUTO_KW => &SyntaxInfo { name: "AUTO_KW" },
 | 
			
		||||
            DEFAULT_KW => &SyntaxInfo { name: "DEFAULT_KW" },
 | 
			
		||||
            UNION_KW => &SyntaxInfo { name: "UNION_KW" },
 | 
			
		||||
@ -246,6 +257,10 @@ impl SyntaxKind {
 | 
			
		||||
            PLACEHOLDER_TYPE => &SyntaxInfo { name: "PLACEHOLDER_TYPE" },
 | 
			
		||||
            FN_POINTER_TYPE => &SyntaxInfo { name: "FN_POINTER_TYPE" },
 | 
			
		||||
            FOR_TYPE => &SyntaxInfo { name: "FOR_TYPE" },
 | 
			
		||||
            REF_PAT => &SyntaxInfo { name: "REF_PAT" },
 | 
			
		||||
            BIND_PAT => &SyntaxInfo { name: "BIND_PAT" },
 | 
			
		||||
            PLACEHOLDER_PAT => &SyntaxInfo { name: "PLACEHOLDER_PAT" },
 | 
			
		||||
            TUPLE_EXPR => &SyntaxInfo { name: "TUPLE_EXPR" },
 | 
			
		||||
            EXTERN_BLOCK => &SyntaxInfo { name: "EXTERN_BLOCK" },
 | 
			
		||||
            ENUM_VARIANT => &SyntaxInfo { name: "ENUM_VARIANT" },
 | 
			
		||||
            NAMED_FIELD => &SyntaxInfo { name: "NAMED_FIELD" },
 | 
			
		||||
@ -265,6 +280,9 @@ impl SyntaxKind {
 | 
			
		||||
            ABI => &SyntaxInfo { name: "ABI" },
 | 
			
		||||
            NAME => &SyntaxInfo { name: "NAME" },
 | 
			
		||||
            NAME_REF => &SyntaxInfo { name: "NAME_REF" },
 | 
			
		||||
            VALUE_PARAMETER => &SyntaxInfo { name: "VALUE_PARAMETER" },
 | 
			
		||||
            BLOCK => &SyntaxInfo { name: "BLOCK" },
 | 
			
		||||
            LET_STMT => &SyntaxInfo { name: "LET_STMT" },
 | 
			
		||||
 | 
			
		||||
            TOMBSTONE => &SyntaxInfo { name: "TOMBSTONE" },
 | 
			
		||||
            EOF => &SyntaxInfo { name: "EOF" },
 | 
			
		||||
@ -301,6 +319,8 @@ pub(crate) fn ident_to_keyword(ident: &str) -> Option<SyntaxKind> {
 | 
			
		||||
        "mut" => Some(MUT_KW),
 | 
			
		||||
        "unsafe" => Some(UNSAFE_KW),
 | 
			
		||||
        "type" => Some(TYPE_KW),
 | 
			
		||||
        "ref" => Some(REF_KW),
 | 
			
		||||
        "let" => Some(LET_KW),
 | 
			
		||||
        _ => None,
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,3 +1,3 @@
 | 
			
		||||
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
 | 
			
		||||
static mut type ref let
 | 
			
		||||
 | 
			
		||||
@ -49,4 +49,8 @@ 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 "\n"
 | 
			
		||||
 | 
			
		||||
@ -28,11 +28,12 @@ FILE@[0; 54)
 | 
			
		||||
      IDENT@[22; 25) "foo"
 | 
			
		||||
    L_PAREN@[25; 26)
 | 
			
		||||
    R_PAREN@[26; 27)
 | 
			
		||||
    WHITESPACE@[27; 28)
 | 
			
		||||
    L_CURLY@[28; 29)
 | 
			
		||||
    WHITESPACE@[29; 30)
 | 
			
		||||
    R_CURLY@[30; 31)
 | 
			
		||||
    WHITESPACE@[31; 34)
 | 
			
		||||
    BLOCK@[27; 34)
 | 
			
		||||
      WHITESPACE@[27; 28)
 | 
			
		||||
      L_CURLY@[28; 29)
 | 
			
		||||
      WHITESPACE@[29; 30)
 | 
			
		||||
      R_CURLY@[30; 31)
 | 
			
		||||
      WHITESPACE@[31; 34)
 | 
			
		||||
  FN_ITEM@[34; 54)
 | 
			
		||||
    ATTR@[34; 41)
 | 
			
		||||
      POUND@[34; 35)
 | 
			
		||||
@ -49,8 +50,9 @@ FILE@[0; 54)
 | 
			
		||||
      IDENT@[44; 47) "foo"
 | 
			
		||||
    L_PAREN@[47; 48)
 | 
			
		||||
    R_PAREN@[48; 49)
 | 
			
		||||
    WHITESPACE@[49; 50)
 | 
			
		||||
    L_CURLY@[50; 51)
 | 
			
		||||
    WHITESPACE@[51; 52)
 | 
			
		||||
    R_CURLY@[52; 53)
 | 
			
		||||
    WHITESPACE@[53; 54)
 | 
			
		||||
    BLOCK@[49; 54)
 | 
			
		||||
      WHITESPACE@[49; 50)
 | 
			
		||||
      L_CURLY@[50; 51)
 | 
			
		||||
      WHITESPACE@[51; 52)
 | 
			
		||||
      R_CURLY@[52; 53)
 | 
			
		||||
      WHITESPACE@[53; 54)
 | 
			
		||||
 | 
			
		||||
@ -21,9 +21,10 @@ FILE@[0; 31)
 | 
			
		||||
      IDENT@[20; 23) "foo"
 | 
			
		||||
    L_PAREN@[23; 24)
 | 
			
		||||
    R_PAREN@[24; 25)
 | 
			
		||||
    L_CURLY@[25; 26)
 | 
			
		||||
    R_CURLY@[26; 27)
 | 
			
		||||
    WHITESPACE@[27; 29)
 | 
			
		||||
    BLOCK@[25; 29)
 | 
			
		||||
      L_CURLY@[25; 26)
 | 
			
		||||
      R_CURLY@[26; 27)
 | 
			
		||||
      WHITESPACE@[27; 29)
 | 
			
		||||
  ERROR@[29; 31)
 | 
			
		||||
  err: `expected item`
 | 
			
		||||
    R_CURLY@[29; 30)
 | 
			
		||||
 | 
			
		||||
@ -6,11 +6,12 @@ FILE@[0; 95)
 | 
			
		||||
      IDENT@[3; 6) "foo"
 | 
			
		||||
    L_PAREN@[6; 7)
 | 
			
		||||
    R_PAREN@[7; 8)
 | 
			
		||||
    WHITESPACE@[8; 9)
 | 
			
		||||
    L_CURLY@[9; 10)
 | 
			
		||||
    WHITESPACE@[10; 11)
 | 
			
		||||
    R_CURLY@[11; 12)
 | 
			
		||||
    WHITESPACE@[12; 14)
 | 
			
		||||
    BLOCK@[8; 14)
 | 
			
		||||
      WHITESPACE@[8; 9)
 | 
			
		||||
      L_CURLY@[9; 10)
 | 
			
		||||
      WHITESPACE@[10; 11)
 | 
			
		||||
      R_CURLY@[11; 12)
 | 
			
		||||
      WHITESPACE@[12; 14)
 | 
			
		||||
  ERROR@[14; 17)
 | 
			
		||||
  err: `expected item`
 | 
			
		||||
    IDENT@[14; 17) "bar"
 | 
			
		||||
@ -56,8 +57,9 @@ FILE@[0; 95)
 | 
			
		||||
      IDENT@[85; 88) "baz"
 | 
			
		||||
    L_PAREN@[88; 89)
 | 
			
		||||
    R_PAREN@[89; 90)
 | 
			
		||||
    WHITESPACE@[90; 91)
 | 
			
		||||
    L_CURLY@[91; 92)
 | 
			
		||||
    WHITESPACE@[92; 93)
 | 
			
		||||
    R_CURLY@[93; 94)
 | 
			
		||||
    WHITESPACE@[94; 95)
 | 
			
		||||
    BLOCK@[90; 95)
 | 
			
		||||
      WHITESPACE@[90; 91)
 | 
			
		||||
      L_CURLY@[91; 92)
 | 
			
		||||
      WHITESPACE@[92; 93)
 | 
			
		||||
      R_CURLY@[93; 94)
 | 
			
		||||
      WHITESPACE@[94; 95)
 | 
			
		||||
 | 
			
		||||
@ -10,7 +10,8 @@ FILE@[0; 25)
 | 
			
		||||
      IDENT@[16; 19) "foo"
 | 
			
		||||
    L_PAREN@[19; 20)
 | 
			
		||||
    R_PAREN@[20; 21)
 | 
			
		||||
    WHITESPACE@[21; 22)
 | 
			
		||||
    L_CURLY@[22; 23)
 | 
			
		||||
    R_CURLY@[23; 24)
 | 
			
		||||
    WHITESPACE@[24; 25)
 | 
			
		||||
    BLOCK@[21; 25)
 | 
			
		||||
      WHITESPACE@[21; 22)
 | 
			
		||||
      L_CURLY@[22; 23)
 | 
			
		||||
      R_CURLY@[23; 24)
 | 
			
		||||
      WHITESPACE@[24; 25)
 | 
			
		||||
 | 
			
		||||
@ -8,7 +8,8 @@ FILE@[0; 18)
 | 
			
		||||
      IDENT@[9; 12) "foo"
 | 
			
		||||
    L_PAREN@[12; 13)
 | 
			
		||||
    R_PAREN@[13; 14)
 | 
			
		||||
    WHITESPACE@[14; 15)
 | 
			
		||||
    L_CURLY@[15; 16)
 | 
			
		||||
    R_CURLY@[16; 17)
 | 
			
		||||
    WHITESPACE@[17; 18)
 | 
			
		||||
    BLOCK@[14; 18)
 | 
			
		||||
      WHITESPACE@[14; 15)
 | 
			
		||||
      L_CURLY@[15; 16)
 | 
			
		||||
      R_CURLY@[16; 17)
 | 
			
		||||
      WHITESPACE@[17; 18)
 | 
			
		||||
 | 
			
		||||
@ -9,7 +9,8 @@ FILE@[0; 19)
 | 
			
		||||
      IDENT@[10; 13) "foo"
 | 
			
		||||
    L_PAREN@[13; 14)
 | 
			
		||||
    R_PAREN@[14; 15)
 | 
			
		||||
    WHITESPACE@[15; 16)
 | 
			
		||||
    L_CURLY@[16; 17)
 | 
			
		||||
    R_CURLY@[17; 18)
 | 
			
		||||
    WHITESPACE@[18; 19)
 | 
			
		||||
    BLOCK@[15; 19)
 | 
			
		||||
      WHITESPACE@[15; 16)
 | 
			
		||||
      L_CURLY@[16; 17)
 | 
			
		||||
      R_CURLY@[17; 18)
 | 
			
		||||
      WHITESPACE@[18; 19)
 | 
			
		||||
 | 
			
		||||
@ -8,7 +8,8 @@ FILE@[0; 19)
 | 
			
		||||
      IDENT@[10; 13) "foo"
 | 
			
		||||
    L_PAREN@[13; 14)
 | 
			
		||||
    R_PAREN@[14; 15)
 | 
			
		||||
    WHITESPACE@[15; 16)
 | 
			
		||||
    L_CURLY@[16; 17)
 | 
			
		||||
    R_CURLY@[17; 18)
 | 
			
		||||
    WHITESPACE@[18; 19)
 | 
			
		||||
    BLOCK@[15; 19)
 | 
			
		||||
      WHITESPACE@[15; 16)
 | 
			
		||||
      L_CURLY@[16; 17)
 | 
			
		||||
      R_CURLY@[17; 18)
 | 
			
		||||
      WHITESPACE@[18; 19)
 | 
			
		||||
 | 
			
		||||
@ -13,7 +13,8 @@ FILE@[0; 30)
 | 
			
		||||
      IDENT@[21; 24) "foo"
 | 
			
		||||
    L_PAREN@[24; 25)
 | 
			
		||||
    R_PAREN@[25; 26)
 | 
			
		||||
    WHITESPACE@[26; 27)
 | 
			
		||||
    L_CURLY@[27; 28)
 | 
			
		||||
    R_CURLY@[28; 29)
 | 
			
		||||
    WHITESPACE@[29; 30)
 | 
			
		||||
    BLOCK@[26; 30)
 | 
			
		||||
      WHITESPACE@[26; 27)
 | 
			
		||||
      L_CURLY@[27; 28)
 | 
			
		||||
      R_CURLY@[28; 29)
 | 
			
		||||
      WHITESPACE@[29; 30)
 | 
			
		||||
 | 
			
		||||
@ -6,9 +6,10 @@ FILE@[0; 33)
 | 
			
		||||
      IDENT@[3; 6) "foo"
 | 
			
		||||
    L_PAREN@[6; 7)
 | 
			
		||||
    R_PAREN@[7; 8)
 | 
			
		||||
    L_CURLY@[8; 9)
 | 
			
		||||
    R_CURLY@[9; 10)
 | 
			
		||||
    WHITESPACE@[10; 11)
 | 
			
		||||
    BLOCK@[8; 11)
 | 
			
		||||
      L_CURLY@[8; 9)
 | 
			
		||||
      R_CURLY@[9; 10)
 | 
			
		||||
      WHITESPACE@[10; 11)
 | 
			
		||||
  UNSAFE_KW@[11; 17)
 | 
			
		||||
  ERROR@[17; 22)
 | 
			
		||||
  err: `expected `trait`, `impl` or `fn``
 | 
			
		||||
@ -24,6 +25,7 @@ FILE@[0; 33)
 | 
			
		||||
      IDENT@[25; 28) "bar"
 | 
			
		||||
    L_PAREN@[28; 29)
 | 
			
		||||
    R_PAREN@[29; 30)
 | 
			
		||||
    L_CURLY@[30; 31)
 | 
			
		||||
    R_CURLY@[31; 32)
 | 
			
		||||
    WHITESPACE@[32; 33)
 | 
			
		||||
    BLOCK@[30; 33)
 | 
			
		||||
      L_CURLY@[30; 31)
 | 
			
		||||
      R_CURLY@[31; 32)
 | 
			
		||||
      WHITESPACE@[32; 33)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										4
									
								
								tests/data/parser/inline/0033_fn_value_parameters.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								tests/data/parser/inline/0033_fn_value_parameters.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,4 @@
 | 
			
		||||
fn a() {}
 | 
			
		||||
fn b(x: i32) {}
 | 
			
		||||
fn c(x: i32, ) {}
 | 
			
		||||
fn d(x: i32, y: ()) {}
 | 
			
		||||
							
								
								
									
										95
									
								
								tests/data/parser/inline/0033_fn_value_parameters.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								tests/data/parser/inline/0033_fn_value_parameters.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,95 @@
 | 
			
		||||
FILE@[0; 67)
 | 
			
		||||
  FN_ITEM@[0; 10)
 | 
			
		||||
    FN_KW@[0; 2)
 | 
			
		||||
    NAME@[2; 4)
 | 
			
		||||
      WHITESPACE@[2; 3)
 | 
			
		||||
      IDENT@[3; 4) "a"
 | 
			
		||||
    L_PAREN@[4; 5)
 | 
			
		||||
    R_PAREN@[5; 6)
 | 
			
		||||
    BLOCK@[6; 10)
 | 
			
		||||
      WHITESPACE@[6; 7)
 | 
			
		||||
      L_CURLY@[7; 8)
 | 
			
		||||
      R_CURLY@[8; 9)
 | 
			
		||||
      WHITESPACE@[9; 10)
 | 
			
		||||
  FN_ITEM@[10; 26)
 | 
			
		||||
    FN_KW@[10; 12)
 | 
			
		||||
    NAME@[12; 14)
 | 
			
		||||
      WHITESPACE@[12; 13)
 | 
			
		||||
      IDENT@[13; 14) "b"
 | 
			
		||||
    L_PAREN@[14; 15)
 | 
			
		||||
    VALUE_PARAMETER@[15; 21)
 | 
			
		||||
      BIND_PAT@[15; 16)
 | 
			
		||||
        NAME@[15; 16)
 | 
			
		||||
          IDENT@[15; 16) "x"
 | 
			
		||||
      COLON@[16; 17)
 | 
			
		||||
      PATH_TYPE@[17; 21)
 | 
			
		||||
        PATH@[17; 21)
 | 
			
		||||
          PATH_SEGMENT@[17; 21)
 | 
			
		||||
            NAME_REF@[17; 21)
 | 
			
		||||
              WHITESPACE@[17; 18)
 | 
			
		||||
              IDENT@[18; 21) "i32"
 | 
			
		||||
    R_PAREN@[21; 22)
 | 
			
		||||
    BLOCK@[22; 26)
 | 
			
		||||
      WHITESPACE@[22; 23)
 | 
			
		||||
      L_CURLY@[23; 24)
 | 
			
		||||
      R_CURLY@[24; 25)
 | 
			
		||||
      WHITESPACE@[25; 26)
 | 
			
		||||
  FN_ITEM@[26; 44)
 | 
			
		||||
    FN_KW@[26; 28)
 | 
			
		||||
    NAME@[28; 30)
 | 
			
		||||
      WHITESPACE@[28; 29)
 | 
			
		||||
      IDENT@[29; 30) "c"
 | 
			
		||||
    L_PAREN@[30; 31)
 | 
			
		||||
    VALUE_PARAMETER@[31; 37)
 | 
			
		||||
      BIND_PAT@[31; 32)
 | 
			
		||||
        NAME@[31; 32)
 | 
			
		||||
          IDENT@[31; 32) "x"
 | 
			
		||||
      COLON@[32; 33)
 | 
			
		||||
      PATH_TYPE@[33; 37)
 | 
			
		||||
        PATH@[33; 37)
 | 
			
		||||
          PATH_SEGMENT@[33; 37)
 | 
			
		||||
            NAME_REF@[33; 37)
 | 
			
		||||
              WHITESPACE@[33; 34)
 | 
			
		||||
              IDENT@[34; 37) "i32"
 | 
			
		||||
    COMMA@[37; 38)
 | 
			
		||||
    WHITESPACE@[38; 39)
 | 
			
		||||
    R_PAREN@[39; 40)
 | 
			
		||||
    BLOCK@[40; 44)
 | 
			
		||||
      WHITESPACE@[40; 41)
 | 
			
		||||
      L_CURLY@[41; 42)
 | 
			
		||||
      R_CURLY@[42; 43)
 | 
			
		||||
      WHITESPACE@[43; 44)
 | 
			
		||||
  FN_ITEM@[44; 67)
 | 
			
		||||
    FN_KW@[44; 46)
 | 
			
		||||
    NAME@[46; 48)
 | 
			
		||||
      WHITESPACE@[46; 47)
 | 
			
		||||
      IDENT@[47; 48) "d"
 | 
			
		||||
    L_PAREN@[48; 49)
 | 
			
		||||
    VALUE_PARAMETER@[49; 55)
 | 
			
		||||
      BIND_PAT@[49; 50)
 | 
			
		||||
        NAME@[49; 50)
 | 
			
		||||
          IDENT@[49; 50) "x"
 | 
			
		||||
      COLON@[50; 51)
 | 
			
		||||
      PATH_TYPE@[51; 55)
 | 
			
		||||
        PATH@[51; 55)
 | 
			
		||||
          PATH_SEGMENT@[51; 55)
 | 
			
		||||
            NAME_REF@[51; 55)
 | 
			
		||||
              WHITESPACE@[51; 52)
 | 
			
		||||
              IDENT@[52; 55) "i32"
 | 
			
		||||
    COMMA@[55; 56)
 | 
			
		||||
    VALUE_PARAMETER@[56; 62)
 | 
			
		||||
      BIND_PAT@[56; 58)
 | 
			
		||||
        NAME@[56; 58)
 | 
			
		||||
          WHITESPACE@[56; 57)
 | 
			
		||||
          IDENT@[57; 58) "y"
 | 
			
		||||
      COLON@[58; 59)
 | 
			
		||||
      TUPLE_TYPE@[59; 62)
 | 
			
		||||
        WHITESPACE@[59; 60)
 | 
			
		||||
        L_PAREN@[60; 61)
 | 
			
		||||
        R_PAREN@[61; 62)
 | 
			
		||||
    R_PAREN@[62; 63)
 | 
			
		||||
    BLOCK@[63; 67)
 | 
			
		||||
      WHITESPACE@[63; 64)
 | 
			
		||||
      L_CURLY@[64; 65)
 | 
			
		||||
      R_CURLY@[65; 66)
 | 
			
		||||
      WHITESPACE@[66; 67)
 | 
			
		||||
							
								
								
									
										6
									
								
								tests/data/parser/inline/0034_bind_pat.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								tests/data/parser/inline/0034_bind_pat.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,6 @@
 | 
			
		||||
fn main() {
 | 
			
		||||
    let a = ();
 | 
			
		||||
    let ref b = ();
 | 
			
		||||
    let ref mut c = ();
 | 
			
		||||
    let d @ _ = ();
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										81
									
								
								tests/data/parser/inline/0034_bind_pat.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								tests/data/parser/inline/0034_bind_pat.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,81 @@
 | 
			
		||||
FILE@[0; 94)
 | 
			
		||||
  FN_ITEM@[0; 94)
 | 
			
		||||
    FN_KW@[0; 2)
 | 
			
		||||
    NAME@[2; 7)
 | 
			
		||||
      WHITESPACE@[2; 3)
 | 
			
		||||
      IDENT@[3; 7) "main"
 | 
			
		||||
    L_PAREN@[7; 8)
 | 
			
		||||
    R_PAREN@[8; 9)
 | 
			
		||||
    BLOCK@[9; 94)
 | 
			
		||||
      WHITESPACE@[9; 10)
 | 
			
		||||
      L_CURLY@[10; 11)
 | 
			
		||||
      LET_STMT@[11; 32)
 | 
			
		||||
        WHITESPACE@[11; 16)
 | 
			
		||||
        LET_KW@[16; 19)
 | 
			
		||||
        BIND_PAT@[19; 22)
 | 
			
		||||
          NAME@[19; 22)
 | 
			
		||||
            WHITESPACE@[19; 20)
 | 
			
		||||
            IDENT@[20; 21) "a"
 | 
			
		||||
            WHITESPACE@[21; 22)
 | 
			
		||||
        EQ@[22; 23)
 | 
			
		||||
        TUPLE_EXPR@[23; 26)
 | 
			
		||||
          WHITESPACE@[23; 24)
 | 
			
		||||
          L_PAREN@[24; 25)
 | 
			
		||||
          R_PAREN@[25; 26)
 | 
			
		||||
        SEMI@[26; 27)
 | 
			
		||||
        WHITESPACE@[27; 32)
 | 
			
		||||
      LET_STMT@[32; 52)
 | 
			
		||||
        LET_KW@[32; 35)
 | 
			
		||||
        BIND_PAT@[35; 42)
 | 
			
		||||
          WHITESPACE@[35; 36)
 | 
			
		||||
          REF_KW@[36; 39)
 | 
			
		||||
          NAME@[39; 42)
 | 
			
		||||
            WHITESPACE@[39; 40)
 | 
			
		||||
            IDENT@[40; 41) "b"
 | 
			
		||||
            WHITESPACE@[41; 42)
 | 
			
		||||
        EQ@[42; 43)
 | 
			
		||||
        TUPLE_EXPR@[43; 46)
 | 
			
		||||
          WHITESPACE@[43; 44)
 | 
			
		||||
          L_PAREN@[44; 45)
 | 
			
		||||
          R_PAREN@[45; 46)
 | 
			
		||||
        SEMI@[46; 47)
 | 
			
		||||
        WHITESPACE@[47; 52)
 | 
			
		||||
      LET_STMT@[52; 76)
 | 
			
		||||
        LET_KW@[52; 55)
 | 
			
		||||
        BIND_PAT@[55; 66)
 | 
			
		||||
          WHITESPACE@[55; 56)
 | 
			
		||||
          REF_KW@[56; 59)
 | 
			
		||||
          WHITESPACE@[59; 60)
 | 
			
		||||
          MUT_KW@[60; 63)
 | 
			
		||||
          NAME@[63; 66)
 | 
			
		||||
            WHITESPACE@[63; 64)
 | 
			
		||||
            IDENT@[64; 65) "c"
 | 
			
		||||
            WHITESPACE@[65; 66)
 | 
			
		||||
        EQ@[66; 67)
 | 
			
		||||
        TUPLE_EXPR@[67; 70)
 | 
			
		||||
          WHITESPACE@[67; 68)
 | 
			
		||||
          L_PAREN@[68; 69)
 | 
			
		||||
          R_PAREN@[69; 70)
 | 
			
		||||
        SEMI@[70; 71)
 | 
			
		||||
        WHITESPACE@[71; 76)
 | 
			
		||||
      LET_STMT@[76; 92)
 | 
			
		||||
        LET_KW@[76; 79)
 | 
			
		||||
        BIND_PAT@[79; 86)
 | 
			
		||||
          NAME@[79; 82)
 | 
			
		||||
            WHITESPACE@[79; 80)
 | 
			
		||||
            IDENT@[80; 81) "d"
 | 
			
		||||
            WHITESPACE@[81; 82)
 | 
			
		||||
          AT@[82; 83)
 | 
			
		||||
          PLACEHOLDER_PAT@[83; 86)
 | 
			
		||||
            WHITESPACE@[83; 84)
 | 
			
		||||
            UNDERSCORE@[84; 85)
 | 
			
		||||
            WHITESPACE@[85; 86)
 | 
			
		||||
        EQ@[86; 87)
 | 
			
		||||
        TUPLE_EXPR@[87; 90)
 | 
			
		||||
          WHITESPACE@[87; 88)
 | 
			
		||||
          L_PAREN@[88; 89)
 | 
			
		||||
          R_PAREN@[89; 90)
 | 
			
		||||
        SEMI@[90; 91)
 | 
			
		||||
        WHITESPACE@[91; 92)
 | 
			
		||||
      R_CURLY@[92; 93)
 | 
			
		||||
      WHITESPACE@[93; 94)
 | 
			
		||||
							
								
								
									
										4
									
								
								tests/data/parser/inline/0035_ref_pat.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								tests/data/parser/inline/0035_ref_pat.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,4 @@
 | 
			
		||||
fn main() {
 | 
			
		||||
    let &a = ();
 | 
			
		||||
    let &mut b = ();
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										48
									
								
								tests/data/parser/inline/0035_ref_pat.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								tests/data/parser/inline/0035_ref_pat.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,48 @@
 | 
			
		||||
FILE@[0; 52)
 | 
			
		||||
  FN_ITEM@[0; 52)
 | 
			
		||||
    FN_KW@[0; 2)
 | 
			
		||||
    NAME@[2; 7)
 | 
			
		||||
      WHITESPACE@[2; 3)
 | 
			
		||||
      IDENT@[3; 7) "main"
 | 
			
		||||
    L_PAREN@[7; 8)
 | 
			
		||||
    R_PAREN@[8; 9)
 | 
			
		||||
    BLOCK@[9; 52)
 | 
			
		||||
      WHITESPACE@[9; 10)
 | 
			
		||||
      L_CURLY@[10; 11)
 | 
			
		||||
      LET_STMT@[11; 33)
 | 
			
		||||
        WHITESPACE@[11; 16)
 | 
			
		||||
        LET_KW@[16; 19)
 | 
			
		||||
        REF_PAT@[19; 23)
 | 
			
		||||
          WHITESPACE@[19; 20)
 | 
			
		||||
          AMPERSAND@[20; 21)
 | 
			
		||||
          BIND_PAT@[21; 23)
 | 
			
		||||
            NAME@[21; 23)
 | 
			
		||||
              IDENT@[21; 22) "a"
 | 
			
		||||
              WHITESPACE@[22; 23)
 | 
			
		||||
        EQ@[23; 24)
 | 
			
		||||
        TUPLE_EXPR@[24; 27)
 | 
			
		||||
          WHITESPACE@[24; 25)
 | 
			
		||||
          L_PAREN@[25; 26)
 | 
			
		||||
          R_PAREN@[26; 27)
 | 
			
		||||
        SEMI@[27; 28)
 | 
			
		||||
        WHITESPACE@[28; 33)
 | 
			
		||||
      LET_STMT@[33; 50)
 | 
			
		||||
        LET_KW@[33; 36)
 | 
			
		||||
        REF_PAT@[36; 44)
 | 
			
		||||
          WHITESPACE@[36; 37)
 | 
			
		||||
          AMPERSAND@[37; 38)
 | 
			
		||||
          MUT_KW@[38; 41)
 | 
			
		||||
          BIND_PAT@[41; 44)
 | 
			
		||||
            NAME@[41; 44)
 | 
			
		||||
              WHITESPACE@[41; 42)
 | 
			
		||||
              IDENT@[42; 43) "b"
 | 
			
		||||
              WHITESPACE@[43; 44)
 | 
			
		||||
        EQ@[44; 45)
 | 
			
		||||
        TUPLE_EXPR@[45; 48)
 | 
			
		||||
          WHITESPACE@[45; 46)
 | 
			
		||||
          L_PAREN@[46; 47)
 | 
			
		||||
          R_PAREN@[47; 48)
 | 
			
		||||
        SEMI@[48; 49)
 | 
			
		||||
        WHITESPACE@[49; 50)
 | 
			
		||||
      R_CURLY@[50; 51)
 | 
			
		||||
      WHITESPACE@[51; 52)
 | 
			
		||||
							
								
								
									
										1
									
								
								tests/data/parser/inline/0036_placeholder_pat.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								tests/data/parser/inline/0036_placeholder_pat.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
fn main() { let _ = (); }
 | 
			
		||||
							
								
								
									
										27
									
								
								tests/data/parser/inline/0036_placeholder_pat.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								tests/data/parser/inline/0036_placeholder_pat.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,27 @@
 | 
			
		||||
FILE@[0; 26)
 | 
			
		||||
  FN_ITEM@[0; 26)
 | 
			
		||||
    FN_KW@[0; 2)
 | 
			
		||||
    NAME@[2; 7)
 | 
			
		||||
      WHITESPACE@[2; 3)
 | 
			
		||||
      IDENT@[3; 7) "main"
 | 
			
		||||
    L_PAREN@[7; 8)
 | 
			
		||||
    R_PAREN@[8; 9)
 | 
			
		||||
    BLOCK@[9; 26)
 | 
			
		||||
      WHITESPACE@[9; 10)
 | 
			
		||||
      L_CURLY@[10; 11)
 | 
			
		||||
      LET_STMT@[11; 24)
 | 
			
		||||
        WHITESPACE@[11; 12)
 | 
			
		||||
        LET_KW@[12; 15)
 | 
			
		||||
        PLACEHOLDER_PAT@[15; 18)
 | 
			
		||||
          WHITESPACE@[15; 16)
 | 
			
		||||
          UNDERSCORE@[16; 17)
 | 
			
		||||
          WHITESPACE@[17; 18)
 | 
			
		||||
        EQ@[18; 19)
 | 
			
		||||
        TUPLE_EXPR@[19; 22)
 | 
			
		||||
          WHITESPACE@[19; 20)
 | 
			
		||||
          L_PAREN@[20; 21)
 | 
			
		||||
          R_PAREN@[21; 22)
 | 
			
		||||
        SEMI@[22; 23)
 | 
			
		||||
        WHITESPACE@[23; 24)
 | 
			
		||||
      R_CURLY@[24; 25)
 | 
			
		||||
      WHITESPACE@[25; 26)
 | 
			
		||||
@ -6,8 +6,9 @@ FILE@[0; 13)
 | 
			
		||||
      IDENT@[3; 6) "foo"
 | 
			
		||||
    L_PAREN@[6; 7)
 | 
			
		||||
    R_PAREN@[7; 8)
 | 
			
		||||
    WHITESPACE@[8; 9)
 | 
			
		||||
    L_CURLY@[9; 10)
 | 
			
		||||
    WHITESPACE@[10; 11)
 | 
			
		||||
    R_CURLY@[11; 12)
 | 
			
		||||
    WHITESPACE@[12; 13)
 | 
			
		||||
    BLOCK@[8; 13)
 | 
			
		||||
      WHITESPACE@[8; 9)
 | 
			
		||||
      L_CURLY@[9; 10)
 | 
			
		||||
      WHITESPACE@[10; 11)
 | 
			
		||||
      R_CURLY@[11; 12)
 | 
			
		||||
      WHITESPACE@[12; 13)
 | 
			
		||||
 | 
			
		||||
@ -31,11 +31,12 @@ FILE@[0; 118)
 | 
			
		||||
        IDENT@[34; 37) "foo"
 | 
			
		||||
      L_PAREN@[37; 38)
 | 
			
		||||
      R_PAREN@[38; 39)
 | 
			
		||||
      WHITESPACE@[39; 40)
 | 
			
		||||
      L_CURLY@[40; 41)
 | 
			
		||||
      WHITESPACE@[41; 46)
 | 
			
		||||
      R_CURLY@[46; 47)
 | 
			
		||||
      WHITESPACE@[47; 52)
 | 
			
		||||
      BLOCK@[39; 52)
 | 
			
		||||
        WHITESPACE@[39; 40)
 | 
			
		||||
        L_CURLY@[40; 41)
 | 
			
		||||
        WHITESPACE@[41; 46)
 | 
			
		||||
        R_CURLY@[46; 47)
 | 
			
		||||
        WHITESPACE@[47; 52)
 | 
			
		||||
    STRUCT_ITEM@[52; 64)
 | 
			
		||||
      STRUCT_KW@[52; 58)
 | 
			
		||||
      NAME@[58; 61)
 | 
			
		||||
 | 
			
		||||
@ -24,7 +24,8 @@ FILE@[0; 35)
 | 
			
		||||
      IDENT@[26; 29) "foo"
 | 
			
		||||
    L_PAREN@[29; 30)
 | 
			
		||||
    R_PAREN@[30; 31)
 | 
			
		||||
    WHITESPACE@[31; 32)
 | 
			
		||||
    L_CURLY@[32; 33)
 | 
			
		||||
    R_CURLY@[33; 34)
 | 
			
		||||
    WHITESPACE@[34; 35)
 | 
			
		||||
    BLOCK@[31; 35)
 | 
			
		||||
      WHITESPACE@[31; 32)
 | 
			
		||||
      L_CURLY@[32; 33)
 | 
			
		||||
      R_CURLY@[33; 34)
 | 
			
		||||
      WHITESPACE@[34; 35)
 | 
			
		||||
 | 
			
		||||
@ -6,10 +6,11 @@ FILE@[0; 98)
 | 
			
		||||
      IDENT@[3; 4) "a"
 | 
			
		||||
    L_PAREN@[4; 5)
 | 
			
		||||
    R_PAREN@[5; 6)
 | 
			
		||||
    WHITESPACE@[6; 7)
 | 
			
		||||
    L_CURLY@[7; 8)
 | 
			
		||||
    R_CURLY@[8; 9)
 | 
			
		||||
    WHITESPACE@[9; 10)
 | 
			
		||||
    BLOCK@[6; 10)
 | 
			
		||||
      WHITESPACE@[6; 7)
 | 
			
		||||
      L_CURLY@[7; 8)
 | 
			
		||||
      R_CURLY@[8; 9)
 | 
			
		||||
      WHITESPACE@[9; 10)
 | 
			
		||||
  FN_ITEM@[10; 24)
 | 
			
		||||
    VISIBILITY@[10; 14)
 | 
			
		||||
      PUB_KW@[10; 13)
 | 
			
		||||
@ -20,10 +21,11 @@ FILE@[0; 98)
 | 
			
		||||
      IDENT@[17; 18) "b"
 | 
			
		||||
    L_PAREN@[18; 19)
 | 
			
		||||
    R_PAREN@[19; 20)
 | 
			
		||||
    WHITESPACE@[20; 21)
 | 
			
		||||
    L_CURLY@[21; 22)
 | 
			
		||||
    R_CURLY@[22; 23)
 | 
			
		||||
    WHITESPACE@[23; 24)
 | 
			
		||||
    BLOCK@[20; 24)
 | 
			
		||||
      WHITESPACE@[20; 21)
 | 
			
		||||
      L_CURLY@[21; 22)
 | 
			
		||||
      R_CURLY@[22; 23)
 | 
			
		||||
      WHITESPACE@[23; 24)
 | 
			
		||||
  FN_ITEM@[24; 45)
 | 
			
		||||
    VISIBILITY@[24; 35)
 | 
			
		||||
      PUB_KW@[24; 27)
 | 
			
		||||
@ -37,10 +39,11 @@ FILE@[0; 98)
 | 
			
		||||
      IDENT@[38; 39) "c"
 | 
			
		||||
    L_PAREN@[39; 40)
 | 
			
		||||
    R_PAREN@[40; 41)
 | 
			
		||||
    WHITESPACE@[41; 42)
 | 
			
		||||
    L_CURLY@[42; 43)
 | 
			
		||||
    R_CURLY@[43; 44)
 | 
			
		||||
    WHITESPACE@[44; 45)
 | 
			
		||||
    BLOCK@[41; 45)
 | 
			
		||||
      WHITESPACE@[41; 42)
 | 
			
		||||
      L_CURLY@[42; 43)
 | 
			
		||||
      R_CURLY@[43; 44)
 | 
			
		||||
      WHITESPACE@[44; 45)
 | 
			
		||||
  FN_ITEM@[45; 66)
 | 
			
		||||
    VISIBILITY@[45; 56)
 | 
			
		||||
      PUB_KW@[45; 48)
 | 
			
		||||
@ -54,10 +57,11 @@ FILE@[0; 98)
 | 
			
		||||
      IDENT@[59; 60) "d"
 | 
			
		||||
    L_PAREN@[60; 61)
 | 
			
		||||
    R_PAREN@[61; 62)
 | 
			
		||||
    WHITESPACE@[62; 63)
 | 
			
		||||
    L_CURLY@[63; 64)
 | 
			
		||||
    R_CURLY@[64; 65)
 | 
			
		||||
    WHITESPACE@[65; 66)
 | 
			
		||||
    BLOCK@[62; 66)
 | 
			
		||||
      WHITESPACE@[62; 63)
 | 
			
		||||
      L_CURLY@[63; 64)
 | 
			
		||||
      R_CURLY@[64; 65)
 | 
			
		||||
      WHITESPACE@[65; 66)
 | 
			
		||||
  FN_ITEM@[66; 98)
 | 
			
		||||
    VISIBILITY@[66; 88)
 | 
			
		||||
      PUB_KW@[66; 69)
 | 
			
		||||
@ -86,7 +90,8 @@ FILE@[0; 98)
 | 
			
		||||
      IDENT@[91; 92) "e"
 | 
			
		||||
    L_PAREN@[92; 93)
 | 
			
		||||
    R_PAREN@[93; 94)
 | 
			
		||||
    WHITESPACE@[94; 95)
 | 
			
		||||
    L_CURLY@[95; 96)
 | 
			
		||||
    R_CURLY@[96; 97)
 | 
			
		||||
    WHITESPACE@[97; 98)
 | 
			
		||||
    BLOCK@[94; 98)
 | 
			
		||||
      WHITESPACE@[94; 95)
 | 
			
		||||
      L_CURLY@[95; 96)
 | 
			
		||||
      R_CURLY@[96; 97)
 | 
			
		||||
      WHITESPACE@[97; 98)
 | 
			
		||||
 | 
			
		||||
@ -18,7 +18,8 @@ FILE@[0; 23)
 | 
			
		||||
      IDENT@[14; 17) "foo"
 | 
			
		||||
    L_PAREN@[17; 18)
 | 
			
		||||
    R_PAREN@[18; 19)
 | 
			
		||||
    WHITESPACE@[19; 20)
 | 
			
		||||
    L_CURLY@[20; 21)
 | 
			
		||||
    R_CURLY@[21; 22)
 | 
			
		||||
    WHITESPACE@[22; 23)
 | 
			
		||||
    BLOCK@[19; 23)
 | 
			
		||||
      WHITESPACE@[19; 20)
 | 
			
		||||
      L_CURLY@[20; 21)
 | 
			
		||||
      R_CURLY@[21; 22)
 | 
			
		||||
      WHITESPACE@[22; 23)
 | 
			
		||||
 | 
			
		||||
@ -9,11 +9,12 @@ FILE@[0; 71)
 | 
			
		||||
      IDENT@[10; 13) "foo"
 | 
			
		||||
    L_PAREN@[13; 14)
 | 
			
		||||
    R_PAREN@[14; 15)
 | 
			
		||||
    WHITESPACE@[15; 16)
 | 
			
		||||
    L_CURLY@[16; 17)
 | 
			
		||||
    WHITESPACE@[17; 18)
 | 
			
		||||
    R_CURLY@[18; 19)
 | 
			
		||||
    WHITESPACE@[19; 21)
 | 
			
		||||
    BLOCK@[15; 21)
 | 
			
		||||
      WHITESPACE@[15; 16)
 | 
			
		||||
      L_CURLY@[16; 17)
 | 
			
		||||
      WHITESPACE@[17; 18)
 | 
			
		||||
      R_CURLY@[18; 19)
 | 
			
		||||
      WHITESPACE@[19; 21)
 | 
			
		||||
  FN_ITEM@[21; 46)
 | 
			
		||||
    ABI@[21; 32)
 | 
			
		||||
      EXTERN_KW@[21; 27)
 | 
			
		||||
@ -26,11 +27,12 @@ FILE@[0; 71)
 | 
			
		||||
      IDENT@[35; 38) "bar"
 | 
			
		||||
    L_PAREN@[38; 39)
 | 
			
		||||
    R_PAREN@[39; 40)
 | 
			
		||||
    WHITESPACE@[40; 41)
 | 
			
		||||
    L_CURLY@[41; 42)
 | 
			
		||||
    WHITESPACE@[42; 43)
 | 
			
		||||
    R_CURLY@[43; 44)
 | 
			
		||||
    WHITESPACE@[44; 46)
 | 
			
		||||
    BLOCK@[40; 46)
 | 
			
		||||
      WHITESPACE@[40; 41)
 | 
			
		||||
      L_CURLY@[41; 42)
 | 
			
		||||
      WHITESPACE@[42; 43)
 | 
			
		||||
      R_CURLY@[43; 44)
 | 
			
		||||
      WHITESPACE@[44; 46)
 | 
			
		||||
  FN_ITEM@[46; 71)
 | 
			
		||||
    ABI@[46; 58)
 | 
			
		||||
      EXTERN_KW@[46; 52)
 | 
			
		||||
@ -43,8 +45,9 @@ FILE@[0; 71)
 | 
			
		||||
      IDENT@[61; 64) "baz"
 | 
			
		||||
    L_PAREN@[64; 65)
 | 
			
		||||
    R_PAREN@[65; 66)
 | 
			
		||||
    WHITESPACE@[66; 67)
 | 
			
		||||
    L_CURLY@[67; 68)
 | 
			
		||||
    WHITESPACE@[68; 69)
 | 
			
		||||
    R_CURLY@[69; 70)
 | 
			
		||||
    WHITESPACE@[70; 71)
 | 
			
		||||
    BLOCK@[66; 71)
 | 
			
		||||
      WHITESPACE@[66; 67)
 | 
			
		||||
      L_CURLY@[67; 68)
 | 
			
		||||
      WHITESPACE@[68; 69)
 | 
			
		||||
      R_CURLY@[69; 70)
 | 
			
		||||
      WHITESPACE@[70; 71)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user