editor: Add support for customizable soft wrap indentation (#63468)

# Objective

- Soft wrapped lines currently inherit the indentation of their first
line. This can be challenging for those coming from different editors,
or with different expectations.
- Allow users to customize the soft wrap behavior to wrap with extra
indent, or no indent at all.
- Fixes #18687

## Solution

- Introduce 3 soft-wrap indent configuration values (in addition to the
default of `same`): `none`, `extra_one`, and `extra_two` (where they are
multiples of the indent column width).
- Plumb indent configuration through to the various gpui and editor
components that are concerned with wrapping.
- Update code action icon placement to accommodate `none`-level wrap
indentation (preceded by a refactor of the function used to calculate
its display row).
- Fixed an existing bug in `WrapSnapshot::soft_wrap_indent` where
querying a 0-indent wrap returned `None` instead of `Some(0)`

## Testing

- Added tests to `wrap_map.rs` for all indentation levels.
- Updated the random wrap tests to include indent setting combinations. 
- Added tests for code action icon placement. 
- Validated locally by toggling between the various settings and
observing how the wrap behaved.

## 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

## Showcase

Changes are grouped by commit to ease review.

Screenshots below!

<details>
  <summary>Click to view showcase</summary>

**`same` indent** (current Zed behavior)
<img width="764" height="844" alt="Screenshot from 2026-08-02 22-45-54"
src="https://github.com/user-attachments/assets/83e1465c-0e8e-445d-a172-9e1b446406b7"
/>

**`none` indent**
<img width="764" height="844" alt="Screenshot from 2026-08-02 22-45-39"
src="https://github.com/user-attachments/assets/99b282b6-d308-453d-b08b-e10af824f307"
/>

**`extra_one` indent**
<img width="764" height="844" alt="Screenshot from 2026-08-02 22-46-06"
src="https://github.com/user-attachments/assets/c7480c84-f1a2-485d-b831-b97fe55c0b03"
/>

**`extra_two` indent**
<img width="764" height="844" alt="Screenshot from 2026-08-02 22-46-19"
src="https://github.com/user-attachments/assets/badc4996-e1bf-4237-9add-babf08f13897"
/>

**the setting**
<img width="826" height="336" alt="Screenshot from 2026-08-02 22-42-19"
src="https://github.com/user-attachments/assets/906b4e8e-1366-4a4e-a2cf-4f8bd67fd604"
/>


</details>

---

Release Notes:

- Added a `soft_wrap_indent` setting (`"none"`, `"same"`, `"extra_one"`,
`"extra_two"`) to configure indentation for soft-wrapped continuation
lines.
- Fixed soft-wrap continuation line indentation calculation for
unindented lines starting at column 0.
- [GPUI] Added `IndentAdjustment` enum to `LineWrapper` to control
indentation of soft-wrapped continuation lines.

---------

Co-authored-by: Kirill Bulatov <mail4score@gmail.com>
4f70d91bdaAru Sahni committed on 9/28/2026, 7:16:22 AM· committed by GitHubparentd3ccd57
14 files changedLine totals unavailable