Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Format pseudo-class functions with complex arguments
  • Loading branch information
flavorjones committed Jun 5, 2024
commit c689a6ca5be1ea54acb8b8f3c4a8ca4c44aba63d
11 changes: 10 additions & 1 deletion lib/syntax_tree/css/format.rb
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,16 @@ def visit_pseudo_class_selector(node)
node.value.format(q)
end

# Visit a Selectors::PseudoClassFunction node.
def visit_pseudo_class_function(node)
q.text(node.name)
q.text("(")
q.seplist(node.arguments, -> { q.text(", ") }) do |selector|
selector.format(q)
end
q.text(")")
end

# Visit a Selectors::PseudoElementSelector node.
def visit_pseudo_element_selector(node)
q.text(":")
Expand Down Expand Up @@ -127,7 +137,6 @@ def visit_compound_selector(node)
node.child_nodes.each do |node_|
node_.format(q)
end
# TODO: pseudo-elements
end
end

Expand Down
18 changes: 15 additions & 3 deletions lib/syntax_tree/css/pretty_print.rb
Original file line number Diff line number Diff line change
Expand Up @@ -380,10 +380,19 @@ def visit_pseudo_class_function(node)
q.breakable
q.pp(node.name)

q.breakable
q.text("(arguments")

if node.arguments.any?
q.breakable
q.seplist(node.arguments) { |argument| q.pp(argument) }
q.nest(2) do
q.breakable
q.seplist(node.arguments) { |argument| q.pp(argument) }
end

q.breakable("")
end

q.text(")")
end
end

Expand Down Expand Up @@ -443,7 +452,10 @@ def visit_complex_selector(node)
def visit_compound_selector(node)
token("compound-selector") do
q.breakable
q.pp(node.type)
token("type") do
q.breakable
q.pp(node.type)
end

q.breakable
q.text("(subclasses")
Expand Down
7 changes: 7 additions & 0 deletions test/selectors_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,13 @@ class SelectorsTest < Minitest::Spec
)
end

it "with a pseudo-class function" do
assert_selector_format(
".flex:not(div, span.wide, .hidden)",
".flex:not(div, span.wide, .hidden)",
)
end

it "with class selectors" do
assert_selector_format(
"div.flex.text-xl",
Expand Down