==================
Semicolon Separated Items
==================

fn first() {}; fn second() {}

pipeline test(task) {
  let x = 1; let y = 2
}

skill deploy {
  description "Ship"; prompt "Go"
}

---

(source_file
  (fn_declaration
    name: (identifier)
    body: (block))
  (fn_declaration
    name: (identifier)
    body: (block))
  (pipeline_declaration
    name: (identifier)
    (parameter_list
      (typed_parameter
        name: (identifier)))
    (block
      (let_binding
        name: (identifier)
        value: (integer_literal))
      (let_binding
        name: (identifier)
        value: (integer_literal))))
  (skill_declaration
    name: (identifier)
    field_name: (identifier)
    field_value: (string_literal
      (string_delimiter)
      (string_content)
      (string_delimiter))
    field_name: (identifier)
    field_value: (string_literal
      (string_delimiter)
      (string_content)
      (string_delimiter))))

==================
Invalid Else After Semicolon
==================

pipeline test(task) {
  if true {
    log(1)
  }; else {
    log(2)
  }
}

---

(source_file
  (pipeline_declaration
    name: (identifier)
    (parameter_list
      (typed_parameter
        name: (identifier)))
    (block
      (expression_statement
        (if_statement
          condition: (true)
          consequence: (block
            (expression_statement
              (call_expression
                function: (identifier)
                (argument_list
                  (integer_literal)))))))
      (expression_statement
        (identifier))
      (ERROR)
      (expression_statement
        (call_expression
          function: (identifier)
          (argument_list
            (integer_literal))))))
  (ERROR))

==================
Invalid Catch After Semicolon
==================

pipeline test(task) {
  try {
    log(1)
  }; catch {
    log(2)
  }
}

---

(source_file
  (pipeline_declaration
    name: (identifier)
    (parameter_list
      (typed_parameter
        name: (identifier)))
    (block
      (expression_statement
        (try_expression
          body: (block
            (expression_statement
              (call_expression
                function: (identifier)
                (argument_list
                  (integer_literal)))))))
      (expression_statement
        (identifier))
      (ERROR)
      (expression_statement
        (call_expression
          function: (identifier)
          (argument_list
            (integer_literal))))))
  (ERROR))
