From f12ce37bebe7f7a1d29aaff36714e8a83e5f700f Mon Sep 17 00:00:00 2001 From: Hayden Hargreaves Date: Tue, 10 Mar 2026 14:25:56 -0700 Subject: [PATCH] chore: updated FEATURES.md --- FEATURES.md | 77 ++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 58 insertions(+), 19 deletions(-) diff --git a/FEATURES.md b/FEATURES.md index c73b7ce..daa9b09 100644 --- a/FEATURES.md +++ b/FEATURES.md @@ -213,11 +213,11 @@ - [x] `:set number!` - Toggle line numbers - [x] `:set tabstop=N` - Set tab width - [x] `:register {name}` - Show register contents -- [ ] `:w` - Write file -- [ ] `:q` - Quit -- [ ] `:wq` - Write and quit -- [ ] `:q!` - Force quit -- [ ] `:e {file}` - Edit file +- [x] `:w` - Write file +- [x] `:q` - Quit +- [x] `:wq` - Write and quit +- [x] `:q!` - Force quit +- [x] `:e {file}` - Edit file - [ ] `:bn` / `:bp` - Next/previous buffer - [ ] `:{range}` - Go to line - [ ] `:%s/old/new/g` - Search and replace @@ -266,13 +266,13 @@ Buffers are in-memory representations of files. A buffer exists for each open fi ### Buffer Model - [x] Buffer struct (id, filename, lines, modified flag, cursor position) - [ ] Buffer list/manager -- [ ] Current buffer tracking +- [x] Current buffer tracking - [ ] Buffer-local settings (tabstop, filetype, etc.) -- [ ] Modified/dirty state tracking -- [ ] Read-only buffer support +- [x] Modified/dirty state tracking +- [x] Read-only buffer support ### Buffer Navigation -- [ ] `:e {file}` - Edit file (open in new buffer or switch to existing) +- [x] `:e {file}` - Edit file (open in new buffer or switch to existing) - [ ] `:bn` / `:bnext` - Next buffer - [ ] `:bp` / `:bprev` - Previous buffer - [ ] `:b {name}` - Switch to buffer by name (partial match) @@ -286,9 +286,9 @@ Buffers are in-memory representations of files. A buffer exists for each open fi - [ ] `:bd` / `:bdelete` - Delete buffer (close file) - [ ] `:bd!` - Force delete buffer (discard changes) - [ ] `:bw` / `:bwipeout` - Wipe buffer (remove completely) -- [ ] `:w` - Write current buffer to file -- [ ] `:w {file}` - Write buffer to specific file -- [ ] `:wa` - Write all modified buffers +- [x] `:w` - Write current buffer to file +- [x] `:w {file}` - Write buffer to specific file +- [x] `:wa` - Write all modified buffers - [ ] `:sav {file}` - Save as (write to new file, switch to it) ### Buffer State @@ -309,8 +309,8 @@ Buffers are in-memory representations of files. A buffer exists for each open fi ### Hidden Buffers - [ ] `:set hidden` - Allow switching with unsaved changes -- [ ] Prompt to save when closing modified buffer -- [ ] `:q` behavior with modified buffers +- [x] Prompt to save when closing modified buffer +- [x] `:q` behavior with modified buffers ### Argument List (Advanced) - [ ] `:args` - Show argument list @@ -381,8 +381,8 @@ Buffers are in-memory representations of files. A buffer exists for each open fi - [ ] Color column (ruler) ### Files -- [ ] File reading -- [ ] File writing +- [x] File reading +- [x] File writing - [ ] Auto-save - [ ] Backup files - [ ] Swap files @@ -405,9 +405,49 @@ Buffers are in-memory representations of files. A buffer exists for each open fi --- -## Testing Coverage +### Well Tested - Editor Core -### Well Tested +#### Command Execution (179 tests) +- [x] Command parsing and validation +- [x] Command lookup and prefix matching +- [x] Force flag handling (!) +- [x] Write commands (`:w`, `:w {file}`, `:w!`) +- [x] Write all commands (`:wa`, `:wall`, `:wa!`) +- [x] Quit commands (`:q`, `:q!`, `:qa`, `:qa!`) +- [x] Write-quit commands (`:wq`, `:wq!`, `:wqa`, `:wqa!`) +- [x] Edit command (`:e {file}`) +- [x] Register display (`:register`, `:reg {name}`) +- [x] Set commands (`:set number`, `:set tabstop=N`, etc.) +- [x] Setting lookup and validation +- [x] Buffer-level readonly protection +- [x] Scratch buffer write protection +- [x] Force write bypassing readonly/scratch checks +- [x] Multiple buffer write operations +- [x] File write error handling (permissions, paths) +- [x] Modified buffer tracking +- [x] Unicode filename and content handling +- [x] Edge cases (empty args, long filenames, special chars) + +#### Program Initialization (70 tests) +- [x] Empty program creation +- [x] File program with nonexistent files (new file buffers) +- [x] File program with existing files (content loading) +- [x] Line ending handling (Unix `\n`, Windows `\r\n`, mixed) +- [x] Tab to space conversion based on TabStop +- [x] Unicode content preservation (CJK, emoji) +- [x] File extension and type detection +- [x] Buffer state initialization (flags, metadata) +- [x] Large file handling (10,000+ lines) +- [x] Long line handling (10,000+ chars) +- [x] Empty file handling +- [x] Builder pattern method chaining +- [x] Program option accumulation +- [x] Model state defaults (settings, registers, mode) +- [x] Error handling (permissions, invalid paths) +- [x] Integration workflows (end-to-end) +- [x] Edge cases (empty filenames, relative paths, dot files) + +### Moderately Tested - [x] Basic motions (h, j, k, l) - [x] Word motions (w, e, b) - [x] Jump motions (G, gg, 0, $, _, ^, |) @@ -422,6 +462,5 @@ Buffers are in-memory representations of files. A buffer exists for each open fi - [x] Visual modes (v, V, ctrl+v) - [x] Visual mode with motions - [x] Delete actions (x, D) -- [x] Command mode basics - [x] Register behavior