class ESLintWebpacker::Runner
Constants
- JAVASCRIPT_EXTENSIONS
Public Class Methods
new(file)
click to toggle source
# File lib/eslint-webpacker/runner.rb, line 11 def initialize(file) @file = normalize_infile(file) end
Public Instance Methods
run()
click to toggle source
# File lib/eslint-webpacker/runner.rb, line 15 def run javascripts = javascript_files puts "Inspecting #{javascripts.size} files" warnings = javascripts.map do |javascript| generate_warnings(javascript).tap { |warns| output_progress(warns) } end puts warnings.flatten end
Private Instance Methods
descendant?(file_a, file_b)
click to toggle source
# File lib/eslint-webpacker/runner.rb, line 31 def descendant?(file_a, file_b) a_list = file_a.to_s.split('/') b_list = file_b.to_s.split('/') b_list[0..a_list.size - 1] == a_list end
eslint_d_available?()
click to toggle source
# File lib/eslint-webpacker/runner.rb, line 38 def eslint_d_available? File.exist?(Rails.root.join('node_modules', '.bin', 'eslint_d')) end
file_severity(warnings)
click to toggle source
# File lib/eslint-webpacker/runner.rb, line 103 def file_severity(warnings) return :none if warnings.blank? warnings.map(&:severity).uniq.min end
generate_warnings(javascript)
click to toggle source
# File lib/eslint-webpacker/runner.rb, line 42 def generate_warnings(javascript) relative_path = javascript.relative_path_from(Pathname.new(Dir.pwd)) warning_hashes(javascript).flat_map do |hash| next if hash['errorCount'].zero? hash['messages'].map do |message| ESLintWebpacker::Warning.new(relative_path, message) end end.compact end
javascript_files()
click to toggle source
# File lib/eslint-webpacker/runner.rb, line 54 def javascript_files all_javascripts = webpacker_files.select do |asset| JAVASCRIPT_EXTENSIONS.include?(asset.extname) end javascript_files = all_javascripts.select { |a| descendant?(@file, a) } javascript_files.reject do |path| path.to_s =~ /eslint.js|vendor|gems|min.js|editorial/ end end
normalize_infile(file)
click to toggle source
# File lib/eslint-webpacker/runner.rb, line 66 def normalize_infile(file) # Remove beginning of asset path file = file.to_s.gsub(%r{^app/javascript/}, '') # Ensure path is absolute file = Pathname.new("#{Dir.pwd}/app/javascript/#{file}") return file if file.directory? return file if file.extname.present? # Make sure it has an extension Pathname.new("#{file}.js") end
output_progress(warnings)
click to toggle source
# File lib/eslint-webpacker/runner.rb, line 80 def output_progress(warnings) print case file_severity(warnings) when :high 'H'.red when :low 'L'.yellow else '.'.green end end
warning_hashes(file_path)
click to toggle source
# File lib/eslint-webpacker/runner.rb, line 91 def warning_hashes(file_path) command = eslint_d_available? ? 'eslint_d' : 'eslint' JSON.parse(`./node_modules/.bin/#{command} --format json #{file_path}`) end
webpacker_files()
click to toggle source
# File lib/eslint-webpacker/runner.rb, line 97 def webpacker_files Dir.glob(Rails.root.join('app', 'javascript', '**/*')).map do |path| Pathname.new(path) end end