Commit Graph
270 Commits
Author SHA1 Message Date
Nathan Sobo d375f7992d Merge branch 'main' into divs 2023-08-22 16:35:56 -06:00
Mikayla 2f16147055 Fix dock resizing 2023-08-16 19:47:54 -07:00
Mikayla 111e17b220 Merge branch 'main' into collab-panel 2023-08-15 03:25:45 -07:00
Mikayla e5eed29c72 Add components example
Re-arrange generics on mouse event handler
Add TypeTag struct for dynamically tagged components
2023-08-15 03:06:43 -07:00
Nate Butler ef73e77d3d Update some status bar icons and states 2023-08-14 17:15:25 -04:00
Nathan Sobo 0bf607cd2d WIP 2023-08-10 10:26:48 -06:00
Mikayla 99daa73325 Merge branch 'main' into collab-panel 2023-08-09 10:37:22 -07:00
Nathan Sobo da7dc9c880 Work with window handles instead of ids in drag code 2023-08-08 11:14:02 -06:00
Nathan Sobo d896d89842 Store an AnyWindowHandle in WindowContext 2023-08-08 11:08:37 -06:00
Nathan Sobo f2be3181a9 Move window-related methods from TestAppContext to AnyWindowHandle 2023-08-07 20:23:04 -06:00
Mikaylaandmax 8980a9f1c1 Add settings for removing the assistant and collaboration panel buttons
Add a not-logged-in state to the collaboration panel

co-authored-by: max <max@zed.dev>
2023-08-07 16:27:47 -07:00
Max Brunsfeld c537cf2a57 Merge branch 'main' into collab-panel 2023-08-07 11:50:40 -07:00
Nathan Sobo adc50469ff WIP 2023-08-06 12:45:31 -06:00
Nathan Sobo d3c1966d96 WIP: Return WindowHandle<V: View> from AppContext::add_window (#2820)
Instead of returning a usize for the window id, I'm instead returning a
`WindowHandle<V: View>` where `V` is the type of the window's root view.
@as-cii helped me with a cool technique using generic associated types
where methods on `WindowHandle` can return either T or Option<T>
depending on the `BorrowWindowContext::Result` associated type.

Some example usage...

```rs
let window = cx.add_window(|cx| MyView::new(cx));
let my_view = window.root(cx); // If cx is TestAppContext, returns MyView. Otherwise returns Option<MyView>, because the window could be closed.
```


This isn't insanely beneficial on its own, but I think it will help
clean up our testing story. I'm planning on making `window` more useful
in tests for laying out elements, etc.

- [x] Rework tests that call `add_window` 😅 to expect only a window in
return.
- [x] Get tests passing
- [x] 🚬  test
2023-08-03 18:45:51 -06:00
Nathan Sobo 485c0a482e Don't refcount window handles 2023-08-03 17:11:47 -06:00
Nathan Sobo afcc0d621b WIP 2023-08-03 17:03:39 -06:00
Joseph T. Lyons ee1b4a52cc Add PathExt trait (#2823)
This PR adds a `PathExt` trait. It pulls in our existing `compact()`
function, as a method, and then adds a method, and testing, for
`icon_suffix()`. A test was added to fix:

- https://github.com/zed-industries/community/issues/1877

Release Notes:

- Fixed a bug where file icons would not be registered for files with
with `.` characters in their name
([#1877](https://github.com/zed-industries/community/issues/1877)).
2023-08-03 18:57:43 -04:00
Nathan Sobo 884cee6dfd Get tests compiling returning WindowHandle<V: View> from add_window 2023-08-02 14:05:03 -06:00
Max Brunsfeld a555fa1ada Merge branch 'main' into collab-panel 2023-08-02 09:08:50 -07:00
Joseph T. Lyons 0bd6e7bac3 Fix comment 2023-07-28 23:13:36 -04:00
Joseph T. Lyons b0e81c58dc Remove unused code in test 2023-07-28 23:06:40 -04:00
Joseph T. Lyons 2c47efcce9 Add a command to collapse all entires 2023-07-28 22:36:15 -04:00
Mikayla Makiandnate ac35dae66e Add channels panel with stubbed out information
co-authored-by: nate <nate@zed.dev>
2023-07-28 13:21:39 -07:00
Joseph T. Lyons 40fcec1495 Follow naming convention for menu items 2023-07-26 14:35:23 -04:00
Joseph T. Lyons bdd0b9f387 Add open file in project finder via space (#2785)
@mikayla-maki for 👀 

[This PR added in the ability to rename a file via
`enter`](https://github.com/zed-industries/zed/pull/2784). Previously,
`enter` was used to both open a file and confirm a rename, so this PR
changes the opening of a file to use `space`, which is what VS Code
uses. It also makes a bit more sense because now `enter` is just used to
start a rename and confirm the rename, vs being used for 2 different
actions.

N/A on the release notes, as I adjusted the release note in the
previously-tagged PR.

Release Notes:

- N/A
2023-07-24 16:35:01 -04:00
Kirill Bulatov f05095a6dd Focus project panel on directory select 2023-07-23 00:12:25 +03:00
Kirill Bulatov 25ea07cd41 When renaming in project panel, select file names without extensions (#2776)
Closes
https://github.com/zed-industries/community/issues/1789#issuecomment-1646061712

<img width="196" alt="Screenshot 2023-07-21 at 23 23 47"
src="https://github.com/zed-industries/zed/assets/2690773/f5c7025b-6dc8-4f0c-81e5-3cc98a3a9c8b">
<img width="197" alt="Screenshot 2023-07-21 at 23 23 52"
src="https://github.com/zed-industries/zed/assets/2690773/596f8ab0-15e0-4285-be34-ce4c276b686f">

When renaming in project panel, select file names without extensions.

Release Notes:

- Improved project panel rename by selecting file names without
extensions
2023-07-21 23:30:55 +03:00
Kirill Bulatov 804da68af7 When renaming in project panel, select file names without extensions 2023-07-21 23:22:22 +03:00
Kirill Bulatov 595bc16749 Add search in directory action in the project panel 2023-07-21 22:47:57 +03:00
Mikayla Maki 6b95ac9b26 fmt 2023-07-20 13:45:19 -07:00
Derek Briggs abb145da70 add indent size to project panel settings 2023-07-20 12:30:35 -06:00
Derek Briggs 0e068a644f organize settings 2023-07-20 12:23:47 -06:00
Derek Briggs 13ae1249f5 Allow for folders or chevrons 2023-07-20 12:23:28 -06:00
Derek Briggs 8f0b24b264 Add moar icons 2023-07-20 12:01:41 -06:00
Mikayla Maki 9c9ce15afc Add a few more spare associations 2023-07-19 11:14:31 -07:00
Mikayla Maki e3f9a01f6b fmt 2023-07-19 11:10:31 -07:00
Derek Briggs f4413b0969 Fix files that don’t have a prefix 2023-07-19 11:10:30 -07:00
Mikayla Maki aacc4bb8b0 fmt 2023-07-19 11:10:30 -07:00
Mikayla Maki 8c855680e7 Make file types live reload 2023-07-19 11:10:30 -07:00
Mikayla Maki 929a9f97b2 Fix tests 2023-07-19 11:10:30 -07:00
Mikayla Maki fd72f4526d Added file suffix and icon associations data 2023-07-19 11:10:30 -07:00
Mikayla Maki d023189bda Add settings 2023-07-19 11:10:30 -07:00
Mikayla Maki d26f76ba90 Add suffix based file icons 2023-07-19 11:10:30 -07:00
Joseph T. Lyons c3e8ea304a Require only a single click to split pane when using cmd in project panel 2023-07-14 18:27:40 -04:00
Alex ViscreanuandMikayla Maki c7669317ec feat(workspace): allow alternative actions to open files and symbols in split
Co-authored-by: Mikayla Maki <mikayla@zed.dev>
2023-07-14 21:49:15 +02:00
Mikayla Maki 787412b545 fmt and update dependency 2023-06-29 17:49:42 -07:00
Mikayla Maki cd670e340f Fix edge case with absolute file paths 2023-06-29 17:48:01 -07:00
Mikayla Maki 33f5248d4f Add the ability to make new directories by adding slashes to a file name 2023-06-29 17:35:22 -07:00
Max Brunsfeld f128cf4a33 Defer scanning some worktree subdirectories until they are expanded in the project panel (#2622)
Closes
https://linear.app/zed-industries/issue/Z-352/high-memory-usage-from-fs-scanning-if-project-contains-symlinks-that

### Background

Currently, when you open a project, Zed eagerly scans the directory,
building an in-memory representation of all of the files and directories
within. This scanning includes all git-ignored files and follows any
symlinks. When any directory changes on disk, Zed recursively rescans it
in order to keep its in-memory representation up-to-date. When
collaborating, all of these files are replicated to all guests.

Right now, there are some performance problems associated with the
maintenance of this filesystem state:
* For various reasons, some projects contain symlinks that point out to
large folders like `$HOME`, which itself contains many symlinks that
point to the same large directory. When these projects are opened, the
worktree scans endlessly, using more and more memory.
* Some git-ignored directories (like `target` in a rust project) contain
*many* more files than are actually tracked in the git repository. These
files often change as a result of saving, (e.g. because the compiler
runs). Maintaining in memory all of these paths isn't useful to the
user, and causes significant CPU usage on every save. Most importantly,
when collaborating sending all of these changes to guests can be slow,
and can delay all other RPC messages.

### Change

This PR changes the worktree's filesystem-scanning logic to be *lazy*
about scanning two types of directories:
* git ignored directories
* "external" directories (those that are canonically located outside of
the worktree root, but accessed via symlinks)

The laziness works as follows. When, during a recursive scan, a
directory is found that falls into one of the above 2 categories, that
directory is marked as "unloaded". The directory might later be scanned,
if some explicit operation is performed within it (like opening a
buffer, or creating a file), if any collaborator expands that directory
in their project panel, or if an LSP requests that it be watched.

### Results

When collaborating on the `zed` folder:

| metric | before | after |
|-------|--------|------|
| # `worktree_entries` in collab db initially | 154,763 |  77,679 |
| # `worktree_entries` in collab db after 5 saves | 181,952 | 77,679
(nothing new to scan) |
| app memory footprint (host) | 260MB | 228.5 MB  |

The db thing is a win, because reading and writing to the
`worktree_entries` table is one of the most expensive thing that the
`collab` server does.

There's also generally lower background CPU usage after every save,
because we don't need to recursively rescan directories inside of
`target`.

### Limitations

We still end up scanning some unnecessary directories (like
`target/debug/build/zed-b612db829aeac16e/out`) because the LSP instructs
us to watch those.

### To do:

* [x] Expand parent directories of any path opened via LSP
* [x] Avoid creating orphaned entries when FS events happen inside of
unscanned directories
* [x] Scan any newly-non-ignored directories after gitignore changes
* [x] Emit correct events for newly-discovered paths when expanding dirs
* [x] GC the set of expanded directory ids when dirs are removed
* [x] Don't include "external" entries in file-finder
* [x] Expand any directories watched by LSP
* [ ] manual testing and profiling

### Release Notes:

- Fixed a bug where Zed would use excessive memory when a project folder
contained symlinks pointing to directories outside of the project.
- Reduced Zed's memory and CPU usage when working in folders containing
many git-ignored files.
2023-06-27 17:07:23 -07:00
Antonio Scandurra 6f0efec146 Merge remote-tracking branch 'origin/main' into save-conversations 2023-06-23 09:09:42 +02:00