@@ -12,7 +12,8 @@ module Rails
1212 # - update or save calls, assigned to a variable,
1313 # or used as a condition in an if/unless/case statement.
1414 # - create calls, assigned to a variable that then has a
15- # call to `persisted?`.
15+ # call to `persisted?`, or whose return value is checked by
16+ # `persisted?` immediately
1617 # - calls if the result is explicitly returned from methods and blocks,
1718 # or provided as arguments.
1819 # - calls whose signature doesn't look like an ActiveRecord
@@ -137,16 +138,19 @@ def check_assignment(assignment)
137138 add_offense_for_node ( node , CREATE_MSG )
138139 end
139140
140- def on_send ( node ) # rubocop:disable Metrics/CyclomaticComplexity
141+ # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
142+ def on_send ( node )
141143 return unless persist_method? ( node )
142144 return if return_value_assigned? ( node )
143145 return if implicit_return? ( node )
144146 return if check_used_in_condition_or_compound_boolean ( node )
145147 return if argument? ( node )
146148 return if explicit_return? ( node )
149+ return if checked_immediately? ( node )
147150
148151 add_offense_for_node ( node )
149152 end
153+ # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
150154 alias on_csend on_send
151155
152156 def autocorrect ( node )
@@ -238,6 +242,10 @@ def conditional?(parent)
238242 parent . if_type? || parent . case_type?
239243 end
240244
245+ def checked_immediately? ( node )
246+ node . parent && call_to_persisted? ( node . parent )
247+ end
248+
241249 def allowed_receiver? ( node )
242250 return false unless node . receiver
243251 return false unless cop_config [ 'AllowedReceivers' ]
0 commit comments