# languages: Fix Rust completion labels with \`fullFunctionSignatures\` enabled \(\#59125\) · gitcafe/zed

[View on GitCafe](https://git.cafe/gitcafe/zed/commit/afaef857b987d924c5ec09265a83feb030283f48)

Repository: [gitcafe/zed](https://git.cafe/gitcafe/zed)

Visibility: public

Requested revision: afaef857b987d924c5ec09265a83feb030283f48

Requested commit: afaef857b987d924c5ec09265a83feb030283f48

Commit: afaef857b987d924c5ec09265a83feb030283f48

Tree: 753e2e91c4749b38050ee256c7b143f3b1689399

Author: Xin Zhao

Committer: GitHub

## Message

````
languages: Fix Rust completion labels with `fullFunctionSignatures` enabled (#59125)

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content adheres to Zed's UI standards
([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
and
[icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md)
guidelines)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Closes #57030

When `fullFunctionSignatures` is enabled in `rust-analyzer`, some
completion items returned by the language server have an unexpected
`filterText`. For example:
```jsonc
{
  "label": "sync_all(…)",
  "labelDetails": {
    "detail": "(alias fsync)",
    "description": "pub fn sync_all(&self) -> io::Result<()>"
  },
  "kind": 2,
  "sortText": "7ffffffa",
  "filterText": "sync_allfsync",
  ...
}
```
For such completion items, the rust-analyzer adapter falls back to an
outer range passed into the `mk_label` closure to determine the display
range:

https://github.com/zed-industries/zed/blob/c32c037c6b2b582552edc8c6b9bda513412c3bf4/crates/languages/src/rust.rs#L362-L371

For functions or methods, this fallback range is calculated here:

https://github.com/zed-industries/zed/blob/c32c037c6b2b582552edc8c6b9bda513412c3bf4/crates/languages/src/rust.rs#L424-L435

In this example, the `function_signature` is `"pub fn sync_all(&self) ->
io::Result<()>"`, and the regex matches up to `fn sync_all(&self) ->
io::Result<(`. Currently, the range passed to the `mk_label` closure
mistakenly covers `"ub fn sync_all(&self) -> io::Result<"` (causing the
first character 'p' to be truncated, as reported in #57030), whereas we
only want `"sync_all"` itself

This PR introduces two main changes to fix this behavior:
- Adjust the range start: Skip the leading `fn` keyword so that the
range starts exactly at the function or method name.
- Update the regex pattern: The current pattern matches up to the last
`(`, which causes incorrect slicing if the return type contains
parentheses (e.g., `Result<()>`). This is changed to match up to the
first `(`.

Release Notes:

- Fixed some rust completions has `ub fn ` as prefix when
`fullFunctionSignatures` is enabled
````

## Parents

- [73b235aeb45910363b61a43cbc49ca12d83de3de](https://git.cafe/gitcafe/zed/commit/73b235aeb45910363b61a43cbc49ca12d83de3de?format=markdown)

[Source at this commit](https://git.cafe/gitcafe/zed/tree/afaef857b987d924c5ec09265a83feb030283f48?format=markdown)
