Features I'd like to see in future IDEs
mordenstar.com
mordenstar.com
Like, code formatting, that's just an implementation detail. Why can't there be a thing to let two people edit the same repo with different formatting preferences without it causing merge conflicts?
We really lost so much when we moved away from s-expressions in favor of... whatever adhoc stuff we do right now.
Hopefully we’ll continue to see adoption in this space, as it makes it much easier to add syntax highlighting and other basic support for new languages, and it makes it so that any new functionality that operates via treesitter should work with minimal modification for any language.
something like this for Python: https://shaunlebron.github.io/parinfer/
Being more specific, most languages, in my opinion, are far too permissive with whitespace and use too many keywords. The former leads to there being no canonical form of the program text and results in reliance on external formatting tools, when the compiler could be just automatically enforcing canonical formatting rules. The latter makes it hard to distinguish between types of words, which is why it is almost necessary to rely on syntax highlighting.
If each program has a unique canonical form, it would be very hard to beat text based diffing on that form. Lisp is quite good from the diffing perspective but weaker on human legibility (for most humans).
Wasn't that one of the original ideas behind Light Table?
It annoys me to no end when auto-complete stops working as it waits on rust-analyzer to finish. Like you had a completed run before; just use that information while you re-compute it!
iimage-mode does the image thing
Let me know when you implement commit masks in magit, that sounds handy :-)
There's no reason we even have to work on "files". An IDE should be able to show you a module, or function, or call tree, or data dependency graph, anything!
There's so much to be improved in this area.
The only feature in this dimension I've seen is jetbrains injected language editor, where you can edit a string as it's own language thingy.
Mature IDE's already customize the presentation of things like annotations or comments, inject inline hints, and provide alternate editors for things like XML, markdown, or established UI description formats, etc
Saving files as syntax trees instead of code files / ASCII might also do that, but that's a level of abstraction nobody is ready for yet, because you need a tool that can translate to readable code everywhere. It kinda reminds me of EXI, a proposed XML transfer protocol that wouldn't bother translating the document to a readable text format but just transfer as binary, a set of 'events' like the SAX parser approach to achieve much more efficient transfer. I don't believe it ever took off though, it was conceived when JSON quickly became more popular. It was only mentioned once on HN [0] 13 years ago, with one point and zero comments.
I notice this myself a bit when I switch from a fullsize monitor to a laptop screen.
- functionality (setting API urls; forcing certain screens to appear; overriding config values that come back from an XHR)
- quality of life (skipping delays; turning sounds off)
It would be great to be able to toggle and mix and match these patches locally without risking committing them. A combination of stashes and branches kind of works, but the ergonomics isn't great, especially when there are conflicts.
When I make some change for local dev only, I always press the "diff markings" in the margins of the file, and there select that it should go to my "local dev" changelist and not be a part of main.
This is a bit similar to git -p, but the devex is much smoother.
I've also seen some development teams rely way too much on IDE plugins to get anything done. Horrible software architecture with a 45 minute start-up time, I shit you not. They paid a shitload of money on software licenses for a special JVM/IDE plugin combo that allows them to hotswap almost everything to avoid ever having to restart the app during development.
Oh, it's also pretty much impossible to launch the development version of the app with a stock IDE due to the sheer amount of runtime code modifications from IDE plugins the development version depends on. Great times.
I can think of pathologic cases where multiple jars contain the same class but only one version is the right one, but how can something like that happen in practice?
I think I've seen some tree-sitter grammars actually define injections such that their comment are rendered with markdown (but now I can't figure out where I saw that, maybe one of the Zed specific ones).
[0]: https://learn.microsoft.com/en-us/visualstudio/debugger/crea...
He mentions Jetbrains let you do this. I do it in vscode using the TODO Highlight extension.
[0]: https://marketplace.visualstudio.com/items?itemName=Gruntfug...
Similarly what they called Commit Masks seems like an invitation for putting passwords into source code, which is a bad idea. Even if done just to check things real quick.
This is harder than it seems. However I have seen vscode users use `rr` recordings to even step backwards from a breakpoint. But it is gdb-based (i.e. not very platform independent) and is not displayed in a "ghost" like manner which would be neat. I think the first step is for runtimes to get better at recording replays.
I am huge fan of having a EC2 machine in AWS and using VSCode remote SSH or anything similar for development. There are so many differences between cloud and local, that you either embrace it (develop in EC2) or try to wrap it into one more layer or abstraction (hello Docker) and still fail.
Where's all the fun stuff? Debugger features are neat, but outside of this these features just seem tiny and cute and not too exciting.
Even stronger support for structured Treesitter-based editing? (See eg. Helix), proper multicursor support (Helix), both already seem like black magic to me compared to what came before.
I frequently use it when I need to make some structural changes to consistent code (block replace function name x, add trailing commas, etc). Not sure what more power I am missing.
I think the focus here is on "selections", as opposed to just "cursors".
So for example, you can select all occurrences of X (say, usage of some global variable), then say "for each of these selections, select the whole function", and then say "select the name of the function".
And bam, this is a (somewhat artificial and forced example), but you assembled a list of all functions with a specific property in a few button presses without ever leaving your editor. This is very close to stuff I do all the time in Helix. This is a godsend when it comes to manipulating (for example) a huge array of JSON data.
Maybe this is all obvious to you, but this seems like the kind of thing that probably still feels like black magic to a lot of programmers, and which certainly hasn't reached all editors yet (most are not focusing on selection editing as a first-class usecase).
That being said, a lot of people are going to disagree very passionately with what the very opinionated paragraph I just wrote. So I think it’s fair to point out that I actually think the author brings up some very good points that IDE makers should take notice of. Well maybe not the TODO part… If IDE’s should do anything about TODO comments it shouldn’t be giving them a different colour, no, it should refusing to save them.
Abstractions as i know them are everywhere. Even little kids use them all the time. Grouping 7 digits and tagging them with the type "phone number", "number" or even "set" is an act of abstraction.
Any type of data that you want to represent anything, needs a structure. Structures are abstractions.
That said, i find using prints as a debugging tool often very handy. Especially when you want to see the effective order and nesting of sequences (for example communication protocols in action)
My feeling is that such feature will whipe away a big chunk of existing and today's desired features.
The rest. Sure, fine. Don't really care.
Vmax? Yeah that sounds kinda cool actually.