// Copyright (C) 2025 Free Software Foundation, Inc. // This file is part of GCC. // GCC is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free // Software Foundation; either version 3, or (at your option) any later // version. // GCC is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License // for more details. // You should have received a copy of the GNU General Public License // along with GCC; see the file COPYING3. If not see // . #ifndef RUST_TOKEN_TREE_DESUGAR_H #define RUST_TOKEN_TREE_DESUGAR_H #include "rust-ast-visitor.h" #include "rust-system.h" #include "rust-ast.h" namespace Rust { namespace AST { /** * Desugar a given token-tree before parsing it for a macro invocation. At the * moment, the sole purpose of this desugar is to transform doc-comments into * their attribute form (/// comment -> #[doc = "comment"]) */ class TokenTreeDesugar : public DefaultASTVisitor { public: TokenTreeDesugar () : desugared (std::vector> ()) {} DelimTokenTree go (DelimTokenTree &tts); private: std::vector> desugared; void append (TokenPtr &&new_token); void append (std::unique_ptr &&new_token); using DefaultASTVisitor::visit; virtual void visit (Token &tts) override; }; }; // namespace AST }; // namespace Rust #endif //! RUST_TOKEN_TREE_DESUGAR_H