ZIm/crates
Max Brunsfeld 40fe5275cf
Rework project diagnostics to prevent showing inconsistent state (#10922)
For a long time, we've had problems where diagnostics can end up showing
up inconsistently in different views. This PR is my attempt to prevent
that, and to simplify the system in the process. There are some UX
changes.

Diagnostic behaviors that have *not* changed:

* In-buffer diagnostics update immediately when LSPs send diagnostics
updates.
* The diagnostic counts in the status bar indicator also update
immediately.

Diagnostic behaviors that this PR changes:

* [x] The tab title for the project diagnostics view now simply shows
the same counts as the status bar indicator - the project's current
totals. Previously, this tab title showed something slightly different -
the numbers of diagnostics *currently shown* in the diagnostics view's
excerpts. But it was pretty confusing that you could sometimes see two
different diagnostic counts.
* [x] The project diagnostics view **never** updates its excerpts while
the user might be in the middle of typing it that view, unless the user
expressed an intent for the excerpts to update (by e.g. saving the
buffer). This was the behavior we originally implemented, but has
changed a few times since then, in attempts to fix other issues. I've
restored that invariant.

    Times when the excerpts will update:
     * diagnostics are updated while the diagnostics view is not focused
     * the user changes focus away from the diagnostics view
* the language server sends a `work done progress end` message for its
disk-based diagnostics token (i.e. cargo check finishes)
* the user saves a buffer associated with a language server, and then a
debounce timer expires

* [x] The project diagnostics view indicates when its diagnostics are
stale. States:
* when diagnostics have been updated while the diagnostics view was
focused:
        * the indicator shows a 'refresh' icon
        * clicking the indicator updates the excerpts
* when diagnostics have been updated, but a file has been saved, so that
the diagnostics will soon update, the indicator is disabled

With these UX changes, the only 'complex' part of the our diagnostics
presentation is the Project Diagnostics view's excerpt management,
because it needs to implement the deferred updates in order to avoid
disrupting the user while they may be typing. I want to take some steps
to reduce the potential for bugs in this view.

* [x] Reduce the amount of state that the view uses, and simplify its
implementation
* [x] Add a randomized test that checks the invariant that a mutated
diagnostics view matches a freshly computed diagnostics view


##  Release Notes

- Reworked the project diagnostics view:
- Fixed an issue where the project diagnostics view could update its
excerpts while you were typing in it.
- Fixed bugs where the project diagnostics view could show the wrong
excerpts.
- Changed the diagnostics view to always update its excerpts eagerly
when not focused.
- Added an indicator to the project diagnostics view's toolbar, showing
when diagnostics have been changed.

---------

Co-authored-by: Richard Feldman <oss@rtfeldman.com>
2024-04-25 18:12:15 -07:00
..
activity_indicator Add auto-update system for extensions (#9890) 2024-03-28 15:41:22 -04:00
anthropic Move lints section to the top of Cargo.toml, to match the others 2024-04-18 15:53:48 -04:00
assets New revision of the Assistant Panel (#10870) 2024-04-23 16:23:26 -07:00
assistant New revision of the Assistant Panel (#10870) 2024-04-23 16:23:26 -07:00
assistant2 Always submit function definitions in Simple mode too (#11016) 2024-04-25 16:34:07 -07:00
assistant_tooling Accept Views on LanguageModelTools (#10956) 2024-04-25 13:03:43 -07:00
audio Introduce InlineCompletionProvider (#9777) 2024-03-26 13:28:06 +01:00
auto_update Refactor workspace notifications to use explicit NotificationId type (#10342) 2024-04-10 17:21:23 -04:00
breadcrumbs Break typography styles out of StyledExt (#11013) 2024-04-25 17:42:53 -04:00
call remote projects per user (#10594) 2024-04-23 15:33:09 -06:00
channel remote projects per user (#10594) 2024-04-23 15:33:09 -06:00
cli Allow cli to accept --dev-server-token (#10944) 2024-04-24 13:15:19 -06:00
client New revision of the Assistant Panel (#10870) 2024-04-23 16:23:26 -07:00
clock Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
collab New revision of the Assistant Panel (#10870) 2024-04-23 16:23:26 -07:00
collab_ui Break typography styles out of StyledExt (#11013) 2024-04-25 17:42:53 -04:00
collections gpui: Add SVG rendering to img element and generic asset cache (#9931) 2024-03-29 17:09:49 -07:00
color Fix hex_to_hsla inside the color crate (#9412) 2024-03-15 16:58:46 -04:00
command_palette Encapsulate CommandPaletteFilter and CommandPaletteInterceptor (#9402) 2024-03-15 12:37:25 -04:00
command_palette_hooks Introduce InlineCompletionProvider (#9777) 2024-03-26 13:28:06 +01:00
copilot Revert "Revert "language: Remove buffer fingerprinting (#9007)"" (#9671) 2024-04-12 18:40:35 +02:00
copilot_ui Refactor workspace notifications to use explicit NotificationId type (#10342) 2024-04-10 17:21:23 -04:00
db Clean up whitespace (#10755) 2024-04-23 13:31:21 -04:00
diagnostics Rework project diagnostics to prevent showing inconsistent state (#10922) 2024-04-25 18:12:15 -07:00
editor Fix cmd+click find all references fallback not working in Vim mode (#10684) 2024-04-25 09:07:14 -06:00
extension Add SettingsSources::<T>::json_merge_with function (#10869) 2024-04-22 18:38:34 -04:00
extension_api Improve extension API documentation (#10322) 2024-04-09 10:38:29 -04:00
extension_cli Add git blame (#8889) 2024-03-28 18:32:11 +01:00
extensions_ui Extract Elixir extension (#10948) 2024-04-25 13:59:14 -04:00
feature_flags WIP: remoting (#10085) 2024-04-11 15:36:35 -06:00
feedback Refactor workspace notifications to use explicit NotificationId type (#10342) 2024-04-10 17:21:23 -04:00
file_finder Add preview tabs (#9125) 2024-04-11 23:09:12 +02:00
file_icons tasks: Use icons instead of secondary text in a modal (#10264) 2024-04-08 11:41:54 +02:00
fs Rework project diagnostics to prevent showing inconsistent state (#10922) 2024-04-25 18:12:15 -07:00
fsevent Add rs-notify implementation of fs::watch (#9040) 2024-03-08 22:18:44 -08:00
fuzzy Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
git Store goldenfiles with trailing newline (#10900) 2024-04-23 19:13:04 +02:00
go_to_line Line numbers short mode (#10354) 2024-04-10 12:08:07 +02:00
google_ai Fix licensing errors 2024-03-20 15:52:02 +01:00
gpui Fix project-panel double click file support on Windows (#10917) 2024-04-25 10:01:24 -07:00
gpui_macros gpui-macros: Hide autogenerated action types/functions (#10417) 2024-04-11 15:38:47 +02:00
headless Allow cli to accept --dev-server-token (#10944) 2024-04-24 13:15:19 -06:00
image_viewer Merge ElementContext into WindowContext (#10979) 2024-04-25 12:54:39 +02:00
install_cli Fix flickering (#9012) 2024-03-11 10:45:57 +01:00
journal Add the ability for extensions to provide language settings (#10296) 2024-04-08 19:17:12 -04:00
language Fix typo in comment 2024-04-25 17:30:47 -04:00
language_selector Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
language_tools Introduce autoscroll support for elements (#10889) 2024-04-23 15:14:22 +02:00
languages Allow controlling Tailwind via the language_servers setting (#11012) 2024-04-25 17:29:47 -04:00
live_kit_client Add a schema to extensions, to prevent installing extensions on too old of a Zed version (#9599) 2024-03-20 17:33:26 -04:00
live_kit_server Merge prost dependecies (#9522) 2024-03-18 20:33:20 -06:00
lsp lsp: Do not set error/result fields if they're missing. (#10610) 2024-04-16 14:27:12 +02:00
markdown_preview Add preview tabs (#9125) 2024-04-11 23:09:12 +02:00
media Revert "Revert "Revert dependency updates in #9836 (#10089)"" 2024-04-02 13:12:38 -06:00
menu Fix the linux keymap (#9829) 2024-03-26 16:10:09 -07:00
multi_buffer Add a command to expand the context for a multibuffer (#10300) 2024-04-19 14:27:56 -07:00
node_runtime Allow extensions to define more of the methods in the LspAdapter trait (#9554) 2024-03-20 12:47:04 -07:00
notifications Fix mention notifications are not updated after message change and not removed after a message is deleted (#9847) 2024-04-02 20:40:00 -06:00
open_ai New revision of the Assistant Panel (#10870) 2024-04-23 16:23:26 -07:00
outline Break typography styles out of StyledExt (#11013) 2024-04-25 17:42:53 -04:00
picker remote projects per user (#10594) 2024-04-23 15:33:09 -06:00
prettier Fix prettier-plugin-organize-imports plugin removes used imports (#9598) 2024-03-21 08:23:15 +01:00
project Rework project diagnostics to prevent showing inconsistent state (#10922) 2024-04-25 18:12:15 -07:00
project_panel New revision of the Assistant Panel (#10870) 2024-04-23 16:23:26 -07:00
project_symbols Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
quick_action_bar Do not show tooltip for editor controls if clicked (#10679) 2024-04-17 13:20:47 +02:00
recent_projects New revision of the Assistant Panel (#10870) 2024-04-23 16:23:26 -07:00
refineable Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
release_channel cli: Treat first argument as name of release channel to use for the cli (#10856) 2024-04-22 18:01:06 +02:00
remote_projects remote projects per user (#10594) 2024-04-23 15:33:09 -06:00
rich_text New revision of the Assistant Panel (#10870) 2024-04-23 16:23:26 -07:00
rope Revert "Revert "language: Remove buffer fingerprinting (#9007)"" (#9671) 2024-04-12 18:40:35 +02:00
rpc New revision of the Assistant Panel (#10870) 2024-04-23 16:23:26 -07:00
search Make keymaps reusable across platforms (#10811) 2024-04-22 13:24:25 -07:00
semantic_index New revision of the Assistant Panel (#10870) 2024-04-23 16:23:26 -07:00
semantic_version Extract SemanticVersion into its own crate (#9956) 2024-03-29 12:11:57 -04:00
settings New revision of the Assistant Panel (#10870) 2024-04-23 16:23:26 -07:00
snippet Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
sqlez remote projects per user (#10594) 2024-04-23 15:33:09 -06:00
sqlez_macros Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
story Enable clippy::eq_op (#9369) 2024-03-14 17:05:07 -04:00
storybook Use winresource instead of embed-manifest (#10810) 2024-04-24 12:59:18 -07:00
sum_tree Update docstring for SumTree (#10927) 2024-04-24 14:01:10 +02:00
tab_switcher Add preview tabs (#9125) 2024-04-11 23:09:12 +02:00
task Properly pass nested script arguments for tasks (#10776) 2024-04-19 16:24:35 +03:00
tasks_ui Properly extract package name out of cargo pkgid (#10929) 2024-04-24 14:12:59 +03:00
telemetry_events Extract SemanticVersion into its own crate (#9956) 2024-03-29 12:11:57 -04:00
terminal chore: remove repetitive word (#10923) 2024-04-24 11:34:32 +03:00
terminal_view Merge ElementContext into WindowContext (#10979) 2024-04-25 12:54:39 +02:00
text Improve the ergonomics of creating local buffers (#10347) 2024-04-10 08:32:51 -06:00
theme Add the ability for extensions to provide language settings (#10296) 2024-04-08 19:17:12 -04:00
theme_importer themes: Add pane_group.border color (#9986) 2024-04-01 12:07:26 -04:00
theme_selector Add support for applying theme after extension is installed (#9529) 2024-03-20 11:13:58 -04:00
time_format Inline git blame (#10398) 2024-04-15 14:21:52 +02:00
ui Break typography styles out of StyledExt (#11013) 2024-04-25 17:42:53 -04:00
ui_text_field remote projects per user (#10594) 2024-04-23 15:33:09 -06:00
util XDG_BASE_DIR support (linux, windows) (#10808) 2024-04-22 12:42:18 -07:00
vcs_menu fs: Move Repository trait into git crate (#10768) 2024-04-19 11:57:17 +02:00
vim Don't use fancy cursors for non-vim people (#11010) 2024-04-25 14:21:01 -06:00
welcome Add preview tabs (#9125) 2024-04-11 23:09:12 +02:00
workspace Revert "Changed cmd+w with no open tabs to close window (#10740)" (#10986) 2024-04-25 09:10:02 -04:00
worktree fs: Move Repository trait into git crate (#10768) 2024-04-19 11:57:17 +02:00
zed Read settings in headless mode (#10950) 2024-04-24 16:06:36 -06:00
zed_actions Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00