diff options
Diffstat (limited to 'doc/architecture.md')
-rw-r--r-- | doc/architecture.md | 66 |
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 |