What are the all-time great projectional / structure editors? I'm particularly interested in:
- tight focus on a specific language
- really good autocomplete / hinting (ie: type-aware, don't show me unhelpful stuff at all)
- pulling far away from the feel/experience of raw text typing, pushing toward "press a button, out comes exactly the program you wanted"
Emacs with paredit for Lisp satisfies the first two points. And it's actually in use by lots of people.
The "all-time" makes me think of Visual Basic. It was theoretically superseded by C# (WinForms, then WPF) but along that way it lost something essential.

Editing on the various Lisp machines was quite good, but not very “modern”
The experience of older Msalltalk environments was very good, but not as automated as you seem to seek (the machines were weak 🤷♂️)
Hmm, the 3rd requirement makes me think of Barliman but doesn't directly fit with the wording of the question. IMO, Lisp is the LCD for projectional editing. If you can ask an app to generate some Lisp (Scheme) code, then you're most of the way there - you just need to transmogrify the Lisp code into some other syntactic form (see OhmJS, t2t, etc. :-).
(3) Scratch (and clones - i love Snap! the language, but EX is same) deserves a mention for being demonstrably easy for beginners (incl. beginners taught by beginners :) and good with touch.
I'd say the editing experience is low-floor, mid-ceiling at best? There are not many power-user editing moves...
(1) Things like costumes have a tight focus e.g. direct lo-fi painting.
OTOH tasks like "create 10 sprites" and "cut&paste between sprites" are hard, and feel more like "ad-hoc GUI" than a unified editor , imho a weakness . E.g. I dont think you can move a costume to another sprite, only delete and re-create?
(2) Builtin library of images & sounds + default values in many places (instead of prompting) all help unlock creativity 👍
(2) Some hinting via dropdowns, shapes (boolean = hexagonal etc.,), not very strong. But the language is designed to be very forgiving, closer to Lisp / Perl not Rust / ML.
IMHO part of its success was inverting (1): designing the language to fit the editor, not the other way around!
- stdlib sized to discoverably fit in reasonable ~10 palettes.
- Forgiving (few errors, at worst error balloon but keeps running) to encourage click-to-execute experimentation. Can even execute inside the palette!
- Persistent image: contually running, no state-losing "restart". Green flag convention to code your own initialization. This semantics (A) relives beginners of need to understand process lifetime 💡 (B) blurs the line between programatic actions and editing. E.g. I can directly drag a sprite to where I want it to be, or I can execute a "set opacity 50%" block - and both are on equal footing. => Many properties have no other GUI, the blocks palette doubles as an editing menu!
- Block names freely mixing parameters amid text. [compare:Smalltalk or:ObjC names]
- Snap! custom blocks have macro-like powers do mimic any block shape, incl. control structures. Also some affordances to add help tooltip and param type hints & defaults. This is great didactic tool for a teacher to add lesson-specific scaffolding.
- Concurrent execution semantics match greatly with free-floating code chains with separate on- event trigger "hats" :smiling_face_with_3_hearts: . Plus, per-sprite implicit "self" takes advantage of intuitive "visual OOP" to make accessible some concurrent programming that would be genuinely mentally hard in textual languages. This is IMHO scratch's deepest achievement.
(after answering noticed the OP, who's no stanger to editor-wagging-the-language. here's to more HEST episodes 😉🙏 )
