require 'pronto'
-require 'eslintrb'
-require 'globby'
module Pronto
class ESLint < Runner
end
def inspect(patch)
- options = File.exist?('.eslintrc') ? :eslintrc : :defaults
- offences = Eslintrb.lint(patch.new_file_full_path, options).compact
+ @_repo_path ||= @patches.first.repo.path
+
+ offences =
+ Dir.chdir(@_repo_path) do
+ JSON.parse(`eslint #{patch.new_file_full_path} -f json`)
+ end
+
+ offences =
+ offences
+ .select { |offence| offence['errorCount'] > 0 || offence['warningCount'] > 0 } # no warning or error, no problem
+ .map { |offence| offence['messages'] } # get error messages for that file
+ .flatten
+ .select { |offence| offence['line'] } # for now ignore errors without a line number
offences.map do |offence|
patch.added_lines.select { |line| line.new_lineno == offence['line'] }
end
def js_file?(path)
- %w(.js .es6 .js.es6).include?(File.extname(path)) && !eslintignore_matches?(path)
- end
-
- def eslintignore_matches?(path)
- @_repo_path ||= @patches.first.repo.path
- @_eslintignore_path ||= File.join(@_repo_path, '.eslintignore')
- @_eslintignore_exists ||= File.exist?(@_eslintignore_path)
-
- return false unless @_eslintignore_exists
-
- @_eslintignored_files ||=
- Dir.chdir @_repo_path do # change to the repo path where `.eslintignore` was found
- eslintignore_content = File.readlines(@_eslintignore_path).map(&:chomp)
- ignored_files = Globby.select(eslintignore_content)
-
- # prefix each found file with `repo_path`, because `path` is absolute, too
- ignored_files.map { |file| File.join(@_repo_path, file).to_s }
- end
-
- @_eslintignored_files.include?(path.to_s)
+ %w(.js .es6 .js.es6).include?(File.extname(path))
end
end
end
s.require_paths = ['lib']
s.add_dependency('pronto', '~> 0.6.0')
- s.add_dependency('eslintrb', '~> 2.0', '>= 2.0.0')
- s.add_dependency('globby', '~> 0.1')
s.add_development_dependency('rake', '~> 11.0')
s.add_development_dependency('rspec', '~> 3.4')
s.add_development_dependency('rspec-its', '~> 1.2')
it { should == [] }
end
- context 'patches with a four and a five warnings' do
+ context 'patches with a one and a four warnings' do
include_context 'test repo'
let(:patches) { repo.diff('master') }
- its(:count) { should == 9 }
- its(:'first.msg') { should == "Expected { after 'if' condition." }
+ its(:count) { should == 5 }
+ its(:'first.msg') { should == "'foo' is not defined." }
end
- context 'repo with ignored and not ignored file, each with five warnings' do
+ context 'repo with ignored and not ignored file, each with three warnings' do
include_context 'eslintignore repo'
let(:patches) { repo.diff('master') }
- its(:count) { should == 5 }
- its(:'first.msg') { should == "Use the function form of 'use strict'." }
+ its(:count) { should == 3 }
+ its(:'first.msg') { should == "'HelloWorld' is defined but never used" }
end
end
end