Introducing Rust Language Server, source release

Hm, I don't think so. To deal with errors (and most of the time they are syntax errors), you need to be lax in your typehcecking. For example, when checking a function call you always give the return type as the result, without looking at the argument's types (or quantity). For if, you don't unify branches and just return the type of the first branch which has a valid type.

Type inference is mostly a local affair, so you don't need indices much, as it is cheap just to recalculate it for the currently open files. Indices are used mostly (at least in IntelliJ) for finding stuff in other files, that is, for non local things.