ndr_dev_support 1.1.1 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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