diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pronto/eslint_npm.rb | 44 |
1 files changed, 32 insertions, 12 deletions
diff --git a/lib/pronto/eslint_npm.rb b/lib/pronto/eslint_npm.rb index 6bbef09..9ff7df5 100644 --- a/lib/pronto/eslint_npm.rb +++ b/lib/pronto/eslint_npm.rb | |||
@@ -3,20 +3,38 @@ require 'shellwords' | |||
3 | 3 | ||
4 | module Pronto | 4 | module Pronto |
5 | class ESLintNpm < Runner | 5 | class ESLintNpm < Runner |
6 | class << self | 6 | CONFIG_FILE = '.pronto_eslint_npm.yml'.freeze |
7 | attr_writer :eslint_executable, :files_to_lint | 7 | CONFIG_KEYS = %i(eslint_executable files_to_lint).freeze |
8 | 8 | ||
9 | def eslint_executable | 9 | attr_writer :eslint_executable |
10 | @eslint_executable || 'eslint'.freeze | 10 | |
11 | end | 11 | def eslint_executable |
12 | @eslint_executable || 'eslint'.freeze | ||
13 | end | ||
14 | |||
15 | def files_to_lint | ||
16 | @files_to_lint || /(\.js|\.es6)$/ | ||
17 | end | ||
18 | |||
19 | def files_to_lint=(regexp) | ||
20 | @files_to_lint = regexp.is_a?(Regexp) && regexp || Regexp.new(regexp) | ||
21 | end | ||
22 | |||
23 | def read_config | ||
24 | config_file = File.join(repo_path, CONFIG_FILE) | ||
25 | return unless File.exist?(config_file) | ||
26 | config = YAML.load_file(config_file) | ||
12 | 27 | ||
13 | def files_to_lint | 28 | CONFIG_KEYS.each do |config_key| |
14 | @files_to_lint || /(\.js|\.es6)$/ | 29 | next unless config[config_key] |
30 | send("#{config_key}=", config[config_key]) | ||
15 | end | 31 | end |
16 | end | 32 | end |
17 | 33 | ||
18 | def run | 34 | def run |
19 | return [] unless @patches | 35 | return [] if !@patches || @patches.count.zero? |
36 | |||
37 | read_config | ||
20 | 38 | ||
21 | @patches | 39 | @patches |
22 | .select { |patch| patch.additions > 0 } | 40 | .select { |patch| patch.additions > 0 } |
@@ -27,9 +45,11 @@ module Pronto | |||
27 | 45 | ||
28 | private | 46 | private |
29 | 47 | ||
30 | def inspect(patch) | 48 | def repo_path |
31 | @_repo_path ||= @patches.first.repo.path | 49 | @_repo_path ||= @patches.first.repo.path |
50 | end | ||
32 | 51 | ||
52 | def inspect(patch) | ||
33 | offences = run_eslint(patch) | 53 | offences = run_eslint(patch) |
34 | clean_up_eslint_output(offences) | 54 | clean_up_eslint_output(offences) |
35 | .map do |offence| | 55 | .map do |offence| |
@@ -48,14 +68,14 @@ module Pronto | |||
48 | end | 68 | end |
49 | 69 | ||
50 | def js_file?(path) | 70 | def js_file?(path) |
51 | self.class.files_to_lint =~ path.to_s | 71 | files_to_lint =~ path.to_s |
52 | end | 72 | end |
53 | 73 | ||
54 | def run_eslint(patch) | 74 | def run_eslint(patch) |
55 | Dir.chdir(@_repo_path) do | 75 | Dir.chdir(repo_path) do |
56 | escaped_file_path = Shellwords.escape(patch.new_file_full_path.to_s) | 76 | escaped_file_path = Shellwords.escape(patch.new_file_full_path.to_s) |
57 | JSON.parse( | 77 | JSON.parse( |
58 | `#{self.class.eslint_executable} #{escaped_file_path} -f json` | 78 | `#{eslint_executable} #{escaped_file_path} -f json` |
59 | ) | 79 | ) |
60 | end | 80 | end |
61 | end | 81 | end |