Class: RuboCop::Cop::Style::MethodOrder
- Inherits:
-
RuboCop::Cop
- Object
- RuboCop::Cop
- RuboCop::Cop::Style::MethodOrder
- Includes:
- RangeHelp
- Defined in:
- lib/rubocop/cop/style/method_order.rb
Overview
This cop enforces methods to be sorted alphabetically within the context of their scope and permission level such as ‘private` or `protected`. The method `initialize` is given special treatment by being required to be listed first in the context of a class if it’s a public method.
Constant Summary collapse
- MSG =
'Methods should be sorted in alphabetical order within their section' \ ' of the code. Method `%<method>s` should come before `%<previous_method>s`.'
Instance Method Summary collapse
-
#autocorrect(_node) ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, rubocop:disable Metrics/MethodLength, Metrics/PerceivedComplexity.
-
#investigate(_processed_source) ⇒ Object
rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, rubocop:enable Metrics/MethodLength, Metrics/PerceivedComplexity.
-
#offenses(*args) ⇒ Object
NOTE: Change this if cops get a callback method for running validations after the on_* methods have been executed.
- #on_class(node) ⇒ Object
- #on_def(node) ⇒ Object (also: #on_defs)
- #on_module(node) ⇒ Object
Instance Method Details
#autocorrect(_node) ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, rubocop:disable Metrics/MethodLength, Metrics/PerceivedComplexity
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/rubocop/cop/style/method_order.rb', line 111 def autocorrect(_node) lambda do |corrector| @method_collector.nodes_by_scope.values.each do |method_collection| next if @autocorrected_method_collections.include?(method_collection) @autocorrected_method_collections << method_collection method_collection.replacements.values.each do |replacement_collection| replacement_collection.each do |node_to_move, node_to_replace| next if @autocorrected_nodes.include?(node_to_move) @autocorrected_nodes << node_to_move node_source = range_with_method_comments(node_to_move).source replacement_range = range_with_method_comments(node_to_replace) if node_source.end_with?("\n") && !replacement_range.source.end_with?("\n") corrector.replace(replacement_range, node_source.chomp("\n")) elsif !node_source.end_with?("\n") && replacement_range.source.end_with?("\n") corrector.replace(replacement_range, node_source + "\n") else corrector.replace(replacement_range, node_source) end end end end end end |
#investigate(_processed_source) ⇒ Object
rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, rubocop:enable Metrics/MethodLength, Metrics/PerceivedComplexity
140 141 142 143 144 145 146 147 |
# File 'lib/rubocop/cop/style/method_order.rb', line 140 def investigate(_processed_source) @autocorrected_method_collections = [] @autocorrected_nodes = [] @method_collector = RuboCopMethodOrder::MethodCollector.new( should_skip_method: ->(node) { !cop_enabled_for_node?(node) } ) @offenses_checked = false end |
#offenses(*args) ⇒ Object
NOTE: Change this if cops get a callback method for running validations
after the on_* methods have been executed.
151 152 153 154 155 156 157 158 |
# File 'lib/rubocop/cop/style/method_order.rb', line 151 def offenses(*args) unless @offenses_checked @offenses_checked = true check_nodes end super(*args) end |
#on_class(node) ⇒ Object
160 161 162 |
# File 'lib/rubocop/cop/style/method_order.rb', line 160 def on_class(node) @method_collector.collect_nodes_from_class(node) end |
#on_def(node) ⇒ Object Also known as: on_defs
164 165 166 |
# File 'lib/rubocop/cop/style/method_order.rb', line 164 def on_def(node) @method_collector.collect(node) end |
#on_module(node) ⇒ Object
169 170 171 |
# File 'lib/rubocop/cop/style/method_order.rb', line 169 def on_module(node) @method_collector.collect_nodes_from_module(node) end |