ndr_dev_support 1.1.1 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 65678f389d477156798555985f5dadffa993f72e
4
- data.tar.gz: 488e28b29645423774120f1dd44a8a7b0577c5c4
3
+ metadata.gz: 2b2f915258a3f3f168328b951e3eeb994ee319ba
4
+ data.tar.gz: 645d0844ed7125193c2796f79d5a4cf33c1dec70
5
5
  SHA512:
6
- metadata.gz: 8d1d94e0acdea556a5bf333a2980da539da83f617749aa41c437fd2115a449dcc00288da87e7b4958159420eb2bd94fae4546458def9743fbbc9e6915e6c2966
7
- data.tar.gz: b769d5ff8efce153fb33ba56882fff41db37dba8a61c02423d42067b258a3b45a895e9ef006b770bc3257b924e029f49de8822e752242dc067ba9d9960e46bae
6
+ metadata.gz: fac14a11fb811aae9b2c0e03c8027efb985eaa68f65f9575543f2c72cb629a119ed371d869e747af519183f0001cf038e3bb00afe461295aaaec320f48b63513
7
+ data.tar.gz: 46318f642050c869aab20e2d6b02ac902e82a5ade663142b9db0eeb86427231ac7d99124d33b321ce9265464eecb1e99cb998eca14c8c352763af5318fc5d40c
data/code_safety.yml CHANGED
@@ -46,28 +46,28 @@ file safety:
46
46
  safe_revision: c59a45986f8b6d087c8c21b1e889f31f7346da17
47
47
  lib/ndr_dev_support/rubocop/executor.rb:
48
48
  comments:
49
- reviewed_by: joshpencheon
50
- safe_revision: 301a0785d32fbc91b5fa175a0b4a4aed5bc5b8c1
49
+ reviewed_by: josh.pencheon
50
+ safe_revision: 41cf1558f567928faaa1e670a36d941c03c78044
51
51
  lib/ndr_dev_support/rubocop/range_augmenter.rb:
52
52
  comments:
53
53
  reviewed_by: joshpencheon
54
54
  safe_revision: fe5f0a693b77eeecaa39ff6fcf87ad59c4fb46e1
55
55
  lib/ndr_dev_support/rubocop/range_finder.rb:
56
56
  comments:
57
- reviewed_by: joshpencheon
58
- safe_revision: a8ecc0519a4abf9d464c49183863d65121dc8d0b
57
+ reviewed_by: josh.pencheon
58
+ safe_revision: 41cf1558f567928faaa1e670a36d941c03c78044
59
59
  lib/ndr_dev_support/rubocop/reporter.rb:
60
60
  comments:
61
- reviewed_by: joshpencheon
62
- safe_revision: fe5f0a693b77eeecaa39ff6fcf87ad59c4fb46e1
61
+ reviewed_by: josh.pencheon
62
+ safe_revision: 41cf1558f567928faaa1e670a36d941c03c78044
63
63
  lib/ndr_dev_support/tasks.rb:
64
64
  comments:
65
65
  reviewed_by: joshpencheon
66
66
  safe_revision: a55c971cb770a8e5dc4be7ed66663dd5d695fcd1
67
67
  lib/ndr_dev_support/version.rb:
68
68
  comments:
69
- reviewed_by: joshpencheon
70
- safe_revision: 9611e403f47171962308a7c82cd11b116c6534ee
69
+ reviewed_by: josh.pencheon
70
+ safe_revision: 3f4e55cee33c956405ab82e55b76914be0770577
71
71
  lib/tasks/audit_code.rake:
72
72
  comments: Identical to the version reviewed by josh.pencheon when contained within
73
73
  ndr_support
@@ -75,8 +75,8 @@ file safety:
75
75
  safe_revision: 0d56ba443b2cddca5ba2d96ea61ec6f2b898436d
76
76
  lib/tasks/rubocop.rake:
77
77
  comments:
78
- reviewed_by: joshpencheon
79
- safe_revision: 13cdf4eec8ea311ea480a90a3ba325a386db94e0
78
+ reviewed_by: josh.pencheon
79
+ safe_revision: 41cf1558f567928faaa1e670a36d941c03c78044
80
80
  ndr_dev_support.gemspec:
81
81
  comments:
82
82
  reviewed_by: joshpencheon
@@ -6,22 +6,26 @@ module NdrDevSupport
6
6
  # This class filters the Rubocop report of a file
7
7
  # to only the given lines.
8
8
  class Executor
9
- def initialize(filename, lines)
10
- @filename = filename
11
- @lines = lines
9
+ class << self
10
+ # Use RuboCop to produce a list of all files that should be scanned.
11
+ def target_files
12
+ @target_files ||= `rubocop -L`.each_line.map(&:strip)
13
+ end
12
14
  end
13
15
 
14
- def output
15
- offenses.select do |offense|
16
- @lines.include? offense['location']['line']
17
- end
16
+ def initialize(filenames)
17
+ @filenames = Executor.target_files & filenames
18
18
  end
19
19
 
20
- private
20
+ def offenses_by_file
21
+ return [] if @filenames.empty?
21
22
 
22
- def offenses
23
- hash = JSON.parse(`rubocop --format json #{Shellwords.escape(@filename)}`)
24
- hash['files'].first['offenses']
23
+ escaped_paths = @filenames.map { |path| Shellwords.escape(path) }
24
+ output = JSON.parse(`rubocop --format json #{escaped_paths.join(' ')}`)
25
+
26
+ output['files'].each_with_object({}) do |file_output, result|
27
+ result[file_output['path']] = file_output['offenses']
28
+ end
25
29
  end
26
30
  end
27
31
  end
@@ -1,4 +1,5 @@
1
1
  require 'English'
2
+ require 'open3'
2
3
  require 'rubocop'
3
4
  require 'shellwords'
4
5
 
@@ -6,19 +7,8 @@ module NdrDevSupport
6
7
  module Rubocop
7
8
  # Produces diffs, and parses from them the file/hunk boundaries
8
9
  class RangeFinder
9
- class << self
10
- # Use RuboCop to produce a list of all files that should be scanned.
11
- def target_files
12
- @target_files ||= begin
13
- defaults = ::RuboCop::ConfigStore.new
14
- ::RuboCop::TargetFinder.new(defaults, {}).target_files_in_dir
15
- end
16
- end
17
- end
18
-
19
10
  def diff_files(files)
20
- diff = Array(files).map { |file| git_diff(%(-- "#{file}")) }.join
21
- file_change_locations_from diff
11
+ file_change_locations_from git_diff(files * ' ')
22
12
  end
23
13
 
24
14
  def diff_head
@@ -40,9 +30,18 @@ module NdrDevSupport
40
30
  private
41
31
 
42
32
  def git_diff(args)
43
- diff = `git diff --no-prefix --unified=0 #{Shellwords.escape(args)}`
44
- fail "Failed to diff: '#{args}'" unless $CHILD_STATUS.exitstatus.zero?
45
- diff
33
+ diff_cmd = 'git diff --no-prefix --unified=0 '
34
+ diff_cmd << Shellwords.escape(args) unless args.empty?
35
+ stdout, stderr, status = Open3.capture3(diff_cmd)
36
+
37
+ return stdout if status.success?
38
+
39
+ fail Rainbow(<<-MSG).red
40
+ Failed to generate diff from:
41
+ #{diff_cmd}
42
+
43
+ #{stderr}
44
+ MSG
46
45
  end
47
46
 
48
47
  def file_changes_hash
@@ -60,13 +59,7 @@ module NdrDevSupport
60
59
  end
61
60
  end
62
61
 
63
- ruby_files_from changes
64
- end
65
-
66
- # Don't report on changes in files that RuboCop won't understand:
67
- def ruby_files_from(changes)
68
- whitelist = RangeFinder.target_files
69
- changes.reject { |file, _ranges| !whitelist.include? File.join(Dir.pwd, file) }
62
+ changes
70
63
  end
71
64
 
72
65
  def hunk_range_from(line)
@@ -16,7 +16,7 @@ module NdrDevSupport
16
16
  }.freeze
17
17
 
18
18
  def initialize(offenses)
19
- @offenses = offenses
19
+ @offenses = Hash[offenses.sort_by { |file, _offenses| file }]
20
20
  end
21
21
 
22
22
  # Prints out a report, and returns an appriopriate
@@ -28,7 +28,7 @@ module NdrDevSupport
28
28
  print_offenses
29
29
  return @offenses.values.all?(&:empty?)
30
30
  else
31
- puts Rainbow('No files scanned.').red
31
+ puts Rainbow('No relevant changes found.').yellow
32
32
  return false
33
33
  end
34
34
  end
@@ -1,5 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  # This defines the NdrDevSupport version. If you change it, rebuild and commit the gem.
2
3
  # Use "rake build" to build the gem, see rake -T for all bundler rake tasks (and our own).
3
4
  module NdrDevSupport
4
- VERSION = '1.1.1'.freeze
5
+ VERSION = '1.1.3'.freeze
5
6
  end
@@ -4,16 +4,25 @@ namespace :rubocop do
4
4
  require 'ndr_dev_support/rubocop/executor'
5
5
  require 'ndr_dev_support/rubocop/reporter'
6
6
 
7
+ def filtered_offenses_by_line(offenses, lines)
8
+ offenses.select do |offense|
9
+ line = offense['location']['line']
10
+ 1 == line || lines.include?(line)
11
+ end
12
+ end
13
+
7
14
  # For a given set of change locations (extract from a diff),
8
15
  # run rubocop on the relevant files, and report filtered results.
9
16
  def rubocop_file_ranges(file_ranges)
10
- output = {}
11
- threads = file_ranges.map do |file, ranges|
17
+ output = {}
18
+ offenses = NdrDevSupport::Rubocop::Executor.new(file_ranges.keys).offenses_by_file
19
+
20
+ threads = offenses.map do |file, file_offenses|
12
21
  Thread.new do
13
22
  # Expand ranges to include entire methods, etc:
14
- lines = NdrDevSupport::Rubocop::RangeAugmenter.new(file, ranges).augmented_lines
15
- # Get rubocop output for those files:
16
- output[file] = NdrDevSupport::Rubocop::Executor.new(file, lines).output
23
+ augmenter = NdrDevSupport::Rubocop::RangeAugmenter.new(file, file_ranges[file] || [])
24
+ # Get subset of rubocop output for those files:
25
+ output[file] = filtered_offenses_by_line(file_offenses, augmenter.augmented_lines)
17
26
  end
18
27
  end
19
28
  threads.each(&:join)
@@ -31,8 +40,10 @@ namespace :rubocop do
31
40
  rake rubocop:diff master
32
41
  USAGE
33
42
  task :diff do
34
- expr = ARGV[1..-1].join(' ')
35
- ranges = NdrDevSupport::Rubocop::RangeFinder.new.diff_expr(expr)
43
+ args = ARGV.dup
44
+ nil until 'rubocop:diff' == args.shift
45
+
46
+ ranges = NdrDevSupport::Rubocop::RangeFinder.new.diff_expr args.join(' ')
36
47
  rubocop_file_ranges ranges
37
48
  end
38
49
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ndr_dev_support
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - NCRS Development Team
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-02-04 00:00:00.000000000 Z
11
+ date: 2016-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop