Skip to content

Commit 1a50f58

Browse files
committed
inherit Selectors::ComplexSelector and ::Combinator from Node
and improve their formatting
1 parent e942b9e commit 1a50f58

File tree

3 files changed

+73
-2
lines changed

3 files changed

+73
-2
lines changed

lib/syntax_tree/css/pretty_print.rb

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

424+
# Visit a Selectors::Combinator node.
425+
def visit_combinator(node)
426+
token("combinator") do
427+
q.breakable
428+
q.pp(node.value)
429+
end
430+
end
431+
432+
# Visit a Selectors::ComplexSelector node.
433+
def visit_complex_selector(node)
434+
token("complex-selector") do
435+
q.breakable
436+
q.pp(node.left)
437+
438+
q.breakable
439+
q.pp(node.combinator)
440+
441+
q.breakable
442+
q.pp(node.right)
443+
end
444+
end
445+
424446
# Visit a Selectors::CompoundSelector node.
425447
def visit_compound_selector(node)
426448
token("compound-selector") do

lib/syntax_tree/css/selectors.rb

+45-2
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,51 @@ def deconstruct_keys(keys)
7171
end
7272
end
7373

74-
Combinator = Struct.new(:value, keyword_init: true)
75-
ComplexSelector = Struct.new(:left, :combinator, :right, keyword_init: true)
74+
class Combinator < Node
75+
attr_reader :value
76+
77+
def initialize(value:)
78+
@value = value
79+
end
80+
81+
def accept(visitor)
82+
visitor.visit_combinator(self)
83+
end
84+
85+
def child_nodes
86+
[value]
87+
end
88+
89+
alias deconstruct child_nodes
90+
91+
def deconstruct_keys(keys)
92+
{ value: value }
93+
end
94+
end
95+
96+
class ComplexSelector < Node
97+
attr_reader :left, :combinator, :right
98+
99+
def initialize(left:, combinator:, right:)
100+
@left = left
101+
@combinator = combinator
102+
@right = right
103+
end
104+
105+
def accept(visitor)
106+
visitor.visit_complex_selector(self)
107+
end
108+
109+
def child_nodes
110+
[left, combinator, right]
111+
end
112+
113+
alias deconstruct child_nodes
114+
115+
def deconstruct_keys(keys)
116+
{ left: left, combinator: combinator, right: right }
117+
end
118+
end
76119

77120
class CompoundSelector < Node
78121
attr_reader :type, :subclasses, :pseudo_elements

lib/syntax_tree/css/visitor.rb

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

135+
# Visit a Selectors::Combinator node.
136+
alias visit_combinator visit_child_nodes
137+
138+
# Visit a Selectors::ComplexSelector node.
139+
alias visit_complex_selector visit_child_nodes
140+
135141
# Visit a Selectors::CompoundSelector node.
136142
alias visit_compound_selector visit_child_nodes
137143

0 commit comments

Comments
 (0)