class Sass::Tree::Visitors::Perform

def visit_rule(node)

and then parses the result into a {Sass::Selector::CommaSequence}.
Runs SassScript interpolation in the selector,
def visit_rule(node)
  old_at_root_without_rule = @at_root_without_rule
  parser = Sass::SCSS::StaticParser.new(run_interp(node.rule),
    node.filename, node.options[:importer], node.line)
  if @in_keyframes
    keyframe_rule_node = Sass::Tree::KeyframeRuleNode.new(parser.parse_keyframes_selector)
    keyframe_rule_node.options = node.options
    keyframe_rule_node.line = node.line
    keyframe_rule_node.filename = node.filename
    keyframe_rule_node.source_range = node.source_range
    keyframe_rule_node.has_children = node.has_children
    with_environment Sass::Environment.new(@environment, node.options) do
      keyframe_rule_node.children = node.children.map {|c| visit(c)}.flatten
    end
    keyframe_rule_node
  else
    @at_root_without_rule = false
    node.parsed_rules ||= parser.parse_selector
    node.resolved_rules = node.parsed_rules.resolve_parent_refs(
      @environment.selector, !old_at_root_without_rule)
    node.stack_trace = @environment.stack.to_s if node.options[:trace_selectors]
    with_environment Sass::Environment.new(@environment, node.options) do
      @environment.selector = node.resolved_rules
      node.children = node.children.map {|c| visit(c)}.flatten
    end
    node
  end
ensure
  @at_root_without_rule = old_at_root_without_rule
end