Use Unparser to insert parentheses where necessary.

Cucumber failures down from 18 to 16.

This code

  buf = " "
  greet = Ops.add("Hello", buf << "World")

and its correct translation,

  buf = " "
  greet = "Hello" + (buf << "World")

leaves buf == " World" .

If we translated it as

  buf = " "
  greet = "Hello" + buf << "World"

then buf == " " because :+ binds tighter than :<< .

This example is contrived and likely will not happen in real life code
but we must be careful not to introduce bugs.
Fixed Scenario: does not translate `Ops.add` if any argument has a comment