============
if condition
============

public void OnPluginStart() {
    if (true) return;
}

---

(source_file
  (function_definition
    visibility: (visibility)
    returnType: (type
      (builtin_type)
    )
    name: (identifier)
    parameters: (parameter_declarations)
    body: (block
      (condition_statement
        condition: (bool_literal)
        truePath: (return_statement)
      )
    )
  )
)


========================
if condition - else case
========================

public void OnPluginStart() {
    if (true) return;
    else return;
}

---

(source_file
  (function_definition
    visibility: (visibility)
    returnType: (type
      (builtin_type)
    )
    name: (identifier)
    parameters: (parameter_declarations)
    body: (block
      (condition_statement
        condition: (bool_literal)
        truePath: (return_statement)
        falsePath: (return_statement)
      )
    )
  )
)


=============================
if condition - multiple cases
=============================

public void OnPluginStart() {
    if (true) return;
    else if (false) return;
    else if (false) return;
    else return;
}

---

(source_file
  (function_definition
    visibility: (visibility)
    returnType: (type
      (builtin_type)
    )
    name: (identifier)
    parameters: (parameter_declarations)
    body: (block
      (condition_statement
        condition: (bool_literal)
        truePath: (return_statement)
        falsePath: (condition_statement
          condition: (bool_literal)
          truePath: (return_statement)
          falsePath: (condition_statement
            condition: (bool_literal)
            truePath: (return_statement)
            falsePath: (return_statement)
          )
        )
      )
    )
  )
)


====================
if condition - block
====================

public void OnPluginStart() {
    if (true) {
        return;
    }
}

---

(source_file
  (function_definition
    visibility: (visibility)
    returnType: (type
      (builtin_type)
    )
    name: (identifier)
    parameters: (parameter_declarations)
    body: (block
      (condition_statement
        condition: (bool_literal)
        truePath: (block
          (return_statement)
        )
      )
    )
  )
)


==============================
if condition - else case block
==============================

public void OnPluginStart() {
    if (true) {
        return;
    }
    else {

    }
}

---

(source_file
  (function_definition
    visibility: (visibility)
    returnType: (type
      (builtin_type)
    )
    name: (identifier)
    parameters: (parameter_declarations)
    body: (block
      (condition_statement
        condition: (bool_literal)
        truePath: (block
          (return_statement)
        )
        falsePath: (block)
      )
    )
  )
)


===============================
if condition - unary expression
===============================

public void OnPluginStart() {
    if (!false) return;
    if (-(20 + 20) < -20) return;
    if (+(20) > 2) return;
    if (~a != 32) return;
}

---

(source_file
  (function_definition
    visibility: (visibility)
    returnType: (type
      (builtin_type)
    )
    name: (identifier)
    parameters: (parameter_declarations)
    body: (block
      (condition_statement
        condition: (unary_expression
          argument: (bool_literal)
        )
        truePath: (return_statement)
      )
      (condition_statement
        condition: (binary_expression
          left: (unary_expression
            argument: (parenthesized_expression
              expression: (binary_expression
                left: (int_literal)
                right: (int_literal)
              )
            )
          )
          right: (unary_expression
            argument: (int_literal)
          )
        )
        truePath: (return_statement)
      )
      (condition_statement
        condition: (binary_expression
          left: (unary_expression
            argument: (parenthesized_expression
              expression: (int_literal)
            )
          )
          right: (int_literal)
        )
        truePath: (return_statement)
      )
      (condition_statement
        condition: (binary_expression
          left: (unary_expression
            argument: (identifier)
          )
          right: (int_literal)
        )
        truePath: (return_statement)
      )
    )
  )
)
