class Danger::DangerWCC::Jshint

Constants

DEFAULT_OPTIONS

Public Class Methods

new(plugin, options = {}) click to toggle source
# File lib/wcc/jshint.rb, line 13
def initialize(plugin, options = {})
  @plugin = plugin
  @options = DEFAULT_OPTIONS.merge(options)
end

Public Instance Methods

perform() click to toggle source
# File lib/wcc/jshint.rb, line 18
def perform
  return unless Dir.exist?(@options[:directory])

  run('PREFIX=/tmp npm install -g jshint')
  diff = run_jshint_diff

  # run jshint again to get line numbers
  jshint_lines = run '/tmp/lib/node_modules/jshint/bin/jshint '\
    "#{@options[:directory]}"
  jshint_lines = jshint_lines.lines

  each_addition_in_diff(diff) do |line|
    add_jshint_warning(jshint_lines[line.line_number.right - 1])
  end
end

Private Instance Methods

add_jshint_warning(with_line_number) click to toggle source
# File lib/wcc/jshint.rb, line 53
def add_jshint_warning(with_line_number)
  return unless warning = with_line_number.match(
    /^([^\:]+)\:\s+line\s+(\d+),\s+col\s+\d+,\s+(.+)$/i
  )

  plugin.warn(warning.captures[2],
              file: warning.captures[0],
              line: warning.captures[1].to_i)
end
run_jshint_diff() click to toggle source
# File lib/wcc/jshint.rb, line 36
def run_jshint_diff
  diff =
    run_and_diff do
      write_jshintrc
      run('/tmp/lib/node_modules/jshint/bin/jshint '\
        "#{@options[:directory]} | sed 's/line [0-9]*, col [0-9]*,//g'")
    end
  GitDiff.from_string(diff)
end
write_jshintrc() click to toggle source
# File lib/wcc/jshint.rb, line 46
def write_jshintrc
  return if File.exist?('.jshintrc')

  default = File.join(File.dirname(__FILE__), 'default.jshintrc')
  FileUtils.cp(default, './.jshintrc')
end