For comparision:
$ ruby-parse --33 -e ":~@"
(sym :~)
$ ruby-parse --33 -e "foo.~@"
(send
(send nil :foo) :"~@")
The same rules exist here, ruby will actually call the ~ method. Prism gets this wrong right now as well, just opening this to reference the added translation test over there.