class Guard::ScssLint

Attributes

config[R]
options[R]

Public Class Methods

new(options = {}) click to toggle source
Calls superclass method
# File lib/guard/scss_lint.rb, line 14
def initialize(options = {})
  super

  @options = { all_on_start: true }.merge(options)

  load_config

  @scss_lint_runner = SCSSLint::Runner.new @config
  @failed_paths     = []
end
non_namespaced_name() click to toggle source
# File lib/guard/scss_lint.rb, line 10
def self.non_namespaced_name
  'scss_lint'
end

Public Instance Methods

reload() click to toggle source
# File lib/guard/scss_lint.rb, line 30
def reload
end
run_all() click to toggle source
# File lib/guard/scss_lint.rb, line 33
def run_all
  Guard::Compat::UI.info 'Running ScssLint for all .scss files'
  pattern = File.join '**', '*.scss'
  paths   = Guard::Compat.matching_files(self, Dir.glob(pattern))
  run_on_changes paths
end
run_on_changes(paths) click to toggle source
# File lib/guard/scss_lint.rb, line 40
def run_on_changes(paths)
  paths = paths.reject { |p| @config.excluded_file?(p) }.map { |path| { path: path } }

  if paths.empty?
    Guard::Compat::UI.info 'Guard has not detected any valid changes.  Skipping run'
    return
  end

  if paths.size == 1 && paths[0][:path] == scss_config_file
    Guard::Compat::UI.info 'Detected a change to the scss config file only.  Running Guard on all scss files'
    run_all
    return
  end

  Guard::Compat::UI.info "Running ScssLint on #{paths.reject { |p| p == scss_config_file }.uniq}"
  run paths.reject { |p| p[:path] == scss_config_file }.uniq
end
start() click to toggle source
# File lib/guard/scss_lint.rb, line 25
def start
  Guard::Compat::UI.info "Guard::ScssLint (SCSSLint version #{SCSSLint::VERSION}) is running"
  run_all if @options[:all_on_start]
end

Private Instance Methods

lint_message(lint) click to toggle source
# File lib/guard/scss_lint.rb, line 88
def lint_message(lint)
  [
    Rainbow(lint.filename).color(:cyan),
    ':',
    Rainbow(lint.location.line.to_s).color(:magenta),
    ':',
    Rainbow(lint.location.column.to_s).color(:blue),
    ' ',
    lint_severity_abbrevation(lint),
    ' ',
    Rainbow(lint.linter.name).color(:green),
    Rainbow(':').color(:green),
    ' ',
    lint.description
  ].join
end
lint_severity_abbrevation(lint) click to toggle source
# File lib/guard/scss_lint.rb, line 105
def lint_severity_abbrevation(lint)
  color = lint.severity == :error ? :red : :yellow
  Rainbow(['[', lint.severity.to_s[0].upcase, ']'].join).color(color)
end
load_config() click to toggle source
# File lib/guard/scss_lint.rb, line 64
def load_config
  config_file = scss_config_file
  @config = if File.exist?(config_file)
              SCSSLint::Config.load config_file
            else
              SCSSLint::Config.default
            end
end
run(paths = []) click to toggle source
# File lib/guard/scss_lint.rb, line 73
def run(paths = [])
  load_config

  @scss_lint_runner = SCSSLint::Runner.new @config
  @scss_lint_runner.run paths
  @scss_lint_runner.lints.each do |lint|
    Guard::Compat::UI.send lint.severity, lint_message(lint)
  end

  lints = @scss_lint_runner.lints.count
  Guard::Compat::UI.info "Guard::ScssLint inspected #{paths.size} files, found #{lints} errors."
  Guard::Compat::UI.notify("#{lints} errors found",
                           title: 'Guard ScssLint issues found') if lints > 0
end
scss_config_file() click to toggle source
# File lib/guard/scss_lint.rb, line 60
def scss_config_file
  @options[:config] || '.scss-lint.yml'
end