How do you feel about messing with the compiler a bit more? I think this can be done, and it would be so much cooler!

What happens is that right now the compiler stops type-checking below an AST node that has errors, so arguments to an unresolved method are not type-checked.

However, the type-checker can be used to type-check any tree, so one can pass the AST for each argument to some `typer.typed(t)` and look at the tree that's assigned. The tricky part is to get an instance of the typer in the right *context*. A context is what keeps track of the imports, current method, enclosing class, everything that's needed to correctly resolve names.

You can obtain a context based on the position by calling `compiler.doLocateContext(pos)`. Have a look at how [typeMembers](https://github.com/scala/scala/blob/master/src/interactive/scala/tools/nsc/interactive/Global.scala#L1050) does it. Then, you can pass the corresponding tree for each argument to `typer.typed(t)`.

I haven't tried this myself, but I'd be happy to help you if you decide to give it a go. I think that could clean up this code, make it work in many more cases, and even get rid of a lot of scalariform-related code.