aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/pronto/eslint.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/pronto/eslint.rb')
-rw-r--r--lib/pronto/eslint.rb36
1 files changed, 36 insertions, 0 deletions
diff --git a/lib/pronto/eslint.rb b/lib/pronto/eslint.rb
new file mode 100644
index 0000000..67e9229
--- /dev/null
+++ b/lib/pronto/eslint.rb
@@ -0,0 +1,36 @@
1require 'pronto'
2require 'eslintrb'
3
4module Pronto
5 class ESLint < Runner
6 def run(patches, _)
7 return [] unless patches
8
9 patches.select { |patch| patch.additions > 0 }
10 .select { |patch| js_file?(patch.new_file_full_path) }
11 .map { |patch| inspect(patch) }
12 .flatten.compact
13 end
14
15 def inspect(patch)
16 options = File.exist?('.eslintrc') ? :eslintrc : :defaults
17 offences = Eslintrb.lint(patch.new_file_full_path, options).compact
18
19 offences.map do |offence|
20 patch.added_lines.select { |line| line.new_lineno == offence['line'] }
21 .map { |line| new_message(offence, line) }
22 end
23 end
24
25 def new_message(offence, line)
26 path = line.patch.delta.new_file[:path]
27 level = :warning
28
29 Message.new(path, line, level, offence['message'])
30 end
31
32 def js_file?(path)
33 File.extname(path) == '.js'
34 end
35 end
36end