Class: RuboCop::Cop::Style::IfUnlessModifier
- Extended by:
- AutoCorrector
- Defined in:
- lib/rubocop/cop/style/if_unless_modifier.rb
Overview
Checks for ‘if` and `unless` statements that would fit on one line if written as modifier `if`/`unless`. The cop also checks for modifier `if`/`unless` lines that exceed the maximum line length.
The maximum line length is configured in the ‘Layout/LineLength` cop. The tab size is configured in the `IndentationWidth` of the `Layout/IndentationStyle` cop.
NOTE: It is allowed when ‘defined?` argument has an undefined value, because using the modifier form causes the following incompatibility:
- source,ruby
unless defined?(undefined_foo)
undefined_foo = 'default_value'
end undefined_foo # => ‘default_value’
undefined_bar = ‘default_value’ unless defined?(undefined_bar) undefined_bar # => nil
Constant Summary collapse
- MSG_USE_MODIFIER =
'Favor modifier `%<keyword>s` usage when having a ' \ 'single-line body. Another good alternative is ' \ 'the usage of control flow `&&`/`||`.'
- MSG_USE_NORMAL =
'Modifier form of `%<keyword>s` makes the line too long.'
Constants inherited from Base
Instance Attribute Summary
Attributes inherited from Base
Class Method Summary collapse
Instance Method Summary collapse
Methods included from AutoCorrector
Methods inherited from Base
#active_support_extensions_enabled?, #add_global_offense, #add_offense, badge, #begin_investigation, #callbacks_needed, callbacks_needed, #config_to_allow_offenses, #config_to_allow_offenses=, #cop_config, #cop_name, cop_name, department, documentation_url, exclude_from_registry, #excluded_file?, #external_dependency_checksum, inherited, #initialize, joining_forces, lint?, match?, #message, #offenses, #on_investigation_end, #on_new_investigation, #on_other_file, #parse, #ready, #relevant_file?, support_autocorrect?, support_multiple_source?, #target_rails_version, #target_ruby_version
Methods included from ExcludeLimit
Methods included from AutocorrectLogic
#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #autocorrect_with_disable_uncorrectable?, #correctable?, #disable_uncorrectable?, #safe_autocorrect?
Methods included from IgnoredNode
#ignore_node, #ignored_node?, #part_of_ignored_node?
Methods included from Util
Constructor Details
This class inherits a constructor from RuboCop::Cop::Base
Class Method Details
.autocorrect_incompatible_with ⇒ Object
63 64 65 |
# File 'lib/rubocop/cop/style/if_unless_modifier.rb', line 63 def self.autocorrect_incompatible_with [Style::SoleNestedConditional] end |
Instance Method Details
#on_if(node) ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/rubocop/cop/style/if_unless_modifier.rb', line 67 def on_if(node) return if defined_nodes(node).any? { |n| defined_argument_is_undefined?(node, n) } msg = if single_line_as_modifier?(node) && !named_capture_in_condition?(node) MSG_USE_MODIFIER elsif too_long_due_to_modifier?(node) MSG_USE_NORMAL end return unless msg add_offense(node.loc.keyword, message: format(msg, keyword: node.keyword)) do |corrector| autocorrect(corrector, node) end end |