-
Notifications
You must be signed in to change notification settings - Fork 2.3k
x/tools/gopls: CodeAction: do not offer "inline variable" on an lvalue reference #590
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
Add a marker testdata file that checks that inlining a variable on the left-hand side of an assignment fails as expected.
…anges logic Introduce a new helper `noCodeActionMarker` that verifies the absence of code actions. Refactor the test logic in `codeActionChanges` to delegate to a shared `getActionsWithCandidates` function, simplifying the test code and reducing duplication.
Added fix (golang/go#75200) in comments to reproduce the error.
…lining Re‑enable the check that prevents inlining identifiers that are on the left‑hand side of an assignment. The previous implementation was commented out, which caused the inliner to occasionally incorrectly inline such identifiers. This patch restores the logic, ensuring the inlining logic does not erroneously modify assignment targets. No breaking changes. Fixes: golang/go#75200
This PR (HEAD: 4f937fd) has been imported to Gerrit for code review. Please visit Gerrit at https://go-review.googlesource.com/c/tools/+/701035. Important tips:
|
Message from Gopher Robot: Patch Set 1: (1 comment) Please don’t reply on this GitHub thread. Visit golang.org/cl/701035. |
Message from Alan Donovan: Patch Set 1: (4 comments) Please don’t reply on this GitHub thread. Visit golang.org/cl/701035. |
This PR (HEAD: b004dd4) has been imported to Gerrit for code review. Please visit Gerrit at https://go-review.googlesource.com/c/tools/+/701035. Important tips:
|
Message from Ilya Ilyinykh: Patch Set 1: (3 comments) Please don’t reply on this GitHub thread. Visit golang.org/cl/701035. |
Message from Ilya Ilyinykh: Patch Set 2: (2 comments) Please don’t reply on this GitHub thread. Visit golang.org/cl/701035. |
The inlining logic for variables now uses `isSafelyInlinable` to guard against unsafe replacements such as: - the left‑hand side of an assignment or compound assignment - increment/decrement operations - taking the address of the variable - calling a method with a pointer receiver New helper functions `isCallingPtrRecvMethod` and `isTakingTheAddress` support these checks. Several tests were added to confirm that such cases do not produce a code action. Fixes #75200
This PR (HEAD: bb25652) has been imported to Gerrit for code review. Please visit Gerrit at https://go-review.googlesource.com/c/tools/+/701035. Important tips:
|
Message from Ilya Ilyinykh: Patch Set 2: (1 comment) Please don’t reply on this GitHub thread. Visit golang.org/cl/701035. |
- Updated `isSafelyInlinable` to correctly handle receiver method calls - Added `isCallingRecvMethod` helper with `wantPtr` flag instead of separate functions - Updated lexer logic for ParentEdge handling - Added new marker test for inlining variable used on LHS with pointer receiver method
This PR (HEAD: 8ad209e) has been imported to Gerrit for code review. Please visit Gerrit at https://go-review.googlesource.com/c/tools/+/701035. Important tips:
|
Message from Ilya Ilyinykh: Patch Set 3: (2 comments) Please don’t reply on this GitHub thread. Visit golang.org/cl/701035. |
Fix for: golang/go#75200