lib/slim_lint/linter/consecutive_control_statements.rb
# frozen_string_literal: true
module SlimLint
# Searches for more than an allowed number of consecutive control code
# statements that could be condensed into a :ruby filter.
class Linter::ConsecutiveControlStatements < Linter
include LinterRegistry
on [:multi] do |sexp|
Utils.for_consecutive_items(sexp,
method(:flat_control_statement?),
config['max_consecutive'] + 1) do |group|
report_lint(group.first,
"#{group.count} consecutive control statements can be " \
'merged into a single `ruby:` filter')
end
end
private
def flat_control_statement?(sexp)
sexp.match?([:slim, :control]) &&
sexp[3] == [:multi, [:newline]]
end
end
end