gnurr 0.2.2 → 0.2.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: 6a1410c6508df47eca91d6925eef3e939f31d9d7
4
- data.tar.gz: b86e3ad6538174203af4986a072416a0c6bab212
3
+ metadata.gz: f014991bd857985d010c0f65bd97ad5adbd8cb85
4
+ data.tar.gz: d2166bfeb7b6a73d91c796c69ca0abb4d56cbe97
5
5
  SHA512:
6
- metadata.gz: 2c8f93c2e60d0941e95c073d36bbfe0b5db367adb0c401cb3c1ca9e1dba07534b9a18298f0309eeb2e31ef4f3cac02ce67892ebe046a09bd103c0b1bcf98d022
7
- data.tar.gz: 0f5cec29cb40f13bf85c688f90657ffa3b8459385e99f1c3c272613b5b137403f63ba17534b4cf91eb8bbdfd6b28975f298a49e12da381031a358d2561d996f8
6
+ metadata.gz: aa234f3f589d9c6e27302b4e9d06af7f2237dafe171dfb4dd31e204b0979e5b18f45ab7c10a569a2f419af5774fbfc370935fb3919c1278bf5762142791771ae
7
+ data.tar.gz: 2cb0fb5fd2dd42d0ad22ba5ff50a4a7182b4ebf351e3561dab21ab3587fd49d64e1bf4fe4e3cfad40a02a2da592f6ca56df5bda6c13c984725d506e6ef2572a4
data/bin/gnurr CHANGED
@@ -16,18 +16,22 @@ option_parser = OptionParser.new do |opts|
16
16
  'Base branch: branch to diff against (default: master)') do |v|
17
17
  options[:branch] = v
18
18
  end
19
+
19
20
  opts.on('-e', '--expanded',
20
21
  'Show lints for all changed files, not just changed lines (false',
21
22
  'unless specified)') do
22
23
  options[:expanded] = true
23
24
  end
25
+
24
26
  opts.on('-l', '--linters LIST',
25
27
  'Linters to use (default: es,haml,ruby,scss (all))') do |v|
26
28
  options[:linters] = v.split(',').map(&:to_sym)
27
29
  end
30
+
28
31
  opts.on('-v', '--[no-]verbose', 'Run verbosely') do |v|
29
32
  options[:verbose] = v
30
33
  end
34
+
31
35
  opts.on('--version', 'Show version') do
32
36
  puts Gnurr::VERSION
33
37
  exit
@@ -29,8 +29,6 @@ Gem::Specification.new do |spec|
29
29
 
30
30
  spec.add_development_dependency 'bundler', '~> 1.6'
31
31
  spec.add_development_dependency 'rake'
32
- spec.add_development_dependency 'git', '~> 1.3.0'
33
- spec.add_development_dependency 'pry'
34
32
 
35
33
  spec.add_runtime_dependency 'colorize'
36
34
  end
@@ -17,7 +17,7 @@ module Gnurr
17
17
 
18
18
  def format_messages
19
19
  format_line_diffs if @options[:verbose]
20
- return if messages.empty?
20
+ return false if messages.empty?
21
21
  puts "#{left_bump(2)}Messages:".colorize(mode: :bold)
22
22
  messages.each do |filename, messages|
23
23
  messages.each do |message|
@@ -36,6 +36,12 @@ module Gnurr
36
36
  format_linter(message)
37
37
  end
38
38
 
39
+ def format_expanded_notice
40
+ if @options[:expanded]
41
+ puts "#{left_bump(2)}Linting entire files".colorize(mode: :bold)
42
+ end
43
+ end
44
+
39
45
  def format_finish
40
46
  if @options[:verbose]
41
47
  puts "#{left_bump}Done linting #{type.to_s.colorize(color)}\n"
@@ -53,20 +59,25 @@ module Gnurr
53
59
 
54
60
  def format_line_diffs
55
61
  diffs = line_diffs
56
- if diffs.empty?
57
- puts "#{left_bump(2)}No changes.".colorize(mode: :bold)
58
- else
59
- puts "#{left_bump(2)}Lines changed:".colorize(mode: :bold)
60
- diffs.each do |filename, lines|
61
- puts "#{left_bump(3)}#{filename}:#{lines.join(', ').colorize(:cyan)}"
62
- end
62
+ return if format_no_changes(diffs)
63
+ puts "#{left_bump(2)}Lines changed:".colorize(mode: :bold)
64
+ diffs.each do |filename, lines|
65
+ puts "#{left_bump(3)}#{filename}:#{lines.join(', ').colorize(:cyan)}"
63
66
  end
67
+ format_expanded_notice
64
68
  end
65
69
 
66
70
  def format_linter(message)
67
71
  message[:linter] ? " (#{message[:linter]})".colorize(:cyan) : ''
68
72
  end
69
73
 
74
+ def format_no_changes(diffs)
75
+ if diffs.empty?
76
+ puts "#{left_bump(2)}No changes.".colorize(mode: :bold)
77
+ true
78
+ end
79
+ end
80
+
70
81
  def format_severity(message)
71
82
  if message[:severity] == :error
72
83
  '[E]'.colorize(:red)
@@ -0,0 +1,27 @@
1
+ module Gnurr
2
+ # For handling/reading Git output
3
+ module Git
4
+ private
5
+
6
+ def extract_lines(diffs)
7
+ diffs.map do |lines|
8
+ nums = lines.match(/^.+\+(?<from>[0-9]+)(,(?<len>[0-9]+))? .+$/)
9
+ Range.new(nums[:from].to_i, nums[:from].to_i + nums[:len].to_i)
10
+ end.map(&:to_a).flatten
11
+ end
12
+
13
+ def full_file_diff
14
+ return @diff if @diff
15
+ diff = `git diff #{@options[:branch]} --name-only --diff-filter=ACMRTUXB`
16
+ .split("\n")
17
+ .map { |file| [file, file_diffs(file)] }
18
+ @diff = Hash[diff.select { |_k, v| v && v.any? }]
19
+ end
20
+
21
+ def file_diffs(file)
22
+ diffs = `git diff --unified=0 #{@options[:branch]} #{file} \
23
+ | egrep '\\+[0-9]+(,[1-9][0-9]*)? '`
24
+ extract_lines(diffs.split("\n"))
25
+ end
26
+ end
27
+ end
@@ -1,17 +1,17 @@
1
1
  require 'gnurr/helper'
2
2
  require 'gnurr/cli'
3
+ require 'gnurr/git'
3
4
 
4
5
  module Gnurr
5
6
  # Base linter class from which each linter extends
6
7
  class Linter
7
8
  include Gnurr::Helper
8
9
  include Gnurr::CLI
10
+ include Gnurr::Git
9
11
 
10
- def initialize(files, options)
11
- raise "Dependency not available for #{type}" unless requirements_met?
12
+ def initialize(options)
12
13
  @options = options
13
- @files = Hash[files.select { |file, _lines| filter(file) }]
14
- @messages = {} if @files.empty?
14
+ raise "Dependency not available for #{type}" unless requirements_met?
15
15
  rescue => e
16
16
  log_error(e)
17
17
  end
@@ -22,34 +22,44 @@ module Gnurr
22
22
 
23
23
  def parse_messages(json)
24
24
  return [] unless json.any?
25
- messages = json.map { |files| map_errors(files) }
26
- .select { |_f, msgs| msgs && msgs.any? }
25
+ msgs = json.map { |f| map_errors(f) }
26
+ .select { |_f, m| m && m.any? }
27
27
  if @options[:expanded]
28
- messages
28
+ msgs.to_a
29
29
  else
30
- filter_messages(messages)
30
+ filter_messages(msgs)
31
31
  end
32
32
  end
33
33
 
34
+ def files
35
+ @files ||= Hash[full_file_diff.select { |file, _lines| filter(file) }]
36
+ end
37
+
34
38
  def filter_messages(messages)
35
39
  messages.map do |filename, msgs|
36
- msgs.reject! { |msg| !@files[filename].include?(msg[:line]) }
40
+ msgs.reject! { |msg| !files[filename].include?(msg[:line]) }
37
41
  msgs.empty? ? nil : [filename, msgs]
38
42
  end.reject(&:nil?)
39
43
  end
40
44
 
45
+ def full_range(filename)
46
+ [Range.new(1, `wc -l < #{filename}`.to_i + 1)]
47
+ end
48
+
41
49
  def line_diffs
42
50
  Hash[
43
- @files.map do |filename, lines|
44
- [filename, array_to_ranges(lines)]
51
+ files.map do |filename, lines|
52
+ [
53
+ filename,
54
+ @options[:expanded] ? full_range(filename) : array_to_ranges(lines)
55
+ ]
45
56
  end
46
57
  ]
47
58
  end
48
59
 
49
60
  def relevant_messages
50
- JSON.parse(`git diff --name-only --diff-filter=ACMRTUXB \
51
- #{@options[:branch]} #{@files.map(&:first).join(' ')} \
52
- | xargs #{command}`)
61
+ return {} if files.empty?
62
+ JSON.parse(`#{command} #{escaped_files.join(' ')}`)
53
63
  rescue => e
54
64
  log_error(e)
55
65
  {}
@@ -57,8 +67,10 @@ module Gnurr
57
67
 
58
68
  private
59
69
 
60
- def requirements_met?
61
- true # Set by subclasses
70
+ def escaped_files
71
+ files.map do |file, _lines|
72
+ file.sub(/(\s)/, '\\\\\1')
73
+ end
62
74
  end
63
75
 
64
76
  def map_errors(file)
@@ -71,9 +83,14 @@ module Gnurr
71
83
  end
72
84
 
73
85
  def messages
86
+ return @messages = {} if files.empty?
74
87
  @messages ||= parse_messages(relevant_messages)
75
88
  end
76
89
 
90
+ def requirements_met?
91
+ true # Set by subclasses
92
+ end
93
+
77
94
  def standardize_message(message)
78
95
  {
79
96
  column: message['column'],
@@ -25,7 +25,7 @@ module Gnurr
25
25
  lints = {}
26
26
  @options[:linters].each do |type|
27
27
  begin
28
- lints[type] = LINTERS[type].new(git_diffs, @options)
28
+ lints[type] = LINTERS[type].new(@options)
29
29
  lints[type].execute
30
30
  rescue => e
31
31
  lints[type] = e.inspect
@@ -33,28 +33,5 @@ module Gnurr
33
33
  end
34
34
  lints
35
35
  end
36
-
37
- private
38
-
39
- def git_diffs
40
- return @diff if @diff
41
- diff = `git diff #{@options[:branch]} --name-only --diff-filter=ACMRTUXB`
42
- .split("\n")
43
- .map { |file| [file, file_diffs(file)] }
44
- @diff = Hash[diff.select { |_k, v| v && v.any? }]
45
- end
46
-
47
- def file_diffs(file)
48
- diffs = `git diff --unified=0 #{@options[:branch]} #{file} \
49
- | egrep '\\+[0-9]+(,[1-9][0-9]*)? '`
50
- line_diffs(diffs.split("\n"))
51
- end
52
-
53
- def line_diffs(diffs)
54
- diffs.map do |lines|
55
- nums = lines.match(/^.+\+(?<from>[0-9]+)(,(?<len>[0-9]+))? .+$/)
56
- Range.new(nums[:from].to_i, nums[:from].to_i + nums[:len].to_i)
57
- end.map(&:to_a).flatten
58
- end
59
36
  end
60
37
  end
@@ -14,6 +14,7 @@ module Gnurr
14
14
  end
15
15
 
16
16
  def messages
17
+ return @messages = {} if files.empty?
17
18
  @messages ||= parse_messages(relevant_messages['files'])
18
19
  end
19
20
 
@@ -1,3 +1,3 @@
1
1
  module Gnurr
2
- VERSION = '0.2.2'.freeze
2
+ VERSION = '0.2.3'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gnurr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Saufley
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-03 00:00:00.000000000 Z
11
+ date: 2016-03-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,34 +38,6 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: git
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: 1.3.0
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: 1.3.0
55
- - !ruby/object:Gem::Dependency
56
- name: pry
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
41
  - !ruby/object:Gem::Dependency
70
42
  name: colorize
71
43
  requirement: !ruby/object:Gem::Requirement
@@ -99,6 +71,7 @@ files:
99
71
  - lib/gnurr.rb
100
72
  - lib/gnurr/cli.rb
101
73
  - lib/gnurr/es_linter.rb
74
+ - lib/gnurr/git.rb
102
75
  - lib/gnurr/haml_linter.rb
103
76
  - lib/gnurr/helper.rb
104
77
  - lib/gnurr/linter.rb