diff options
Diffstat (limited to 'lib/pronto/eslint.rb')
-rw-r--r-- | lib/pronto/eslint.rb | 36 |
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 @@ | |||
1 | require 'pronto' | ||
2 | require 'eslintrb' | ||
3 | |||
4 | module 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 | ||
36 | end | ||