================================================================================
Basic Items
================================================================================
use <no_semi_file.scad>
include <no_semi_file.scad>
use <other_file.scad>;
include <other_file.scad>;
use <multiline
valid.scad>;

/* [Tweaks for My Model] some extra comments */
my_parameter = 10;

// [This is not a Customizer Group]
another_parameter = false;

function square(x) = x * x;

module my_cylinder(r, height = square(4), $fn = 100)
  cylinder(r = r, h = height);

module big_module() {}

function comma0(,) = 0;
function comma1(x,) = 0;
module comma0(,) {}
module comma1(x,) {}
--------------------------------------------------------------------------------

(source_file
  (use_statement
    (include_path))
  (include_statement
    (include_path))
  (use_statement
    (include_path))
  (include_statement
    (include_path))
  (use_statement
    (include_path))
  (comment)
  (assignment
    left: (identifier)
    right: (number))
  (comment)
  (assignment
    left: (identifier)
    right: (boolean))
  (function_declaration
    name: (identifier)
    parameters: (parameters_declaration
      (identifier))
    (binary_expression
      left: (identifier)
      right: (identifier)))
  (module_declaration
    name: (identifier)
    parameters: (parameters_declaration
      (identifier)
      (assignment
        left: (identifier)
        right: (function_call
          function: (identifier)
          arguments: (arguments
            (number))))
      (assignment
        left: (special_variable)
        right: (number)))
    body: (transform_chain
      (module_call
        name: (identifier)
        arguments: (arguments
          (assignment
            left: (identifier)
            right: (identifier))
          (assignment
            left: (identifier)
            right: (identifier))))))
  (module_declaration
    name: (identifier)
    parameters: (parameters_declaration)
    body: (union_block))
  (function_declaration
    name: (identifier)
    parameters: (parameters_declaration)
    (number))
  (function_declaration
    name: (identifier)
    parameters: (parameters_declaration
      (identifier))
    (number))
  (module_declaration
    name: (identifier)
    parameters: (parameters_declaration)
    body: (union_block))
  (module_declaration
    name: (identifier)
    parameters: (parameters_declaration
      (identifier))
    body: (union_block)))

================================================================================
Nested Items
================================================================================
module big_module() {
  function inner_function() = undef;
  module inner_module() cube();
}

module extern_module() include <other_file.scad>

--------------------------------------------------------------------------------

(source_file
  (module_declaration
    name: (identifier)
    parameters: (parameters_declaration)
    body: (union_block
      (function_declaration
        name: (identifier)
        parameters: (parameters_declaration)
        (undef))
      (module_declaration
        name: (identifier)
        parameters: (parameters_declaration)
        body: (transform_chain
          (module_call
            name: (identifier)
            arguments: (arguments))))))
  (module_declaration
    name: (identifier)
    parameters: (parameters_declaration)
    body: (include_statement
      (include_path))))

================================================================================
Comments
================================================================================
/* ignored [Customizer Group] ignored */
my_parameter = 5;

function math(x) = /*do math stuff*/ x + 2 // done with math
;

module my_cylinder() {
  // here we create a cylinder
  cylinder(); /* done ! */
  cube();
}
--------------------------------------------------------------------------------

(source_file
  (comment)
  (assignment
    left: (identifier)
    right: (number))
  (function_declaration
    name: (identifier)
    parameters: (parameters_declaration
      (identifier))
    (comment)
    (binary_expression
      left: (identifier)
      right: (number)))
  (comment)
  (module_declaration
    name: (identifier)
    parameters: (parameters_declaration)
    body: (union_block
      (comment)
      (transform_chain
        (module_call
          name: (identifier)
          arguments: (arguments)))
      (comment)
      (transform_chain
        (module_call
          name: (identifier)
          arguments: (arguments))))))
