Class | Sass::Environment
In: | lib/sass/environment.rb
Parent: | Object

The lexical environment for SassScript. This keeps track of variable and mixin definitions.

A new environment is created for each level of Sass nesting. This allows variables to be lexically scoped. The new environment refers to the environment in the upper scope, so it has access to variables defined in enclosing scopes, but new variables are defined locally.

Environment also keeps track of the {Engine} options so that they can be made available to {Sass::Script::Functions}.

### Methods

mixins_in_use new options pop_frame prepare_frame push_frame stack

### Attributes

options | [W] |
parent | [R] | The enclosing environment, or nil if this is the global environment. @return [Environment]

### Public Class methods

new(parent = nil)

@param parent [Environment] See \{parent}

[Source]

        # File lib/sass/environment.rb, line 24
    24:     def initialize(parent = nil)
    25:       @vars = {}
    26:       @mixins = {}
    27:       @parent = parent
    28:       @stack = [] unless parent
    29:       @mixins_in_use = Set.new unless parent
    30:       set_var("important", Script::String.new("!important")) unless @parent
    31:     end

### Public Instance methods

mixins_in_use()

A set of names of mixins currently present in the stack.

@return [Set<String>] The mixin names.

[Source]

        # File lib/sass/environment.rb, line 92
    92:     def mixins_in_use
    93:       @mixins_in_use ||= @parent.mixins_in_use
    94:     end

options()

The options hash. See {file:SASS_REFERENCE.md#sass_options the Sass options documentation}.

@return [{Symbol => Object}]

[Source]

        # File lib/sass/environment.rb, line 37
    37:     def options
    38:       @options || (parent && parent.options) || {}
    39:     end

pop_frame()

Pop a stack frame from the mixin/include stack.

[Source]

        # File lib/sass/environment.rb, line 74
    74:     def pop_frame
    75:       stack.pop if stack.last && stack.last[:prepared]
    76:       popped = stack.pop
    77:       mixins_in_use.delete(popped[:mixin]) if popped && popped[:mixin]
    78:     end

prepare_frame(frame_info)

Like \{push_frame}, but next time a stack frame is pushed, it will be merged with this frame.

@param frame_info [{Symbol => Object}] Same as for \{push_frame}.

[Source]

        # File lib/sass/environment.rb, line 69
    69:     def prepare_frame(frame_info)
    70:       push_frame(frame_info.merge(:prepared => true))
    71:     end

push_frame(frame_info)

Push a new stack frame onto the mixin/include stack.

@param frame_info [{Symbol => Object}]

      Frame information has the following keys:

      `:filename`
      : The name of the file in which the lexical scope changed.

      `:mixin`
      : The name of the mixin in which the lexical scope changed,
        or `nil` if it wasn't within in a mixin.

      `:line`
      : The line of the file on which the lexical scope changed. Never nil.

[Source]

        # File lib/sass/environment.rb, line 55
    55:     def push_frame(frame_info)
    56:       if stack.last && stack.last[:prepared]
    57:         stack.last.delete(:prepared)
    58:         stack.last.merge!(frame_info)
    59:       else
    60:         stack.push(frame_info)
    61:       end
    62:       mixins_in_use << stack.last[:mixin] if stack.last[:mixin] && !stack.last[:prepared]
    63:     end

stack()

A list of stack frames in the mixin/include stack. The last element in the list is the most deeply-nested frame.

@return [Array<{Symbol => Object}>] The stack frames,

      of the form passed to \{#push\_frame}.

[Source]

        # File lib/sass/environment.rb, line 85
    85:     def stack
    86:       @stack ||= @parent.stack
    87:     end

[Validate]