rust-lang / rust-lang/rust-analyzer

Quick fix on an unsaved file can change the wrong lines

Open
#13,650 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

A-flycheck C-bug
Dominant language
Rust
Stars
16.9k
Forks
2.2k
Avg merge
1d 12h
Merged PRs (30d)
72

Description

(Thank you for the excellent extension!)

rust-analyzer version: rust-analyzer version: 0.3.1285-standalone (45ec315e0 2022-11-11)

rustc version: rustc 1.64.0 (a55dd71d5 2022-09-19)

I have the following code:

                let fix_left = match op.associativity() {
                    Associativity::Right => true,
                    _ => false,
                };
                let fix_right = match op.associativity() {
                    Associativity::Left => true,
                    _ => false,
                };

There is an option to apply a quick fix to each block. I select it:

image

...and I successfully get the following code:

                let fix_left = matches!(op.associativity(), Associativity::Right);
                let fix_right = match op.associativity() {
                    Associativity::Left => true,
                    _ => false,
                };

But — then I go to apply the quick fix for the second block — and it mangles the lines, removing the let fix_right text:

                let fix_left = matches!(op.associativity(), Associativity::Right)   _ => false,
                };

Saving the file between the two actions resolves the issue.

Thanks!

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the report in an unsaved Rust file by applying the two quick fixes consecutively, then repeat after saving between actions. Trace the quick-fix application path and compare the resulting text; the fix is complete when the second quick fix preserves the existing lines without mangling or removing surrounding text.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
devtools
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.