MCPcopy Create free account
hub / github.com/andybalholm/cascadia / parseSelector

Method parseSelector

parser.go:765–813  ·  view source on GitHub ↗

parseSelector parses a selector that may include combinators.

()

Source from the content-addressed store, hash-verified

763
764// parseSelector parses a selector that may include combinators.
765func (p *parser) parseSelector() (result Selector, err error) {
766 p.skipWhitespace()
767 result, err = p.parseSimpleSelectorSequence()
768 if err != nil {
769 return
770 }
771
772 for {
773 var combinator byte
774 if p.skipWhitespace() {
775 combinator = ' '
776 }
777 if p.i >= len(p.s) {
778 return
779 }
780
781 switch p.s[p.i] {
782 case '+', '>', '~':
783 combinator = p.s[p.i]
784 p.i++
785 p.skipWhitespace()
786 case ',', ')':
787 // These characters can't begin a selector, but they can legally occur after one.
788 return
789 }
790
791 if combinator == 0 {
792 return
793 }
794
795 c, err := p.parseSimpleSelectorSequence()
796 if err != nil {
797 return nil, err
798 }
799
800 switch combinator {
801 case ' ':
802 result = descendantSelector(result, c)
803 case '>':
804 result = childSelector(result, c)
805 case '+':
806 result = siblingSelector(result, c, true)
807 case '~':
808 result = siblingSelector(result, c, false)
809 }
810 }
811
812 panic("unreachable")
813}
814
815// parseSelectorGroup parses a group of selectors, separated by commas.
816func (p *parser) parseSelectorGroup() (result Selector, err error) {

Callers 1

parseSelectorGroupMethod · 0.95

Calls 5

skipWhitespaceMethod · 0.95
descendantSelectorFunction · 0.85
childSelectorFunction · 0.85
siblingSelectorFunction · 0.85

Tested by

no test coverage detected