Sha256: eb97ec77410a3790a5d380cad44fc9f81ccac60ff577906ca94e42fc9970e2e5

Contents?: true

Size: 1.12 KB

Versions: 13

Compression:

Stored size: 1.12 KB

Contents

require 'sass'

module SCSSLint
  class FileEncodingError < StandardError; end

  # Contains all information for a parsed SCSS file, including its name,
  # contents, and parse tree.
  class Engine
    ENGINE_OPTIONS = { cache: false, syntax: :scss }

    attr_reader :contents, :filename, :lines, :tree

    def initialize(scss_or_filename)
      if File.exist?(scss_or_filename)
        @filename = scss_or_filename
        @engine = Sass::Engine.for_file(scss_or_filename, ENGINE_OPTIONS)
        @contents = File.open(scss_or_filename, 'r').read
      else
        @engine = Sass::Engine.new(scss_or_filename, ENGINE_OPTIONS)
        @contents = scss_or_filename
      end

      @lines = @contents.lines.to_a # Need `to_a` for Ruby 1.9.3
      @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
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
scss-lint-0.29.0 lib/scss_lint/engine.rb
scss-lint-0.28.0 lib/scss_lint/engine.rb
scss-lint-0.27.0 lib/scss_lint/engine.rb
scss-lint-0.26.2 lib/scss_lint/engine.rb
scss-lint-0.26.1 lib/scss_lint/engine.rb
scss-lint-0.26.0 lib/scss_lint/engine.rb
scss-lint-0.25.1 lib/scss_lint/engine.rb
scss-lint-0.25.0 lib/scss_lint/engine.rb
scss-lint-0.24.1 lib/scss_lint/engine.rb
scss-lint-0.24.0 lib/scss_lint/engine.rb
scss-lint-0.23.1 lib/scss_lint/engine.rb
scss-lint-0.23.0 lib/scss_lint/engine.rb
scss-lint-0.22.0 lib/scss_lint/engine.rb