class SCSSLint::Engine

Contains all information for a parsed SCSS file, including its name, contents, and parse tree.

Constants

ENGINE_OPTIONS

Attributes

contents[R]
filename[R]
lines[R]
tree[R]

Public Class Methods

new(options = {}) click to toggle source

Creates a parsed representation of an SCSS document from the given string or file.

@param options [Hash] @option options [String] :file The file to load @option options [String] :code The code to parse

# File lib/scss_lint/engine.rb, line 19
def initialize(options = {})
  if options[:file]
    build_from_file(options[:file])
  elsif options[:code]
    build_from_string(options[:code])
  end

  # Need to force encoding to avoid Windows-related bugs.
  # Need `to_a` for Ruby 1.9.3.
  @lines = @contents.force_encoding('UTF-8').lines.to_a
  @tree = @engine.to_tree
rescue Encoding::UndefinedConversionError, Sass::SyntaxError => error
  if error.is_a?(Encoding::UndefinedConversionError) ||
     error.message.match(/invalid.*(byte sequence|character)/i)
    raise FileEncodingError,
          "Unable to parse SCSS file: #{error}",
          error.backtrace
  else
    raise
  end
end

Private Instance Methods

build_from_file(path) click to toggle source

@param path [String]

# File lib/scss_lint/engine.rb, line 44
def build_from_file(path)
  @filename = path
  @engine = Sass::Engine.for_file(path, ENGINE_OPTIONS)
  @contents = File.open(path, 'r').read
end
build_from_string(scss) click to toggle source

@param scss [String]

# File lib/scss_lint/engine.rb, line 51
def build_from_string(scss)
  @engine = Sass::Engine.new(scss, ENGINE_OPTIONS)
  @contents = scss
end