Commit Graph

824 Commits

Author SHA1 Message Date
ee58556bde progress implementing 'PersistentVector.delete'. (Todo: implement function to merge left and right vectors.) 2026-01-17 23:14:05 +00:00
b84713a98e add 'PersistentVector.countDepth' function, which is meant to count the depth, and is to be used for deletion 2026-01-17 22:51:06 +00:00
4280f580a2 add function to decrement persistent-vector.sml. (The plan is to split the left and right, and then decrement the right metadata so that the absolute indices match.) 2026-01-17 22:46:08 +00:00
98ec1fbee6 fix another size-recalculation mistake in 'PersistentVector.splitRight' function. (When we are splitting in the middle of a BRANCH, we want to subtract the old child size from the remainder, and then add the new child size to the remainder, because this calculation will account for the splitting of preceding elements.) 2026-01-16 22:40:38 +00:00
e52d4856ee amend recalculation of size metadata in 'PersistentVector.splitRIght: we always want to decrement by prevSize in this function. (We will have another function call to decrement so that left split and right split represent the same absolute indices when they are joined, before they are split.) 2026-01-16 22:31:43 +00:00
ddcb0ea56d finish initial implementation for 'PersistentVector.splitRight' 2026-01-16 22:16:44 +00:00
eb316d7be2 begin implementation of PersistentVector.splitRight function 2026-01-16 21:58:59 +00:00
08abb43e3b added tests for 'PersistentVector.splitLeft' function 2026-01-16 21:30:56 +00:00
47cf451501 begin adding tests for 'PersistentVector.splitLeft' function 2026-01-16 21:16:23 +00:00
e0bebb6d1a add tests checking that PersistentVector.toList works as expected 2026-01-15 13:20:45 +00:00
290cc65a52 add tests checking that persistent-vector.sml appends properly, as it is meant to 2026-01-15 13:03:23 +00:00
ac3b987c42 add boilerplate helper functions in persistent-vector-tests.sml to check if list contains indices that are in range, or are not in range 2026-01-15 12:49:02 +00:00
ef43efb680 rename some test files 2026-01-15 12:32:13 +00:00
2058a57026 add functions for testing persistent-vector.sml 2026-01-15 07:16:04 +00:00
559b254b0c initial implementation of 'PersistentVector.splitLeft' function 2026-01-15 06:13:38 +00:00
79fda65f78 begin coding 'PersistentVector.splitLeft' function 2026-01-15 05:51:22 +00:00
267c0c5d96 change persistent-vector.sml's 'prevMatch' function to use rope-like metadata, and remove dead code 2026-01-15 05:39:55 +00:00
d6da7a3ea3 persistent-vector.sml was in a partial state where some functions use rope-like metadata and some functions do not, so change 'nextMatch' function to use rope-like metatadata (still need to change other functions) 2026-01-15 05:25:17 +00:00
e1077b7780 add tests for 'yk' motion (next: implement 'yj' motion and test it) 2026-01-14 04:49:41 +00:00
66f1fb0b5e implement 'yk' motion (next: add tests for it) 2026-01-13 23:54:48 +00:00
e37e04a2a2 rename 'NormalDelete.deleteLineBack' function to 'NormalDelete.deleteLineUp' which is clearer ('k' in 'dk' motion means move cursor up one line) 2026-01-13 23:40:29 +00:00
f1dd822d5b add tests for 'yl' motion 2026-01-07 07:52:06 +00:00
407f78ce7a fix bug in 'NormalYank.yankRight' function. Instead of calling 'Int.max (endOfLineIdx, high)', we should call 'Int.min (endOfLineIdx, high)' because we are trying to get the smaller number, and not the largest. 2026-01-07 06:55:42 +00:00
cc4716f3db refactor fcore/normal-yank.sml a bit (replace repeated logic with a function call) 2026-01-07 06:49:52 +00:00
8b0031ca71 add tests for 'yh' motion 2026-01-07 06:33:10 +00:00
adb8757ed8 implemented 'yh' motion (yank left) 2026-01-05 10:39:42 +00:00
d2f32c1512 add tests for 'da<symbol>' motion, finishing all delete-tests 2026-01-03 08:39:41 +00:00
210d535b9f reimplement 'da<symbol>' motion to first check if it is inside a symbol-pair, just like 'di<symbol>' was reimplemented in recent commits 2026-01-03 08:36:07 +00:00
ba6798f476 make implementation of 'di<symbol>' more robust (we check if the cursor is inside a symbol-pair before checking if there is a symbol pair after the cursor), and add tests for 'di<symbol>' motion 2026-01-03 08:09:08 +00:00
bce2a5a22d finish reimplementing 'di<symbol>' and 'da<symbol>' motions so that they align more closely with the behaviour of Vim. (Todo: test them next) 2026-01-02 20:07:36 +00:00
886f384490 when deleting inside pair, instead of searching either for either chr1 or chr2 and stopping at first match, search instead for openChr and closeChr, and keep an integer tracking what level of nesting we are at. This gives us the behaviour we want, which is to delete the pair at the correct level of nesting. When we encounter openChr, we increment the nesting counter by 1 and continue searching. When we encounter closeChr, if the nesting counter is 0, we return the current index, but if the nesting counter is higher than 0 when encounter closeChr, we decrement the nesting counter by 1 and continue searching. 2026-01-02 18:50:04 +00:00
37b6f6ab0a implement function which searches for one of two chars (given as arguments) and returns the index, or ~1 if neither char is found 2026-01-02 18:12:59 +00:00
8fdf2411a8 add tests for 'd/home/humza/Downloads/sml/shf/todo.md' motion 2026-01-01 18:47:38 +00:00
54ef305314 reimplement d% motion so that it first searches for the next occurrence of a pair-character before trying to match it. (Next: add tests for d% motion.) 2026-01-01 07:05:06 +00:00
44dbe1ffb0 reimplement '/home/humza/Downloads/sml/shf/todo.md' motion so that it has the same behaviour as Vim. (If the cursor is not at a pair character, then check after the cursor to see if we find a pair-character there. If some location after the cursor has a pair-character, then move the cursor to it and find the pair of the character, if any.) 2026-01-01 06:58:30 +00:00
a65b950b77 add tests for 'daW' motion 2025-12-31 11:44:42 +00:00
99bb3b257e done with delete-around-word ('daw') tests. Next: delete-around-WORD ('daW') tests. 2025-12-28 01:37:29 +00:00
6efce2dd67 make 'dW' motion use transition function that is specific for deleting, and add a test to ensure that 'dW' does not delete a newline when it is not on a newline character 2025-12-27 09:45:11 +00:00
5c5910f748 change vi-caps-word-dfa.sml to regard newlines as final states, as with vi-word-dfa.sml in previous commit 2025-12-27 09:35:32 +00:00
1df0952f08 implement the difference between the 'w' motion and 'dw' motion using the transition table in vi-word-dfa, rather than convoluted if-branching 2025-12-27 08:42:54 +00:00
742b571b4e amend 'dw' motion in line with previous commit 2025-12-27 07:32:22 +00:00
9846750c51 change implementation of 'word' so that we stop at newlines when we press 'w' motion, like in Vim and add tests to verify this behaviour (todo: fix regressions in deletion tests) 2025-12-27 06:05:36 +00:00
9e809e146a done adding tests for when cursor is on a space, for 'daw' motion 2025-12-27 02:41:13 +00:00
acabbac70a add another test for 'daw' motion 2025-12-27 02:22:32 +00:00
846a40a0a6 begin adding tests for 'daw' motion 2025-12-26 22:49:24 +00:00
d1b865bda8 implmenet 'daW' motion (next: test it) 2025-12-13 03:57:21 +00:00
204f549c79 implement 'daw' motion 2025-12-13 03:40:32 +00:00
7130fe7dda add tests for 'diW' motion, and fix a bug in the implementation (contiguous spaces were not deleted properly) 2025-12-12 20:08:53 +00:00
bf62b35825 add tests for 'diW' motion, including one which fails (need to fix) 2025-12-12 19:17:00 +00:00
90a103082a after performing delete-inside-word motion, make sure we move cursor back by 1 if cursor is on a newline which is preceded by a non-newline character 2025-12-12 11:37:52 +00:00