I used to think gradual type systems (mypy, flow, typed racket) were the sweet spot. They're super-powered linters that help with refactoring, but you can run the code at any point.
In a statically typed PL, you need the whole codebase to be well typed before you can run tests.
miniblog.
Related Posts
Test code is total: we require it to always terminate or it's a failure! It also typically has 100% line and branch coverage.
I feel way less nervous about refactoring tests, you can always just run them.
It feels like rename is by far the most important refactoring operation. If I had an IDE with only one refactoring, I think I'd want rename.
... and my third refactoring with Cursor changed some function calls that I didn't want it to modify. Subtle.
I've had the most success with AI coding tools when I know exactly what I want the output to look like.