# Fix completion labels becoming overly large due to LSP completion items with newlines \(\#23407\) · gitcafe/zed

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

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

Visibility: public

Requested revision: 75c53447548686c477434c95214e0e9a437593df

Requested commit: 75c53447548686c477434c95214e0e9a437593df

Commit: 75c53447548686c477434c95214e0e9a437593df

Tree: b94e2aa79ded65a49d3c5e8a88a7966d4bf48b60

Author: Kirill Bulatov

Committer: GitHub

## Message

```
Fix completion labels becoming overly large due to LSP completion items with newlines (#23407)

Reworks https://github.com/zed-industries/zed/pull/23030 and
https://github.com/zed-industries/zed/pull/15087
Closes https://github.com/zed-industries/zed/issues/23352
Closes https://github.com/zed-industries/zed/issues/23310 

Zed's completion items use `label` from LSP completion items as a base
to show in the list:
https://github.com/zed-industries/zed/blob/d290da7dac922fdc67c4774cdd371fba23fe62e3/crates/project/src/lsp_store.rs#L4371-L4374

Besides that, certain language plugins append `detail` or
`label_details.description` as a suffix:
https://github.com/zed-industries/zed/blob/d290da7dac922fdc67c4774cdd371fba23fe62e3/crates/languages/src/vtsls.rs#L178-L188

Either of these 3 properties may return `\n` (or multiple) in it,
spoiling Zed's completion menu, which uses `UniformList` to render those
items: a uniform list uses common, minimum possible height for each
element, and `\n` bloats that overly.

Good approach would be to use something else:
https://github.com/zed-industries/zed/issues/21403 but that has its own
drawbacks and relatively hard to use instead (?).

We could follow VSCode's approach and move away all but `label` from
`CodeLabel.text` to the side, where the documentation is, but that does
not solve the issue with `details` having newlines.

So, for now, sanitize all labels and remove any newlines from them. If
newlines are found, also replace whitespace sequences if there's more
than 1 in a row.

Later, this approach can be improved similarly to how Helix and Zed's
inline completions do: rendering a "ghost" text, showing the
completion's edit applied to the editor.

Release Notes:

- Fixed completion labels becoming overly large due to LSP completion
items with newlines
```

## Parents

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

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