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>
2 files changedLine totals unavailable