class RuboCop::Cop::Cask::StanzaGrouping
This cop checks that a cask's stanzas are grouped correctly. See github.com/Homebrew/homebrew-cask/blob/master/CONTRIBUTING.md#stanza-order for more info.
Constants
- EXTRA_LINE_MSG
- MISSING_LINE_MSG
Attributes
cask_block[R]
line_ops[R]
Public Instance Methods
autocorrect(range)
click to toggle source
# File lib/rubocop/cop/cask/stanza_grouping.rb, line 26 def autocorrect(range) lambda do |corrector| case line_ops[range.line - 1] when :insert corrector.insert_before(range, "\n") when :remove corrector.remove(range) end end end
on_cask(cask_block)
click to toggle source
# File lib/rubocop/cop/cask/stanza_grouping.rb, line 20 def on_cask(cask_block) @cask_block = cask_block @line_ops = {} add_offenses end
Private Instance Methods
add_offense(line_index, message:)
click to toggle source
Calls superclass method
# File lib/rubocop/cop/cask/stanza_grouping.rb, line 88 def add_offense(line_index, message:) line_length = [processed_source[line_index].size, 1].max range = source_range(processed_source.buffer, line_index + 1, 0, line_length) super(range, location: range, message: message) end
add_offense_extra_line(stanza)
click to toggle source
# File lib/rubocop/cop/cask/stanza_grouping.rb, line 82 def add_offense_extra_line(stanza) line_index = index_of_line_after(stanza) line_ops[line_index] = :remove add_offense(line_index, message: EXTRA_LINE_MSG) end
add_offense_missing_line(stanza)
click to toggle source
# File lib/rubocop/cop/cask/stanza_grouping.rb, line 76 def add_offense_missing_line(stanza) line_index = index_of_line_after(stanza) line_ops[line_index] = :insert add_offense(line_index, message: MISSING_LINE_MSG) end
add_offenses()
click to toggle source
# File lib/rubocop/cop/cask/stanza_grouping.rb, line 42 def add_offenses toplevel_stanzas.each_cons(2) do |stanza, next_stanza| next unless next_stanza if missing_line_after?(stanza, next_stanza) add_offense_missing_line(stanza) elsif extra_line_after?(stanza, next_stanza) add_offense_extra_line(stanza) end end end
empty_line_after?(stanza)
click to toggle source
# File lib/rubocop/cop/cask/stanza_grouping.rb, line 64 def empty_line_after?(stanza) source_line_after(stanza).empty? end
extra_line_after?(stanza, next_stanza)
click to toggle source
# File lib/rubocop/cop/cask/stanza_grouping.rb, line 59 def extra_line_after?(stanza, next_stanza) stanza.same_group?(next_stanza) && empty_line_after?(stanza) end
index_of_line_after(stanza)
click to toggle source
# File lib/rubocop/cop/cask/stanza_grouping.rb, line 72 def index_of_line_after(stanza) stanza.source_range.last_line end
missing_line_after?(stanza, next_stanza)
click to toggle source
# File lib/rubocop/cop/cask/stanza_grouping.rb, line 54 def missing_line_after?(stanza, next_stanza) !(stanza.same_group?(next_stanza) || empty_line_after?(stanza)) end
source_line_after(stanza)
click to toggle source
# File lib/rubocop/cop/cask/stanza_grouping.rb, line 68 def source_line_after(stanza) processed_source[index_of_line_after(stanza)] end