class Codeowners::Checker::LineGrouper
Create groups and subgroups structure for the lines in the CODEOWNERS file.
Attributes
group_buffer[R]
rubocop:enable Metrics/AbcSize rubocop:enable Metrics/CyclomaticComplexity rubocop:enable Metrics/MethodLength
lines[R]
rubocop:enable Metrics/AbcSize rubocop:enable Metrics/CyclomaticComplexity rubocop:enable Metrics/MethodLength
Public Class Methods
call(group, lines)
click to toggle source
# File lib/codeowners/checker/line_grouper.rb, line 7 def self.call(group, lines) new(group, lines).call end
new(group, lines)
click to toggle source
# File lib/codeowners/checker/line_grouper.rb, line 11 def initialize(group, lines) @group_buffer = [group] @lines = lines end
Public Instance Methods
call()
click to toggle source
rubocop:disable Metrics/AbcSize rubocop:disable Metrics/CyclomaticComplexity rubocop:disable Metrics/MethodLength
# File lib/codeowners/checker/line_grouper.rb, line 19 def call lines.each_with_index do |line, index| case line when Codeowners::Checker::Group::Empty ensure_groups_structure when Codeowners::Checker::Group::GroupBeginComment trim_groups(line.level) create_groups_structure(line.level) when Codeowners::Checker::Group::GroupEndComment trim_subgroups(line.level) create_groups_structure(line.level) when Codeowners::Checker::Group::Comment if previous_line_empty?(index) trim_groups(line.level) else trim_subgroups(line.level) end create_groups_structure(line.level) when Codeowners::Checker::Group::Pattern if new_owner?(line, index) trim_groups(current_level) new_group end ensure_groups_structure when Codeowners::Checker::Group::UnrecognizedLine ensure_groups_structure else raise "Do not know how to handle line: #{line.inspect}" end current_group.add(line) end group_buffer.first end
Private Instance Methods
create_groups_structure(level)
click to toggle source
# File lib/codeowners/checker/line_grouper.rb, line 99 def create_groups_structure(level) new_group while current_level < level end
current_group()
click to toggle source
# File lib/codeowners/checker/line_grouper.rb, line 82 def current_group group_buffer.last end
current_level()
click to toggle source
# File lib/codeowners/checker/line_grouper.rb, line 86 def current_level group_buffer.length - 1 end
ensure_groups_structure()
click to toggle source
# File lib/codeowners/checker/line_grouper.rb, line 95 def ensure_groups_structure new_group if current_level.zero? end
new_group()
click to toggle source
# File lib/codeowners/checker/line_grouper.rb, line 90 def new_group group = current_group.create_subgroup group_buffer << group end
new_owner?(line, index)
click to toggle source
# File lib/codeowners/checker/line_grouper.rb, line 64 def new_owner?(line, index) # rubocop:disable Metrics/MethodLength if previous_line_empty?(index) offset = 2 while (index - offset).positive? case lines[index - offset] when Codeowners::Checker::Group::GroupEndComment nil when Codeowners::Checker::Group::Comment return false when Codeowners::Checker::Group::Pattern return line.owner != lines[index - offset].owner end offset += 1 end end false end
previous_line_empty?(index)
click to toggle source
# File lib/codeowners/checker/line_grouper.rb, line 60 def previous_line_empty?(index) index.positive? && lines[index - 1].is_a?(Codeowners::Checker::Group::Empty) end
trim_groups(level)
click to toggle source
# File lib/codeowners/checker/line_grouper.rb, line 103 def trim_groups(level) group_buffer.slice!(level..-1) end
trim_subgroups(level)
click to toggle source
# File lib/codeowners/checker/line_grouper.rb, line 107 def trim_subgroups(level) trim_groups(level + 1) end