# Universal selectors

* {}

==>

ruleSet.d(universal.o, block)

# Type selectors

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

==>

ruleSet.d(tag.name.selector, tag.name.selector, block),
ruleSet.d(tag.name.selector, tag.name.selector, tag.name.selector, tag.name.selector, block)

# Class selectors

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

==>

ruleSet.d(class.s(class.n), block),
ruleSet.d(class.s(tag.name.selector, class.n), class.s(class.s(class.n), class.n), block)

# Id selectors

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

==>

ruleSet.d(id.s(id.n), id.s(tag.name.selector, id.n), block)

# Attribute selectors

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

==>

ruleSet.d(attribute.s(attribute.n), block),
ruleSet.d(attribute.s(attribute.n, operator.n, value.n), block),
ruleSet.d(attribute.s(attribute.n, operator.n, value.n), block),
ruleSet.d(attribute.s(tag.name.selector, attribute.n), block)

# Pseudo-class selectors

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

==>

ruleSet.d(pseudoClass.s(tag.name.selector, pseudoClass.n), block),
ruleSet.d(pseudoClass.s(pseudoClass.n, argument.list(number.l)), block)

# Pseudo-element selectors

a::first-line {}

==>

ruleSet.d(pseudoClass.s(tag.name.selector, pseudoClass.n), block)

# Child selectors

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

==>

ruleSet.d(child.s(tag.name.selector, operator.n, tag.name.selector), block),
ruleSet.d(child.s(child.s(tag.name.selector, operator.n, tag.name.selector), operator.n, tag.name.selector), block)

# Descendant selectors

a b {}
c d e {}

==>

ruleSet.d(descendant.s(tag.name.selector, tag.name.selector), block),
ruleSet.d(descendant.s(descendant.s(tag.name.selector, tag.name.selector), tag.name.selector), block)

# Nesting selectors

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

==>

ruleSet.d(tag.name.selector, block(
  ruleSet.d(class.s(nesting.o, class.n), block),
  ruleSet.d(descendant.s(nesting.o, tag.name.selector), block),
  ruleSet.d(child.s(nesting.o, operator.n, tag.name.selector), block)
))

# Sibling selectors

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

==>

ruleSet.d(sibling.s(class.s(tag.name.selector, class.n), operator.n, class.s(tag.name.selector, class.n)), block),
ruleSet.d(sibling.s(class.s(class.s(class.n), class.n), operator.n,
  class.s(class.s(class.n), class.n)), block)

# The :not selector

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

==>

ruleSet.d(pseudoClass.s(tag.name.selector, pseudoClass.n, argument.list(pseudoClass.s(pseudoClass.n))), block),
ruleSet.d(pseudoClass.s(class.s(class.n), pseudoClass.n, argument.list(child.s(tag.name.selector, operator.n, class.s(class.n)))), block)
