=========================
Universal selectors
=========================

* {}

---

(stylesheet
  (rule_set (selectors (universal_selector)) (block)))

=========================
Type selectors
=========================

div, span {}
h1, h2, h3, h4 {}

---

(stylesheet
  (rule_set (selectors (tag_name) (tag_name)) (block))
  (rule_set (selectors (tag_name) (tag_name) (tag_name) (tag_name)) (block)))

=========================
Class selectors
=========================

.class-a {}
div.class-b, .class-c.class-d {}

---

(stylesheet
  (rule_set
    (selectors (class_selector (class_name)))
    (block))
  (rule_set
    (selectors
      (class_selector (tag_name) (class_name))
      (class_selector (class_selector (class_name)) (class_name)))
    (block)))

=========================
Id selectors
=========================

#some-id, a#another-id {}

---

(stylesheet
  (rule_set
    (selectors (id_selector (id_name)) (id_selector (tag_name) (id_name)))
    (block)))

=========================
Attribute selectors
=========================

[a] {}
[b=c] {}
[d~=e] {}
a[b] {}

---

(stylesheet
  (rule_set (selectors (attribute_selector (attribute_name))) (block))
  (rule_set (selectors (attribute_selector (attribute_name) (plain_value))) (block))
  (rule_set (selectors (attribute_selector (attribute_name) (plain_value))) (block))
  (rule_set (selectors (attribute_selector (tag_name) (attribute_name))) (block)))

=========================
Pseudo-class selectors
=========================

a:hover {}
:nth-child(2) {}

---

(stylesheet
  (rule_set
    (selectors (pseudo_class_selector (tag_name) (class_name)))
    (block))
  (rule_set
    (selectors (pseudo_class_selector (class_name) (arguments (integer_value))))
    (block)))

=========================
Pseudo-element selectors
=========================

a::first-line {}

---

(stylesheet
  (rule_set
    (selectors (pseudo_element_selector (tag_name) (tag_name)))
    (block)))

=========================
Child selectors
=========================

a > b {}
c > d > e {}

---

(stylesheet
  (rule_set
    (selectors (child_selector (tag_name) (tag_name)))
    (block))
  (rule_set
    (selectors (child_selector
      (child_selector (tag_name) (tag_name))
      (tag_name)))
    (block)))

=========================
Descendant selectors
=========================

a b {}
c d e {}

---

(stylesheet
  (rule_set
    (selectors (descendant_selector (tag_name) (tag_name)))
    (block))
  (rule_set
    (selectors (descendant_selector
      (descendant_selector (tag_name) (tag_name))
      (tag_name)))
    (block)))

===========================
Nesting selectors
===========================

a {
  &.b {}
  & c {}
  & > d {}
}

---

(stylesheet
  (rule_set
    (selectors (tag_name))
    (block
      (rule_set (selectors (class_selector (nesting_selector) (class_name))) (block))
      (rule_set (selectors (descendant_selector (nesting_selector) (tag_name))) (block))
      (rule_set (selectors (child_selector (nesting_selector) (tag_name))) (block)))))

===========================
Sibling selectors
===========================

a.b ~ c.d {}
.e.f + .g.h {}

---

(stylesheet
  (rule_set
    (selectors (sibling_selector
      (class_selector (tag_name) (class_name))
      (class_selector (tag_name) (class_name))))
    (block))
  (rule_set
    (selectors (adjacent_sibling_selector
      (class_selector (class_selector (class_name)) (class_name))
      (class_selector (class_selector (class_name)) (class_name))))
    (block)))

===========================
The :not selector
===========================

a:not(:hover) {}
.b:not(c > .d) {}

---

(stylesheet
  (rule_set
    (selectors (pseudo_class_selector
      (tag_name)
      (class_name)
      (arguments (pseudo_class_selector (class_name)))))
    (block))
  (rule_set
    (selectors (pseudo_class_selector
      (class_selector (class_name))
      (class_name)
      (arguments (child_selector (tag_name) (class_selector (class_name))))))
    (block)))
