This code is taken from monkeypatch.rb.

This line in monkeypatch.rb was hard to get around:

```
ast = Source.read_block(caller[0]) # pass in caller's location via backtrace
```

The problem was that it read in source code directly, so it's very difficult to get the AST correct.

I stuck everything after that here and used the parser to generate the AST from the rule.