* Auto-complete (that actually works based on the syntax tree of your entire project, not just text matching)
* Refactoring tools that can not be done by an editor that does not also understand the language. (like block select -> "Extract Method" or "Implement Interface")
* "Go to definition", which can take you to the definition of a method, property or field, that always works, even with the most convoluted syntax.
* Debugger and breakpoints integrated into the environment
* Expression-level type inference, or the ability for the IDE to tell you the type of an expression, and examine that types' definition in all cases.
* Basically any manipulation of the files that requires more understanding of the source files than text-based operations.
* Refactoring tools that can not be done by an editor that does not also understand the language. (like block select -> "Extract Method" or "Implement Interface")
* "Go to definition", which can take you to the definition of a method, property or field, that always works, even with the most convoluted syntax.
* Debugger and breakpoints integrated into the environment
* Expression-level type inference, or the ability for the IDE to tell you the type of an expression, and examine that types' definition in all cases.
* Basically any manipulation of the files that requires more understanding of the source files than text-based operations.