=====================================
Sample
=====================================

tool
extends Node2D
class_name CustomNode, "icon_path"

class Data extends Resource:
        var source: DataSource

        func process_source() -> ProcessedSource:
                if source.is_processable():
                        var processed = ProcessedSource.new(source)
                        return processed
                return null

func _ready():
        for i in range(100):
                var child = Node.new()
                child.name = str("Name-", i)
                add_child(child)

---

(source
  (tool_statement)
  (extends_statement (dotted_type (type)))
  (class_name_statement (name) (class_name_icon_path (string)))
  (class_definition (name) (extends_statement (dotted_type (type)))
    (body
      (variable_statement (name) (type))
      (function_definition (name) (parameters) (return_type (type))
        (body
          (if_statement (attribute (identifier) (attribute_call (identifier) (argument_list)))
            (body
              (variable_statement (name)
                (attribute (identifier) (attribute_call (identifier) (argument_list (identifier)))))
              (return_statement (identifier))))
          (return_statement (null))))))
  (function_definition (name) (parameters)
    (body
      (for_statement (identifier) (call (identifier) (argument_list (integer)))
        (body
          (variable_statement (name)
            (attribute (identifier) (attribute_call (identifier) (argument_list))))
          (expression_statement
            (assignment
              (attribute (identifier) (identifier))
              (call (identifier) (argument_list (string) (identifier)))))
          (expression_statement
            (call (identifier) (argument_list (identifier)))))))))
