Auto-formatting is also easy: just don't do it. Does a toy language really need it? I have two languages with syntax coloring and zero languages with auto-formatting. I think syntax coloring is table stakes but auto-formatting is not. You can have an interesting toy language without auto-formatting.
> Auto-formatting is also easy: just don't do it.
I agree with this, except that auto-closing grouping symbols is extremely useful and turns out to be pretty easy to support.
Writing code that you love is like crafting it. You align subjects and data in beautiful flows of if/else or case/switch. You put multiple statements on a line if they encompass one "thought"
Try writing without a formatter when you are the sole author.
As for syntax highlighting I agree. You can get 80% of the way there with a vim regex of keywords, but it's one of the main things I'm solving by writing my own editor.
This doesn't have to be true! Zig's `zig fmt` doesn't wrap on column count but instead lets you insert breaks with a ",". While this does introduce a level of user discretion which can diminish the braindeadness of autoformatters, I find that it works a lot better because now I can choose where the reasonable place to break is. There may technically be more wiggle room for debate, but now you're spending less time debating variable names or whatever to get it to format not-awfully.
For example, there's lots of little places where aligning keywords helps clarify code
https://github.com/civboot/civlua/blob/main/ds/ds.lua#L89
Formatters HATE putting multiple statements on a single line, but when they go it makes it so much easier to parse (for a person)
For me, for example, I was gonna go with async/await in my toy language, but didn't like the implementation and decided to explore a monad-like direction.
Edit: for VS Code:
https://code.visualstudio.com/api/language-extensions/syntax...