squawk-syntax 2.66.0

Linter for Postgres migrations & SQL
Documentation
---
source: crates/squawk_syntax/src/test.rs
input_file: crates/squawk_parser/tests/data/plpgsql/ok/cursor_decl.sql
---
PLPGSQL@0..305
  WHITESPACE@0..1 "\n"
  PLPGSQL_BLOCK@1..304
    PLPGSQL_DECLARE_SECTION@1..286
      DECLARE_KW@1..8 "declare"
      WHITESPACE@8..11 "\n  "
      PLPGSQL_CURSOR_DECL@11..33
        PLPGSQL_VAR_NAME@11..12
          IDENT@11..12 "a"
        WHITESPACE@12..13 " "
        CURSOR_KW@13..19 "cursor"
        WHITESPACE@19..20 " "
        FOR_KW@20..23 "for"
        WHITESPACE@23..24 " "
        SELECT@24..32
          SELECT_CLAUSE@24..32
            SELECT_KW@24..30 "select"
            WHITESPACE@30..31 " "
            TARGET_LIST@31..32
              TARGET@31..32
                LITERAL@31..32
                  INT_NUMBER@31..32 "1"
        SEMICOLON@32..33 ";"
      WHITESPACE@33..36 "\n  "
      PLPGSQL_CURSOR_DECL@36..80
        PLPGSQL_VAR_NAME@36..37
          IDENT@36..37 "b"
        WHITESPACE@37..38 " "
        SCROLL@38..44
          SCROLL_KW@38..44 "scroll"
        WHITESPACE@44..45 " "
        CURSOR_KW@45..51 "cursor"
        WHITESPACE@51..52 " "
        FOR_KW@52..55 "for"
        WHITESPACE@55..56 " "
        SELECT@56..79
          SELECT_CLAUSE@56..65
            SELECT_KW@56..62 "select"
            WHITESPACE@62..63 " "
            TARGET_LIST@63..65
              TARGET@63..65
                NAME_REF@63..65
                  IDENT@63..65 "f1"
          WHITESPACE@65..66 " "
          FROM_CLAUSE@66..79
            FROM_KW@66..70 "from"
            WHITESPACE@70..71 " "
            RELATION_FROM_ITEM@71..79
              RELATION_NAME_REF@71..79
                PATH_REF@71..79
                  PATH_SEGMENT_REF@71..79
                    IDENT@71..79 "int4_tbl"
        SEMICOLON@79..80 ";"
      WHITESPACE@80..83 "\n  "
      PLPGSQL_CURSOR_DECL@83..130
        PLPGSQL_VAR_NAME@83..84
          IDENT@83..84 "c"
        WHITESPACE@84..85 " "
        NO_SCROLL@85..94
          NO_KW@85..87 "no"
          WHITESPACE@87..88 " "
          SCROLL_KW@88..94 "scroll"
        WHITESPACE@94..95 " "
        CURSOR_KW@95..101 "cursor"
        WHITESPACE@101..102 " "
        FOR_KW@102..105 "for"
        WHITESPACE@105..106 " "
        SELECT@106..129
          SELECT_CLAUSE@106..115
            SELECT_KW@106..112 "select"
            WHITESPACE@112..113 " "
            TARGET_LIST@113..115
              TARGET@113..115
                NAME_REF@113..115
                  IDENT@113..115 "f1"
          WHITESPACE@115..116 " "
          FROM_CLAUSE@116..129
            FROM_KW@116..120 "from"
            WHITESPACE@120..121 " "
            RELATION_FROM_ITEM@121..129
              RELATION_NAME_REF@121..129
                PATH_REF@121..129
                  PATH_SEGMENT_REF@121..129
                    IDENT@121..129 "int4_tbl"
        SEMICOLON@129..130 ";"
      WHITESPACE@130..133 "\n  "
      PLPGSQL_CURSOR_DECL@133..211
        PLPGSQL_VAR_NAME@133..134
          IDENT@133..134 "d"
        WHITESPACE@134..135 " "
        CURSOR_KW@135..141 "cursor"
        WHITESPACE@141..142 " "
        PLPGSQL_CURSOR_ARG_LIST@142..166
          L_PAREN@142..143 "("
          PLPGSQL_CURSOR_ARG@143..153
            PLPGSQL_VAR_NAME@143..145
              IDENT@143..145 "r1"
            WHITESPACE@145..146 " "
            PATH_TYPE@146..153
              PATH_REF@146..153
                PATH_SEGMENT_REF@146..153
                  INTEGER_KW@146..153 "integer"
          COMMA@153..154 ","
          WHITESPACE@154..155 " "
          PLPGSQL_CURSOR_ARG@155..165
            PLPGSQL_VAR_NAME@155..157
              IDENT@155..157 "r2"
            WHITESPACE@157..158 " "
            PATH_TYPE@158..165
              PATH_REF@158..165
                PATH_SEGMENT_REF@158..165
                  INTEGER_KW@158..165 "integer"
          R_PAREN@165..166 ")"
        WHITESPACE@166..167 " "
        FOR_KW@167..170 "for"
        WHITESPACE@170..171 " "
        SELECT@171..210
          SELECT_CLAUSE@171..179
            SELECT_KW@171..177 "select"
            WHITESPACE@177..178 " "
            TARGET_LIST@178..179
              TARGET@178..179
                STAR@178..179 "*"
          WHITESPACE@179..180 " "
          FROM_CLAUSE@180..210
            FROM_KW@180..184 "from"
            WHITESPACE@184..185 " "
            FUNCTION_FROM_ITEM@185..210
              CALL_EXPR@185..208
                NAME_REF@185..200
                  IDENT@185..200 "generate_series"
                ARG_LIST@200..208
                  L_PAREN@200..201 "("
                  ARG@201..203
                    NAME_REF@201..203
                      IDENT@201..203 "r1"
                  COMMA@203..204 ","
                  WHITESPACE@204..205 " "
                  ARG@205..207
                    NAME_REF@205..207
                      IDENT@205..207 "r2"
                  R_PAREN@207..208 ")"
              WHITESPACE@208..209 " "
              FROM_ALIAS@209..210
                TABLE_ALIAS@209..210
                  IDENT@209..210 "i"
        SEMICOLON@210..211 ";"
      WHITESPACE@211..214 "\n  "
      PLPGSQL_CURSOR_DECL@214..257
        PLPGSQL_VAR_NAME@214..215
          IDENT@214..215 "e"
        WHITESPACE@215..216 " "
        CURSOR_KW@216..222 "cursor"
        WHITESPACE@222..223 " "
        PLPGSQL_CURSOR_ARG_LIST@223..244
          L_PAREN@223..224 "("
          PLPGSQL_CURSOR_ARG@224..243
            PLPGSQL_VAR_NAME@224..226
              IDENT@224..226 "p1"
            WHITESPACE@226..227 " "
            PERCENT_TYPE@227..243
              PATH_REF@227..238
                PATH_REF@227..235
                  PATH_SEGMENT_REF@227..235
                    IDENT@227..235 "int4_tbl"
                DOT@235..236 "."
                PATH_SEGMENT_REF@236..238
                  IDENT@236..238 "f1"
              PERCENT_TYPE_CLAUSE@238..243
                PERCENT@238..239 "%"
                TYPE_KW@239..243 "type"
          R_PAREN@243..244 ")"
        WHITESPACE@244..245 " "
        IS_KW@245..247 "is"
        WHITESPACE@247..248 " "
        SELECT@248..256
          SELECT_CLAUSE@248..256
            SELECT_KW@248..254 "select"
            WHITESPACE@254..255 " "
            TARGET_LIST@255..256
              TARGET@255..256
                LITERAL@255..256
                  INT_NUMBER@255..256 "1"
        SEMICOLON@256..257 ";"
      WHITESPACE@257..260 "\n  "
      PLPGSQL_CURSOR_DECL@260..286
        PLPGSQL_VAR_NAME@260..266
          CURSOR_KW@260..266 "cursor"
        WHITESPACE@266..267 " "
        CURSOR_KW@267..273 "cursor"
        WHITESPACE@273..274 " "
        FOR_KW@274..277 "for"
        WHITESPACE@277..278 " "
        TABLE@278..285
          TABLE_KW@278..283 "table"
          WHITESPACE@283..284 " "
          RELATION_NAME@284..285
            RELATION_NAME_REF@284..285
              PATH_REF@284..285
                PATH_SEGMENT_REF@284..285
                  IDENT@284..285 "t"
        SEMICOLON@285..286 ";"
    WHITESPACE@286..287 "\n"
    BEGIN_KW@287..292 "begin"
    WHITESPACE@292..295 "\n  "
    PLPGSQL_BODY@295..300
      PLPGSQL_NULL_STMT@295..300
        NULL_KW@295..299 "null"
        SEMICOLON@299..300 ";"
    WHITESPACE@300..301 "\n"
    END_KW@301..304 "end"
  WHITESPACE@304..305 "\n"