]> git.immae.eu Git - github/fretlink/pronto-hlint.git/blobdiff - lib/pronto/eslint.rb
Respect `.eslintignore`
[github/fretlink/pronto-hlint.git] / lib / pronto / eslint.rb
index 498df63733f474bb26a107e256b60921bf0362bb..990081e5c2d72785623b2051efb6eb9e138d8a95 100644 (file)
@@ -1,5 +1,6 @@
 require 'pronto'
 require 'eslintrb'
+require 'globby'
 
 module Pronto
   class ESLint < Runner
@@ -30,7 +31,26 @@ module Pronto
     end
 
     def js_file?(path)
-      %w(.js .es6 .js.es6).include? File.extname(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)
     end
   end
 end