sds/slim-lint

View on GitHub
lib/slim_lint/linter/consecutive_control_statements.rb

Summary

Maintainability
A
0 mins
Test Coverage
# 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