4.9 KiB
Copyright 2025 Syed Daanish
TODO
Critical Fixes
- Critical Crash: Fix bug where closing immediately while LSP is still loading hangs and then segfaults (especially on slow ones like fish-lsp).
- Navigation Bug: Fix bug where
Alt+Upat EOF adds an extra line. - LSP Bug: Check why
fish-lspis behaving so off with completions filtering. - File IO: Normalize/validate unicode on file open (enforce UTF-8, handle other types gracefully).
Core Editing Mechanics
-
Undo/Redo: Add support for undo/redo history.
-
Indentation Engine (Major Task):
- Startup:
- Scan file: Check for lines with 2+ spaces. Least count = indent. If tabs, use tabs.
- Fallback: Use table of file types or default to 2 spaces.
- Store as:
1 = tab,2+ = n spaces. - Apply: Use this for indent/unindent actions.
- Newline: Follow indent of previous line immediately (ignore default).
- Indent/Unindent:
- Add support for indent/unindent actions.
- that use indentation of previous line that is not comment or string or whitespace/blank.
- and try auto indent one level extra if previous line ends with colon or bracket start.
- and dedent one level extra if previous line ends with bracket end.
- Newline: Add support for newline actions similar to indent.
- Startup:
-
Tree-sitter Indent: Attempt to allow Tree-sitter to handle indentation if possible.
-
Scrolling: Add logic where selecting at the end of the screen scrolls down (and vice versa).
- Implementation: Update
main.ccto send drag events to the selected editor.
- Implementation: Update
-
Documentation UI: Capture
Ctrl+h/Ctrl+lfor scrolling documentation windows.
UX
-
Editor word highlighter: Do not recompute word under cursor if not changed.
-
Completion Filtering:
- Stop filtering case-sensitive.
- Normalize completion edits if local filtering is used.
-
UI Refinement:
- Allow completion list to be scrolled; show only
xmax items. - Finish autocomplete box style functions.
- Allow completion list to be scrolled; show only
-
LSP Features:
- Add LSP jumping support (Go to Definition, Hover).
- Add LSP rename support.
- Handle snippets properly in autocomplete: use only the last word in signature when replacing and set cursor to the first one.
-
Basic Autocomplete: Keep a list of words in the current buffer for non-LSP fallback.
-
Language Support:
- Add ECMA to JS and make TSX support.
- Add formatting for files where LSP doesn't provide it.
- Redo grammar files properly (especially cpp).
Major Features
-
Search & Replace:
- Add Search/Replace UI.
- Support capture groups (
$1,$2) or allow Perl regex directly. - Ensure virtual cursors are included in search positions.
-
Multi-Cursor:
- Add virtual cursor support (edits apply to all locations).
- Add
Alt+Clickto set multiple cursors. - Allow search and place cursor at all matches.
-
Block Selection:
- Double-clicking a bracket selects the whole block (first time only) and sets mode to
WORD.
- Double-clicking a bracket selects the whole block (first time only) and sets mode to
-
Tree-sitter Context:
- Get code context from Tree-sitter.
- Get node path of current cursor and add indicator bar (breadcrumbs).
- Highlight block edges when cursor is on/in a bracket.
Visuals, UI & Extensions?
Focus: Aesthetics and external integrations.
-
Status Bar: Complete status bar and command runner.
-
Visual Aids:
- Expand color regex to match CSS colors in CSS files.
- Add color picker/palette.
-
Git: Add Git integration (status, diffs).
-
AI/Snippets:
- Add snippets support (LuaSnip/VSnip style).
- Add Codeium/Copilot support (using VAI virtual text) as a test phase.
-
SQL: Add SQL support (Viewer and Basic Editor).
-
Prolly?: Add Splash Screen / Minigame.
Optimizations & Fluff
-
Event Loop:
- Make the whole engine event-driven rather than clock-driven.
- Mybe keep background thread with dirty flag.
- But merge input and render into a single loop that only renders when input affects render or background thread needs refresh and try to couple multiple renders.
- LSP and inputs should be blocking (lsp on its fd) and inputs in io/input.cc
-
Performance:
- Switch JSON parser to
RapidJSON(or similar high-performance lib). - Decrease usage of
std::stringin UI, LSP, and warnings.
- Switch JSON parser to
-
Folding: Redo folding system and its relation to
move_line_*functions. -
Grammars:
- Manually add redo SCM files (especially cpp/c/h).
- Create
lua-typedandman pagesTree-sitter grammars.
-
Repo Maintenance: Once renderer is proven check commit
43f443e.