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"
  FN
    FN_KW "fn"
    WHITESPACE " "
    NAME
      IDENT "foo"
    GENERIC_PARAM_LIST
      L_ANGLE "<"
      TYPE_PARAM
        NAME
          IDENT "F"
        COLON ":"
        WHITESPACE " "
        TYPE_BOUND_LIST
          TYPE_BOUND
            PATH_TYPE
              PATH
                PATH_SEGMENT
                  NAME_REF
                    IDENT "FnMut"
                  PARAM_LIST
                    L_PAREN "("
                    PARAM
                      ATTR
                        POUND "#"
                        L_BRACK "["
                        META
                          PATH
                            PATH_SEGMENT
                              NAME_REF
                                IDENT "attr"
                        R_BRACK "]"
                      WHITESPACE " "
                      REF_TYPE
                        AMP "&"
                        MUT_KW "mut"
                        WHITESPACE " "
                        PATH_TYPE
                          PATH
                            PATH_SEGMENT
                              NAME_REF
                                IDENT "Foo"
                              GENERIC_ARG_LIST
                                L_ANGLE "<"
                                LIFETIME_ARG
                                  LIFETIME
                                    LIFETIME_IDENT "'a"
                                R_ANGLE ">"
                    R_PAREN ")"
      R_ANGLE ">"
    PARAM_LIST
      L_PAREN "("
      R_PAREN ")"
    BLOCK_EXPR
      STMT_LIST
        L_CURLY "{"
        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
                    IDENT "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
                              IDENT "Self"
                    R_ANGLE ">"
          R_PAREN ")"
        WHITESPACE " "
        BLOCK_EXPR
          STMT_LIST
            L_CURLY "{"
            R_CURLY "}"
      WHITESPACE "\n"
      R_CURLY "}"
