diff --git a/config.yml b/config.yml index ba28eb2a2..a760020e8 100644 --- a/config.yml +++ b/config.yml @@ -332,3 +332,9 @@ nodes: - name: prefix_location - name: overloads - name: vertical_bar_locations + - name: RBS::AST::Ruby::Annotations::SkipAnnotation + fields: + - name: location + - name: prefix_location + - name: skip_location + - name: comment_location diff --git a/ext/rbs_extension/lexer.c b/ext/rbs_extension/lexer.c index 880786046..82e530725 100644 --- a/ext/rbs_extension/lexer.c +++ b/ext/rbs_extension/lexer.c @@ -115,13 +115,13 @@ token rbsparser_next_token(lexstate *state) { } yy1: rbs_skip(state); -#line 145 "ext/rbs_extension/lexer.re" +#line 147 "ext/rbs_extension/lexer.re" { return next_eof_token(state); } #line 121 "ext/rbs_extension/lexer.c" yy2: rbs_skip(state); yy3: -#line 146 "ext/rbs_extension/lexer.re" +#line 148 "ext/rbs_extension/lexer.re" { return next_token(state, ErrorToken); } #line 127 "ext/rbs_extension/lexer.c" yy4: @@ -130,7 +130,7 @@ token rbsparser_next_token(lexstate *state) { if (yych == '\t') goto yy4; if (yych == ' ') goto yy4; yy5: -#line 144 "ext/rbs_extension/lexer.re" +#line 146 "ext/rbs_extension/lexer.re" { return next_token(state, tTRIVIA); } #line 136 "ext/rbs_extension/lexer.c" yy6: @@ -158,7 +158,7 @@ token rbsparser_next_token(lexstate *state) { if (yych <= 0x00000000) goto yy11; if (yych != '\n') goto yy10; yy11: -#line 59 "ext/rbs_extension/lexer.re" +#line 60 "ext/rbs_extension/lexer.re" { return next_token( state, @@ -263,25 +263,32 @@ token rbsparser_next_token(lexstate *state) { yy21: rbs_skip(state); yych = peek(state); - if (yych <= '=') { - if (yych <= '/') goto yy8; - if (yych <= '9') goto yy25; - goto yy8; - } else { - if (yych <= '>') goto yy81; - if (yych == '@') goto yy24; - goto yy8; + switch (yych) { + case '-': goto yy81; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy25; + case '>': goto yy82; + case '@': goto yy24; + default: goto yy8; } yy22: yyaccept = 2; rbs_skip(state); backup = *state; yych = peek(state); - if (yych == '.') goto yy82; + if (yych == '.') goto yy83; yy23: #line 37 "ext/rbs_extension/lexer.re" { return next_token(state, pDOT); } -#line 285 "ext/rbs_extension/lexer.c" +#line 292 "ext/rbs_extension/lexer.c" yy24: rbs_skip(state); goto yy8; @@ -292,34 +299,34 @@ token rbsparser_next_token(lexstate *state) { if (yych <= '9') goto yy25; if (yych == '_') goto yy25; yy26: -#line 51 "ext/rbs_extension/lexer.re" +#line 52 "ext/rbs_extension/lexer.re" { return next_token(state, tINTEGER); } -#line 298 "ext/rbs_extension/lexer.c" +#line 305 "ext/rbs_extension/lexer.c" yy27: yyaccept = 3; rbs_skip(state); backup = *state; yych = peek(state); switch (yych) { - case '!': goto yy83; - case '"': goto yy85; - case '$': goto yy86; + case '!': goto yy84; + case '"': goto yy86; + case '$': goto yy87; case '%': case '&': case '/': case '^': case '`': case '|': - case '~': goto yy87; - case '\'': goto yy88; - case '*': goto yy89; + case '~': goto yy88; + case '\'': goto yy89; + case '*': goto yy90; case '+': - case '-': goto yy90; - case ':': goto yy91; - case '<': goto yy92; - case '=': goto yy93; - case '>': goto yy94; - case '@': goto yy95; + case '-': goto yy91; + case ':': goto yy92; + case '<': goto yy93; + case '=': goto yy94; + case '>': goto yy95; + case '@': goto yy96; case 'A': case 'B': case 'C': @@ -372,38 +379,38 @@ token rbsparser_next_token(lexstate *state) { case 'w': case 'x': case 'y': - case 'z': goto yy96; - case '[': goto yy98; + case 'z': goto yy97; + case '[': goto yy99; default: goto yy28; } yy28: #line 44 "ext/rbs_extension/lexer.re" { return next_token(state, pCOLON); } -#line 383 "ext/rbs_extension/lexer.c" +#line 390 "ext/rbs_extension/lexer.c" yy29: rbs_skip(state); yych = peek(state); if (yych <= ';') goto yy30; if (yych <= '<') goto yy24; - if (yych <= '=') goto yy99; + if (yych <= '=') goto yy100; yy30: #line 46 "ext/rbs_extension/lexer.re" { return next_token(state, pLT); } -#line 393 "ext/rbs_extension/lexer.c" +#line 400 "ext/rbs_extension/lexer.c" yy31: rbs_skip(state); yych = peek(state); if (yych <= '>') { if (yych <= '<') goto yy32; - if (yych <= '=') goto yy100; - goto yy101; + if (yych <= '=') goto yy101; + goto yy102; } else { if (yych == '~') goto yy24; } yy32: #line 43 "ext/rbs_extension/lexer.re" { return next_token(state, pEQ); } -#line 407 "ext/rbs_extension/lexer.c" +#line 414 "ext/rbs_extension/lexer.c" yy33: rbs_skip(state); yych = peek(state); @@ -414,7 +421,7 @@ token rbsparser_next_token(lexstate *state) { rbs_skip(state); #line 34 "ext/rbs_extension/lexer.re" { return next_token(state, pQUESTION); } -#line 418 "ext/rbs_extension/lexer.c" +#line 425 "ext/rbs_extension/lexer.c" yy35: yyaccept = 0; rbs_skip(state); @@ -423,19 +430,19 @@ token rbsparser_next_token(lexstate *state) { if (yych <= '_') { if (yych <= '@') { if (yych <= '?') goto yy3; - goto yy102; + goto yy103; } else { - if (yych <= 'Z') goto yy103; + if (yych <= 'Z') goto yy104; if (yych <= '^') goto yy3; - goto yy103; + goto yy104; } } else { if (yych <= 'q') { if (yych <= '`') goto yy3; - goto yy103; + goto yy104; } else { - if (yych <= 'r') goto yy106; - if (yych <= 'z') goto yy103; + if (yych <= 'r') goto yy107; + if (yych <= 'z') goto yy104; goto yy3; } } @@ -444,10 +451,10 @@ token rbsparser_next_token(lexstate *state) { yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy36; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { @@ -459,50 +466,50 @@ token rbsparser_next_token(lexstate *state) { } } yy37: -#line 130 "ext/rbs_extension/lexer.re" +#line 132 "ext/rbs_extension/lexer.re" { return next_token(state, tUIDENT); } -#line 465 "ext/rbs_extension/lexer.c" +#line 472 "ext/rbs_extension/lexer.c" yy38: rbs_skip(state); yych = peek(state); - if (yych == ']') goto yy109; + if (yych == ']') goto yy110; #line 26 "ext/rbs_extension/lexer.re" { return next_token(state, pLBRACKET); } -#line 472 "ext/rbs_extension/lexer.c" +#line 479 "ext/rbs_extension/lexer.c" yy39: rbs_skip(state); #line 27 "ext/rbs_extension/lexer.re" { return next_token(state, pRBRACKET); } -#line 477 "ext/rbs_extension/lexer.c" +#line 484 "ext/rbs_extension/lexer.c" yy40: rbs_skip(state); #line 32 "ext/rbs_extension/lexer.re" { return next_token(state, pHAT); } -#line 482 "ext/rbs_extension/lexer.c" +#line 489 "ext/rbs_extension/lexer.c" yy41: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { - if (yych <= '9') goto yy110; - if (yych >= '=') goto yy108; + if (yych <= '9') goto yy111; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { if (yych <= '@') goto yy42; - if (yych <= 'Z') goto yy113; + if (yych <= 'Z') goto yy114; } else { - if (yych <= '_') goto yy115; + if (yych <= '_') goto yy116; if (yych <= '`') goto yy42; - if (yych <= 'z') goto yy110; + if (yych <= 'z') goto yy111; } } yy42: -#line 133 "ext/rbs_extension/lexer.re" +#line 135 "ext/rbs_extension/lexer.re" { return next_token(state, tULLIDENT); } -#line 506 "ext/rbs_extension/lexer.c" +#line 513 "ext/rbs_extension/lexer.c" yy43: yyaccept = 4; rbs_skip(state); @@ -510,54 +517,54 @@ token rbsparser_next_token(lexstate *state) { yych = peek(state); if (yych <= ' ') { if (yych <= 0x00000000) goto yy44; - if (yych <= 0x0000001F) goto yy116; + if (yych <= 0x0000001F) goto yy117; } else { - if (yych != ':') goto yy116; + if (yych != ':') goto yy117; } yy44: #line 39 "ext/rbs_extension/lexer.re" { return next_token(state, tOPERATOR); } -#line 521 "ext/rbs_extension/lexer.c" +#line 528 "ext/rbs_extension/lexer.c" yy45: rbs_skip(state); yych = peek(state); if (yych <= 'r') { - if (yych == 'l') goto yy117; + if (yych == 'l') goto yy118; goto yy53; } else { - if (yych <= 's') goto yy118; - if (yych <= 't') goto yy120; + if (yych <= 's') goto yy119; + if (yych <= 't') goto yy121; goto yy53; } yy46: -#line 129 "ext/rbs_extension/lexer.re" +#line 131 "ext/rbs_extension/lexer.re" { return next_token(state, tLIDENT); } -#line 536 "ext/rbs_extension/lexer.c" +#line 543 "ext/rbs_extension/lexer.c" yy47: rbs_skip(state); yych = peek(state); - if (yych == 'o') goto yy121; + if (yych == 'o') goto yy122; goto yy53; yy48: rbs_skip(state); yych = peek(state); - if (yych == 'l') goto yy122; + if (yych == 'l') goto yy123; goto yy53; yy49: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy123; + if (yych == 'e') goto yy124; goto yy53; yy50: rbs_skip(state); yych = peek(state); - if (yych == 'n') goto yy124; - if (yych == 'x') goto yy125; + if (yych == 'n') goto yy125; + if (yych == 'x') goto yy126; goto yy53; yy51: rbs_skip(state); yych = peek(state); - if (yych == 'a') goto yy126; + if (yych == 'a') goto yy127; goto yy53; yy52: rbs_skip(state); @@ -565,12 +572,12 @@ token rbsparser_next_token(lexstate *state) { yy53: if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; goto yy46; } else { if (yych <= '9') goto yy52; if (yych <= '<') goto yy46; - goto yy108; + goto yy109; } } else { if (yych <= '^') { @@ -586,72 +593,77 @@ token rbsparser_next_token(lexstate *state) { yy54: rbs_skip(state); yych = peek(state); - if (yych == 'n') goto yy127; + if (yych == 'n') goto yy128; goto yy53; yy55: rbs_skip(state); yych = peek(state); - if (yych == 'o') goto yy129; + if (yych == 'o') goto yy130; goto yy53; yy56: rbs_skip(state); yych = peek(state); - if (yych == 'i') goto yy130; + if (yych == 'i') goto yy131; goto yy53; yy57: rbs_skip(state); yych = peek(state); - if (yych == 'u') goto yy131; + if (yych == 'u') goto yy132; goto yy53; yy58: rbs_skip(state); yych = peek(state); - if (yych == 'r') goto yy132; - if (yych == 'u') goto yy133; + if (yych == 'r') goto yy133; + if (yych == 'u') goto yy134; goto yy53; yy59: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy134; - if (yych == 'i') goto yy135; - goto yy53; + if (yych <= 'h') { + if (yych == 'e') goto yy135; + goto yy53; + } else { + if (yych <= 'i') goto yy136; + if (yych == 'k') goto yy137; + goto yy53; + } yy60: rbs_skip(state); yych = peek(state); if (yych <= 'q') { - if (yych == 'o') goto yy136; + if (yych == 'o') goto yy138; goto yy53; } else { - if (yych <= 'r') goto yy137; - if (yych == 'y') goto yy138; + if (yych <= 'r') goto yy139; + if (yych == 'y') goto yy140; goto yy53; } yy61: rbs_skip(state); yych = peek(state); - if (yych == 'n') goto yy139; - if (yych == 's') goto yy140; + if (yych == 'n') goto yy141; + if (yych == 's') goto yy142; goto yy53; yy62: rbs_skip(state); yych = peek(state); - if (yych == 'o') goto yy141; + if (yych == 'o') goto yy143; goto yy53; yy63: rbs_skip(state); #line 28 "ext/rbs_extension/lexer.re" { return next_token(state, pLBRACE); } -#line 645 "ext/rbs_extension/lexer.c" +#line 657 "ext/rbs_extension/lexer.c" yy64: rbs_skip(state); #line 31 "ext/rbs_extension/lexer.re" { return next_token(state, pBAR); } -#line 650 "ext/rbs_extension/lexer.c" +#line 662 "ext/rbs_extension/lexer.c" yy65: rbs_skip(state); #line 29 "ext/rbs_extension/lexer.re" { return next_token(state, pRBRACE); } -#line 655 "ext/rbs_extension/lexer.c" +#line 667 "ext/rbs_extension/lexer.c" yy66: rbs_skip(state); yych = peek(state); @@ -688,19 +700,19 @@ token rbsparser_next_token(lexstate *state) { goto yy78; } } else { - goto yy157; + goto yy159; } } yy69: rbs_skip(state); -#line 107 "ext/rbs_extension/lexer.re" +#line 109 "ext/rbs_extension/lexer.re" { return next_token(state, tDQSTRING); } -#line 699 "ext/rbs_extension/lexer.c" +#line 711 "ext/rbs_extension/lexer.c" yy70: rbs_skip(state); yych = peek(state); - if (yych == 'u') goto yy142; - if (yych == 'x') goto yy143; + if (yych == 'u') goto yy144; + if (yych == 'x') goto yy145; goto yy66; yy71: rbs_skip(state); @@ -732,9 +744,9 @@ token rbsparser_next_token(lexstate *state) { } } yy72: -#line 140 "ext/rbs_extension/lexer.re" +#line 142 "ext/rbs_extension/lexer.re" { return next_token(state, tGIDENT); } -#line 738 "ext/rbs_extension/lexer.c" +#line 750 "ext/rbs_extension/lexer.c" yy73: rbs_skip(state); goto yy72; @@ -744,18 +756,18 @@ token rbsparser_next_token(lexstate *state) { if (yych <= 'Z') { if (yych <= '(') { if (yych <= '\'') goto yy68; - goto yy144; + goto yy146; } else { - if (yych == '<') goto yy145; + if (yych == '<') goto yy147; goto yy68; } } else { if (yych <= 'z') { - if (yych <= '[') goto yy146; + if (yych <= '[') goto yy148; goto yy68; } else { - if (yych <= '{') goto yy147; - if (yych <= '|') goto yy148; + if (yych <= '{') goto yy149; + if (yych <= '|') goto yy150; goto yy68; } } @@ -773,16 +785,16 @@ token rbsparser_next_token(lexstate *state) { yy77: rbs_skip(state); yy78: -#line 108 "ext/rbs_extension/lexer.re" +#line 110 "ext/rbs_extension/lexer.re" { return next_token(state, tSQSTRING); } -#line 779 "ext/rbs_extension/lexer.c" +#line 791 "ext/rbs_extension/lexer.c" yy79: rbs_skip(state); yych = peek(state); if (yych <= '\'') { if (yych <= 0x00000000) goto yy68; if (yych <= '&') goto yy75; - goto yy149; + goto yy151; } else { if (yych == '\\') goto yy79; goto yy75; @@ -791,443 +803,445 @@ token rbsparser_next_token(lexstate *state) { rbs_skip(state); #line 36 "ext/rbs_extension/lexer.re" { return next_token(state, pSTAR2); } -#line 795 "ext/rbs_extension/lexer.c" +#line 807 "ext/rbs_extension/lexer.c" yy81: rbs_skip(state); + yych = peek(state); + if (yych >= 0x00000001) goto yy81; +#line 49 "ext/rbs_extension/lexer.re" + { return next_token(state, tINLINECOMMENT); } +#line 814 "ext/rbs_extension/lexer.c" +yy82: + rbs_skip(state); #line 41 "ext/rbs_extension/lexer.re" { return next_token(state, pARROW); } -#line 800 "ext/rbs_extension/lexer.c" -yy82: +#line 819 "ext/rbs_extension/lexer.c" +yy83: rbs_skip(state); yych = peek(state); - if (yych == '.') goto yy150; + if (yych == '.') goto yy152; goto yy68; -yy83: +yy84: rbs_skip(state); yych = peek(state); - if (yych == '=') goto yy87; - if (yych == '~') goto yy87; -yy84: -#line 127 "ext/rbs_extension/lexer.re" - { return next_token(state, tSYMBOL); } -#line 814 "ext/rbs_extension/lexer.c" + if (yych == '=') goto yy88; + if (yych == '~') goto yy88; yy85: +#line 129 "ext/rbs_extension/lexer.re" + { return next_token(state, tSYMBOL); } +#line 833 "ext/rbs_extension/lexer.c" +yy86: rbs_skip(state); yych = peek(state); if (yych <= '"') { if (yych <= 0x00000000) goto yy68; - if (yych <= '!') goto yy85; - goto yy151; + if (yych <= '!') goto yy86; + goto yy153; } else { - if (yych == '\\') goto yy152; - goto yy85; + if (yych == '\\') goto yy154; + goto yy86; } -yy86: +yy87: rbs_skip(state); yych = peek(state); if (yych <= ')') { if (yych <= 0x0000001F) { if (yych <= '\n') { if (yych <= 0x00000000) goto yy68; - if (yych <= 0x00000008) goto yy153; + if (yych <= 0x00000008) goto yy155; goto yy68; } else { if (yych == '\r') goto yy68; - goto yy153; + goto yy155; } } else { if (yych <= '#') { if (yych <= ' ') goto yy68; - if (yych <= '"') goto yy155; - goto yy153; + if (yych <= '"') goto yy157; + goto yy155; } else { if (yych == '%') goto yy68; - if (yych <= '\'') goto yy155; + if (yych <= '\'') goto yy157; goto yy68; } } } else { if (yych <= 'Z') { if (yych <= '/') { - if (yych == '-') goto yy153; - goto yy155; + if (yych == '-') goto yy155; + goto yy157; } else { - if (yych <= '9') goto yy153; - if (yych <= '>') goto yy155; - goto yy153; + if (yych <= '9') goto yy155; + if (yych <= '>') goto yy157; + goto yy155; } } else { if (yych <= '^') { - if (yych == '\\') goto yy155; + if (yych == '\\') goto yy157; goto yy68; } else { - if (yych <= 'z') goto yy153; + if (yych <= 'z') goto yy155; if (yych <= '}') goto yy68; - if (yych <= '~') goto yy155; - goto yy153; + if (yych <= '~') goto yy157; + goto yy155; } } } -yy87: - rbs_skip(state); - goto yy84; yy88: + rbs_skip(state); + goto yy85; +yy89: rbs_skip(state); yych = peek(state); if (yych <= '\'') { if (yych <= 0x00000000) goto yy68; - if (yych <= '&') goto yy88; - goto yy156; + if (yych <= '&') goto yy89; + goto yy158; } else { - if (yych == '\\') goto yy158; - goto yy88; + if (yych == '\\') goto yy160; + goto yy89; } -yy89: - rbs_skip(state); - yych = peek(state); - if (yych == '*') goto yy87; - goto yy84; yy90: rbs_skip(state); yych = peek(state); - if (yych == '@') goto yy87; - goto yy84; + if (yych == '*') goto yy88; + goto yy85; yy91: rbs_skip(state); -#line 45 "ext/rbs_extension/lexer.re" - { return next_token(state, pCOLON2); } -#line 900 "ext/rbs_extension/lexer.c" + yych = peek(state); + if (yych == '@') goto yy88; + goto yy85; yy92: rbs_skip(state); - yych = peek(state); - if (yych <= ';') goto yy84; - if (yych <= '<') goto yy87; - if (yych <= '=') goto yy159; - goto yy84; +#line 45 "ext/rbs_extension/lexer.re" + { return next_token(state, pCOLON2); } +#line 919 "ext/rbs_extension/lexer.c" yy93: rbs_skip(state); yych = peek(state); - if (yych == '=') goto yy160; - if (yych == '~') goto yy87; - goto yy68; + if (yych <= ';') goto yy85; + if (yych <= '<') goto yy88; + if (yych <= '=') goto yy161; + goto yy85; yy94: rbs_skip(state); yych = peek(state); - if (yych <= '<') goto yy84; - if (yych <= '>') goto yy87; - goto yy84; + if (yych == '=') goto yy162; + if (yych == '~') goto yy88; + goto yy68; yy95: + rbs_skip(state); + yych = peek(state); + if (yych <= '<') goto yy85; + if (yych <= '>') goto yy88; + goto yy85; +yy96: rbs_skip(state); yych = peek(state); if (yych <= '^') { if (yych <= '?') goto yy68; - if (yych <= '@') goto yy161; - if (yych <= 'Z') goto yy162; + if (yych <= '@') goto yy163; + if (yych <= 'Z') goto yy164; goto yy68; } else { if (yych == '`') goto yy68; - if (yych <= 'z') goto yy162; + if (yych <= 'z') goto yy164; goto yy68; } -yy96: +yy97: rbs_skip(state); yych = peek(state); if (yych <= '>') { if (yych <= '/') { - if (yych == '!') goto yy164; + if (yych == '!') goto yy166; } else { - if (yych <= '9') goto yy96; - if (yych == '=') goto yy164; + if (yych <= '9') goto yy97; + if (yych == '=') goto yy166; } } else { if (yych <= '^') { - if (yych <= '?') goto yy164; - if (yych <= '@') goto yy97; - if (yych <= 'Z') goto yy96; + if (yych <= '?') goto yy166; + if (yych <= '@') goto yy98; + if (yych <= 'Z') goto yy97; } else { - if (yych == '`') goto yy97; - if (yych <= 'z') goto yy96; + if (yych == '`') goto yy98; + if (yych <= 'z') goto yy97; } } -yy97: -#line 123 "ext/rbs_extension/lexer.re" - { return next_token(state, tSYMBOL); } -#line 956 "ext/rbs_extension/lexer.c" yy98: +#line 125 "ext/rbs_extension/lexer.re" + { return next_token(state, tSYMBOL); } +#line 975 "ext/rbs_extension/lexer.c" +yy99: rbs_skip(state); yych = peek(state); - if (yych == ']') goto yy160; + if (yych == ']') goto yy162; goto yy68; -yy99: +yy100: rbs_skip(state); yych = peek(state); if (yych == '>') goto yy24; goto yy8; -yy100: +yy101: rbs_skip(state); yych = peek(state); if (yych == '=') goto yy24; goto yy8; -yy101: +yy102: rbs_skip(state); #line 42 "ext/rbs_extension/lexer.re" { return next_token(state, pFATARROW); } -#line 976 "ext/rbs_extension/lexer.c" -yy102: +#line 995 "ext/rbs_extension/lexer.c" +yy103: rbs_skip(state); yych = peek(state); if (yych <= '^') { if (yych <= '@') goto yy68; - if (yych <= 'Z') goto yy165; + if (yych <= 'Z') goto yy167; goto yy68; } else { if (yych == '`') goto yy68; - if (yych <= 'z') goto yy165; + if (yych <= 'z') goto yy167; goto yy68; } -yy103: +yy104: rbs_skip(state); yych = peek(state); -yy104: +yy105: if (yych <= 'Z') { - if (yych <= '/') goto yy105; - if (yych <= '9') goto yy103; - if (yych >= 'A') goto yy103; + if (yych <= '/') goto yy106; + if (yych <= '9') goto yy104; + if (yych >= 'A') goto yy104; } else { if (yych <= '_') { - if (yych >= '_') goto yy103; + if (yych >= '_') goto yy104; } else { - if (yych <= '`') goto yy105; - if (yych <= 'z') goto yy103; + if (yych <= '`') goto yy106; + if (yych <= 'z') goto yy104; } } -yy105: -#line 137 "ext/rbs_extension/lexer.re" - { return next_token(state, tAIDENT); } -#line 1008 "ext/rbs_extension/lexer.c" yy106: +#line 139 "ext/rbs_extension/lexer.re" + { return next_token(state, tAIDENT); } +#line 1027 "ext/rbs_extension/lexer.c" +yy107: rbs_skip(state); yych = peek(state); - if (yych == 'b') goto yy167; - goto yy104; -yy107: + if (yych == 'b') goto yy169; + goto yy105; +yy108: rbs_skip(state); -#line 134 "ext/rbs_extension/lexer.re" +#line 136 "ext/rbs_extension/lexer.re" { return next_token(state, tBANGIDENT); } -#line 1018 "ext/rbs_extension/lexer.c" -yy108: +#line 1037 "ext/rbs_extension/lexer.c" +yy109: rbs_skip(state); -#line 135 "ext/rbs_extension/lexer.re" +#line 137 "ext/rbs_extension/lexer.re" { return next_token(state, tEQIDENT); } -#line 1023 "ext/rbs_extension/lexer.c" -yy109: +#line 1042 "ext/rbs_extension/lexer.c" +yy110: rbs_skip(state); yych = peek(state); if (yych == '=') goto yy24; #line 47 "ext/rbs_extension/lexer.re" { return next_token(state, pAREF_OPR); } -#line 1030 "ext/rbs_extension/lexer.c" -yy110: +#line 1049 "ext/rbs_extension/lexer.c" +yy111: rbs_skip(state); yych = peek(state); -yy111: +yy112: if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { - if (yych <= '9') goto yy110; - if (yych >= '=') goto yy108; + if (yych <= '9') goto yy111; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy112; - if (yych <= 'Z') goto yy110; + if (yych <= '@') goto yy113; + if (yych <= 'Z') goto yy111; } else { - if (yych == '`') goto yy112; - if (yych <= 'z') goto yy110; + if (yych == '`') goto yy113; + if (yych <= 'z') goto yy111; } } -yy112: -#line 131 "ext/rbs_extension/lexer.re" - { return next_token(state, tULLIDENT); } -#line 1054 "ext/rbs_extension/lexer.c" yy113: +#line 133 "ext/rbs_extension/lexer.re" + { return next_token(state, tULLIDENT); } +#line 1073 "ext/rbs_extension/lexer.c" +yy114: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { - if (yych <= '9') goto yy113; - if (yych >= '=') goto yy108; + if (yych <= '9') goto yy114; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy114; - if (yych <= 'Z') goto yy113; + if (yych <= '@') goto yy115; + if (yych <= 'Z') goto yy114; } else { - if (yych == '`') goto yy114; - if (yych <= 'z') goto yy113; + if (yych == '`') goto yy115; + if (yych <= 'z') goto yy114; } } -yy114: -#line 132 "ext/rbs_extension/lexer.re" - { return next_token(state, tULIDENT); } -#line 1077 "ext/rbs_extension/lexer.c" yy115: +#line 134 "ext/rbs_extension/lexer.re" + { return next_token(state, tULIDENT); } +#line 1096 "ext/rbs_extension/lexer.c" +yy116: rbs_skip(state); yych = peek(state); - if (yych == 't') goto yy168; - goto yy111; -yy116: + if (yych == 't') goto yy170; + goto yy112; +yy117: rbs_skip(state); yych = peek(state); if (yych <= 0x00000000) goto yy68; - if (yych == '`') goto yy169; - goto yy116; -yy117: + if (yych == '`') goto yy171; + goto yy117; +yy118: rbs_skip(state); yych = peek(state); - if (yych == 'i') goto yy170; + if (yych == 'i') goto yy172; goto yy53; -yy118: +yy119: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy119; + if (yych <= '@') goto yy120; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy119; + if (yych == '`') goto yy120; if (yych <= 'z') goto yy52; } } -yy119: -#line 96 "ext/rbs_extension/lexer.re" - { return next_token(state, kAS); } -#line 1116 "ext/rbs_extension/lexer.c" yy120: - rbs_skip(state); - yych = peek(state); - if (yych == 't') goto yy171; - goto yy53; +#line 97 "ext/rbs_extension/lexer.re" + { return next_token(state, kAS); } +#line 1135 "ext/rbs_extension/lexer.c" yy121: rbs_skip(state); yych = peek(state); - if (yych == 'o') goto yy172; if (yych == 't') goto yy173; goto yy53; yy122: rbs_skip(state); yych = peek(state); - if (yych == 'a') goto yy175; + if (yych == 'o') goto yy174; + if (yych == 't') goto yy175; goto yy53; yy123: rbs_skip(state); yych = peek(state); - if (yych == 'f') goto yy176; + if (yych == 'a') goto yy177; goto yy53; yy124: rbs_skip(state); yych = peek(state); - if (yych == 'd') goto yy178; + if (yych == 'f') goto yy178; goto yy53; yy125: rbs_skip(state); yych = peek(state); - if (yych == 't') goto yy180; + if (yych == 'd') goto yy180; goto yy53; yy126: rbs_skip(state); yych = peek(state); - if (yych == 'l') goto yy181; + if (yych == 't') goto yy182; goto yy53; yy127: + rbs_skip(state); + yych = peek(state); + if (yych == 'l') goto yy183; + goto yy53; +yy128: rbs_skip(state); yych = peek(state); if (yych <= '^') { if (yych <= '9') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; if (yych >= '0') goto yy52; } else { if (yych <= '=') { - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } else { - if (yych <= '@') goto yy128; + if (yych <= '@') goto yy129; if (yych <= 'Z') goto yy52; } } } else { if (yych <= 'c') { - if (yych == '`') goto yy128; + if (yych == '`') goto yy129; if (yych <= 'b') goto yy52; - goto yy182; + goto yy184; } else { if (yych <= 's') { if (yych <= 'r') goto yy52; - goto yy183; + goto yy185; } else { - if (yych <= 't') goto yy184; + if (yych <= 't') goto yy186; if (yych <= 'z') goto yy52; } } } -yy128: -#line 77 "ext/rbs_extension/lexer.re" - { return next_token(state, kIN); } -#line 1186 "ext/rbs_extension/lexer.c" yy129: - rbs_skip(state); - yych = peek(state); - if (yych == 'd') goto yy185; - goto yy53; +#line 78 "ext/rbs_extension/lexer.re" + { return next_token(state, kIN); } +#line 1205 "ext/rbs_extension/lexer.c" yy130: rbs_skip(state); yych = peek(state); - if (yych == 'l') goto yy186; + if (yych == 'd') goto yy187; goto yy53; yy131: rbs_skip(state); yych = peek(state); - if (yych == 't') goto yy188; + if (yych == 'l') goto yy188; goto yy53; yy132: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy190; - if (yych == 'i') goto yy191; + if (yych == 't') goto yy190; goto yy53; yy133: rbs_skip(state); yych = peek(state); - if (yych == 'b') goto yy192; + if (yych == 'e') goto yy192; + if (yych == 'i') goto yy193; goto yy53; yy134: rbs_skip(state); yych = peek(state); - if (yych == 'l') goto yy193; + if (yych == 'b') goto yy194; goto yy53; yy135: rbs_skip(state); yych = peek(state); - if (yych == 'n') goto yy194; + if (yych == 'l') goto yy195; goto yy53; yy136: rbs_skip(state); yych = peek(state); - if (yych == 'p') goto yy195; + if (yych == 'n') goto yy196; goto yy53; yy137: rbs_skip(state); yych = peek(state); - if (yych == 'u') goto yy197; + if (yych == 'i') goto yy197; goto yy53; yy138: rbs_skip(state); @@ -1237,33 +1251,43 @@ token rbsparser_next_token(lexstate *state) { yy139: rbs_skip(state); yych = peek(state); - if (yych == 'c') goto yy199; - if (yych == 't') goto yy200; + if (yych == 'u') goto yy200; goto yy53; yy140: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy201; + if (yych == 'p') goto yy201; goto yy53; yy141: rbs_skip(state); yych = peek(state); - if (yych == 'i') goto yy203; + if (yych == 'c') goto yy202; + if (yych == 't') goto yy203; goto yy53; yy142: + rbs_skip(state); + yych = peek(state); + if (yych == 'e') goto yy204; + goto yy53; +yy143: + rbs_skip(state); + yych = peek(state); + if (yych == 'i') goto yy206; + goto yy53; +yy144: rbs_skip(state); yych = peek(state); if (yych <= '@') { if (yych <= '/') goto yy68; - if (yych <= '9') goto yy204; + if (yych <= '9') goto yy207; goto yy68; } else { - if (yych <= 'F') goto yy204; + if (yych <= 'F') goto yy207; if (yych <= '`') goto yy68; - if (yych <= 'f') goto yy204; + if (yych <= 'f') goto yy207; goto yy68; } -yy143: +yy145: rbs_skip(state); yych = peek(state); if (yych <= '/') goto yy68; @@ -1271,37 +1295,37 @@ token rbsparser_next_token(lexstate *state) { if (yych <= '`') goto yy68; if (yych <= 'f') goto yy66; goto yy68; -yy144: - rbs_skip(state); - yych = peek(state); - if (yych <= 0x00000000) goto yy68; - if (yych == ')') goto yy205; - goto yy144; -yy145: - rbs_skip(state); - yych = peek(state); - if (yych <= 0x00000000) goto yy68; - if (yych == '>') goto yy206; - goto yy145; yy146: rbs_skip(state); yych = peek(state); if (yych <= 0x00000000) goto yy68; - if (yych == ']') goto yy207; + if (yych == ')') goto yy208; goto yy146; yy147: rbs_skip(state); yych = peek(state); if (yych <= 0x00000000) goto yy68; - if (yych == '}') goto yy208; + if (yych == '>') goto yy209; goto yy147; yy148: rbs_skip(state); yych = peek(state); if (yych <= 0x00000000) goto yy68; - if (yych == '|') goto yy209; + if (yych == ']') goto yy210; goto yy148; yy149: + rbs_skip(state); + yych = peek(state); + if (yych <= 0x00000000) goto yy68; + if (yych == '}') goto yy211; + goto yy149; +yy150: + rbs_skip(state); + yych = peek(state); + if (yych <= 0x00000000) goto yy68; + if (yych == '|') goto yy212; + goto yy150; +yy151: yyaccept = 5; rbs_skip(state); backup = *state; @@ -1314,902 +1338,930 @@ token rbsparser_next_token(lexstate *state) { if (yych == '\\') goto yy79; goto yy75; } -yy150: +yy152: rbs_skip(state); #line 38 "ext/rbs_extension/lexer.re" { return next_token(state, pDOT3); } -#line 1322 "ext/rbs_extension/lexer.c" -yy151: +#line 1346 "ext/rbs_extension/lexer.c" +yy153: rbs_skip(state); -#line 109 "ext/rbs_extension/lexer.re" +#line 111 "ext/rbs_extension/lexer.re" { return next_token(state, tDQSYMBOL); } -#line 1327 "ext/rbs_extension/lexer.c" -yy152: +#line 1351 "ext/rbs_extension/lexer.c" +yy154: rbs_skip(state); yych = peek(state); - if (yych == 'u') goto yy210; - if (yych == 'x') goto yy211; - goto yy85; -yy153: + if (yych == 'u') goto yy213; + if (yych == 'x') goto yy214; + goto yy86; +yy155: rbs_skip(state); yych = peek(state); if (yych <= ',') { if (yych <= '\f') { - if (yych <= 0x00000000) goto yy154; - if (yych <= 0x00000008) goto yy153; - if (yych >= '\v') goto yy153; + if (yych <= 0x00000000) goto yy156; + if (yych <= 0x00000008) goto yy155; + if (yych >= '\v') goto yy155; } else { if (yych <= 0x0000001F) { - if (yych >= 0x0000000E) goto yy153; + if (yych >= 0x0000000E) goto yy155; } else { - if (yych == '#') goto yy153; + if (yych == '#') goto yy155; } } } else { if (yych <= '>') { - if (yych <= '-') goto yy153; - if (yych <= '/') goto yy154; - if (yych <= '9') goto yy153; + if (yych <= '-') goto yy155; + if (yych <= '/') goto yy156; + if (yych <= '9') goto yy155; } else { if (yych <= '^') { - if (yych <= 'Z') goto yy153; + if (yych <= 'Z') goto yy155; } else { - if (yych <= 'z') goto yy153; - if (yych >= 0x0000007F) goto yy153; + if (yych <= 'z') goto yy155; + if (yych >= 0x0000007F) goto yy155; } } } -yy154: -#line 126 "ext/rbs_extension/lexer.re" +yy156: +#line 128 "ext/rbs_extension/lexer.re" { return next_token(state, tSYMBOL); } -#line 1366 "ext/rbs_extension/lexer.c" -yy155: +#line 1390 "ext/rbs_extension/lexer.c" +yy157: rbs_skip(state); - goto yy154; -yy156: + goto yy156; +yy158: rbs_skip(state); -yy157: -#line 110 "ext/rbs_extension/lexer.re" +yy159: +#line 112 "ext/rbs_extension/lexer.re" { return next_token(state, tSQSYMBOL); } -#line 1375 "ext/rbs_extension/lexer.c" -yy158: +#line 1399 "ext/rbs_extension/lexer.c" +yy160: rbs_skip(state); yych = peek(state); if (yych <= '\'') { if (yych <= 0x00000000) goto yy68; - if (yych <= '&') goto yy88; - goto yy212; + if (yych <= '&') goto yy89; + goto yy215; } else { - if (yych == '\\') goto yy158; - goto yy88; + if (yych == '\\') goto yy160; + goto yy89; } -yy159: +yy161: rbs_skip(state); yych = peek(state); - if (yych == '>') goto yy87; - goto yy84; -yy160: + if (yych == '>') goto yy88; + goto yy85; +yy162: rbs_skip(state); yych = peek(state); - if (yych == '=') goto yy87; - goto yy84; -yy161: + if (yych == '=') goto yy88; + goto yy85; +yy163: rbs_skip(state); yych = peek(state); if (yych <= '^') { if (yych <= '@') goto yy68; - if (yych <= 'Z') goto yy213; + if (yych <= 'Z') goto yy216; goto yy68; } else { if (yych == '`') goto yy68; - if (yych <= 'z') goto yy213; + if (yych <= 'z') goto yy216; goto yy68; } -yy162: +yy164: rbs_skip(state); yych = peek(state); if (yych <= '>') { if (yych <= '/') { - if (yych == '!') goto yy215; + if (yych == '!') goto yy218; } else { - if (yych <= '9') goto yy162; - if (yych == '=') goto yy215; + if (yych <= '9') goto yy164; + if (yych == '=') goto yy218; } } else { if (yych <= '^') { - if (yych <= '?') goto yy215; - if (yych <= '@') goto yy163; - if (yych <= 'Z') goto yy162; + if (yych <= '?') goto yy218; + if (yych <= '@') goto yy165; + if (yych <= 'Z') goto yy164; } else { - if (yych == '`') goto yy163; - if (yych <= 'z') goto yy162; + if (yych == '`') goto yy165; + if (yych <= 'z') goto yy164; } } -yy163: -#line 124 "ext/rbs_extension/lexer.re" +yy165: +#line 126 "ext/rbs_extension/lexer.re" { return next_token(state, tSYMBOL); } -#line 1432 "ext/rbs_extension/lexer.c" -yy164: +#line 1456 "ext/rbs_extension/lexer.c" +yy166: rbs_skip(state); - goto yy97; -yy165: + goto yy98; +yy167: rbs_skip(state); yych = peek(state); if (yych <= 'Z') { - if (yych <= '/') goto yy166; - if (yych <= '9') goto yy165; - if (yych >= 'A') goto yy165; + if (yych <= '/') goto yy168; + if (yych <= '9') goto yy167; + if (yych >= 'A') goto yy167; } else { if (yych <= '_') { - if (yych >= '_') goto yy165; + if (yych >= '_') goto yy167; } else { - if (yych <= '`') goto yy166; - if (yych <= 'z') goto yy165; + if (yych <= '`') goto yy168; + if (yych <= 'z') goto yy167; } } -yy166: -#line 138 "ext/rbs_extension/lexer.re" +yy168: +#line 140 "ext/rbs_extension/lexer.re" { return next_token(state, tA2IDENT); } -#line 1454 "ext/rbs_extension/lexer.c" -yy167: +#line 1478 "ext/rbs_extension/lexer.c" +yy169: rbs_skip(state); yych = peek(state); - if (yych == 's') goto yy216; - goto yy104; -yy168: + if (yych == 's') goto yy219; + goto yy105; +yy170: rbs_skip(state); yych = peek(state); - if (yych == 'o') goto yy218; - goto yy111; -yy169: + if (yych == 'o') goto yy221; + goto yy112; +yy171: rbs_skip(state); #line 40 "ext/rbs_extension/lexer.re" { return next_token(state, tQIDENT); } -#line 1469 "ext/rbs_extension/lexer.c" -yy170: +#line 1493 "ext/rbs_extension/lexer.c" +yy172: rbs_skip(state); yych = peek(state); - if (yych == 'a') goto yy219; + if (yych == 'a') goto yy222; goto yy53; -yy171: +yy173: rbs_skip(state); yych = peek(state); - if (yych == 'r') goto yy220; + if (yych == 'r') goto yy223; goto yy53; -yy172: +yy174: rbs_skip(state); yych = peek(state); - if (yych == 'l') goto yy221; + if (yych == 'l') goto yy224; goto yy53; -yy173: +yy175: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy174; + if (yych <= '@') goto yy176; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy174; + if (yych == '`') goto yy176; if (yych <= 'z') goto yy52; } } -yy174: -#line 71 "ext/rbs_extension/lexer.re" +yy176: +#line 72 "ext/rbs_extension/lexer.re" { return next_token(state, kBOT); } -#line 1507 "ext/rbs_extension/lexer.c" -yy175: +#line 1531 "ext/rbs_extension/lexer.c" +yy177: rbs_skip(state); yych = peek(state); - if (yych == 's') goto yy223; + if (yych == 's') goto yy226; goto yy53; -yy176: +yy178: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy177; + if (yych <= '@') goto yy179; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy177; + if (yych == '`') goto yy179; if (yych <= 'z') goto yy52; } } -yy177: -#line 73 "ext/rbs_extension/lexer.re" +yy179: +#line 74 "ext/rbs_extension/lexer.re" { return next_token(state, kDEF); } -#line 1535 "ext/rbs_extension/lexer.c" -yy178: +#line 1559 "ext/rbs_extension/lexer.c" +yy180: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy179; + if (yych <= '@') goto yy181; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy179; + if (yych == '`') goto yy181; if (yych <= 'z') goto yy52; } } -yy179: -#line 74 "ext/rbs_extension/lexer.re" +yy181: +#line 75 "ext/rbs_extension/lexer.re" { return next_token(state, kEND); } -#line 1558 "ext/rbs_extension/lexer.c" -yy180: +#line 1582 "ext/rbs_extension/lexer.c" +yy182: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy224; + if (yych == 'e') goto yy227; goto yy53; -yy181: +yy183: rbs_skip(state); yych = peek(state); - if (yych == 's') goto yy225; + if (yych == 's') goto yy228; goto yy53; -yy182: +yy184: rbs_skip(state); yych = peek(state); - if (yych == 'l') goto yy226; + if (yych == 'l') goto yy229; goto yy53; -yy183: +yy185: rbs_skip(state); yych = peek(state); - if (yych == 't') goto yy227; + if (yych == 't') goto yy230; goto yy53; -yy184: +yy186: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy228; + if (yych == 'e') goto yy231; goto yy53; -yy185: +yy187: rbs_skip(state); yych = peek(state); - if (yych == 'u') goto yy229; + if (yych == 'u') goto yy232; goto yy53; -yy186: +yy188: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy187; + if (yych <= '@') goto yy189; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy187; + if (yych == '`') goto yy189; if (yych <= 'z') goto yy52; } } -yy187: -#line 82 "ext/rbs_extension/lexer.re" +yy189: +#line 83 "ext/rbs_extension/lexer.re" { return next_token(state, kNIL); } -#line 1611 "ext/rbs_extension/lexer.c" -yy188: +#line 1635 "ext/rbs_extension/lexer.c" +yy190: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy189; + if (yych <= '@') goto yy191; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy189; + if (yych == '`') goto yy191; if (yych <= 'z') goto yy52; } } -yy189: -#line 83 "ext/rbs_extension/lexer.re" +yy191: +#line 84 "ext/rbs_extension/lexer.re" { return next_token(state, kOUT); } -#line 1634 "ext/rbs_extension/lexer.c" -yy190: +#line 1658 "ext/rbs_extension/lexer.c" +yy192: rbs_skip(state); yych = peek(state); - if (yych == 'p') goto yy230; + if (yych == 'p') goto yy233; goto yy53; -yy191: +yy193: rbs_skip(state); yych = peek(state); - if (yych == 'v') goto yy231; + if (yych == 'v') goto yy234; goto yy53; -yy192: +yy194: rbs_skip(state); yych = peek(state); - if (yych == 'l') goto yy232; + if (yych == 'l') goto yy235; goto yy53; -yy193: +yy195: rbs_skip(state); yych = peek(state); - if (yych == 'f') goto yy233; + if (yych == 'f') goto yy236; goto yy53; -yy194: +yy196: rbs_skip(state); yych = peek(state); - if (yych == 'g') goto yy235; + if (yych == 'g') goto yy238; goto yy53; -yy195: +yy197: + rbs_skip(state); + yych = peek(state); + if (yych == 'p') goto yy239; + goto yy53; +yy198: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy196; + if (yych <= '@') goto yy199; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy196; + if (yych == '`') goto yy199; if (yych <= 'z') goto yy52; } } -yy196: -#line 89 "ext/rbs_extension/lexer.re" +yy199: +#line 90 "ext/rbs_extension/lexer.re" { return next_token(state, kTOP); } -#line 1682 "ext/rbs_extension/lexer.c" -yy197: +#line 1711 "ext/rbs_extension/lexer.c" +yy200: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy236; + if (yych == 'e') goto yy241; goto yy53; -yy198: +yy201: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy238; + if (yych == 'e') goto yy243; goto yy53; -yy199: +yy202: rbs_skip(state); yych = peek(state); - if (yych == 'h') goto yy240; + if (yych == 'h') goto yy245; goto yy53; -yy200: +yy203: rbs_skip(state); yych = peek(state); - if (yych == 'y') goto yy241; + if (yych == 'y') goto yy246; goto yy53; -yy201: +yy204: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy202; + if (yych <= '@') goto yy205; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy202; + if (yych == '`') goto yy205; if (yych <= 'z') goto yy52; } } -yy202: -#line 95 "ext/rbs_extension/lexer.re" +yy205: +#line 96 "ext/rbs_extension/lexer.re" { return next_token(state, kUSE); } -#line 1725 "ext/rbs_extension/lexer.c" -yy203: +#line 1754 "ext/rbs_extension/lexer.c" +yy206: rbs_skip(state); yych = peek(state); - if (yych == 'd') goto yy242; + if (yych == 'd') goto yy247; goto yy53; -yy204: +yy207: rbs_skip(state); yych = peek(state); if (yych <= '@') { if (yych <= '/') goto yy68; - if (yych <= '9') goto yy244; + if (yych <= '9') goto yy249; goto yy68; } else { - if (yych <= 'F') goto yy244; + if (yych <= 'F') goto yy249; if (yych <= '`') goto yy68; - if (yych <= 'f') goto yy244; + if (yych <= 'f') goto yy249; goto yy68; } -yy205: +yy208: rbs_skip(state); -#line 54 "ext/rbs_extension/lexer.re" +#line 55 "ext/rbs_extension/lexer.re" { return next_token(state, tANNOTATION); } -#line 1748 "ext/rbs_extension/lexer.c" -yy206: +#line 1777 "ext/rbs_extension/lexer.c" +yy209: rbs_skip(state); -#line 57 "ext/rbs_extension/lexer.re" +#line 58 "ext/rbs_extension/lexer.re" { return next_token(state, tANNOTATION); } -#line 1753 "ext/rbs_extension/lexer.c" -yy207: +#line 1782 "ext/rbs_extension/lexer.c" +yy210: rbs_skip(state); -#line 55 "ext/rbs_extension/lexer.re" +#line 56 "ext/rbs_extension/lexer.re" { return next_token(state, tANNOTATION); } -#line 1758 "ext/rbs_extension/lexer.c" -yy208: +#line 1787 "ext/rbs_extension/lexer.c" +yy211: rbs_skip(state); -#line 53 "ext/rbs_extension/lexer.re" +#line 54 "ext/rbs_extension/lexer.re" { return next_token(state, tANNOTATION); } -#line 1763 "ext/rbs_extension/lexer.c" -yy209: +#line 1792 "ext/rbs_extension/lexer.c" +yy212: rbs_skip(state); -#line 56 "ext/rbs_extension/lexer.re" +#line 57 "ext/rbs_extension/lexer.re" { return next_token(state, tANNOTATION); } -#line 1768 "ext/rbs_extension/lexer.c" -yy210: +#line 1797 "ext/rbs_extension/lexer.c" +yy213: rbs_skip(state); yych = peek(state); if (yych <= '@') { if (yych <= '/') goto yy68; - if (yych <= '9') goto yy245; + if (yych <= '9') goto yy250; goto yy68; } else { - if (yych <= 'F') goto yy245; + if (yych <= 'F') goto yy250; if (yych <= '`') goto yy68; - if (yych <= 'f') goto yy245; + if (yych <= 'f') goto yy250; goto yy68; } -yy211: +yy214: rbs_skip(state); yych = peek(state); if (yych <= '/') goto yy68; - if (yych <= '9') goto yy85; + if (yych <= '9') goto yy86; if (yych <= '`') goto yy68; - if (yych <= 'f') goto yy85; + if (yych <= 'f') goto yy86; goto yy68; -yy212: +yy215: yyaccept = 6; rbs_skip(state); backup = *state; yych = peek(state); if (yych <= '\'') { - if (yych <= 0x00000000) goto yy157; - if (yych <= '&') goto yy88; - goto yy156; + if (yych <= 0x00000000) goto yy159; + if (yych <= '&') goto yy89; + goto yy158; } else { - if (yych == '\\') goto yy158; - goto yy88; + if (yych == '\\') goto yy160; + goto yy89; } -yy213: +yy216: rbs_skip(state); yych = peek(state); if (yych <= '>') { if (yych <= '/') { - if (yych == '!') goto yy246; + if (yych == '!') goto yy251; } else { - if (yych <= '9') goto yy213; - if (yych == '=') goto yy246; + if (yych <= '9') goto yy216; + if (yych == '=') goto yy251; } } else { if (yych <= '^') { - if (yych <= '?') goto yy246; - if (yych <= '@') goto yy214; - if (yych <= 'Z') goto yy213; + if (yych <= '?') goto yy251; + if (yych <= '@') goto yy217; + if (yych <= 'Z') goto yy216; } else { - if (yych == '`') goto yy214; - if (yych <= 'z') goto yy213; + if (yych == '`') goto yy217; + if (yych <= 'z') goto yy216; } } -yy214: -#line 125 "ext/rbs_extension/lexer.re" +yy217: +#line 127 "ext/rbs_extension/lexer.re" { return next_token(state, tSYMBOL); } -#line 1826 "ext/rbs_extension/lexer.c" -yy215: +#line 1855 "ext/rbs_extension/lexer.c" +yy218: rbs_skip(state); - goto yy163; -yy216: + goto yy165; +yy219: rbs_skip(state); yych = peek(state); if (yych <= 'Z') { - if (yych <= '/') goto yy217; - if (yych <= '9') goto yy103; - if (yych >= 'A') goto yy103; + if (yych <= '/') goto yy220; + if (yych <= '9') goto yy104; + if (yych >= 'A') goto yy104; } else { if (yych <= '_') { - if (yych >= '_') goto yy103; + if (yych >= '_') goto yy104; } else { - if (yych <= '`') goto yy217; - if (yych <= 'z') goto yy103; + if (yych <= '`') goto yy220; + if (yych <= 'z') goto yy104; } } -yy217: -#line 98 "ext/rbs_extension/lexer.re" +yy220: +#line 99 "ext/rbs_extension/lexer.re" { return next_token(state, kATRBS); } -#line 1848 "ext/rbs_extension/lexer.c" -yy218: +#line 1877 "ext/rbs_extension/lexer.c" +yy221: rbs_skip(state); yych = peek(state); - if (yych == 'd') goto yy247; - goto yy111; -yy219: + if (yych == 'd') goto yy252; + goto yy112; +yy222: rbs_skip(state); yych = peek(state); - if (yych == 's') goto yy248; + if (yych == 's') goto yy253; goto yy53; -yy220: +yy223: rbs_skip(state); yych = peek(state); - if (yych == '_') goto yy250; + if (yych == '_') goto yy255; goto yy53; -yy221: +yy224: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy222; + if (yych <= '@') goto yy225; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy222; + if (yych == '`') goto yy225; if (yych <= 'z') goto yy52; } } -yy222: -#line 70 "ext/rbs_extension/lexer.re" +yy225: +#line 71 "ext/rbs_extension/lexer.re" { return next_token(state, kBOOL); } -#line 1886 "ext/rbs_extension/lexer.c" -yy223: +#line 1915 "ext/rbs_extension/lexer.c" +yy226: rbs_skip(state); yych = peek(state); - if (yych == 's') goto yy251; + if (yych == 's') goto yy256; goto yy53; -yy224: +yy227: rbs_skip(state); yych = peek(state); - if (yych == 'n') goto yy253; + if (yych == 'n') goto yy258; goto yy53; -yy225: +yy228: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy254; + if (yych == 'e') goto yy259; goto yy53; -yy226: +yy229: rbs_skip(state); yych = peek(state); - if (yych == 'u') goto yy256; + if (yych == 'u') goto yy261; goto yy53; -yy227: +yy230: rbs_skip(state); yych = peek(state); - if (yych == 'a') goto yy257; + if (yych == 'a') goto yy262; goto yy53; -yy228: +yy231: rbs_skip(state); yych = peek(state); - if (yych == 'r') goto yy258; + if (yych == 'r') goto yy263; goto yy53; -yy229: +yy232: rbs_skip(state); yych = peek(state); - if (yych == 'l') goto yy259; + if (yych == 'l') goto yy264; goto yy53; -yy230: +yy233: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy260; + if (yych == 'e') goto yy265; goto yy53; -yy231: +yy234: rbs_skip(state); yych = peek(state); - if (yych == 'a') goto yy261; + if (yych == 'a') goto yy266; goto yy53; -yy232: +yy235: rbs_skip(state); yych = peek(state); - if (yych == 'i') goto yy262; + if (yych == 'i') goto yy267; goto yy53; -yy233: +yy236: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy234; + if (yych <= '@') goto yy237; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy234; + if (yych == '`') goto yy237; if (yych <= 'z') goto yy52; } } -yy234: -#line 87 "ext/rbs_extension/lexer.re" +yy237: +#line 88 "ext/rbs_extension/lexer.re" { return next_token(state, kSELF); } -#line 1959 "ext/rbs_extension/lexer.c" -yy235: +#line 1988 "ext/rbs_extension/lexer.c" +yy238: rbs_skip(state); yych = peek(state); - if (yych == 'l') goto yy263; + if (yych == 'l') goto yy268; goto yy53; -yy236: +yy239: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy237; + if (yych <= '@') goto yy240; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy237; + if (yych == '`') goto yy240; if (yych <= 'z') goto yy52; } } -yy237: -#line 90 "ext/rbs_extension/lexer.re" - { return next_token(state, kTRUE); } -#line 1987 "ext/rbs_extension/lexer.c" -yy238: +yy240: +#line 100 "ext/rbs_extension/lexer.re" + { return next_token(state, kSKIP); } +#line 2016 "ext/rbs_extension/lexer.c" +yy241: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy239; + if (yych <= '@') goto yy242; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy239; + if (yych == '`') goto yy242; if (yych <= 'z') goto yy52; } } -yy239: +yy242: #line 91 "ext/rbs_extension/lexer.re" + { return next_token(state, kTRUE); } +#line 2039 "ext/rbs_extension/lexer.c" +yy243: + rbs_skip(state); + yych = peek(state); + if (yych <= '=') { + if (yych <= '/') { + if (yych == '!') goto yy108; + } else { + if (yych <= '9') goto yy52; + if (yych >= '=') goto yy109; + } + } else { + if (yych <= '^') { + if (yych <= '@') goto yy244; + if (yych <= 'Z') goto yy52; + } else { + if (yych == '`') goto yy244; + if (yych <= 'z') goto yy52; + } + } +yy244: +#line 92 "ext/rbs_extension/lexer.re" { return next_token(state, kTYPE); } -#line 2010 "ext/rbs_extension/lexer.c" -yy240: +#line 2062 "ext/rbs_extension/lexer.c" +yy245: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy264; + if (yych == 'e') goto yy269; goto yy53; -yy241: +yy246: rbs_skip(state); yych = peek(state); - if (yych == 'p') goto yy265; + if (yych == 'p') goto yy270; goto yy53; -yy242: +yy247: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy243; + if (yych <= '@') goto yy248; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy243; + if (yych == '`') goto yy248; if (yych <= 'z') goto yy52; } } -yy243: -#line 94 "ext/rbs_extension/lexer.re" +yy248: +#line 95 "ext/rbs_extension/lexer.re" { return next_token(state, kVOID); } -#line 2043 "ext/rbs_extension/lexer.c" -yy244: +#line 2095 "ext/rbs_extension/lexer.c" +yy249: rbs_skip(state); yych = peek(state); if (yych <= '@') { if (yych <= '/') goto yy68; - if (yych <= '9') goto yy266; + if (yych <= '9') goto yy271; goto yy68; } else { - if (yych <= 'F') goto yy266; + if (yych <= 'F') goto yy271; if (yych <= '`') goto yy68; - if (yych <= 'f') goto yy266; + if (yych <= 'f') goto yy271; goto yy68; } -yy245: +yy250: rbs_skip(state); yych = peek(state); if (yych <= '@') { if (yych <= '/') goto yy68; - if (yych <= '9') goto yy267; + if (yych <= '9') goto yy272; goto yy68; } else { - if (yych <= 'F') goto yy267; + if (yych <= 'F') goto yy272; if (yych <= '`') goto yy68; - if (yych <= 'f') goto yy267; + if (yych <= 'f') goto yy272; goto yy68; } -yy246: +yy251: rbs_skip(state); - goto yy214; -yy247: + goto yy217; +yy252: rbs_skip(state); yych = peek(state); - if (yych == 'o') goto yy268; - goto yy111; -yy248: + if (yych == 'o') goto yy273; + goto yy112; +yy253: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy249; + if (yych <= '@') goto yy254; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy249; + if (yych == '`') goto yy254; if (yych <= 'z') goto yy52; } } -yy249: -#line 66 "ext/rbs_extension/lexer.re" +yy254: +#line 67 "ext/rbs_extension/lexer.re" { return next_token(state, kALIAS); } -#line 2100 "ext/rbs_extension/lexer.c" -yy250: +#line 2152 "ext/rbs_extension/lexer.c" +yy255: rbs_skip(state); yych = peek(state); if (yych <= 'q') { - if (yych == 'a') goto yy269; + if (yych == 'a') goto yy274; goto yy53; } else { - if (yych <= 'r') goto yy270; - if (yych == 'w') goto yy271; + if (yych <= 'r') goto yy275; + if (yych == 'w') goto yy276; goto yy53; } -yy251: +yy256: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy252; + if (yych <= '@') goto yy257; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy252; + if (yych == '`') goto yy257; if (yych <= 'z') goto yy52; } } -yy252: -#line 72 "ext/rbs_extension/lexer.re" +yy257: +#line 73 "ext/rbs_extension/lexer.re" { return next_token(state, kCLASS); } -#line 2134 "ext/rbs_extension/lexer.c" -yy253: +#line 2186 "ext/rbs_extension/lexer.c" +yy258: rbs_skip(state); yych = peek(state); - if (yych == 'd') goto yy272; + if (yych == 'd') goto yy277; goto yy53; -yy254: +yy259: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy255; + if (yych <= '@') goto yy260; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy255; + if (yych == '`') goto yy260; if (yych <= 'z') goto yy52; } } -yy255: -#line 76 "ext/rbs_extension/lexer.re" +yy260: +#line 77 "ext/rbs_extension/lexer.re" { return next_token(state, kFALSE); } -#line 2162 "ext/rbs_extension/lexer.c" -yy256: +#line 2214 "ext/rbs_extension/lexer.c" +yy261: rbs_skip(state); yych = peek(state); - if (yych == 'd') goto yy274; + if (yych == 'd') goto yy279; goto yy53; -yy257: +yy262: rbs_skip(state); yych = peek(state); - if (yych == 'n') goto yy275; + if (yych == 'n') goto yy280; goto yy53; -yy258: +yy263: rbs_skip(state); yych = peek(state); - if (yych == 'f') goto yy276; + if (yych == 'f') goto yy281; goto yy53; -yy259: +yy264: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy277; + if (yych == 'e') goto yy282; goto yy53; -yy260: +yy265: rbs_skip(state); yych = peek(state); - if (yych == 'n') goto yy279; + if (yych == 'n') goto yy284; goto yy53; -yy261: +yy266: rbs_skip(state); yych = peek(state); - if (yych == 't') goto yy280; + if (yych == 't') goto yy285; goto yy53; -yy262: +yy267: rbs_skip(state); yych = peek(state); - if (yych == 'c') goto yy281; + if (yych == 'c') goto yy286; goto yy53; -yy263: +yy268: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy283; + if (yych == 'e') goto yy288; goto yy53; -yy264: +yy269: rbs_skip(state); yych = peek(state); - if (yych == 'c') goto yy284; + if (yych == 'c') goto yy289; goto yy53; -yy265: +yy270: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy285; + if (yych == 'e') goto yy290; goto yy53; -yy266: +yy271: rbs_skip(state); yych = peek(state); if (yych <= '@') { @@ -2222,520 +2274,520 @@ token rbsparser_next_token(lexstate *state) { if (yych <= 'f') goto yy66; goto yy68; } -yy267: +yy272: rbs_skip(state); yych = peek(state); if (yych <= '@') { if (yych <= '/') goto yy68; - if (yych <= '9') goto yy286; + if (yych <= '9') goto yy291; goto yy68; } else { - if (yych <= 'F') goto yy286; + if (yych <= 'F') goto yy291; if (yych <= '`') goto yy68; - if (yych <= 'f') goto yy286; + if (yych <= 'f') goto yy291; goto yy68; } -yy268: +yy273: rbs_skip(state); yych = peek(state); - if (yych == '_') goto yy287; - goto yy111; -yy269: + if (yych == '_') goto yy292; + goto yy112; +yy274: rbs_skip(state); yych = peek(state); - if (yych == 'c') goto yy288; + if (yych == 'c') goto yy293; goto yy53; -yy270: +yy275: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy289; + if (yych == 'e') goto yy294; goto yy53; -yy271: +yy276: rbs_skip(state); yych = peek(state); - if (yych == 'r') goto yy290; + if (yych == 'r') goto yy295; goto yy53; -yy272: +yy277: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy273; + if (yych <= '@') goto yy278; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy273; + if (yych == '`') goto yy278; if (yych <= 'z') goto yy52; } } -yy273: -#line 75 "ext/rbs_extension/lexer.re" +yy278: +#line 76 "ext/rbs_extension/lexer.re" { return next_token(state, kEXTEND); } -#line 2281 "ext/rbs_extension/lexer.c" -yy274: +#line 2333 "ext/rbs_extension/lexer.c" +yy279: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy291; + if (yych == 'e') goto yy296; goto yy53; -yy275: +yy280: rbs_skip(state); yych = peek(state); - if (yych == 'c') goto yy293; + if (yych == 'c') goto yy298; goto yy53; -yy276: +yy281: rbs_skip(state); yych = peek(state); - if (yych == 'a') goto yy294; + if (yych == 'a') goto yy299; goto yy53; -yy277: +yy282: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy278; + if (yych <= '@') goto yy283; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy278; + if (yych == '`') goto yy283; if (yych <= 'z') goto yy52; } } -yy278: -#line 81 "ext/rbs_extension/lexer.re" +yy283: +#line 82 "ext/rbs_extension/lexer.re" { return next_token(state, kMODULE); } -#line 2319 "ext/rbs_extension/lexer.c" -yy279: +#line 2371 "ext/rbs_extension/lexer.c" +yy284: rbs_skip(state); yych = peek(state); - if (yych == 'd') goto yy295; + if (yych == 'd') goto yy300; goto yy53; -yy280: +yy285: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy297; + if (yych == 'e') goto yy302; goto yy53; -yy281: +yy286: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy282; + if (yych <= '@') goto yy287; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy282; + if (yych == '`') goto yy287; if (yych <= 'z') goto yy52; } } -yy282: -#line 86 "ext/rbs_extension/lexer.re" +yy287: +#line 87 "ext/rbs_extension/lexer.re" { return next_token(state, kPUBLIC); } -#line 2352 "ext/rbs_extension/lexer.c" -yy283: +#line 2404 "ext/rbs_extension/lexer.c" +yy288: rbs_skip(state); yych = peek(state); - if (yych == 't') goto yy299; + if (yych == 't') goto yy304; goto yy53; -yy284: +yy289: rbs_skip(state); yych = peek(state); - if (yych == 'k') goto yy300; + if (yych == 'k') goto yy305; goto yy53; -yy285: +yy290: rbs_skip(state); yych = peek(state); - if (yych == 'd') goto yy301; + if (yych == 'd') goto yy306; goto yy53; -yy286: +yy291: rbs_skip(state); yych = peek(state); if (yych <= '@') { if (yych <= '/') goto yy68; - if (yych <= '9') goto yy85; + if (yych <= '9') goto yy86; goto yy68; } else { - if (yych <= 'F') goto yy85; + if (yych <= 'F') goto yy86; if (yych <= '`') goto yy68; - if (yych <= 'f') goto yy85; + if (yych <= 'f') goto yy86; goto yy68; } -yy287: +yy292: rbs_skip(state); yych = peek(state); - if (yych == '_') goto yy303; - goto yy111; -yy288: + if (yych == '_') goto yy308; + goto yy112; +yy293: rbs_skip(state); yych = peek(state); - if (yych == 'c') goto yy305; + if (yych == 'c') goto yy310; goto yy53; -yy289: +yy294: rbs_skip(state); yych = peek(state); - if (yych == 'a') goto yy306; + if (yych == 'a') goto yy311; goto yy53; -yy290: +yy295: rbs_skip(state); yych = peek(state); - if (yych == 'i') goto yy307; + if (yych == 'i') goto yy312; goto yy53; -yy291: +yy296: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy292; + if (yych <= '@') goto yy297; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy292; + if (yych == '`') goto yy297; if (yych <= 'z') goto yy52; } } -yy292: -#line 78 "ext/rbs_extension/lexer.re" +yy297: +#line 79 "ext/rbs_extension/lexer.re" { return next_token(state, kINCLUDE); } -#line 2423 "ext/rbs_extension/lexer.c" -yy293: +#line 2475 "ext/rbs_extension/lexer.c" +yy298: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy308; + if (yych == 'e') goto yy313; goto yy53; -yy294: +yy299: rbs_skip(state); yych = peek(state); - if (yych == 'c') goto yy310; + if (yych == 'c') goto yy315; goto yy53; -yy295: +yy300: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy296; + if (yych <= '@') goto yy301; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy296; + if (yych == '`') goto yy301; if (yych <= 'z') goto yy52; } } -yy296: -#line 84 "ext/rbs_extension/lexer.re" +yy301: +#line 85 "ext/rbs_extension/lexer.re" { return next_token(state, kPREPEND); } -#line 2456 "ext/rbs_extension/lexer.c" -yy297: +#line 2508 "ext/rbs_extension/lexer.c" +yy302: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy298; + if (yych <= '@') goto yy303; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy298; + if (yych == '`') goto yy303; if (yych <= 'z') goto yy52; } } -yy298: -#line 85 "ext/rbs_extension/lexer.re" +yy303: +#line 86 "ext/rbs_extension/lexer.re" { return next_token(state, kPRIVATE); } -#line 2479 "ext/rbs_extension/lexer.c" -yy299: +#line 2531 "ext/rbs_extension/lexer.c" +yy304: rbs_skip(state); yych = peek(state); - if (yych == 'o') goto yy311; + if (yych == 'o') goto yy316; goto yy53; -yy300: +yy305: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy312; + if (yych == 'e') goto yy317; goto yy53; -yy301: +yy306: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy302; + if (yych <= '@') goto yy307; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy302; + if (yych == '`') goto yy307; if (yych <= 'z') goto yy52; } } -yy302: -#line 93 "ext/rbs_extension/lexer.re" +yy307: +#line 94 "ext/rbs_extension/lexer.re" { return next_token(state, kUNTYPED); } -#line 2512 "ext/rbs_extension/lexer.c" -yy303: +#line 2564 "ext/rbs_extension/lexer.c" +yy308: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { - if (yych <= '9') goto yy110; - if (yych >= '=') goto yy108; + if (yych <= '9') goto yy111; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy304; - if (yych <= 'Z') goto yy110; + if (yych <= '@') goto yy309; + if (yych <= 'Z') goto yy111; } else { - if (yych == '`') goto yy304; - if (yych <= 'z') goto yy110; + if (yych == '`') goto yy309; + if (yych <= 'z') goto yy111; } } -yy304: -#line 97 "ext/rbs_extension/lexer.re" +yy309: +#line 98 "ext/rbs_extension/lexer.re" { return next_token(state, k__TODO__); } -#line 2535 "ext/rbs_extension/lexer.c" -yy305: +#line 2587 "ext/rbs_extension/lexer.c" +yy310: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy313; + if (yych == 'e') goto yy318; goto yy53; -yy306: +yy311: rbs_skip(state); yych = peek(state); - if (yych == 'd') goto yy314; + if (yych == 'd') goto yy319; goto yy53; -yy307: +yy312: rbs_skip(state); yych = peek(state); - if (yych == 't') goto yy315; + if (yych == 't') goto yy320; goto yy53; -yy308: +yy313: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy309; + if (yych <= '@') goto yy314; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy309; + if (yych == '`') goto yy314; if (yych <= 'z') goto yy52; } } -yy309: -#line 79 "ext/rbs_extension/lexer.re" +yy314: +#line 80 "ext/rbs_extension/lexer.re" { return next_token(state, kINSTANCE); } -#line 2573 "ext/rbs_extension/lexer.c" -yy310: +#line 2625 "ext/rbs_extension/lexer.c" +yy315: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy316; + if (yych == 'e') goto yy321; goto yy53; -yy311: +yy316: rbs_skip(state); yych = peek(state); - if (yych == 'n') goto yy318; + if (yych == 'n') goto yy323; goto yy53; -yy312: +yy317: rbs_skip(state); yych = peek(state); - if (yych == 'd') goto yy320; + if (yych == 'd') goto yy325; goto yy53; -yy313: +yy318: rbs_skip(state); yych = peek(state); - if (yych == 's') goto yy322; + if (yych == 's') goto yy327; goto yy53; -yy314: +yy319: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy323; + if (yych == 'e') goto yy328; goto yy53; -yy315: +yy320: rbs_skip(state); yych = peek(state); - if (yych == 'e') goto yy324; + if (yych == 'e') goto yy329; goto yy53; -yy316: +yy321: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy317; + if (yych <= '@') goto yy322; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy317; + if (yych == '`') goto yy322; if (yych <= 'z') goto yy52; } } -yy317: -#line 80 "ext/rbs_extension/lexer.re" +yy322: +#line 81 "ext/rbs_extension/lexer.re" { return next_token(state, kINTERFACE); } -#line 2626 "ext/rbs_extension/lexer.c" -yy318: +#line 2678 "ext/rbs_extension/lexer.c" +yy323: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy319; + if (yych <= '@') goto yy324; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy319; + if (yych == '`') goto yy324; if (yych <= 'z') goto yy52; } } -yy319: -#line 88 "ext/rbs_extension/lexer.re" +yy324: +#line 89 "ext/rbs_extension/lexer.re" { return next_token(state, kSINGLETON); } -#line 2649 "ext/rbs_extension/lexer.c" -yy320: +#line 2701 "ext/rbs_extension/lexer.c" +yy325: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy321; + if (yych <= '@') goto yy326; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy321; + if (yych == '`') goto yy326; if (yych <= 'z') goto yy52; } } -yy321: -#line 92 "ext/rbs_extension/lexer.re" +yy326: +#line 93 "ext/rbs_extension/lexer.re" { return next_token(state, kUNCHECKED); } -#line 2672 "ext/rbs_extension/lexer.c" -yy322: +#line 2724 "ext/rbs_extension/lexer.c" +yy327: rbs_skip(state); yych = peek(state); - if (yych == 's') goto yy325; + if (yych == 's') goto yy330; goto yy53; -yy323: +yy328: rbs_skip(state); yych = peek(state); - if (yych == 'r') goto yy326; + if (yych == 'r') goto yy331; goto yy53; -yy324: +yy329: rbs_skip(state); yych = peek(state); - if (yych == 'r') goto yy328; + if (yych == 'r') goto yy333; goto yy53; -yy325: +yy330: rbs_skip(state); yych = peek(state); - if (yych == 'o') goto yy330; + if (yych == 'o') goto yy335; goto yy53; -yy326: +yy331: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy327; + if (yych <= '@') goto yy332; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy327; + if (yych == '`') goto yy332; if (yych <= 'z') goto yy52; } } -yy327: -#line 68 "ext/rbs_extension/lexer.re" +yy332: +#line 69 "ext/rbs_extension/lexer.re" { return next_token(state, kATTRREADER); } -#line 2715 "ext/rbs_extension/lexer.c" -yy328: +#line 2767 "ext/rbs_extension/lexer.c" +yy333: rbs_skip(state); yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy329; + if (yych <= '@') goto yy334; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy329; + if (yych == '`') goto yy334; if (yych <= 'z') goto yy52; } } -yy329: -#line 69 "ext/rbs_extension/lexer.re" +yy334: +#line 70 "ext/rbs_extension/lexer.re" { return next_token(state, kATTRWRITER); } -#line 2738 "ext/rbs_extension/lexer.c" -yy330: +#line 2790 "ext/rbs_extension/lexer.c" +yy335: rbs_skip(state); yych = peek(state); if (yych != 'r') goto yy53; @@ -2743,25 +2795,25 @@ token rbsparser_next_token(lexstate *state) { yych = peek(state); if (yych <= '=') { if (yych <= '/') { - if (yych == '!') goto yy107; + if (yych == '!') goto yy108; } else { if (yych <= '9') goto yy52; - if (yych >= '=') goto yy108; + if (yych >= '=') goto yy109; } } else { if (yych <= '^') { - if (yych <= '@') goto yy331; + if (yych <= '@') goto yy336; if (yych <= 'Z') goto yy52; } else { - if (yych == '`') goto yy331; + if (yych == '`') goto yy336; if (yych <= 'z') goto yy52; } } -yy331: -#line 67 "ext/rbs_extension/lexer.re" +yy336: +#line 68 "ext/rbs_extension/lexer.re" { return next_token(state, kATTRACCESSOR); } -#line 2764 "ext/rbs_extension/lexer.c" +#line 2816 "ext/rbs_extension/lexer.c" } -#line 147 "ext/rbs_extension/lexer.re" +#line 149 "ext/rbs_extension/lexer.re" } diff --git a/ext/rbs_extension/lexer.h b/ext/rbs_extension/lexer.h index f5eb7bb5e..6a0d71b8b 100644 --- a/ext/rbs_extension/lexer.h +++ b/ext/rbs_extension/lexer.h @@ -62,6 +62,7 @@ enum TokenType { kAS, /* as */ k__TODO__, /* __todo__ */ kATRBS, /* @rbs */ + kSKIP, /* skip */ tLIDENT, /* Identifiers starting with lower case */ tUIDENT, /* Identifiers starting with upper case */ @@ -78,6 +79,7 @@ enum TokenType { tCOMMENT, /* Comment */ tLINECOMMENT, /* Comment of all line */ + tINLINECOMMENT, /* Comment in inline decl starting with -- */ tTRIVIA, /* Trivia tokens -- space and new line */ diff --git a/ext/rbs_extension/lexer.re b/ext/rbs_extension/lexer.re index 4d58b5295..ef0e09503 100644 --- a/ext/rbs_extension/lexer.re +++ b/ext/rbs_extension/lexer.re @@ -46,6 +46,7 @@ token rbsparser_next_token(lexstate *state) { "<" { return next_token(state, pLT); } "[]" { return next_token(state, pAREF_OPR); } operator { return next_token(state, tOPERATOR); } + "--" [^\x00]* { return next_token(state, tINLINECOMMENT); } number = [0-9] [0-9_]*; ("-"|"+")? number { return next_token(state, tINTEGER); } @@ -96,6 +97,7 @@ token rbsparser_next_token(lexstate *state) { "as" { return next_token(state, kAS); } "__todo__" { return next_token(state, k__TODO__); } "@rbs" { return next_token(state, kATRBS); } + "skip" { return next_token(state, kSKIP); } unicode_char = "\\u" [0-9a-fA-F]{4}; oct_char = "\\x" [0-9a-f]{1,2}; diff --git a/ext/rbs_extension/lexstate.c b/ext/rbs_extension/lexstate.c index c7389df80..cb1cc7234 100644 --- a/ext/rbs_extension/lexstate.c +++ b/ext/rbs_extension/lexstate.c @@ -61,6 +61,7 @@ static const char *RBS_TOKENTYPE_NAMES[] = { "kAS", /* as */ "k__TODO__", /* __todo__ */ "kATRBS", /* @rbs */ + "kSKIP", /* skip */ "tLIDENT", /* Identifiers starting with lower case */ "tUIDENT", /* Identifiers starting with upper case */ @@ -77,6 +78,7 @@ static const char *RBS_TOKENTYPE_NAMES[] = { "tCOMMENT", "tLINECOMMENT", + "tINLINECOMMENT", "tTRIVIA", diff --git a/ext/rbs_extension/parser.c b/ext/rbs_extension/parser.c index 4cec458ed..9b2758a73 100644 --- a/ext/rbs_extension/parser.c +++ b/ext/rbs_extension/parser.c @@ -48,6 +48,7 @@ case kUSE: \ case kAS: \ case k__TODO__: \ + case kSKIP: \ /* nop */ typedef struct { @@ -188,6 +189,7 @@ static VALUE parse_type_name(parserstate *state, TypeNameKind kind, range *rg) { switch (state->current_token.type) { case tLIDENT: + case kSKIP: if (kind & ALIAS_NAME) goto success; goto error; case tULIDENT: @@ -889,14 +891,26 @@ static VALUE parse_instance_type(parserstate *state, bool parse_alias) { VALUE types = EMPTY_ARRAY; TypeNameKind kind; - if (state->current_token.type == tUIDENT) { - kind = CLASS_NAME; - } else if (state->current_token.type == tULIDENT) { - kind = INTERFACE_NAME; - } else if (state->current_token.type == tLIDENT) { - kind = ALIAS_NAME; - } else { - rbs_abort(); + switch (state->current_token.type) { + case tUIDENT: { + kind = CLASS_NAME; + break; + } + case tULIDENT: { + kind = INTERFACE_NAME; + break; + } + case kSKIP: + case tLIDENT: { + kind = ALIAS_NAME; + break; + } + default: + raise_syntax_error( + state, + state->current_token, + "unexpected token for type name" + ); } range args_range; @@ -1050,6 +1064,7 @@ static VALUE parse_simple(parserstate *state) { } case tULIDENT: // fallthrough case tLIDENT: // fallthrough + case kSKIP: // fallthrough case pCOLON2: { return parse_instance_type(state, true); } @@ -2907,6 +2922,19 @@ static void parse_inline_method_overloads(parserstate *state, VALUE *overloads, } } +static VALUE parse_inline_comment(parserstate *state) { + VALUE comment = Qnil; + + if (state->next_token.type == tINLINECOMMENT) { + range comment_range = state->next_token.range; + parser_advance(state); + + comment = rbs_new_location(state->buffer, comment_range); + } + + return comment; +} + static VALUE parse_inline_leading_annotation(parserstate *state) { switch (state->next_token.type) { case pCOLON: { @@ -2947,6 +2975,19 @@ static VALUE parse_inline_leading_annotation(parserstate *state) { bar_locations ); } + case kSKIP: { + parser_advance(state); + + range skip_loc = state->current_token.range; + VALUE comment_loc = parse_inline_comment(state); + + return rbs_ast_ruby_annotations_skip_annotation( + rbs_new_location(state->buffer, (range) { .start = rbs_range.start, .end = state->current_token.range.end }), + rbs_new_location(state->buffer, rbs_range), + rbs_new_location(state->buffer, skip_loc), + comment_loc + ); + } default: { raise_syntax_error( state, diff --git a/include/rbs/constants.h b/include/rbs/constants.h index 8792debe4..48f5b5457 100644 --- a/include/rbs/constants.h +++ b/include/rbs/constants.h @@ -52,6 +52,7 @@ extern VALUE RBS_AST_Members_Public; extern VALUE RBS_AST_Ruby_Annotations_ColonMethodTypeAnnotation; extern VALUE RBS_AST_Ruby_Annotations_MethodTypesAnnotation; extern VALUE RBS_AST_Ruby_Annotations_NodeTypeAssertion; +extern VALUE RBS_AST_Ruby_Annotations_SkipAnnotation; extern VALUE RBS_AST_TypeParam; extern VALUE RBS_MethodType; extern VALUE RBS_Namespace; diff --git a/include/rbs/ruby_objs.h b/include/rbs/ruby_objs.h index 47a284e5a..084391107 100644 --- a/include/rbs/ruby_objs.h +++ b/include/rbs/ruby_objs.h @@ -42,6 +42,7 @@ VALUE rbs_ast_members_public(VALUE location); VALUE rbs_ast_ruby_annotations_colon_method_type_annotation(VALUE location, VALUE prefix_location, VALUE annotations, VALUE method_type); VALUE rbs_ast_ruby_annotations_method_types_annotation(VALUE location, VALUE prefix_location, VALUE overloads, VALUE vertical_bar_locations); VALUE rbs_ast_ruby_annotations_node_type_assertion(VALUE location, VALUE prefix_location, VALUE type); +VALUE rbs_ast_ruby_annotations_skip_annotation(VALUE location, VALUE prefix_location, VALUE skip_location, VALUE comment_location); VALUE rbs_ast_type_param(VALUE name, VALUE variance, VALUE upper_bound, VALUE default_type, VALUE unchecked, VALUE location); VALUE rbs_method_type(VALUE type_params, VALUE type, VALUE block, VALUE location); VALUE rbs_namespace(VALUE path, VALUE absolute); diff --git a/lib/rbs/ast/ruby/annotations.rb b/lib/rbs/ast/ruby/annotations.rb index 442989182..ffb03a180 100644 --- a/lib/rbs/ast/ruby/annotations.rb +++ b/lib/rbs/ast/ruby/annotations.rb @@ -74,6 +74,16 @@ def map_type_name(&block) self.class.new(location:, prefix_location:, overloads: ovs, vertical_bar_locations:) #: self end end + + class SkipAnnotation < Base + attr_reader :skip_location, :comment_location + + def initialize(location:, prefix_location:, skip_location:, comment_location:) + super(location, prefix_location) + @skip_location = skip_location + @comment_location = comment_location + end + end end end end diff --git a/lib/rbs/inline_parser.rb b/lib/rbs/inline_parser.rb index a7a746024..2e9863012 100644 --- a/lib/rbs/inline_parser.rb +++ b/lib/rbs/inline_parser.rb @@ -74,7 +74,20 @@ def push_module_nesting(mod) module_nesting.pop() end + def skip_node?(node) + if ref = comments.leading_block(node) + if ref.block.each_paragraph([]).any? { _1.is_a?(AST::Ruby::Annotations::SkipAnnotation) } + ref.associate! + return true + end + end + + false + end + def visit_class_node(node) + return if skip_node?(node) + unless class_name = constant_as_type_name(node.constant_path) diagnostics << Diagnostic::NonConstantClassName.new( rbs_location(node.constant_path.location), @@ -95,6 +108,8 @@ def visit_class_node(node) end def visit_module_node(node) + return if skip_node?(node) + unless module_name = constant_as_type_name(node.constant_path) diagnostics << Diagnostic::NonConstantModuleName.new( rbs_location(node.constant_path.location), @@ -115,6 +130,8 @@ def visit_module_node(node) end def visit_def_node(node) + return if skip_node?(node) + if node.receiver diagnostics << Diagnostic::NotImplementedYet.new( rbs_location(node.receiver.location), diff --git a/sig/ast/ruby/annotations.rbs b/sig/ast/ruby/annotations.rbs index 433047f92..a27d0146f 100644 --- a/sig/ast/ruby/annotations.rbs +++ b/sig/ast/ruby/annotations.rbs @@ -4,6 +4,7 @@ module RBS module Annotations type leading_annotation = ColonMethodTypeAnnotation | MethodTypesAnnotation + | SkipAnnotation type trailing_annotation = NodeTypeAssertion @@ -63,6 +64,15 @@ module RBS def map_type_name: () { (TypeName) -> TypeName } -> self end + + # `@rbs skip -- comment` annotation in leading comments + # + class SkipAnnotation < Base + attr_reader skip_location: Location + attr_reader comment_location: Location? + + def initialize: (location: Location, prefix_location: Location, skip_location: Location, comment_location: Location?) -> void + end end end end diff --git a/sig/inline_parser.rbs b/sig/inline_parser.rbs index 9783d41bd..bf2861434 100644 --- a/sig/inline_parser.rbs +++ b/sig/inline_parser.rbs @@ -71,6 +71,12 @@ module RBS def push_module_nesting: [T] (module_context) { () -> T } -> T + # Returns `true` if the node is a comment block including `@rbs skip` annotation + # + # Doesn't update the `association` flag if returning `false`. + # + def skip_node?: (Prism::Node) -> bool + def insert_declaration: (module_context) -> void def report_unused_annotation: (*AST::Ruby::Annotations::t | nil | AST::Ruby::CommentBlock::AnnotationSyntaxError) -> void diff --git a/src/constants.c b/src/constants.c index 139201a08..df5d72679 100644 --- a/src/constants.c +++ b/src/constants.c @@ -52,6 +52,7 @@ VALUE RBS_AST_Members_Public; VALUE RBS_AST_Ruby_Annotations_ColonMethodTypeAnnotation; VALUE RBS_AST_Ruby_Annotations_MethodTypesAnnotation; VALUE RBS_AST_Ruby_Annotations_NodeTypeAssertion; +VALUE RBS_AST_Ruby_Annotations_SkipAnnotation; VALUE RBS_AST_TypeParam; VALUE RBS_MethodType; VALUE RBS_Namespace; @@ -131,6 +132,7 @@ void rbs__init_constants(void) { IMPORT_CONSTANT(RBS_AST_Ruby_Annotations_ColonMethodTypeAnnotation, RBS_AST_Ruby_Annotations, "ColonMethodTypeAnnotation"); IMPORT_CONSTANT(RBS_AST_Ruby_Annotations_MethodTypesAnnotation, RBS_AST_Ruby_Annotations, "MethodTypesAnnotation"); IMPORT_CONSTANT(RBS_AST_Ruby_Annotations_NodeTypeAssertion, RBS_AST_Ruby_Annotations, "NodeTypeAssertion"); + IMPORT_CONSTANT(RBS_AST_Ruby_Annotations_SkipAnnotation, RBS_AST_Ruby_Annotations, "SkipAnnotation"); IMPORT_CONSTANT(RBS_AST_TypeParam, RBS_AST, "TypeParam"); IMPORT_CONSTANT(RBS_MethodType, RBS, "MethodType"); IMPORT_CONSTANT(RBS_Namespace, RBS, "Namespace"); diff --git a/src/ruby_objs.c b/src/ruby_objs.c index 027b6eb01..f7e9dd0b2 100644 --- a/src/ruby_objs.c +++ b/src/ruby_objs.c @@ -480,6 +480,20 @@ VALUE rbs_ast_ruby_annotations_node_type_assertion(VALUE location, VALUE prefix_ ); } +VALUE rbs_ast_ruby_annotations_skip_annotation(VALUE location, VALUE prefix_location, VALUE skip_location, VALUE comment_location) { + VALUE _init_kwargs = rb_hash_new(); + rb_hash_aset(_init_kwargs, ID2SYM(rb_intern("location")), location); + rb_hash_aset(_init_kwargs, ID2SYM(rb_intern("prefix_location")), prefix_location); + rb_hash_aset(_init_kwargs, ID2SYM(rb_intern("skip_location")), skip_location); + rb_hash_aset(_init_kwargs, ID2SYM(rb_intern("comment_location")), comment_location); + + return CLASS_NEW_INSTANCE( + RBS_AST_Ruby_Annotations_SkipAnnotation, + 1, + &_init_kwargs + ); +} + VALUE rbs_ast_type_param(VALUE name, VALUE variance, VALUE upper_bound, VALUE default_type, VALUE unchecked, VALUE location) { VALUE _init_kwargs = rb_hash_new(); rb_hash_aset(_init_kwargs, ID2SYM(rb_intern("name")), name); diff --git a/test/rbs/inline_annotation_parsing_test.rb b/test/rbs/inline_annotation_parsing_test.rb index 4a2444f63..336e152ca 100644 --- a/test/rbs/inline_annotation_parsing_test.rb +++ b/test/rbs/inline_annotation_parsing_test.rb @@ -79,4 +79,20 @@ def test_error__unknown_annotation Parser.parse_inline_leading_annotation("@rbs super String", 0...) end end + + def test_parse__skip + Parser.parse_inline_leading_annotation("@rbs skip", 0...).tap do |annot| + assert_instance_of AST::Ruby::Annotations::SkipAnnotation, annot + assert_equal "@rbs skip", annot.location.source + assert_equal "skip", annot.skip_location.source + assert_nil annot.comment_location + end + + Parser.parse_inline_leading_annotation("@rbs skip -- some comment here", 0...).tap do |annot| + assert_instance_of AST::Ruby::Annotations::SkipAnnotation, annot + assert_equal "@rbs skip -- some comment here", annot.location.source + assert_equal "skip", annot.skip_location.source + assert_equal "-- some comment here", annot.comment_location.source + end + end end diff --git a/test/rbs/inline_parser_test.rb b/test/rbs/inline_parser_test.rb index 444a8e017..32d4b4393 100644 --- a/test/rbs/inline_parser_test.rb +++ b/test/rbs/inline_parser_test.rb @@ -235,4 +235,36 @@ def foo(x = nil) end end end + + def test_parse__skip_class_module + result = parse(<<~RUBY) + # @rbs skip -- not a constant + class (c::)Foo + end + + # @rbs skip + module Bar + end + RUBY + + assert_empty result.diagnostics + + assert_empty result.declarations + end + + def test_parse__skip_def + result = parse(<<~RUBY) + class Foo + # @rbs skip + def foo + end + end + RUBY + + assert_empty result.diagnostics + + result.declarations[0].tap do |decl| + assert_empty decl.members + end + end end diff --git a/test/rbs/signature_parsing_test.rb b/test/rbs/signature_parsing_test.rb index 193c32726..f8eb0f974 100644 --- a/test/rbs/signature_parsing_test.rb +++ b/test/rbs/signature_parsing_test.rb @@ -2291,4 +2291,17 @@ class Foo end RBS end + + def test_inline_keyword__skip + Parser.parse_signature(<<~RBS) + class Foo + def skip: (untyped skip) -> void + attr_reader skip: untyped + + type skip = untyped + + @foo: Array[skip] + end + RBS + end end