From 295096252547f3abb76788fbadf0ce059e74f2cc Mon Sep 17 00:00:00 2001 From: Markus Doits Date: Mon, 25 Jul 2016 16:03:07 +0200 Subject: [PATCH] Use system eslint instead of eslintrb This makes sure `eslint` works as expected, e.g. the config used is respected and full feature set is present. One has to make sure `eslint` is properly installed, though. --- lib/pronto/eslint.rb | 38 +++++++++--------------- pronto-eslint.gemspec | 2 -- spec/fixtures/eslintignore.git/.eslintrc | 7 +++++ spec/fixtures/test.git/.eslintrc | 7 +++++ spec/fixtures/test.git/hello.js | 2 ++ spec/pronto/eslint_spec.rb | 12 ++++---- 6 files changed, 36 insertions(+), 32 deletions(-) create mode 100644 spec/fixtures/eslintignore.git/.eslintrc create mode 100644 spec/fixtures/test.git/.eslintrc diff --git a/lib/pronto/eslint.rb b/lib/pronto/eslint.rb index 990081e..fa4261d 100644 --- a/lib/pronto/eslint.rb +++ b/lib/pronto/eslint.rb @@ -1,6 +1,4 @@ require 'pronto' -require 'eslintrb' -require 'globby' module Pronto class ESLint < Runner @@ -14,8 +12,19 @@ module Pronto 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'] } @@ -31,26 +40,7 @@ module Pronto 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 diff --git a/pronto-eslint.gemspec b/pronto-eslint.gemspec index 9ad00ec..d6590ec 100644 --- a/pronto-eslint.gemspec +++ b/pronto-eslint.gemspec @@ -35,8 +35,6 @@ Gem::Specification.new do |s| 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') diff --git a/spec/fixtures/eslintignore.git/.eslintrc b/spec/fixtures/eslintignore.git/.eslintrc new file mode 100644 index 0000000..f94ba96 --- /dev/null +++ b/spec/fixtures/eslintignore.git/.eslintrc @@ -0,0 +1,7 @@ +{ + "env": { + "browser": true, + "es6": true + }, + "extends": "eslint:recommended" +} diff --git a/spec/fixtures/test.git/.eslintrc b/spec/fixtures/test.git/.eslintrc new file mode 100644 index 0000000..f94ba96 --- /dev/null +++ b/spec/fixtures/test.git/.eslintrc @@ -0,0 +1,7 @@ +{ + "env": { + "browser": true, + "es6": true + }, + "extends": "eslint:recommended" +} diff --git a/spec/fixtures/test.git/hello.js b/spec/fixtures/test.git/hello.js index 2d1b996..6ad633d 100644 --- a/spec/fixtures/test.git/hello.js +++ b/spec/fixtures/test.git/hello.js @@ -3,3 +3,5 @@ function HelloWorld(name) if (foo) foo++; alert(name); } + +function Empty() {} diff --git a/spec/pronto/eslint_spec.rb b/spec/pronto/eslint_spec.rb index 1117e15..27f57d1 100644 --- a/spec/pronto/eslint_spec.rb +++ b/spec/pronto/eslint_spec.rb @@ -17,22 +17,22 @@ module Pronto 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 -- 2.41.0