lib/less/parser/parser.js
function () {
                var e, c, v, index = parserInput.i;

                c = this.combinator();

                e = parserInput.$re(/^(?:\d+\.\d+|\d+)%/) ||
                    parserInput.$re(/^(?:[.#]?|:*)(?:[\w-]|[^\x00-\x9f]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+/) ||
                    parserInput.$char('*') || parserInput.$char('&') || this.attribute() ||
                    parserInput.$re(/^\([^&()@]+\)/) ||  parserInput.$re(/^[\.#:](?=@)/) ||
                    this.entities.variableCurly();

                if (!e) {
                    parserInput.save();
                    if (parserInput.$char('(')) {
                        if ((v = this.selector(false)) && parserInput.$char(')')) {
                            e = new(tree.Paren)(v);
                            parserInput.forget();
                        } else {
                            parserInput.restore('Missing closing \')\'');
                        }
                    } else {
                        parserInput.forget();
                    }
                }

                if (e) { return new(tree.Element)(c, e, e instanceof tree.Variable, index, fileInfo); }
            }
function () {
                var e, c, v, index = parserInput.i;

                c = this.combinator();

                e = parserInput.$re(/^(?:\d+\.\d+|\d+)%/) ||
                    parserInput.$re(/^(?:[.#]?|:*)(?:[\w-]|[^\x00-\x9f]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+/) ||
                    parserInput.$char('*') || parserInput.$char('&') || this.attribute() ||
                    parserInput.$re(/^\([^&()@]+\)/) ||  parserInput.$re(/^[\.#:](?=@)/) ||
                    this.entities.variableCurly();

                if (!e) {
                    parserInput.save();
                    if (parserInput.$char('(')) {
                        if ((v = this.selector(false)) && parserInput.$char(')')) {
                            e = new(tree.Paren)(v);
                            parserInput.forget();
                        } else {
                            parserInput.restore('Missing closing \')\'');
                        }
                    } else {
                        parserInput.forget();
                    }
                }

                if (e) { return new(tree.Element)(c, e, e instanceof tree.Variable, index, fileInfo); }
            }
function ( ) { var e , c , v , index = parserInput . i ; c = this . combinator ( ) ; e = parserInput . $re ( / ^(?:\d+\.\d+|\d+)% / ) || parserInput . $re ( / ^(?:[.#]?|:*)(?:[\w-]|[^\x00-\x9f]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+ / ) || parserInput . $char ( '*' ) || parserInput . $char ( '&' ) || this . attribute ( ) || parserInput . $re ( / ^\([^&()@]+\) / ) || parserInput . $re ( / ^[\.#:](?=@) / ) || this . entities . variableCurly ( ) ; if ( ! e ) { parserInput . save ( ) ; if ( parserInput . $char ( '(' ) ) { if ( ( v = this . selector ( false ) ) && parserInput . $char ( ')' ) ) { e = new ( tree . Paren ) ( v ) ; parserInput . forget ( ) ; } else { parserInput . restore ( 'Missing closing \')\'' ) ; } } else { parserInput . forget ( ) ; } } if ( e ) { return new ( tree . Element ) ( c , e , e instanceof tree . Variable , index , fileInfo ) ; } }
A Selector Element  div + h1 #socks input[type="text"]  Elements are the building blocks for Selectors, they are made out of a `Combinator` (see combinator rule), and an element name, such as a tag a class, or `*`.
A Selector Element div + h1 #socks input [ type = text ] Elements are the building blocks for Selectors they are made out of a Combinator ( see combinator rule ) and an element name such as a tag a class or * .