lib/less/parser/parser.js
function (inValue, getLookup) {
                    var s = parserInput.currentChar(), important = false, lookups,
                        index = parserInput.i, elements, args, hasParens;

                    if (s !== '.' && s !== '#') { return; }

                    parserInput.save(); // stop us absorbing part of an invalid selector

                    elements = this.elements();

                    if (elements) {
                        if (parserInput.$char('(')) {
                            args = this.args(true).args;
                            expectChar(')');
                            hasParens = true;
                        }

                        if (getLookup !== false) {
                            lookups = this.ruleLookups();
                        }
                        if (getLookup === true && !lookups) {
                            parserInput.restore();
                            return;
                        }

                        if (inValue && !lookups && !hasParens) {
                            // This isn't a valid in-value mixin call
                            parserInput.restore();
                            return;
                        }

                        if (!inValue && parsers.important()) {
                            important = true;
                        }

                        if (inValue || parsers.end()) {
                            parserInput.forget();
                            var mixin = new(tree.mixin.Call)(elements, args, index, fileInfo, !lookups && important);
                            if (lookups) {
                                return new tree.NamespaceValue(mixin, lookups, important);
                            }
                            else {
                                return mixin;
                            }
                        }
                    }

                    parserInput.restore();
                }
function (inValue, getLookup) {
                    var s = parserInput.currentChar(), important = false, lookups,
                        index = parserInput.i, elements, args, hasParens;

                    if (s !== '.' && s !== '#') { return; }

                    parserInput.save(); // stop us absorbing part of an invalid selector

                    elements = this.elements();

                    if (elements) {
                        if (parserInput.$char('(')) {
                            args = this.args(true).args;
                            expectChar(')');
                            hasParens = true;
                        }

                        if (getLookup !== false) {
                            lookups = this.ruleLookups();
                        }
                        if (getLookup === true && !lookups) {
                            parserInput.restore();
                            return;
                        }

                        if (inValue && !lookups && !hasParens) {
                            // This isn't a valid in-value mixin call
                            parserInput.restore();
                            return;
                        }

                        if (!inValue && parsers.important()) {
                            important = true;
                        }

                        if (inValue || parsers.end()) {
                            parserInput.forget();
                            var mixin = new(tree.mixin.Call)(elements, args, index, fileInfo, !lookups && important);
                            if (lookups) {
                                return new tree.NamespaceValue(mixin, lookups, important);
                            }
                            else {
                                return mixin;
                            }
                        }
                    }

                    parserInput.restore();
                }
A Mixin call, with an optional argument list  #mixins > .square(#fff); #mixins.square(#fff); .rounded(4px, black); .button;  We can lookup / return a value using the lookup syntax:  color: #mixin.square(#fff)[@color];  The `while` loop is there because mixins can be namespaced, but we only support the child and descendant selector for now.