lib/haml_lint/linter/consecutive_comments.rb
# frozen_string_literal: true
module HamlLint
# Checks for multiple lines of code comments that can be condensed.
class Linter::ConsecutiveComments < Linter
include LinterRegistry
COMMENT_DETECTOR = ->(child) { child.type == :haml_comment }
def visit_haml_comment(node)
return if previously_reported?(node)
HamlLint::Utils.for_consecutive_items(
possible_group(node),
COMMENT_DETECTOR,
config['max_consecutive'] + 1,
) do |group|
group.each { |group_node| reported_nodes << group_node }
record_lint(group.first,
"#{group.count} consecutive comments can be merged into one")
end
end
private
def possible_group(node)
node.subsequents.unshift(node)
end
def previously_reported?(node)
reported_nodes.include?(node)
end
def reported_nodes
@reported_nodes ||= []
end
end
end