public virtual LessNode VisitMixinDefinition(LessParser.MixinDefinitionContext context) { throw new System.NotImplementedException(); }
public override LessNode VisitMixinDefinition(LessParser.MixinDefinitionContext context) { MixinParameterBase GetParameter(LessParser.MixinDefinitionParamContext param) { var ellipsis = param.Ellipsis(); var variable = param.variableName(); if (variable != null) { var paramName = variable.GetText().TrimStart('@'); if (ellipsis != null) { return(new NamedVarargsParameter(paramName)); } return(new MixinParameter(paramName, null)); } if (ellipsis != null) { return(VarargsParameter.Instance); } var variableDeclaration = param.variableDeclaration(); if (variableDeclaration != null) { var decl = (VariableDeclaration)variableDeclaration.Accept(this); return(new MixinParameter(decl.Name, decl.Value)); } var str = param.@string(); if (str != null) { return(new PatternMatchParameter((LessString)str.Accept(this))); } var number = param.Number(); if (number != null) { return(new PatternMatchParameter(new Measurement(decimal.Parse(number.GetText()), ""))); } return(new PatternMatchParameter((Identifier)param.identifier().Accept(this))); } IEnumerable <MixinParameterBase> GetParameters(LessParser.MixinDeclarationContext decl) { var parameters = decl.mixinDefinitionParam(); if (parameters == null) { yield break; } foreach (var param in parameters) { yield return(GetParameter(param)); } } var declaration = context.mixinDeclaration(); var selector = (Selector)declaration.selector().Accept(this); var ruleBlock = (RuleBlock)context.block().Accept(this); var guard = (MixinGuard)context.mixinGuard()?.Accept(this); return(new MixinDefinition(selector, GetParameters(declaration), ruleBlock, guard)); }