ZIm/crates
tomoikey 291d64c803
lsp: Implement textDocument/signatureHelp for ProjectClientState::Local environment (#12909)
Closes https://github.com/zed-industries/zed/issues/5155
Closes https://github.com/zed-industries/zed/issues/4879


# Purpose
There was no way to know what to put in function signatures or struct
fields other than hovering at the moment. Therefore, it was necessary to
implement LSP's `textDocument/signatureHelp`.

I tried my best to match the surrounding coding style, but since this is
my first contribution, I believe there are various aspects that may be
lacking. I would greatly appreciate your code review.

# Description
When the window is displayed, the current argument or field at the
cursor's position is automatically bolded. If the cursor moves and there
is nothing to display, the window closes automatically.
To minimize changes and reduce the burden of review and debugging, the
SignatureHelp feature is implemented only when `is_local` is `true`.
Some `unimplemented!()` macros are embedded, but rest assured that they
are not called in this implementation.

# How to try it out
Press `cmd + i` (MacOS), `ctrl + i` (Linux).

# Enable auto signature help (2 ways)
### Add `"auto_signature_help": true` to `settings.json`
<img width="426" alt="image"
src="https://github.com/zed-industries/zed/assets/55743826/61310c39-47f9-4586-94b0-ae519dc3b37c">

Or

### Press `Auto Signature Help`. (Default `false`)
<img width="226" alt="image"
src="https://github.com/zed-industries/zed/assets/55743826/34155215-1eb5-4621-b09b-55df2f1ab6a8">

# Disable to show signature help after completion
### Add `"show_signature_help_after_completion": false` to
`settings.json`
<img width="438" alt="image"
src="https://github.com/zed-industries/zed/assets/55743826/5e5bacac-62e0-4921-9243-17e1e72d5eb6">

# Movie

https://github.com/zed-industries/zed/assets/55743826/77c12d51-b0a5-415d-8901-f93ef92098e7

# Screen Shot
<img width="628" alt="image"
src="https://github.com/zed-industries/zed/assets/55743826/3ebcf4b6-2b94-4dea-97f9-ac4f33e0291e">

<img width="637" alt="image"
src="https://github.com/zed-industries/zed/assets/55743826/6dc3eb4d-beee-460b-8dbe-d6eec6379b76">

Release Notes:

- Show function signature popovers
([4879](https://github.com/zed-industries/zed/issues/4879),
[5155](https://github.com/zed-industries/zed/issues/5155))

---------

Co-authored-by: Kirill Bulatov <kirill@zed.dev>
2024-07-11 13:38:33 +03:00
..
activity_indicator Make LSP task cancellation discoverable (#13226) 2024-06-18 12:44:35 -07:00
anthropic Make Claude 3.5 the default Anthropic model (#13324) 2024-06-21 18:47:38 +02:00
assets Move from Zed fonts to IBM Plex (#13596) 2024-06-27 14:36:44 -06:00
assistant Lay the groundwork for collaborating on assistant panel (#13991) 2024-07-10 17:36:22 +02:00
assistant_slash_command Lay the groundwork for collaborating on assistant panel (#13991) 2024-07-10 17:36:22 +02:00
assistant_tooling Bring the Tool Calling README up to date (#11683) 2024-05-12 04:47:19 -07:00
audio Make tests less noisy (#12463) 2024-05-29 18:06:45 -07:00
auto_update auto-updates: Do not poll for updates on dev channel (#13311) 2024-06-20 15:00:54 +02:00
breadcrumbs Minor breadcrumb style updates (#14070) 2024-07-10 14:04:17 -04:00
call Remove never-used client parameter from message handler functions (#13406) 2024-06-22 16:07:36 -07:00
channel Remove never-used client parameter from message handler functions (#13406) 2024-06-22 16:07:36 -07:00
cli Stop relying on binary location to be in libexec on Linux (#13374) 2024-06-26 13:00:52 -06:00
client Allow rpc_url to be assigned on Client with test-support feature (#13430) 2024-07-10 13:36:22 -06:00
clock Lay the groundwork for collaborating on assistant panel (#13991) 2024-07-10 17:36:22 +02:00
collab lsp: Implement textDocument/signatureHelp for ProjectClientState::Local environment (#12909) 2024-07-11 13:38:33 +03:00
collab_ui ui: Add margin style methods to Label and LabelLike (#14032) 2024-07-09 17:41:54 -04:00
collections gpui: Add SVG rendering to img element and generic asset cache (#9931) 2024-03-29 17:09:49 -07:00
command_palette Use UpdateGlobal accessors in more places (#11925) 2024-05-16 13:30:04 -04:00
command_palette_hooks Introduce InlineCompletionProvider (#9777) 2024-03-26 13:28:06 +01:00
copilot paths: Replace lazy_static! with OnceLock (#13213) 2024-06-18 12:22:37 -04:00
db paths: Replace lazy_static! with OnceLock (#13213) 2024-06-18 12:22:37 -04:00
dev_server_projects Remove never-used client parameter from message handler functions (#13406) 2024-06-22 16:07:36 -07:00
diagnostics vim: Empty pane improvements (#13624) 2024-06-27 21:54:03 -06:00
editor lsp: Implement textDocument/signatureHelp for ProjectClientState::Local environment (#12909) 2024-07-11 13:38:33 +03:00
extension extensions: Add support for snippets provided by extensions (#14020) 2024-07-10 09:40:50 +02:00
extension_api zed_extension_api: Return structured slash command completions (#13879) 2024-07-05 14:08:42 -04:00
extension_cli extension_cli: Allow building without dynamically linking WebRTC (#13080) 2024-06-14 20:13:31 -04:00
extensions_ui ui: Use PopoverMenu::new for constructing PopoverMenus (#13178) 2024-06-17 18:14:37 -04:00
feature_flags assistant: Feature flag terminal inline assistant (#13732) 2024-07-02 11:47:11 +02:00
feedback Refine inline transformation UX (#12939) 2024-06-13 08:35:22 +02:00
file_finder Fix a prompt typo (#13416) 2024-06-23 07:39:01 -04:00
file_icons Make tests less noisy (#12463) 2024-05-29 18:06:45 -07:00
fs paths: Replace lazy_static! with OnceLock (#13213) 2024-06-18 12:22:37 -04:00
fsevent Retain run loop (#11241) 2024-04-30 23:31:59 -06:00
fuzzy Introduce an outline panel (#12637) 2024-06-12 23:22:52 +03:00
git Introduce an outline panel (#12637) 2024-06-12 23:22:52 +03:00
git_hosting_providers Extract http from util (#11680) 2024-05-10 15:50:20 -06:00
go_to_line Add more menus to Zed (#12940) 2024-06-18 12:16:54 -07:00
google_ai Respect requested gemini model (#13427) 2024-06-23 14:10:31 -06:00
gpui gpui example: Add reset button to Input example (#14163) 2024-07-11 11:46:47 +02:00
gpui_macros gpui_macros: Enable extra-traits feature for syn (#14067) 2024-07-10 12:32:46 -04:00
headless Remove never-used client parameter from message handler functions (#13406) 2024-06-22 16:07:36 -07:00
html_to_markdown Publish html_to_markdown (#13718) 2024-07-01 17:18:58 -04:00
http zed_extension_api: Add github_release_by_tag_name (#12172) 2024-05-22 20:40:31 -04:00
image_viewer Make tests less noisy (#12463) 2024-05-29 18:06:45 -07:00
indexed_docs assistant: Add /docs slash command (#13794) 2024-07-03 17:04:08 -04:00
inline_completion_button paths: Replace lazy_static! with OnceLock (#13213) 2024-06-18 12:22:37 -04: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 chore: Clippy fixes for 1.80 (#13987) 2024-07-10 17:53:17 +02:00
language_selector Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
language_tools ui: Use PopoverMenu::new for constructing PopoverMenus (#13178) 2024-06-17 18:14:37 -04:00
languages windows: Fix rust tasks (#13413) 2024-07-11 10:47:25 +02:00
live_kit_client extension_cli: Allow building without dynamically linking WebRTC (#13080) 2024-06-14 20:13:31 -04:00
live_kit_server Vendor LiveKit protocol (#11672) 2024-05-10 14:18:40 -04:00
lsp lsp: Implement textDocument/signatureHelp for ProjectClientState::Local environment (#12909) 2024-07-11 13:38:33 +03:00
markdown Selectable popover text (#12918) 2024-07-10 21:14:34 -06:00
markdown_preview Refine inline transformation UX (#12939) 2024-06-13 08:35:22 +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 Combine multiple buffer update count fields into one (#13449) 2024-06-23 22:20:10 -07:00
node_runtime JSON: Show package.json dependency tooltips on hover (#13481) 2024-06-25 14:59:29 +02:00
notifications Remove never-used client parameter from message handler functions (#13406) 2024-06-22 16:07:36 -07:00
ollama Allow Ollama Model KeepAlive to be None, defaulting to indefinite (#13059) 2024-06-14 10:33:28 -07:00
open_ai Change tool_calls to be an Option in response (#13778) 2024-07-03 11:07:11 -04:00
outline Add a way to filter items in the outline panel (#13984) 2024-07-09 16:44:24 +03:00
outline_panel outline_panel: Fix outline panel should autoscroll when selection has changed (#14038) 2024-07-10 10:12:09 +03:00
paths settings: Load .zed/settings.json even if .gitignored (#13370) 2024-06-21 18:39:14 +02:00
picker Fix: Picker select_last not scrolling to item index (#13393) 2024-06-23 09:36:52 +02:00
prettier Fix Prettier parser values when formatting files with paths (#13666) 2024-06-29 11:37:22 +03:00
project lsp: Implement textDocument/signatureHelp for ProjectClientState::Local environment (#12909) 2024-07-11 13:38:33 +03:00
project_panel Project panel: Prevent scrollbar size from scaling with rem size (#14167) 2024-07-11 10:34:15 +02:00
project_symbols Add more menus to Zed (#12940) 2024-06-18 12:16:54 -07:00
proto lsp: Implement textDocument/signatureHelp for ProjectClientState::Local environment (#12909) 2024-07-11 13:38:33 +03:00
quick_action_bar lsp: Implement textDocument/signatureHelp for ProjectClientState::Local environment (#12909) 2024-07-11 13:38:33 +03:00
recent_projects Selectable popover text (#12918) 2024-07-10 21:14:34 -06:00
refineable Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
release_channel auto-updates: Do not poll for updates on dev channel (#13311) 2024-06-20 15:00:54 +02:00
repl Stick REPL icon in quick action bar (#14064) 2024-07-10 09:20:52 -07:00
rich_text New revision of the Assistant Panel (#10870) 2024-04-23 16:23:26 -07:00
rope Indent guides (#11503) 2024-05-23 15:50:59 +02:00
rpc Dynamicer builds (#13074) 2024-06-21 16:32:32 -07:00
search Add simple support for wrapscan (#13497) 2024-07-10 20:42:37 -06:00
semantic_index Refactor: Make it possible to share a remote worktree (#12775) 2024-06-07 12:53:01 -07:00
semantic_version Extract SemanticVersion into its own crate (#9956) 2024-03-29 12:11:57 -04:00
settings paths: Replace lazy_static! with OnceLock (#13213) 2024-06-18 12:22:37 -04:00
snippet html: Add support for autoclosing of tags (#11761) 2024-05-20 17:00:27 +02:00
snippet_provider extensions: Add support for snippets provided by extensions (#14020) 2024-07-10 09:40:50 +02:00
sqlez Remove extraneous Cargo.lock files (#14001) 2024-07-09 12:15:34 -04:00
sqlez_macros Dynamicer builds (#13074) 2024-06-21 16:32:32 -07:00
story Introduce a new markdown crate (#11556) 2024-05-09 11:03:33 +02:00
storybook Remove extraneous Cargo.lock files (#14001) 2024-07-09 12:15:34 -04:00
sum_tree Introduce Editor::insert_flaps and Editor::remove_flaps (#12096) 2024-05-21 20:23:37 +02:00
supermaven Reduce spamming of inline completion discard events (#11999) 2024-05-17 16:37:17 -04:00
supermaven_api paths: Replace lazy_static! with OnceLock (#13213) 2024-06-18 12:22:37 -04:00
tab_switcher Introduce recent files ambient context for assistant (#11791) 2024-05-14 13:48:36 +02:00
task task: Add re-run task button to terminal title (#12379) 2024-05-29 11:40:43 +02:00
tasks_ui task: Rebind UseSelectedQuery in modal to F2 (#12601) 2024-06-03 12:52:44 +02:00
telemetry_events Add metrics_id to editor_events (#13525) 2024-06-25 16:47:55 -04:00
terminal windows: Fix rust tasks (#13413) 2024-07-11 10:47:25 +02:00
terminal_view windows: Fix rust tasks (#13413) 2024-07-11 10:47:25 +02:00
text Lay the groundwork for collaborating on assistant panel (#13991) 2024-07-10 17:36:22 +02:00
theme ui: Add NumericStepper component (#13954) 2024-07-08 18:45:49 -04:00
theme_importer Hoist indexmap to workspace level (#12901) 2024-06-11 15:31:55 -04:00
theme_selector Use UpdateGlobal accessors in more places (#11925) 2024-05-16 13:30:04 -04:00
time_format Inline git blame (#10398) 2024-04-15 14:21:52 +02:00
title_bar ui: Add margin style methods to Label and LabelLike (#14032) 2024-07-09 17:41:54 -04:00
ui Stick REPL icon in quick action bar (#14064) 2024-07-10 09:20:52 -07:00
ui_input Rename ui_text_field crate to ui_input (#13949) 2024-07-08 17:05:30 -04:00
util Associate logs from log_err with the calling crate (#13617) 2024-06-27 17:03:47 -07:00
vcs_menu ui: Add margin style methods to Label and LabelLike (#14032) 2024-07-09 17:41:54 -04:00
vim Add simple support for wrapscan (#13497) 2024-07-10 20:42:37 -06:00
welcome Separate out macOS and Linux keymaps (#13792) 2024-07-08 15:05:29 -04:00
workspace Add simple support for wrapscan (#13497) 2024-07-10 20:42:37 -06:00
worktree Fix a bug introduced by #13479 (#13516) 2024-06-25 10:03:29 -07:00
zed linux: Add NewWorkspace to the Actions list in .desktop (#14097) 2024-07-10 16:16:21 -06:00
zed_actions Add more menus to Zed (#12940) 2024-06-18 12:16:54 -07:00