Synless will be a general purpose structure editor. Or projectional editor. Or tree editor. We have too many names for this thing. How about we call it an AST editor instead?
This page is my partial categorization of tree editors. I made it before discovering the Reddit list of projectional editors, however, which is a much more complete list. You should probably go there instead.
Here's a collaborative rich text editor.
Here are some other people's motivation for writing a tree editor:
- An Experiment in Structured Code Editing - Isomorf (lobste.rs) This feature list matches what I want to build.
- Prune: A Code Editor that is Not a Text Editor
- Why Don't We Have a General Purpose Tree Editor? (HN)
- Code as text is a problem (HN)
- Language Oriented Programming: The Next Programming Paradigm
- A Hacker News comment about passing structured data on the command line.
- More dicussion on Hacker News, with many links.
See also the Reddit list of projectional editors.
- Subtext: uncovering the simplicity of programming.
- Unison: next-generation programming platform.
- Lava Ok, maybe this one just wants to reinvent imperitive class-based languages with inheritance.
- Isomorf with online demo ([HN][hn:isomorph]). First impressions: great discoverability (entered a switch statement without knowing its syntax); annoying to scroll with arrow keys (inorder navigation); surprisingly difficult to enter numbers; my fibonacci function failed with an "unevaluatable" error; slow (sometimes had a half-second delay after keypress, or to fill an autocomplete box).
- Flense for Clojure, by Max Kreminski
- Plastic for ClojureScript, by Antonin Hildebrand. I'm a little confused here, because ClojureScript is a compiler, not a language?
- Cirru: "edit S-Expression and generate Clojure". Expands on s-expression syntax to allow indentation to (optionally) replace parentheses. Has an online demo of a (rather limited) tree editor.
- Lamdu: tree editor and live coding environment.
- Projectured: a "general purpose tree editor written in common lisp".
- Scheme Bricks.
- On the Usefulness of Syntax Directed Editors - Lang, INRIA. Based on experiences with Mentor.
- Programming Environments based on Structured Editors: the Mentor Experience - Juillet, INREA 1980.
- Cornell Program Synthesizer - Teitelbaum and Reps, CACM 1981.
- Pan - Ballance et al, technical report from UC Berkley 1990.
- The Synthesizer Generator - Reps and Teitelbaum, SIGSOFT 1984. Synthesize an editor from a language specification.
- Frame-Based Editing (HN). Every line is text, but lines are organized into a tree of nested frames.
- Tree Sheets: a free form data organizer, like spreadsheets but for trees.
- Parinfer: lisp editor that can infer parentheses from indentation. This sounds scary, but it actually looks very well designed.
- Paredit is a treeish editor glued onto emacs for editing elisp and its ilk. It does not balance parentheses, however. For example, C-w does not preserve balance.
- Structured Haskell Mode for emacs. I haven't tested it yet, but don't give it good odds of guaranteeing well-formedness.
- Here's what looks like a good guide to Writing a Text Editor HN. No talk of undo, though!
- prettier: an opinionated code formatter.