================================================================================
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))
  (block_comment)
  (var_declaration
    (assignment
      (identifier)
      (integer)))
  (line_comment)
  (var_declaration
    (assignment
      (identifier)
      (boolean)))
  (function_item
    (identifier)
    (parameters
      (parameter
        (identifier)))
    (binary_expression
      (identifier)
      (identifier)))
  (module_item
    (identifier)
    (parameters
      (parameter
        (identifier))
      (parameter
        (assignment
          (identifier)
          (function_call
            (identifier)
            (arguments
              (integer)))))
      (parameter
        (assignment
          (special_variable
            (identifier))
          (integer))))
    (transform_chain
      (module_call
        (identifier)
        (arguments
          (assignment
            (identifier)
            (identifier))
          (assignment
            (identifier)
            (identifier))))))
  (module_item
    (identifier)
    (parameters)
    (union_block))
  (function_item
    (identifier)
    (parameters)
    (integer))
  (function_item
    (identifier)
    (parameters
      (parameter
        (identifier)))
    (integer))
  (module_item
    (identifier)
    (parameters)
    (union_block))
  (module_item
    (identifier)
    (parameters
      (parameter
        (identifier)))
    (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_item
    name: (identifier)
    parameters: (parameters)
    body: (union_block
      (function_item
        name: (identifier)
        parameters: (parameters)
        (undef))
      (module_item
        name: (identifier)
        parameters: (parameters)
        body: (transform_chain
          (module_call
            name: (identifier)
            arguments: (arguments))))))
  (module_item
    name: (identifier)
    parameters: (parameters)
    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
  (block_comment)
  (var_declaration
    (assignment
      (identifier)
      (integer)))
  (function_item
    (identifier)
    (parameters
      (parameter
        (identifier)))
    (block_comment)
    (binary_expression
      (identifier)
      (integer))
    (line_comment))
  (module_item
    (identifier)
    (parameters)
    (union_block
      (line_comment)
      (transform_chain
        (module_call
          (identifier)
          (arguments)))
      (block_comment)
      (transform_chain
        (module_call
          (identifier)
          (arguments))))))
