gnurr 0.2.1
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 +7 -0
- data/.gitignore +22 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +87 -0
- data/Rakefile +1 -0
- data/bin/gnurr +37 -0
- data/lib/gnurr.rb +9 -0
- data/lib/gnurr/es_linter.rb +38 -0
- data/lib/gnurr/haml_linter.rb +22 -0
- data/lib/gnurr/linter.rb +123 -0
- data/lib/gnurr/processor.rb +54 -0
- data/lib/gnurr/ruby_base_linter.rb +32 -0
- data/lib/gnurr/ruby_linter.rb +26 -0
- data/lib/gnurr/scss_linter.rb +35 -0
- data/lib/gnurr/version.rb +3 -0
- data/linte.gemspec +34 -0
- metadata +162 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 3974d42c9302a023ce25057a3a1da60327bcf340
|
4
|
+
data.tar.gz: 88eeb9666d2c41c0cee93b81832332f2bc92a58d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 61a83db2076c426c1902bfed82b57f07f60673903facc607164c1fbf41b5828395ab495400bc26937f095fb7fbe67e8616766b3666da585a8bb1942d86ae7658
|
7
|
+
data.tar.gz: 48b66de7de833b1c326100978175486a0b98dc54ca7d05d1afb3de1d913d0d503fa8223ca6ee610d99e18da18828e1e68795dd151de3ba4e3e5b1f21c25f87e4
|
data/.gitignore
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
.yardoc
|
6
|
+
Gemfile.lock
|
7
|
+
InstalledFiles
|
8
|
+
_yardoc
|
9
|
+
coverage
|
10
|
+
doc/
|
11
|
+
lib/bundler/man
|
12
|
+
pkg
|
13
|
+
rdoc
|
14
|
+
spec/reports
|
15
|
+
test/tmp
|
16
|
+
test/version_tmp
|
17
|
+
tmp
|
18
|
+
*.bundle
|
19
|
+
*.so
|
20
|
+
*.o
|
21
|
+
*.a
|
22
|
+
mkmf.log
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2016 Ben Saufley
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
# Gnurr
|
2
|
+
|
3
|
+
### _n._ The substance that collects over time in the bottoms of pockets or cuffs of trousers; pocket lint.
|
4
|
+
|
5
|
+
[](https://badge.fury.io/rb/gnurr)
|
6
|
+
[](https://codeclimate.com/github/bensaufley/gnurr)
|
7
|
+
[](https://codeclimate.com/github/bensaufley/gnurr/coverage)
|
8
|
+
[](https://codeclimate.com/github/bensaufley/gnurr)
|
9
|
+
|
10
|
+
Runs ESLint, SCSS-Lint, HAML-Lint, and Rubocop and returns info relevant to changed lines as reported by git.
|
11
|
+
|
12
|
+
## Installation
|
13
|
+
|
14
|
+
**This gem is not yet hosted elsewhere.** To install, clone the repo, then
|
15
|
+
`cd` into that directory and build the gem.
|
16
|
+
|
17
|
+
```bash
|
18
|
+
$ git clone https://github.com/bensaufley/gnurr
|
19
|
+
$ bundle install
|
20
|
+
…
|
21
|
+
$ rake install
|
22
|
+
```
|
23
|
+
|
24
|
+
If you intend to use [ESLint], be sure to [install that in npm][npm-install].
|
25
|
+
The other linters – [HAML-Lint], [Rubocop], and [SCSS-Lint] – are all listed as
|
26
|
+
gem dependencies.
|
27
|
+
|
28
|
+
As this gem is built to work with your git diffs, it does also require git.
|
29
|
+
If you've managed to execute the above code, you're already there.
|
30
|
+
|
31
|
+
### Eventually, you'll be able to:
|
32
|
+
|
33
|
+
Add this line to your application's Gemfile:
|
34
|
+
|
35
|
+
```bash
|
36
|
+
gem 'gnurr', group: :development, require :false
|
37
|
+
```
|
38
|
+
|
39
|
+
And then execute:
|
40
|
+
|
41
|
+
```sh
|
42
|
+
$ bundle
|
43
|
+
```
|
44
|
+
|
45
|
+
Or install it yourself as:
|
46
|
+
|
47
|
+
```sh
|
48
|
+
$ gem install gnurr
|
49
|
+
```
|
50
|
+
|
51
|
+
## Usage
|
52
|
+
|
53
|
+
In Ruby:
|
54
|
+
|
55
|
+
```rb
|
56
|
+
gnurr = Gnurr::Processor.new(options)
|
57
|
+
# Options:
|
58
|
+
# branch: base branch to diff (default: master)
|
59
|
+
# linters: which linters to run (default: es,haml,ruby,scss (all))
|
60
|
+
# verbose: turn on verbose mode
|
61
|
+
gnurr.execute
|
62
|
+
```
|
63
|
+
|
64
|
+
In your shell:
|
65
|
+
|
66
|
+
```sh
|
67
|
+
$ gnurr --help
|
68
|
+
Usage: gnurr [options]
|
69
|
+
-b, --branch NAME Base branch: branch to diff against (default: master)
|
70
|
+
-l, --linters LIST Linters to use (default: es,haml,ruby,scss (all))
|
71
|
+
-v, --verbose Verbose mode (false unless specified)
|
72
|
+
-h, --help Prints this help
|
73
|
+
```
|
74
|
+
|
75
|
+
## Contributing
|
76
|
+
|
77
|
+
1. Fork it ( https://github.com/bensaufley/gnurr/fork )
|
78
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
79
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
80
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
81
|
+
5. Create a new Pull Request
|
82
|
+
|
83
|
+
[ESLint]: http://eslint.org
|
84
|
+
[HAML-Lint]: https://github.com/brigade/haml-lint
|
85
|
+
[Rubocop]: https://github.com/bbatsov/rubocop
|
86
|
+
[SCSS-Lint]: https://github.com/brigade/scss-lint
|
87
|
+
[npm-install]: http://eslint.org/docs/user-guide/getting-started
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
data/bin/gnurr
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
4
|
+
|
5
|
+
require 'gnurr'
|
6
|
+
require 'optparse'
|
7
|
+
|
8
|
+
options = {
|
9
|
+
stdout: true
|
10
|
+
}
|
11
|
+
|
12
|
+
option_parser = OptionParser.new do |opts|
|
13
|
+
opts.banner = 'Usage: gnurr [options]'
|
14
|
+
|
15
|
+
opts.on('-b', '--branch NAME', 'Base branch: branch to diff against (default: master)') { |v| options[:branch] = v }
|
16
|
+
opts.on('-l', '--linters LIST', 'Linters to use (default: es,haml,ruby,scss (all))') { |v| options[:linters] = v.split(',').map(&:to_sym) }
|
17
|
+
opts.on('-v', '--verbose', 'Verbose mode (false unless specified)') { options[:verbose] = true }
|
18
|
+
|
19
|
+
opts.on('-h', '--help', 'Prints this help') do
|
20
|
+
puts opts
|
21
|
+
exit
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
begin
|
26
|
+
option_parser.parse!
|
27
|
+
rescue OptionParser::InvalidOption => error
|
28
|
+
puts "Gnurr doesn't recognize that #{error}"
|
29
|
+
exit
|
30
|
+
rescue OptionParser::AmbiguousOption => error
|
31
|
+
puts "That's an #{error}"
|
32
|
+
exit
|
33
|
+
end
|
34
|
+
|
35
|
+
linter = Gnurr::Processor.new(options)
|
36
|
+
|
37
|
+
linter.execute
|
data/lib/gnurr.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'gnurr/linter'
|
2
|
+
|
3
|
+
module Gnurr
|
4
|
+
# ES/JS Linter
|
5
|
+
class EsLinter < Linter
|
6
|
+
def type
|
7
|
+
:es
|
8
|
+
end
|
9
|
+
|
10
|
+
def color
|
11
|
+
:red
|
12
|
+
end
|
13
|
+
|
14
|
+
def command
|
15
|
+
'eslint -f json'
|
16
|
+
end
|
17
|
+
|
18
|
+
def filter(file)
|
19
|
+
File.extname(file) == '.js'
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def map_errors(file)
|
25
|
+
[
|
26
|
+
file['filePath'],
|
27
|
+
file['messages'].map do |message|
|
28
|
+
next unless @files[file['filePath'].sub("#{pwd}/", '')].include?(message['line'])
|
29
|
+
standardize(message, 'column', 'line', 'ruleId', 'message', 'severity', 2)
|
30
|
+
end.reject(&:nil?)
|
31
|
+
]
|
32
|
+
end
|
33
|
+
|
34
|
+
def pwd
|
35
|
+
@pwd ||= `printf $(pwd)`
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'gnurr/ruby_base_linter'
|
2
|
+
|
3
|
+
module Gnurr
|
4
|
+
# HAML Linter
|
5
|
+
class HamlLinter < RubyBaseLinter
|
6
|
+
def type
|
7
|
+
:haml
|
8
|
+
end
|
9
|
+
|
10
|
+
def color
|
11
|
+
:magenta
|
12
|
+
end
|
13
|
+
|
14
|
+
def command
|
15
|
+
'haml-lint -r json'
|
16
|
+
end
|
17
|
+
|
18
|
+
def filter(file)
|
19
|
+
File.extname(file) == '.haml'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/gnurr/linter.rb
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
module Gnurr
|
2
|
+
# Base linter class from which each linter extends
|
3
|
+
class Linter
|
4
|
+
def initialize(files, options)
|
5
|
+
@options = options
|
6
|
+
@files = Hash[files.select { |file, _lines| filter(file) }]
|
7
|
+
@messages = {} if @files.empty?
|
8
|
+
relevant_messages
|
9
|
+
end
|
10
|
+
|
11
|
+
def format_errors
|
12
|
+
puts_line_diffs if @options[:verbose]
|
13
|
+
return if relevant_messages.empty?
|
14
|
+
puts "#{left_bump(2)}Messages:".colorize(mode: :bold)
|
15
|
+
relevant_messages.each do |filename, messages|
|
16
|
+
messages.each do |message|
|
17
|
+
puts left_bump(3) + format_error(filename, message)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
relevant_messages
|
21
|
+
end
|
22
|
+
|
23
|
+
def format_error(filename, message)
|
24
|
+
filename.colorize(color: color) + ':' +
|
25
|
+
format_line(message) + ' ' +
|
26
|
+
format_severity(message) + ' ' +
|
27
|
+
message[:message] +
|
28
|
+
format_linter(message)
|
29
|
+
end
|
30
|
+
|
31
|
+
def errors(json)
|
32
|
+
return [] unless json && !json.empty?
|
33
|
+
json.map { |files| map_errors(files) }
|
34
|
+
.select { |_f, messages| messages && !messages.empty? }
|
35
|
+
end
|
36
|
+
|
37
|
+
def puts_line_diffs
|
38
|
+
diffs = line_diffs
|
39
|
+
if diffs.empty?
|
40
|
+
puts "#{left_bump(2)}No changes.".colorize(mode: :bold)
|
41
|
+
else
|
42
|
+
puts "#{left_bump(2)}Lines changed:".colorize(mode: :bold)
|
43
|
+
diffs.each do |filename, lines|
|
44
|
+
puts "#{left_bump(3)}#{filename}:#{lines.join(', ').colorize(:cyan)}"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def line_diffs
|
50
|
+
Hash[
|
51
|
+
@files.map do |filename, lines|
|
52
|
+
[filename, array_to_ranges(lines)]
|
53
|
+
end
|
54
|
+
]
|
55
|
+
end
|
56
|
+
|
57
|
+
def relevant_messages
|
58
|
+
@messages ||= errors(JSON.parse(`git diff --name-only --diff-filter=ACMRTUXB #{@options[:branch]} #{@files.map(&:first).join(' ')} | xargs #{command}`))
|
59
|
+
rescue => e
|
60
|
+
if @options[:stdout]
|
61
|
+
puts "#{'ERROR'.colorize(:red)}: #{e}"
|
62
|
+
puts e.backtrace if @options[:verbose]
|
63
|
+
else
|
64
|
+
warn("Error: #{e}")
|
65
|
+
end
|
66
|
+
@messages = {}
|
67
|
+
end
|
68
|
+
|
69
|
+
def pretty_print
|
70
|
+
puts "#{left_bump}Linting #{@type.to_s.colorize(color)}…".colorize(mode: :bold)
|
71
|
+
format_errors || puts("#{left_bump(2)}#{"#{@type.to_s.upcase} all clear! ✔".colorize(color: :light_green)}")
|
72
|
+
puts "#{left_bump}Done linting #{@type.to_s.colorize(color)}\n".colorize(mode: :bold) if @options[:verbose]
|
73
|
+
end
|
74
|
+
|
75
|
+
private
|
76
|
+
|
77
|
+
def array_to_ranges(array)
|
78
|
+
array = array.compact.uniq.sort
|
79
|
+
ranges = []
|
80
|
+
return ranges if array.empty?
|
81
|
+
left = array.first
|
82
|
+
right = nil
|
83
|
+
array.each do |obj|
|
84
|
+
if right && obj != right.succ
|
85
|
+
ranges << Range.new(left, right)
|
86
|
+
left = obj
|
87
|
+
end
|
88
|
+
right = obj
|
89
|
+
end
|
90
|
+
ranges + [Range.new(left, right)]
|
91
|
+
end
|
92
|
+
|
93
|
+
def format_line(message)
|
94
|
+
(message[:line].to_s + (message[:column] ? ':' + message[:column].to_s : '')).colorize(:cyan)
|
95
|
+
end
|
96
|
+
|
97
|
+
def format_severity(message)
|
98
|
+
message[:severity] == :error ? '[E]'.colorize(:red) : '[W]'.colorize(:yellow)
|
99
|
+
end
|
100
|
+
|
101
|
+
def format_linter(message)
|
102
|
+
message[:linter] ? " (#{message[:linter]})".colorize(:cyan) : ''
|
103
|
+
end
|
104
|
+
|
105
|
+
def left_bump(indent = 1)
|
106
|
+
'▎'.ljust(indent * 2).colorize(color: color)
|
107
|
+
end
|
108
|
+
|
109
|
+
def map_errors(errors)
|
110
|
+
# Empty: filled by subclasses
|
111
|
+
end
|
112
|
+
|
113
|
+
def standardize(message, column, line, linter, description, severity, error)
|
114
|
+
{
|
115
|
+
column: message[column],
|
116
|
+
line: message[line],
|
117
|
+
linter: message[linter],
|
118
|
+
message: message[description],
|
119
|
+
severity: message[severity] == error ? :error : :warning
|
120
|
+
}
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Gnurr
|
2
|
+
# Main class for execution
|
3
|
+
class Processor
|
4
|
+
LINTERS = {
|
5
|
+
es: EsLinter,
|
6
|
+
haml: HamlLinter,
|
7
|
+
ruby: RubyLinter,
|
8
|
+
scss: ScssLinter
|
9
|
+
}.freeze
|
10
|
+
|
11
|
+
def initialize(options)
|
12
|
+
if options[:linters] && !options[:linters].empty?
|
13
|
+
options[:linters] = LINTERS.keys & options[:linters]
|
14
|
+
end
|
15
|
+
@options = {
|
16
|
+
branch: 'master',
|
17
|
+
linters: LINTERS.keys,
|
18
|
+
stdout: false,
|
19
|
+
verbose: false
|
20
|
+
}.merge(options)
|
21
|
+
end
|
22
|
+
|
23
|
+
def execute
|
24
|
+
lints = {}
|
25
|
+
@options[:linters].each do |type|
|
26
|
+
lints[type] = LINTERS[type].new(diffs, @options)
|
27
|
+
lints[type].pretty_print if @options[:stdout]
|
28
|
+
end
|
29
|
+
lints
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def extract_line_sets(diffs)
|
35
|
+
diffs.map do |lines|
|
36
|
+
nums = lines.match(/^.+\+(?<from>[0-9]+)(,(?<len>[0-9]+))? .+$/)
|
37
|
+
Range.new(nums[:from].to_i, nums[:from].to_i + nums[:len].to_i)
|
38
|
+
end.map(&:to_a).flatten
|
39
|
+
end
|
40
|
+
|
41
|
+
def line_diffs(file)
|
42
|
+
diffs = `git diff --unified=0 #{@options[:branch]} #{file} | egrep '\\+[0-9]+(,[1-9][0-9]*)? '`.split("\n")
|
43
|
+
extract_line_sets(diffs)
|
44
|
+
end
|
45
|
+
|
46
|
+
def diffs
|
47
|
+
return @diff if @diff
|
48
|
+
diff = `git diff #{@options[:branch]} --name-only --diff-filter=ACMRTUXB`
|
49
|
+
.split("\n")
|
50
|
+
.map { |file| [file, line_diffs(file)] }
|
51
|
+
@diff = Hash[diff.select { |_k, v| v && !v.empty? }]
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'gnurr/linter'
|
2
|
+
|
3
|
+
module Gnurr
|
4
|
+
# Class from which Haml and Ruby extend
|
5
|
+
class RubyBaseLinter < Linter
|
6
|
+
def errors(json)
|
7
|
+
super(json['files'])
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def map_errors(file)
|
13
|
+
[
|
14
|
+
file['path'],
|
15
|
+
file['offenses'].map do |message|
|
16
|
+
next unless @files[file['path']].include?(message['location']['line'])
|
17
|
+
standardize(message)
|
18
|
+
end.reject(&:nil?)
|
19
|
+
]
|
20
|
+
end
|
21
|
+
|
22
|
+
def standardize(message)
|
23
|
+
{
|
24
|
+
column: message['location']['column'], # nil in haml-lint
|
25
|
+
line: message['location']['line'],
|
26
|
+
linter: message['cop_name'], # nil in haml-lint
|
27
|
+
message: message['message'],
|
28
|
+
severity: message['severity'] == 'error' ? :error : :warning
|
29
|
+
}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'gnurr/ruby_base_linter'
|
2
|
+
|
3
|
+
module Gnurr
|
4
|
+
# Ruby Linter
|
5
|
+
class RubyLinter < RubyBaseLinter
|
6
|
+
def type
|
7
|
+
:ruby
|
8
|
+
end
|
9
|
+
|
10
|
+
def color
|
11
|
+
:yellow
|
12
|
+
end
|
13
|
+
|
14
|
+
def command
|
15
|
+
'rubocop -f json'
|
16
|
+
end
|
17
|
+
|
18
|
+
def filter(file)
|
19
|
+
eligible_files.include?(file)
|
20
|
+
end
|
21
|
+
|
22
|
+
def eligible_files
|
23
|
+
@eligible_files ||= `rubocop -L`.split("\n")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'gnurr/linter'
|
2
|
+
|
3
|
+
module Gnurr
|
4
|
+
# SASS Linter
|
5
|
+
class ScssLinter < Linter
|
6
|
+
def type
|
7
|
+
:scss
|
8
|
+
end
|
9
|
+
|
10
|
+
def color
|
11
|
+
:blue
|
12
|
+
end
|
13
|
+
|
14
|
+
def command
|
15
|
+
'scss-lint -f JSON'
|
16
|
+
end
|
17
|
+
|
18
|
+
def filter(file)
|
19
|
+
File.extname(file) == '.scss'
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def map_errors(params)
|
25
|
+
filename, messages = params
|
26
|
+
[
|
27
|
+
filename,
|
28
|
+
messages.map do |message|
|
29
|
+
next unless @files[filename].include?(message['line'])
|
30
|
+
standardize(message, 'column', 'line', 'linter', 'reason', 'severity', 'error')
|
31
|
+
end.reject(&:nil?)
|
32
|
+
]
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/linte.gemspec
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'gnurr/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'gnurr'
|
8
|
+
spec.version = Gnurr::VERSION
|
9
|
+
spec.authors = ['Ben Saufley']
|
10
|
+
spec.email = ['contact@bensaufley.com']
|
11
|
+
spec.summary = 'Diff-specific linter'
|
12
|
+
spec.description = 'Runs ESLint, SCSS-Lint, HAML-Lint, and Rubocop and returns info relevant to changed lines as reported by git.'
|
13
|
+
spec.homepage = 'http://github.com/bensaufley/gnurr'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
spec.requirements += [
|
21
|
+
'git',
|
22
|
+
'npm and eslint for JS linting'
|
23
|
+
]
|
24
|
+
|
25
|
+
spec.required_ruby_version = '~> 2.3.0'
|
26
|
+
|
27
|
+
spec.add_development_dependency 'bundler', '~> 1.6'
|
28
|
+
spec.add_development_dependency 'rake'
|
29
|
+
spec.add_development_dependency 'git', '~> 1.3.0'
|
30
|
+
spec.add_development_dependency 'colorize'
|
31
|
+
spec.add_development_dependency 'haml_lint', '~> 0.16.1'
|
32
|
+
spec.add_development_dependency 'scss_lint', '~> 0.47.0'
|
33
|
+
spec.add_development_dependency 'rubocop', '~> 0.37.2'
|
34
|
+
end
|
metadata
ADDED
@@ -0,0 +1,162 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gnurr
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ben Saufley
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-03-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.6'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.6'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
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: colorize
|
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
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: haml_lint
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.16.1
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.16.1
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: scss_lint
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.47.0
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.47.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rubocop
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 0.37.2
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 0.37.2
|
111
|
+
description: Runs ESLint, SCSS-Lint, HAML-Lint, and Rubocop and returns info relevant
|
112
|
+
to changed lines as reported by git.
|
113
|
+
email:
|
114
|
+
- contact@bensaufley.com
|
115
|
+
executables:
|
116
|
+
- gnurr
|
117
|
+
extensions: []
|
118
|
+
extra_rdoc_files: []
|
119
|
+
files:
|
120
|
+
- ".gitignore"
|
121
|
+
- Gemfile
|
122
|
+
- LICENSE.txt
|
123
|
+
- README.md
|
124
|
+
- Rakefile
|
125
|
+
- bin/gnurr
|
126
|
+
- lib/gnurr.rb
|
127
|
+
- lib/gnurr/es_linter.rb
|
128
|
+
- lib/gnurr/haml_linter.rb
|
129
|
+
- lib/gnurr/linter.rb
|
130
|
+
- lib/gnurr/processor.rb
|
131
|
+
- lib/gnurr/ruby_base_linter.rb
|
132
|
+
- lib/gnurr/ruby_linter.rb
|
133
|
+
- lib/gnurr/scss_linter.rb
|
134
|
+
- lib/gnurr/version.rb
|
135
|
+
- linte.gemspec
|
136
|
+
homepage: http://github.com/bensaufley/gnurr
|
137
|
+
licenses:
|
138
|
+
- MIT
|
139
|
+
metadata: {}
|
140
|
+
post_install_message:
|
141
|
+
rdoc_options: []
|
142
|
+
require_paths:
|
143
|
+
- lib
|
144
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
145
|
+
requirements:
|
146
|
+
- - "~>"
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: 2.3.0
|
149
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - ">="
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
154
|
+
requirements:
|
155
|
+
- git
|
156
|
+
- npm and eslint for JS linting
|
157
|
+
rubyforge_project:
|
158
|
+
rubygems_version: 2.4.8
|
159
|
+
signing_key:
|
160
|
+
specification_version: 4
|
161
|
+
summary: Diff-specific linter
|
162
|
+
test_files: []
|