Skip to content

Commit e942b9e

Browse files
committed
inherit Selectors::CompoundSelector from Node
and improve its formatting
1 parent 63f2235 commit e942b9e

File tree

3 files changed

+69
-1
lines changed

3 files changed

+69
-1
lines changed

lib/syntax_tree/css/pretty_print.rb

+38
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,44 @@ def visit_wqname(node)
421421
end
422422
end
423423

424+
# Visit a Selectors::CompoundSelector node.
425+
def visit_compound_selector(node)
426+
token("compound-selector") do
427+
q.breakable
428+
q.pp(node.type)
429+
430+
q.breakable
431+
q.text("(subclasses")
432+
433+
if node.subclasses.any?
434+
q.nest(2) do
435+
q.breakable
436+
q.seplist(node.subclasses) { |subclass| q.pp(subclass) }
437+
end
438+
439+
q.breakable("")
440+
end
441+
442+
q.text(")")
443+
444+
q.breakable("")
445+
q.text("(pseudo-elements")
446+
447+
if node.pseudo_elements.any?
448+
q.nest(2) do
449+
q.breakable
450+
q.seplist(node.pseudo_elements) do |pseudo_element|
451+
q.pp(pseudo_element)
452+
end
453+
end
454+
455+
q.breakable("")
456+
end
457+
458+
q.text(")")
459+
end
460+
end
461+
424462
private
425463

426464
def token(name)

lib/syntax_tree/css/selectors.rb

+28-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,34 @@ def deconstruct_keys(keys)
7373

7474
Combinator = Struct.new(:value, keyword_init: true)
7575
ComplexSelector = Struct.new(:left, :combinator, :right, keyword_init: true)
76-
CompoundSelector = Struct.new(:type, :subclasses, :pseudo_elements, keyword_init: true)
76+
77+
class CompoundSelector < Node
78+
attr_reader :type, :subclasses, :pseudo_elements
79+
80+
def initialize(type:, subclasses:, pseudo_elements:)
81+
@type = type
82+
@subclasses = subclasses
83+
@pseudo_elements = pseudo_elements
84+
end
85+
86+
def accept(visitor)
87+
visitor.visit_compound_selector(self)
88+
end
89+
90+
def child_nodes
91+
[type, subclasses, pseudo_elements].flatten
92+
end
93+
94+
alias deconstruct child_nodes
95+
96+
def deconstruct_keys(keys)
97+
{
98+
type: type,
99+
subclasses: subclasses,
100+
pseudo_elements: pseudo_elements
101+
}
102+
end
103+
end
77104

78105
# The ID of an element, e.g., #foo
79106
# https://www.w3.org/TR/selectors-4/#typedef-id-selector

lib/syntax_tree/css/visitor.rb

+3
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,9 @@ def visit_child_nodes(node)
132132
# Visit a Selectors::ClassSelector node.
133133
alias visit_class_selector visit_child_nodes
134134

135+
# Visit a Selectors::CompoundSelector node.
136+
alias visit_compound_selector visit_child_nodes
137+
135138
# Visit a Selectors::IdSelector node.
136139
alias visit_id_selector visit_child_nodes
137140

0 commit comments

Comments
 (0)