==================
Required positional parameters
==================

void positional(int a, int b) {}

---

(program
  (function_signature
    (void_type)
    (identifier)
    (formal_parameter_list
      (formal_parameter
        (type_identifier)
        (identifier))
      (formal_parameter
        (type_identifier)
        (identifier))))
  (function_body
    (block)))

==================
Optional positional parameters with defaults
==================

void optionalPositional(int a, [int b = 0, int c = 0]) {}

---

(program
  (function_signature
    (void_type)
    (identifier)
    (formal_parameter_list
      (formal_parameter
        (type_identifier)
        (identifier))
      (optional_formal_parameters
        (formal_parameter
          (type_identifier)
          (identifier))
        (decimal_integer_literal)
        (formal_parameter
          (type_identifier)
          (identifier))
        (decimal_integer_literal))))
  (function_body
    (block)))

==================
Named parameters with defaults
==================

void named({int a = 0, int b = 0}) {}

---

(program
  (function_signature
    (void_type)
    (identifier)
    (formal_parameter_list
      (optional_formal_parameters
        (formal_parameter
          (type_identifier)
          (identifier))
        (decimal_integer_literal)
        (formal_parameter
          (type_identifier)
          (identifier))
        (decimal_integer_literal))))
  (function_body
    (block)))

==================
Required named parameter
==================

void requiredNamed({required int a, int b = 0}) {}

---

(program
  (function_signature
    (void_type)
    (identifier)
    (formal_parameter_list
      (optional_formal_parameters
        (formal_parameter
          (type_identifier)
          (identifier))
        (formal_parameter
          (type_identifier)
          (identifier))
        (decimal_integer_literal))))
  (function_body
    (block)))

==================
Simple positional call
==================

void main() {
  positional(1, 2);
}

---

(program
  (function_signature
    (void_type)
    (identifier)
    (formal_parameter_list))
  (function_body
    (block
      (expression_statement
        (method_invocation
          (identifier)
          (argument_part
            (arguments
              (argument
                (decimal_integer_literal))
              (argument
                (decimal_integer_literal)))))))))

==================
Single positional argument
==================

void main() {
  optionalPositional(1);
}

---

(program
  (function_signature
    (void_type)
    (identifier)
    (formal_parameter_list))
  (function_body
    (block
      (expression_statement
        (method_invocation
          (identifier)
          (argument_part
            (arguments
              (argument
                (decimal_integer_literal)))))))))

==================
Multiple positional arguments
==================

void main() {
  optionalPositional(1, 2, 3);
}

---

(program
  (function_signature
    (void_type)
    (identifier)
    (formal_parameter_list))
  (function_body
    (block
      (expression_statement
        (method_invocation
          (identifier)
          (argument_part
            (arguments
              (argument
                (decimal_integer_literal))
              (argument
                (decimal_integer_literal))
              (argument
                (decimal_integer_literal)))))))))

==================
Named arguments
==================

void main() {
  named(a: 1, b: 2);
}

---

(program
  (function_signature
    (void_type)
    (identifier)
    (formal_parameter_list))
  (function_body
    (block
      (expression_statement
        (method_invocation
          (identifier)
          (argument_part
            (arguments
              (named_argument
                (label
                  (identifier))
                (decimal_integer_literal))
              (named_argument
                (label
                  (identifier))
                (decimal_integer_literal)))))))))

==================
Single named argument
==================

void main() {
  requiredNamed(a: 1);
}

---

(program
  (function_signature
    (void_type)
    (identifier)
    (formal_parameter_list))
  (function_body
    (block
      (expression_statement
        (method_invocation
          (identifier)
          (argument_part
            (arguments
              (named_argument
                (label
                  (identifier))
                (decimal_integer_literal)))))))))

==================
Call with no arguments
==================

void main() {
  noArgs();
}

---

(program
  (function_signature
    (void_type)
    (identifier)
    (formal_parameter_list))
  (function_body
    (block
      (expression_statement
        (method_invocation
          (identifier)
          (argument_part
            (arguments)))))))

==================
Nested call as argument
==================

void main() {
  outer(1, inner(2));
}

---

(program
  (function_signature
    (void_type)
    (identifier)
    (formal_parameter_list))
  (function_body
    (block
      (expression_statement
        (method_invocation
          (identifier)
          (argument_part
            (arguments
              (argument
                (decimal_integer_literal))
              (argument
                (method_invocation
                  (identifier)
                  (argument_part
                    (arguments
                      (argument
                        (decimal_integer_literal)))))))))))))

==================
Trailing comma in arguments
==================

void main() {
  positional(1, 2,);
}

---

(program
  (function_signature
    (void_type)
    (identifier)
    (formal_parameter_list))
  (function_body
    (block
      (expression_statement
        (method_invocation
          (identifier)
          (argument_part
            (arguments
              (argument
                (decimal_integer_literal))
              (argument
                (decimal_integer_literal)))))))))

==================
Mixed positional and named arguments
==================

void main() {
  mixed(1, name: 2);
}

---

(program
  (function_signature
    (void_type)
    (identifier)
    (formal_parameter_list))
  (function_body
    (block
      (expression_statement
        (method_invocation
          (identifier)
          (argument_part
            (arguments
              (argument
                (decimal_integer_literal))
              (named_argument
                (label
                  (identifier))
                (decimal_integer_literal)))))))))
