# project: Fix code_actions_on_format edits being reverted when no formatter available \(\#51605\) · gitcafe/zed

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

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

Visibility: public

Requested revision: d31d3b87216e387cd263091b1dc747dbe3bec6b5

Requested commit: d31d3b87216e387cd263091b1dc747dbe3bec6b5

Commit: d31d3b87216e387cd263091b1dc747dbe3bec6b5

Tree: cc4efdba85a6473f8dfde133235155d37bfd8953

Author: Matt Van Horn

Committer: GitHub

## Message

```
project: Fix code_actions_on_format edits being reverted when no formatter available (#51605)

Fixes #51490

## Problem

When `code_actions_on_format` is configured (e.g.,
`source.fixAll.phpcs`) and `formatter` is not explicitly set, code
action edits are applied but then reverted during format-on-save.

The root cause is in the formatting pipeline's error handling. Code
actions and formatters share a single transaction via `.chain()`. When
`Formatter::Auto` resolves to `Formatter::Prettier` (PHP defaults to
`prettier.allowed: true`), and prettier is not installed or fails, the
error propagates via `?` out of the formatter loop, aborting the entire
`format_buffer_locally` function. This causes the formatting transaction
- which already contains the successfully applied code action edits - to
be lost.

The workaround of setting `"formatter": []` works because it removes all
formatters from the chain, so no formatter can fail and trigger the
abort.

## Fix

Change error handling for individual formatters (Prettier, External
command, Language Server) from propagating errors via `?` to logging the
error and continuing to the next formatter. This treats "formatter
failed" as a no-op for that specific formatter rather than aborting the
entire pipeline.

This matches the existing pattern used when `LanguageServer(Current)`
finds no server that supports formatting - it already logs and
`continue`s rather than erroring.

## Testing

- `cargo check -p project` passes
- `cargo fmt -p project -- --check` passes

Release Notes:

- Fixed `code_actions_on_format` edits being reverted when `formatter:
"auto"` resolves to an unavailable formatter.

---------

Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Co-authored-by: Kirill Bulatov <kirill@zed.dev>
```

## Parents

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

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