Commit Graph
379 Commits
Author SHA1 Message Date
Antonio Scandurra a8ece757e4 Implement time::Global using a SmallVec
Version vectors are going to be small most of the time, especially
as soon as we introduce an optimization that will let us only
track concurrent versions, thus preventing the version vector from
growing indefinitely over time in the tree.
2021-05-18 17:34:48 +02:00
Antonio Scandurra 84e0efe5df Save a few allocations when pushing to a SumTree 2021-05-18 17:34:36 +02:00
Antonio Scandurra 781aa92f26 Don't summarize unnecessary information when resolving anchor 2021-05-18 17:34:28 +02:00
Nathan Sobo 143ea24875 Reintroduce the 100ms delay when polling worktree entries
This regressed when I switched us over to the simplified async approach. I think it was causing us to contend on the mutex on during startup.
2021-05-17 20:50:00 -06:00
Antonio Scandurra 81e162318f 💄 2021-05-15 11:52:49 +02:00
Antonio Scandurra 5f93d7f755 Return error in Rope::to_offset(point) when the point doesn't exist 2021-05-15 11:43:29 +02:00
Antonio Scandurra c9987f9488 Optimize Rope::append by merging chunks only when they're underflowing 2021-05-15 11:32:34 +02:00
Antonio Scandurra 76a74e431e Introduce rope::Cursor::summary to avoid slicing only to get a summary
This also deletes `Rope::slice`, as it's just a convenience method that
can be easily re-implemented by using the cursor.
2021-05-15 11:29:48 +02:00
Antonio Scandurra def0aa98b2 Maximize chunks occupation by splitting chunks appropriately 2021-05-15 10:18:59 +02:00
Antonio Scandurra 1190a87a05 Avoid heap allocation when splitting an existing chunk 2021-05-15 10:08:01 +02:00
Max Brunsfeld 243b66a91d Add unit test for rope with all 4-byte chars 2021-05-14 17:53:58 -07:00
Max Brunsfeld e860cacb9f Get randomized tests passing in the presence of multibyte chars 2021-05-14 17:45:16 -07:00
Max Brunsfeld 614e96b957 Clarify how the ropes are kept consistent with the fragments 2021-05-14 14:48:19 -07:00
Max Brunsfeld fc2533555c Remove inline assertions about RopeBuilder invariants 2021-05-14 14:07:25 -07:00
Max BrunsfeldandNathan Sobo 79c91de2f4 Get tests passing with RopeBuilder
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
2021-05-14 12:47:19 -07:00
Nathan Sobo cba8603335 WIP 2021-05-14 10:58:02 -06:00
Antonio ScandurraandNathan Sobo 2cdf315d95 WIP: Replace ropey with our own Rope
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
2021-05-14 18:30:47 +02:00
Antonio ScandurraandNathan Sobo 2f5754db63 Implement a Cursor for Rope
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
2021-05-14 17:14:57 +02:00
Antonio ScandurraandNathan Sobo 580fc4fed7 Clarify variable and method names
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
2021-05-14 16:42:46 +02:00
Antonio Scandurra 0d50c74cab 💄 2021-05-14 16:07:46 +02:00
Antonio Scandurra 9f9f339a75 📝 2021-05-14 16:00:45 +02:00
Antonio Scandurra e2c19d3d3f Add Rope::chunks 2021-05-14 15:19:03 +02:00
Antonio Scandurra 6e30fdbf5c Better balancing of chunks on push 2021-05-14 15:07:30 +02:00
Antonio Scandurra f303a1d5fe Implement ::chars, ::to_point and ::to_offset for Rope 2021-05-14 14:44:19 +02:00
Antonio Scandurra ff235e61f7 Increase leaf occupation for rope 2021-05-14 13:20:20 +02:00
Antonio Scandurra d7cde9f81b Don't underflow Rope chunks on append 2021-05-14 12:26:21 +02:00
Antonio Scandurra e48973f75a Start on a SumTree-based Rope implementation 2021-05-14 11:33:39 +02:00
Max BrunsfeldandNathan Sobo 9aeb35bfab Get tests passing using a slow rightmost_point impl
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
2021-05-13 11:54:29 -07:00
d8f7b35dca Fix concurrent editing in buffer after using ropes
Co-Authored-By: Max Brunsfeld <max@zed.dev>
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
2021-05-13 19:59:01 +02:00
Antonio ScandurraandMax Brunsfeld 39c56b75ed Get local buffer usage working with ropes
Randomized tests for remote edits are still not passing.

Co-Authored-By: Max Brunsfeld <max@zed.dev>
2021-05-13 19:48:55 +02:00
Antonio ScandurraandMax Brunsfeld 7b98fb33dd WIP: Get the type checker passing...
...but not the borrow checker!

Co-Authored-By: Max Brunsfeld <max@zed.dev>
2021-05-13 19:24:03 +02:00
Antonio ScandurraandNathan Sobo 0e9441e5cd WIP
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
2021-05-13 18:35:48 +02:00
Antonio Scandurra 37f0ba9586 Increase timeout for fs-dependent conditions 2021-05-13 11:38:39 +02:00
Antonio Scandurra 4884a05a73 Change buffer atomically when reloading from disk 2021-05-13 11:26:11 +02:00
Antonio Scandurra 19f51bc480 Rely more on conditions for state derived after worktree changes 2021-05-13 11:25:29 +02:00
Antonio Scandurra eea9cb47fd Use flush_fs_events more after performing synchronous fs mutations
I am not sure I have caught all the examples of this, but in general
I think we always want to perform a `flush_fs_events` as opposed to
`next_scan_complete` when doing synchronous I/O. Indeed, the file
system may inform us about the events caused by the just-performed
I/O over multiple batches, and `next_scan_complete` may return
before seeing all of them.

Note that this also removes a few assertions which were ensuring
that, on start, a worktree's file handle wouldn't know its deleted
status, even if the file didn't exist for sure on disk. However,
now that `file` is an async API, it's possible that by the time the
`FileHandle` is resolved, `Worktree` has already completed scanning.
We test a similar behavior further along in the test where those
assertions were removed, so it felt okay to proceed without them.
2021-05-13 10:25:16 +02:00
Max BrunsfeldandAntonio Scandurra 520cbfb955 Read file's mtime in background when getting a FileHandle
Co-Authored-By: Antonio Scandurra <me@as-cii.com>
2021-05-12 20:13:56 -07:00
Max Brunsfeld c757b3f46e Allow a longer timeout in buffer conflict test 2021-05-12 16:20:22 -07:00
Max Brunsfeld 4910bc50c6 Merge branch 'master' into file-changed-on-disk 2021-05-12 16:20:03 -07:00
Nathan Sobo a3be5595dd Pass a handle to the current view model when spawning
Most of the time, we'll want a way to get a reference back to the current view or model, so this facilitates that common case.
2021-05-12 15:28:59 -06:00
Nathan SoboandMax Brunsfeld fa6bd1f926 Introduce AsyncAppContext and simplify spawning
Now when you call spawn in various context, you pass an FnOnce that is called with an AsyncAppContext and returns a static future. This allows you to write async code similar to how our tests work, borrowing the guts of the AsyncAppContext when needed to interact, but using normal async await semantics instead of callbacks.

Co-Authored-By: Max Brunsfeld <maxbrunsfeld@gmail.com>
2021-05-12 15:16:49 -06:00
Antonio ScandurraandMax Brunsfeld ab04d71508 Use gpui::test in async tests in zed
Co-Authored-By: Max Brunsfeld <max@zed.dev>
2021-05-12 18:20:49 +02:00
Antonio Scandurra 1c2b381f74 Use gpui::test macro for synchronous tests in zed 2021-05-12 17:18:23 +02:00
Antonio Scandurra 048bbc9da0 Test prompting when saving while there's a conflict 2021-05-12 15:21:50 +02:00
Antonio Scandurra ac2168f1bd Update mtime and is_deleted when saving/loading a file 2021-05-12 14:34:56 +02:00
Antonio Scandurra 62403343fa Display prompt when trying to save a conflicting file 2021-05-12 11:54:48 +02:00
Max Brunsfeld c54a49e5d1 Use a different tab icon color for buffers with conflicts 2021-05-11 16:59:31 -07:00
Max Brunsfeld 040189db3c Add basic handling for buffer's files changing on disk 2021-05-11 16:18:29 -07:00
Max Brunsfeld d5218fbac5 Add failing test for buffer detecting on-disk changes 2021-05-11 11:38:10 -07:00
Antonio ScandurraandNathan Sobo de6376ca80 Mark FileHandle as not deleted right after saving it
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
2021-05-11 17:26:26 +02:00