aboutsummaryrefslogtreecommitdiff
path: root/doc/architecture.md
diff options
context:
space:
mode:
authorBlaž Hrastnik2021-02-09 06:39:52 +0000
committerBlaž Hrastnik2021-02-09 06:40:06 +0000
commit755632f23113ccff66390de1e2c3476a51886b00 (patch)
tree8036c55aa3d4edc95f206e6f28a2b8d8d98c8800 /doc/architecture.md
parent30d1b7098f023ea1cf728e6b989599de364f58ab (diff)
deps update
Diffstat (limited to 'doc/architecture.md')
-rw-r--r--doc/architecture.md66
1 files changed, 66 insertions, 0 deletions
diff --git a/doc/architecture.md b/doc/architecture.md
new file mode 100644
index 00000000..743e9a75
--- /dev/null
+++ b/doc/architecture.md
@@ -0,0 +1,66 @@
+
+# Notes
+
+- server-client architecture via gRPC, UI separate from core
+- multi cursor based editing and slicing
+- WASM based plugins (builtin LSP & fuzzy file finder)
+
+Structure similar to codemirror:
+
+- text (ropes)
+- transactions
+ - changes
+ - invert changes (generates a revert)
+ - annotations (time changed etc)
+ - state effects
+ - additional editor state as facets
+- snapshots as an async view into current state
+- selections { anchor (nonmoving), head (moving) from/to } -> SelectionSet with a primary
+ - cursor is just a single range selection
+- markers
+ track a position inside text that synchronizes with edits
+- { doc, selection, update(), splice, changes(), facets, tabSize, identUnit, lineSeparator, changeFilter/transactionFilter to modify stuff before }
+- view (actual UI)
+- viewport(Lines) -> what's actually visible
+- extend the view via Decorations (inline styling) or Components (UI)
+ - mark / wieget / line / replace decoration
+- commands (transform state)
+- movement
+- selection extension
+- deletion
+- indentation
+- keymap (maps keys to commands)
+- history (undo tree via immutable ropes)
+ - undoes transactions via reverts
+- (collab mode)
+- gutter (line numbers, diagnostic marker, etc) -> ties into UI components
+- rangeset/span -> mappable over changes (can be a marker primitive?)
+- syntax (treesitter)
+- fold
+- selections (select mode/multiselect)
+- matchbrackets
+- closebrackets
+- special-chars (shows dots etc for specials)
+- panel (for UI: file pickers, search dialogs, etc)
+- tooltip (for UI)
+- search (regex)
+- lint (async linters)
+- lsp
+- highlight
+- stream-syntax
+- autocomplete
+- comment (gc, etc for auto commenting)
+- snippets
+- terminal mode?
+
+- plugins can contain more commands/ui abstractions to use elsewhere
+- languageData as presets for each language (syntax, indent, comment, etc)
+
+Vim stuff:
+- motions/operators/text objects
+- full visual mode
+- macros
+- jump lists
+- marks
+- yank/paste
+- conceal for markdown markers, etc