================================================================================
basic example, replacement
================================================================================

ssr: _@X = 3 ==>> _@X = 4.

--------------------------------------------------------------------------------

(source_file
  (ssr_definition
    (match_expr
      (var)
      (integer))
    (ssr_replacement
      (match_expr
        (var)
        (integer)))))

================================================================================
basic example, match only
================================================================================

ssr: _@X = 3.

--------------------------------------------------------------------------------

(source_file
  (ssr_definition
    (match_expr
      (var)
      (integer))))

================================================================================
basic example, match only, alternative syntax
================================================================================

ssr: _@X = 3.

--------------------------------------------------------------------------------

(source_file
  (ssr_definition
    (match_expr
      (var)
      (integer))))

================================================================================
with where clause
================================================================================

ssr: _@X = _@Y ==>> _@X = 4
   where is_atom(_@Y).

--------------------------------------------------------------------------------

(source_file
  (ssr_definition
    (match_expr
      (var)
      (var))
    (ssr_replacement
      (match_expr
        (var)
        (integer)))
    (ssr_where
      (guard
        (guard_clause
          (call
            (atom)
            (expr_args
              (var))))))))
================================================================================
with when and where clause
This is expected to not parse, until we define the ssr RHS as
_macro_def_replacement
================================================================================

ssr: _@X = _@Y when is_atom(_@Y)
   where is_atom(_@Y).

--------------------------------------------------------------------------------

(source_file
  (ssr_definition
    (match_expr
      (var)
      (ERROR
        (var))
        (call
          (atom)
          (expr_args
            (var))))
    (ssr_where
      (guard
        (guard_clause
          (call
            (atom)
            (expr_args
              (var))))))))

================================================================================
record field name as placeholder
================================================================================

ssr: #foo{x = _@A, k2 = _@B, k3 = _@C}.

--------------------------------------------------------------------------------

(source_file
  (ssr_definition
    (record_expr
      (record_name
        (atom))
      (record_field
        (atom)
        (field_expr
          (var)))
      (record_field
        (atom)
        (field_expr
          (var)))
      (record_field
        (atom)
        (field_expr
          (var))))))
