Introduction
In one of my previous articles I wrote about RustRover, an IDE by Jetbrains, which came out last week (Sep. 13th 2023) in an Early Access Preview. In that article I reviewed this otherwise great product. However it occurred to me that comparing it to the IDE, namely VS Code with the appropiate Rust Extensions might be interesting.
Creating a new project
VS Code
Because VS Code is not a full IDE in the sense that it has the concept of projects, starting a new Rust project comes down to using the commandline like this:
cargo new visitorpattern
cd visitorpattern
code .
RustRover
Rustrover on the other hand has a different experience:

And creating a new project:

Conclusion
Even though the Rustrover experience in this area might be a bit friendlier, I think most Rust programmers will be using the cargo command for their daily needs.
Coding
RustRover
Coding in RustRover is on the whole quite a pleasurable experience, just look at these examples:

As you can see: even the keywords are auto-completed. This not always end well:

Here I just wanted to get a mut keyword, yet the autocomplete-engine begs to differ. Mind you, I am still working on an early access release here.
Or take this:

This works quite well as you see.
Another example:

Here Rover helps to implement a trait.
But you can go even further:

Rover has there refactorings as I shall call them, to really help you code faster. Quite nice. However, I found these only after a few days of experimenting with the product.
Rover also helps you with modules:


Clicking on ‘Attach to main.rs’ results in this changed ‘main.rs’ file:

And even when you are coding, in our case in ‘main.rs’ Rover helps you:

And it creates the use statement(s) automatically:

I could give many more examples, but suffice to say that coding in Rover is a good experience, with some rough edges
Visual Studio Code
Editing Rust code in Visual Studio Code is definitely a little less smooth than in Rover, however, I think it is still quite comfortable. However, this thing keeps popping up which I think is an error:

But apart from that it is pretty smooth sailing:

Like Rover, it can insert this into the main.rs file.
And like Rover, it assists in implementing traits:

It can even implement all missing members:

Once the module is defined it can help build the use statement(s):

From what I can tell, the pattern matching in VS Code looks a bit better than in Rover. Also the use of clearer icons helps distinguish between struct and traits for example:

VS Code, like Rover shows a type annotation, when none is given:

But unlike Rover, VS Code does not offer to help and make the new method public:

Debugging
Since this article is already getting quite long I will defer the discussion of debugging in VS Code and Rover to a later article. Suffice to say that debugging more complex datastructures like Options, or Vec with dyn elements (like we have in this example) is a problem both in Rover and VS Code. I sincerely hope that a solution can be found somehow.
Conclusion
When it comes to coding I believe both environments are almost at a level playing field. Rover with its extensive number of refactorings seems to have a small advantage. If you need those then I suggest you check out Rover, however for most developers VS Code seems adequate for now.
I must stress again and again that Rover is still in an early preview so it might go from having a small advantage to having a big advantage in the next couple of releases (especially if they fix the debugging problems).