Lint/NoReturnInMemoization flags `return` in local variable `||=` and `&&=` assignments
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 84/100
Hướng nghiên cứu
Issue xác định on_or_asgn và bí danh on_and_asgn của nó là các điểm truy cập liên quan, đồng thời nêu các bài kiểm thử phép gán liên quan. Đọc phần triển khai cop và các bài kiểm thử đó, rồi bổ sung phạm vi kiểm thử cho các biến cục bộ được gán ||= và &&=. Chạy các bài kiểm thử cop tập trung; hoàn tất khi những trường hợp này không phát sinh lỗi vi phạm và hành vi hiện có của biến instance vẫn vượt qua kiểm thử.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Lint/NoReturnInMemoization reports an offense for a return inside a begin..end block assigned to a local variable with ||= or &&=:
# frozen_string_literal: true
def foo
x ||= begin
return 1 if bar
2
end
x
end
$ bundle exec rubocop --only Lint/NoReturnInMemoization sample.rb
sample.rb:5:5: W: Lint/NoReturnInMemoization: Do not return in begin..end blocks in instance variable assignment contexts.
Expected behavior
No offense. The cop description and message cover instance variable assignment, and the cop already ignores the same code with x = begin ... end or x += begin ... end (see the test_returns_in_regular_assignment_are_not_offenses and test_returns_in_operation_assignment_for_instance_variable_are_not_offenses tests). A local variable goes out of scope when the method returns, so no memoized value is lost.
Cause
on_op_asgn returns early unless the target is an instance variable, but on_or_asgn (also aliased as on_and_asgn) checks every target.
Version: rubocop-shopify main (3.1.0), rubocop 1.92.0.
- Ngôn ngữ chính
- Ruby
- Star
- 636
- Fork
- 49
- Merge trung bình
- 7 giờ 26 phút
- Pull request đã merge (30 ngày)
- 3
Chuẩn bị môi trường
Khởi chạy dev container của dự án ngay trên trình duyệt, bằng tài khoản GitHub của bạn.
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của Shopify/ruby-style-guide
-
Include reasoning in some rulesĐang mở
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 25/100
Shopify/ruby-style-guide#190 · 1 reaction ·
Tất cả issue của Shopify/ruby-style-guide
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 83/100
zerocracy/judges-action#2849 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
bigbluebutton/bigbluebutton#26166 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 82/100
TarteelAI/quranic-universal-library#916 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
good first issue
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
rubocop/rubocop-capybara#276 ·
Maintainer thường phản hồi trong vòng 1 ngày