class Sass::Tree::Visitors::ToCss

def visit_rule(node)

rubocop:disable MethodLength
@comment
def visit_rule(node)
  with_tabs(@tabs + node.tabs) do
    rule_separator = node.style == :compressed ? ',' : ', '
    line_separator =
      case node.style
      when :nested, :expanded; "\n"
      when :compressed; ""
      else; " "
      end
    rule_indent = '  ' * @tabs
    per_rule_indent, total_indent = if [:nested, :expanded].include?(node.style)
                                      [rule_indent, '']
                                    else
                                      ['', rule_indent]
                                    end
    joined_rules = node.resolved_rules.members.map do |seq|
      next if seq.has_placeholder?
      rule_part = seq.to_a.join
      if node.style == :compressed
        rule_part.gsub!(/([^,])\s*\n\s*/m, '\1 ')
        rule_part.gsub!(/\s*([,+>])\s*/m, '\1')
        rule_part.strip!
      end
      rule_part
    end.compact.join(rule_separator)
    joined_rules.lstrip!
    joined_rules.gsub!(/\s*\n\s*/, "#{line_separator}#{per_rule_indent}")
    old_spaces = '  ' * @tabs
    if node.style != :compressed
      if node.options[:debug_info] && !@in_directive
        visit(debug_info_rule(node.debug_info, node.options))
        output "\n"
      elsif node.options[:trace_selectors]
        output("#{old_spaces}/* ")
        output(node.stack_trace.gsub("\n", "\n   #{old_spaces}"))
        output(" */\n")
      elsif node.options[:line_comments]
        output("#{old_spaces}/* line #{node.line}")
        if node.filename
          relative_filename =
            if node.options[:css_filename]
              begin
                Sass::Util.pathname(node.filename).relative_path_from(
                  Sass::Util.pathname(File.dirname(node.options[:css_filename]))).to_s
              rescue ArgumentError
                nil
              end
            end
          relative_filename ||= node.filename
          output(", #{relative_filename}")
        end
        output(" */\n")
      end
    end
    end_props, trailer, tabs  = '', '', 0
    if node.style == :compact
      separator, end_props, bracket = ' ', ' ', ' { '
      trailer = "\n" if node.group_end
    elsif node.style == :compressed
      separator, bracket = ';', '{'
    else
      tabs = @tabs + 1
      separator, bracket = "\n", " {\n"
      trailer = "\n" if node.group_end
      end_props = (node.style == :expanded ? "\n" + old_spaces : ' ')
    end
    output(total_indent + per_rule_indent)
    for_node(node, :selector) {output(joined_rules)}
    output(bracket)
    with_tabs(tabs) do
      node.children.each_with_index do |child, i|
        output(separator) if i > 0
        visit(child)
      end
    end
    output(end_props)
    output("}" + trailer)
  end
end