tree-sitter-c-sharp icon indicating copy to clipboard operation
tree-sitter-c-sharp copied to clipboard

Incorrect precedence with invocation on conditional access

Open Sjord opened this issue 4 years ago • 1 comments

        var a = new object();
        var b = a?.ToString();

Actual: invocation_expression with a conditional_access_expression.

                (equals_value_clause [9, 14] - [9, 29]
                  (invocation_expression [9, 16] - [9, 29]
                    (conditional_access_expression [9, 16] - [9, 27]
                      (identifier [9, 16] - [9, 17])
                      (member_binding_expression [9, 18] - [9, 27]
                        (identifier [9, 19] - [9, 27])))
                    (argument_list [9, 27] - [9, 29]))))))

Expected: conditional_access_expression with an invocation_expression.

                (equals_value_clause [9, 14] - [9, 29]
                  (conditional_access_expression [9, 16] - [9, 29]
                    (identifier [9, 16] - [9, 17])
                    (invocation_expression [9, 18] - [9, 29]
                      (member_binding_expression [9, 18] - [9, 27]
                        (identifier [9, 19] - [9, 27]))
                      (argument_list [9, 27] - [9, 29])))))))

Sjord avatar Feb 10 '21 11:02 Sjord

Test case:

=====================================
Precedence between invocation and conditional access
=====================================

var a = b?.ToString();

---

(compilation_unit
  (global_statement
    (local_declaration_statement
      (variable_declaration
        (implicit_type)
        (variable_declarator
          (identifier)
          (equals_value_clause
            (conditional_access_expression
              (identifier)
              (invocation_expression
                (member_binding_expression
                  (identifier))
                (argument_list)))))))))

Sjord avatar Apr 29 '21 14:04 Sjord