A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/rubocop/rubocop/issues/14420 below:

Style/SafeNavigation reports on complex nil checks that should pass · Issue #14420 · rubocop/rubocop · GitHub

Expected behavior

The following code is flagged as a Style/SafeNavigation violation.

end_time = end_date.nil? ? nil : end_date.in_time_zone(timezone) + 1.day

The shape of the code actually matches one of the exceptions listed in the documentation:

foo ? foo * 42 : nil      # Ignored `foo&.*(42)` due to unclear readability benefit.

I think the correct fix is to ignore any safe navigation where there is arithmetic or other ignored methods (like []) anywhere in the non-nil side of the conditional.

Actual behavior

Arithmetic calls are excepted in the docs due to readability, but because there is a method call before the arithmetic but inside the conditional, rubocop incorrectly fixes to non-functional code.

end_time = end_date&.in_time_zone(timezone) + 1.day

This seems to have started around 1.79, since we're only getting these violations now, whereas they weren't triggering before, though I'm not certain this is the exact version where it changed.

Steps to reproduce the problem

Save the following code:

end_time = end_date.nil? ? nil : end_date.in_time_zone(timezone) + 1.day

See that it violates Style/SafeNavigation. It should not.

Try auto-correct, see that it produces code that will error when nil receives +.

RuboCop version
$ bundle exec rubocop -V
1.79.1 (using Parser 3.3.8.0, Prism 1.4.0, rubocop-ast 1.46.0, analyzing as Ruby 3.4, running on ruby 3.4.5) +server [arm64-darwin24]
  - rubocop-rspec 3.6.0
  - rubocop-performance 1.25.0
  - rubocop-rake 0.7.1
  - rubocop-capybara 2.22.1
  - rubocop-factory_bot 2.27.1
  - rubocop-graphql 1.5.6
  - rubocop-performance 1.25.0
  - rubocop-rake 0.7.1
  - rubocop-rspec 3.6.0
  - rubocop-rspec_rails 2.31.0
  - rubocop-sorbet 0.10.5
  - rubocop-rails 2.32.0

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4