- Type text
- Render text
- Store text in simples form (char[])
- Caret movement, left/right/backspace/delete/insert
- Implement interface for data structure and basic text operations
- Detect line feed special character and render multiple lines of text
- Caret movement up/down
- [Maybe] Update our data structure
- Open and read file
- Save file on disk
- Viewport and scrolling
- Scrollbar/ file minimap
- Document markup model (simplest impl: sorted list of highlighters)
- Update rendering
- Text selection
- Copy/Cut/Paste support
- Language services
- Lexical analyser and lexical syntax highlighter
- Project model and [maybe] multiple text editor tabs
- Simple tree-like project view using default controls from library
- Introduce background processing and move lexical analysis and project mode processing to background
- Some way to manage concurrency
- Syntax analyser
- Show syntax errors
- VFS and Caches
- Build symbol tables and perform semantic analysis (related to searching, auto-completion, go-to-declaration, etc.)
- Type inference and type checking
- Show semantic errors
- Simple auto-completion
- Simple "Go-to-definition"
- Code modification and transactions
- Some refactoring
- Refine, optimize, rewrite basic data structures if needed