SOURCE_FILE
  FN
    FN_KW "fn"
    WHITESPACE " "
    NAME
      IDENT "g1"
    PARAM_LIST
      L_PAREN "("
      PARAM
        ATTR
          POUND "#"
          L_BRACK "["
          META
            PATH
              PATH_SEGMENT
                NAME_REF
                  IDENT "attr1"
          R_BRACK "]"
        WHITESPACE " "
        ATTR
          POUND "#"
          L_BRACK "["
          META
            PATH
              PATH_SEGMENT
                NAME_REF
                  IDENT "attr2"
          R_BRACK "]"
        WHITESPACE " "
        IDENT_PAT
          NAME
            IDENT "pat"
        COLON ":"
        WHITESPACE " "
        PATH_TYPE
          PATH
            PATH_SEGMENT
              NAME_REF
                IDENT "Type"
      R_PAREN ")"
    WHITESPACE " "
    BLOCK_EXPR
      STMT_LIST
        L_CURLY "{"
        R_CURLY "}"
  WHITESPACE "\n"
  FN
    FN_KW "fn"
    WHITESPACE " "
    NAME
      IDENT "g2"
    PARAM_LIST
      L_PAREN "("
      PARAM
        ATTR
          POUND "#"
          L_BRACK "["
          META
            PATH
              PATH_SEGMENT
                NAME_REF
                  IDENT "attr1"
          R_BRACK "]"
        WHITESPACE " "
        IDENT_PAT
          NAME
            IDENT "x"
        COLON ":"
        WHITESPACE " "
        PATH_TYPE
          PATH
            PATH_SEGMENT
              NAME_REF
                IDENT "u8"
      R_PAREN ")"
    WHITESPACE " "
    BLOCK_EXPR
      STMT_LIST
        L_CURLY "{"
        R_CURLY "}"
  WHITESPACE "\n\n"
  EXTERN_BLOCK
    ABI
      EXTERN_KW "extern"
      WHITESPACE " "
      STRING "\"C\""
    WHITESPACE " "
    EXTERN_ITEM_LIST
      L_CURLY "{"
      WHITESPACE " "
      FN
        FN_KW "fn"
        WHITESPACE " "
        NAME
          IDENT "printf"
        PARAM_LIST
          L_PAREN "("
          PARAM
            IDENT_PAT
              NAME
                IDENT "format"
            COLON ":"
            WHITESPACE " "
            PTR_TYPE
              STAR "*"
              CONST_KW "const"
              WHITESPACE " "
              PATH_TYPE
                PATH
                  PATH_SEGMENT
                    NAME_REF
                      IDENT "i8"
          COMMA ","
          WHITESPACE " "
          PARAM
            ATTR
              POUND "#"
              L_BRACK "["
              META
                PATH
                  PATH_SEGMENT
                    NAME_REF
                      IDENT "attr"
              R_BRACK "]"
            WHITESPACE " "
            DOT3 "..."
          R_PAREN ")"
        WHITESPACE " "
        RET_TYPE
          THIN_ARROW "->"
          WHITESPACE " "
          PATH_TYPE
            PATH
              PATH_SEGMENT
                NAME_REF
                  IDENT "i32"
        SEMICOLON ";"
      WHITESPACE " "
      R_CURLY "}"
  WHITESPACE "\n\n"
  TRAIT
    TRAIT_KW "trait"
    WHITESPACE " "
    NAME
      IDENT "Foo"
    WHITESPACE " "
    ASSOC_ITEM_LIST
      L_CURLY "{"
      WHITESPACE "\n    "
      FN
        FN_KW "fn"
        WHITESPACE " "
        NAME
          IDENT "bar"
        PARAM_LIST
          L_PAREN "("
          PARAM
            ATTR
              POUND "#"
              L_BRACK "["
              META
                PATH
                  PATH_SEGMENT
                    NAME_REF
                      IDENT "attr"
              R_BRACK "]"
            WHITESPACE " "
            WILDCARD_PAT
              UNDERSCORE "_"
            COLON ":"
            WHITESPACE " "
            PATH_TYPE
              PATH
                PATH_SEGMENT
                  NAME_REF
                    IDENT "u64"
          COMMA ","
          WHITESPACE " "
          PARAM
            ATTR
              POUND "#"
              WHITESPACE " "
              L_BRACK "["
              META
                PATH
                  PATH_SEGMENT
                    NAME_REF
                      IDENT "attr"
              R_BRACK "]"
            WHITESPACE " "
            IDENT_PAT
              MUT_KW "mut"
              WHITESPACE " "
              NAME
                IDENT "x"
            COLON ":"
            WHITESPACE " "
            PATH_TYPE
              PATH
                PATH_SEGMENT
                  NAME_REF
                    IDENT "i32"
          R_PAREN ")"
        SEMICOLON ";"
      WHITESPACE "\n"
      R_CURLY "}"
  WHITESPACE "\n\n"
  IMPL
    IMPL_KW "impl"
    WHITESPACE " "
    PATH_TYPE
      PATH
        PATH_SEGMENT
          NAME_REF
            IDENT "S"
    WHITESPACE " "
    ASSOC_ITEM_LIST
      L_CURLY "{"
      WHITESPACE "\n     "
      FN
        FN_KW "fn"
        WHITESPACE " "
        NAME
          IDENT "f"
        PARAM_LIST
          L_PAREN "("
          SELF_PARAM
            ATTR
              POUND "#"
              L_BRACK "["
              META
                PATH
                  PATH_SEGMENT
                    NAME_REF
                      IDENT "must_use"
              R_BRACK "]"
            WHITESPACE " "
            NAME
              SELF_KW "self"
          R_PAREN ")"
        WHITESPACE " "
        BLOCK_EXPR
          STMT_LIST
            L_CURLY "{"
            R_CURLY "}"
      WHITESPACE "\n     "
      FN
        FN_KW "fn"
        WHITESPACE " "
        NAME
          IDENT "g1"
        PARAM_LIST
          L_PAREN "("
          SELF_PARAM
            ATTR
              POUND "#"
              L_BRACK "["
              META
                PATH
                  PATH_SEGMENT
                    NAME_REF
                      IDENT "attr"
              R_BRACK "]"
            WHITESPACE " "
            NAME
              SELF_KW "self"
          R_PAREN ")"
        WHITESPACE " "
        BLOCK_EXPR
          STMT_LIST
            L_CURLY "{"
            R_CURLY "}"
      WHITESPACE "\n     "
      FN
        FN_KW "fn"
        WHITESPACE " "
        NAME
          IDENT "g2"
        PARAM_LIST
          L_PAREN "("
          SELF_PARAM
            ATTR
              POUND "#"
              L_BRACK "["
              META
                PATH
                  PATH_SEGMENT
                    NAME_REF
                      IDENT "attr"
              R_BRACK "]"
            WHITESPACE " "
            AMP "&"
            NAME
              SELF_KW "self"
          R_PAREN ")"
        WHITESPACE " "
        BLOCK_EXPR
          STMT_LIST
            L_CURLY "{"
            R_CURLY "}"
      WHITESPACE "\n     "
      FN
        FN_KW "fn"
        WHITESPACE " "
        NAME
          IDENT "g3"
        GENERIC_PARAM_LIST
          L_ANGLE "<"
          LIFETIME_PARAM
            LIFETIME
              LIFETIME_IDENT "'a"
          R_ANGLE ">"
        PARAM_LIST
          L_PAREN "("
          SELF_PARAM
            ATTR
              POUND "#"
              L_BRACK "["
              META
                PATH
                  PATH_SEGMENT
                    NAME_REF
                      IDENT "attr"
              R_BRACK "]"
            WHITESPACE " "
            AMP "&"
            MUT_KW "mut"
            WHITESPACE " "
            NAME
              SELF_KW "self"
          R_PAREN ")"
        WHITESPACE " "
        BLOCK_EXPR
          STMT_LIST
            L_CURLY "{"
            R_CURLY "}"
      WHITESPACE "\n     "
      FN
        FN_KW "fn"
        WHITESPACE " "
        NAME
          IDENT "g4"
        GENERIC_PARAM_LIST
          L_ANGLE "<"
          LIFETIME_PARAM
            LIFETIME
              LIFETIME_IDENT "'a"
          R_ANGLE ">"
        PARAM_LIST
          L_PAREN "("
          SELF_PARAM
            ATTR
              POUND "#"
              L_BRACK "["
              META
                PATH
                  PATH_SEGMENT
                    NAME_REF
                      IDENT "attr"
              R_BRACK "]"
            WHITESPACE " "
            AMP "&"
            LIFETIME
              LIFETIME_IDENT "'a"
            WHITESPACE " "
            NAME
              SELF_KW "self"
          R_PAREN ")"
        WHITESPACE " "
        BLOCK_EXPR
          STMT_LIST
            L_CURLY "{"
            R_CURLY "}"
      WHITESPACE "\n     "
      FN
        FN_KW "fn"
        WHITESPACE " "
        NAME
          IDENT "g5"
        GENERIC_PARAM_LIST
          L_ANGLE "<"
          LIFETIME_PARAM
            LIFETIME
              LIFETIME_IDENT "'a"
          R_ANGLE ">"
        PARAM_LIST
          L_PAREN "("
          SELF_PARAM
            ATTR
              POUND "#"
              L_BRACK "["
              META
                PATH
                  PATH_SEGMENT
                    NAME_REF
                      IDENT "attr"
              R_BRACK "]"
            WHITESPACE " "
            AMP "&"
            LIFETIME
              LIFETIME_IDENT "'a"
            WHITESPACE " "
            MUT_KW "mut"
            WHITESPACE " "
            NAME
              SELF_KW "self"
          R_PAREN ")"
        WHITESPACE " "
        BLOCK_EXPR
          STMT_LIST
            L_CURLY "{"
            R_CURLY "}"
      WHITESPACE "\n     "
      FN
        FN_KW "fn"
        WHITESPACE " "
        NAME
          IDENT "c"
        PARAM_LIST
          L_PAREN "("
          SELF_PARAM
            ATTR
              POUND "#"
              L_BRACK "["
              META
                PATH
                  PATH_SEGMENT
                    NAME_REF
                      IDENT "attr"
              R_BRACK "]"
            WHITESPACE " "
            NAME
              SELF_KW "self"
            COLON ":"
            WHITESPACE " "
            PATH_TYPE
              PATH
                PATH_SEGMENT
                  NAME_REF
                    SELF_TYPE_KW "Self"
          R_PAREN ")"
        WHITESPACE " "
        BLOCK_EXPR
          STMT_LIST
            L_CURLY "{"
            R_CURLY "}"
      WHITESPACE "\n     "
      FN
        FN_KW "fn"
        WHITESPACE " "
        NAME
          IDENT "d"
        PARAM_LIST
          L_PAREN "("
          SELF_PARAM
            ATTR
              POUND "#"
              L_BRACK "["
              META
                PATH
                  PATH_SEGMENT
                    NAME_REF
                      IDENT "attr"
              R_BRACK "]"
            WHITESPACE " "
            NAME
              SELF_KW "self"
            COLON ":"
            WHITESPACE " "
            PATH_TYPE
              PATH
                PATH_SEGMENT
                  NAME_REF
                    IDENT "Rc"
                  GENERIC_ARG_LIST
                    L_ANGLE "<"
                    TYPE_ARG
                      PATH_TYPE
                        PATH
                          PATH_SEGMENT
                            NAME_REF
                              SELF_TYPE_KW "Self"
                    R_ANGLE ">"
          R_PAREN ")"
        WHITESPACE " "
        BLOCK_EXPR
          STMT_LIST
            L_CURLY "{"
            R_CURLY "}"
      WHITESPACE "\n"
      R_CURLY "}"
