lib-ruby-parser 3.0.11

Ruby parser
Documentation
use lib_ruby_parser_nodes::template::*;

const TEMPLATE: &str = "#ifndef LIB_RUBY_PARSER_EXTERNAL_C_NODES_HPP
#define LIB_RUBY_PARSER_EXTERNAL_C_NODES_HPP

// This file is autogenerated by {{ helper generated-by }}

#include <variant>

namespace lib_ruby_parser
{
    class Node;
    typedef std::unique_ptr<Node> NodePtr;
    typedef std::unique_ptr<Node> MaybeNodePtr;
    using NodeList = List<Node>;

    // classes
{{ each node }}<dnl>
    class {{ helper node-camelcase-name }}
    {
    public:
{{ each node-field }}<dnl>
        {{ helper node-field-cpp-field-type }} {{ helper node-field-c-name }};
{{ end }}<dnl>

        explicit {{ helper node-camelcase-name }}(<dnl>
{{ each node-field }}<dnl>
{{ helper node-field-cpp-field-type }} {{ helper node-field-c-name }}{{ if node-field-is-last }}{{ else }}, {{ end }}<dnl>
{{ end }});

        {{ helper node-camelcase-name }}(const {{ helper node-camelcase-name }} &) = delete;
        {{ helper node-camelcase-name }} &operator=(const {{ helper node-camelcase-name }} &other) = delete;

        {{ helper node-camelcase-name }}({{ helper node-camelcase-name }} &&) = default;
        {{ helper node-camelcase-name }} &operator=({{ helper node-camelcase-name }} &&other) = default;
    };
{{ end }}<dnl>

    typedef std::variant<
{{ each node }}<dnl>
        {{ helper node-camelcase-name }}{{ if node-is-last }}{{ else }},{{ end }}
{{ end }}<dnl>
    > node_variant_t;

    class Node
    {
    public:
        node_variant_t variant;

        Node(node_variant_t variant);

        Node(const Node &) = delete;
        Node &operator=(const Node &other) = delete;

        Node(Node &&) = default;
        Node &operator=(Node &&other) = default;
    };

    void drop_node(Node *node);
    void drop_maybe_node_ptr(std::unique_ptr<Node> *node);
    void drop_node_ptr(std::unique_ptr<Node> *node);
    void drop_node_list(NodeList *node_list);
}

#endif // LIB_RUBY_PARSER_EXTERNAL_C_NODES_HPP
";

pub(crate) fn codegen() {
    let template = TemplateRoot::new(TEMPLATE).unwrap();
    let fns = crate::codegen::fns::default_fns!();

    let contents = template.render(ALL_DATA, &fns);
    std::fs::write("external/cpp/nodes.hpp", contents).unwrap();
}