#!/usr/bin/env ruby require 'less' module Less # This is the class that Treetop defines for parsing Less files. # Since not everything gets parsed into the AST but is instead resolved at parse-time, # we need to override some of it so that it can be converted into Sass. module StyleSheet # Selector mixins that don't have arguments. # This depends only on the syntax at the call site; # if it doesn't use parens, it hits this production, # regardless of whether the mixin being called has arguments or not. module Mixin4 def build_with_sass(env) selectors.build(env, :mixin).each do |path| el = path.inject(env.root) do |current, node| current.descend(node.selector, node) or raise MixinNameError, "#{selectors.text_value} in #{env}" end if el.is_a?(Node::Mixin::Def) # Calling a mixin with arguments, which gets compiled to a Sass mixin env << Node::Mixin::Call.new(el, [], env) else # Calling a mixin without arguments, which gets compiled to @extend sel = selector_str(path) base = selector_str(selector_base(path)) if base == sel env << Node::SassNode.new(Sass::Tree::ExtendNode.new([sel])) else Sass::Util.sass_warn <