quality 22.0.0 → 23.0.0

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: 34c649082351ada4e29748634b94f0cb25784b4a
4
- data.tar.gz: be28c5baec25bf09c2db42b78d15ab81b5fecc0d
3
+ metadata.gz: bd52cb5919480dc82d9e95238fe80a35c122eb58
4
+ data.tar.gz: c5a666f18a628c1bd4b1e86ba1eeb7291c7bb603
5
5
  SHA512:
6
- metadata.gz: 8fcd7499757198b78ab88052cc2a788fd89c7dfd2d3f3547a17a2c18788877d2cc33e518d6a8e41902b8a1c1babddec465703b9977cc657e07d05aedb475bc1d
7
- data.tar.gz: 1f655f360e13af9c419821b0e8bbf97edc15c9c8d0a6d164e877b17b9abe4441061d02f5870ca05327a54c3a31cafcece8bf9c23621ad72f3ba3945772b54731
6
+ metadata.gz: 69cfc8ff0644cf6312d1092035a4c2048dcc12d01d748761629a15f203119c0be4d4a1ad977755aed64d6adc0780a2918d16632fea61258f1b1d5722aaabf268
7
+ data.tar.gz: 8bf0350a853947282c525fc49cfdd76950a07e8bbc04d1f667baa804e3bf626a331e12da6526461db1dcb54e1ae32035b7b9ea9fb9446dbfcb78002a91ded8ce
data/README.md CHANGED
@@ -6,32 +6,54 @@
6
6
 
7
7
  ##Overview
8
8
 
9
- Quality is a tool that runs quality checks on Ruby code using cane,
10
- reek, flog, flay and rubocop and makes sure your numbers don't get any
9
+ Quality is a tool that runs quality checks on code in git repos using
10
+ different analysis tools and makes sure your numbers don't get any
11
11
  worse over time.
12
12
 
13
13
  ## Why
14
14
 
15
15
  See [this post](http://blog.apiology.cc/2014/06/scalable-quality-part-1.html) or [these slides](https://docs.google.com/presentation/d/1Op4FH34-enm8luEIuAAVLkuAJ-sB4LKaMm57RJzvfeI/edit#slide) for more information on the problem the quality gem solves.
16
16
 
17
+ ### Tools
18
+
19
+ Quality makes use of the following other tools, which do the actual checking:
20
+
21
+ * [bigfiles](https://github.com/apiology/bigfiles)
22
+ * [brakeman](http://brakemanscanner.org/)
23
+ * [bundler_audit](https://github.com/rubysec/bundler-audit)
24
+ * [cane](https://github.com/square/cane)
25
+ * [eslint](http://eslint.org/)
26
+ * [flake8](https://pypi.python.org/pypi/flake8)
27
+ * [flay](https://github.com/seattlerb/flay)
28
+ * [flog](https://github.com/seattlerb/flog)
29
+ * [jscs](http://jscs.info/)
30
+ * [pep8](https://pypi.python.org/pypi/pep8)
31
+ * [punchlist](https://github.com/apiology/punchlist)
32
+ * [rails_best_practices](https://github.com/railsbp/rails_best_practices)
33
+ * [reek](https://github.com/troessner/reek)
34
+ * [rubocop](https://github.com/bbatsov/rubocop)
35
+
17
36
  ## How to use - using Docker
18
37
 
19
38
  These basic steps assume you have a working Docker installation.
20
39
 
21
40
  ```
22
- docker run -v `pwd`:/usr/app apiology/quality
41
+ docker run -v `pwd`:/usr/app apiology/quality:latest
23
42
  ```
24
43
 
25
44
  If you'd like to customize, you can link in your own Rakefile like this:
26
45
 
27
46
  ```
28
- docker run -v `pwd`:/usr/app -v `pwd`/Rakefile.quality:/usr/quality/Rakefile apiology/quality
47
+ docker run -v `pwd`:/usr/app -v `pwd`/Rakefile.quality:/usr/quality/Rakefile apiology/quality:latest
29
48
  ```
30
49
 
50
+ The default 'latest' tag contains the Ruby tools in a relatively small image. You can also get additional tools (see `Dockerfile.jumbo` in this directory) by using the tag `jumbo-`(version) (e.g., jumbo-latest, jumbo-x.y.z, etc)
51
+
31
52
 
32
53
  ## How to use - as part of a Ruby-based Rakefile
33
54
 
34
55
  ```bash
56
+ $ brew install cmake # OS X
35
57
  $ gem install quality
36
58
  ```
37
59
 
@@ -91,25 +113,17 @@ Quality::Rake::Task.new do |t|
91
113
  # Defaults to false
92
114
  t.verbose = false
93
115
 
94
- # Array of directory names which contain ruby files to analyze.
116
+ # Relative path to output directory where *_high_water_mark
117
+ # files will be read/written
95
118
  #
96
- # Defaults to %w(app lib test spec feature), which translates to
97
- # *.rb in the base directory, as well as those directories.
98
- t.ruby_dirs = %w(app lib test spec feature)
119
+ # Defaults to 'metrics'
120
+ t.output_dir = 'metrics'
99
121
 
100
- # Array of directory names which contain any type of source files to
101
- # analyze.
122
+ # Pipe-separated regexp string describing what to look for in
123
+ # files as 'todo'-like 'punchlist' comments.
102
124
  #
103
- # Defaults to t.ruby_dirs
104
- t.source_dirs.concat(%w(MyProject MyProjectTests))
105
-
106
- # Pick any extra files that are source files, but may not have
107
- # extensions--defaults to %w(Rakefile Dockerfile)
108
- t.extra_source_files = ['tools/check-script', 'Rakefile']
109
-
110
- # Pick any extra files that are source files, but may not have
111
- # extensions--defaults to %w(Rakefile)
112
- t.extra_ruby_files = ['Rakefile']
125
+ # Defaults to 'XXX|TODO'
126
+ t.punchlist_regexp = 'XXX|TODO'
113
127
 
114
128
  # Exclude the specified list of files--defaults to ['db/schema.rb']
115
129
  t.exclude_files = ['lib/whatever/imported_file.rb',
@@ -121,28 +135,18 @@ Quality::Rake::Task.new do |t|
121
135
  t.source_files_exclude_glob =
122
136
  '{lib/whatever/imported_file.rb,lib/vendor/**/*.rb}'
123
137
 
124
- # Extensions for Ruby language files--defaults to rb,rake
125
- t.ruby_file_extensions_arr = %w(rb rake)
126
-
127
- # Extensions for all source files--defaults to
128
- # rb,rake,swift,cpp,c,java,py,clj,cljs,scala,js,yml,sh,json
129
- t.source_file_extensions_arr =
130
- %w(rb rake swift cpp c java py clj cljs scala js yml sh json)
131
-
132
- # Relative path to output directory where *_high_water_mark
133
- # files will be read/written
134
138
  #
135
- # Defaults to 'metrics'
136
- t.output_dir = 'metrics'
137
-
138
- # Pipe-separated regexp string describing what to look for in
139
- # files as 'todo'-like 'punchlist' comments.
139
+ # For configuration on classifying files as the correct language,
140
+ # see https://github.com/github/linguist
140
141
  #
141
- # Defaults to 'XXX|TODO'
142
- t.punchlist_regexp = 'XXX|TODO'
143
142
  end
144
143
  ```
145
144
 
145
+ ## Vendored files
146
+
147
+ Quality uses GitHub's [linguist](https://github.com/github/linguist) gem to find and classify source files to analyze. In addition to the `exclude_files` and `source_files_exclude_glob` options in Quality, you can refer to Linguists's documentation on [overrides](https://github.com/github/linguist#overrides) to use the `gitattributes` file to mark files as vendored, at which point Quality will not try to analyze them.
148
+
149
+
146
150
  ## Code coverage
147
151
 
148
152
  You can pull a similar trick with code coverage using SimpleCov in Ruby--put 'simplecov' in your Gemfile, and add the code below into your test_helper.rb or spec_helper.rb.
@@ -155,13 +159,13 @@ SimpleCov.refuse_coverage_drop
155
159
 
156
160
  After your first run, check in your coverage/.last_run.json.
157
161
 
158
- ## Maturity
162
+ ## Caveats
159
163
 
160
164
  Quality uses [semantic versioning](http://semver.org/)--any incompatible changes (including new tools being added) will come out as major number updates.
161
165
 
162
166
  ## Supported Ruby Versions
163
167
 
164
- Tested against Ruby >=2.0--does not support Ruby 1.9.x.
168
+ Tested against Ruby >=2.2--does not support Ruby 1.9.x or JRuby.
165
169
 
166
170
  ## Contributing
167
171
 
@@ -171,18 +175,6 @@ Tested against Ruby >=2.0--does not support Ruby 1.9.x.
171
175
 
172
176
  Many thanks to all contributors, especially [@andyw8](https://github.com/andyw8), who has contributed some great improvements.
173
177
 
174
- ### Dependencies
175
-
176
- Quality makes use of the following other gems, which do the actual checking:
177
-
178
- * [reek](https://github.com/troessner/reek)
179
- * [cane](https://github.com/square/cane)
180
- * [flog](https://github.com/seattlerb/flog)
181
- * [flay](https://github.com/seattlerb/flay)
182
- * [rubocop](https://github.com/bbatsov/rubocop)
183
- * [bigfiles](https://github.com/apiology/bigfiles)
184
- * [punchlist](https://github.com/apiology/punchlist)
185
-
186
178
  ### Learn More
187
179
 
188
180
  * Browse the code or install the latest development version from [https://github.com/apiology/quality/tree](https://github.com/apiology/quality/tree)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Quality
2
3
  # Class processes output from a code quality command, tweaking it
3
4
  # for editor output and counting the number of violations found
@@ -22,8 +23,7 @@ module Quality
22
23
  def process_file(file, &count_violations_on_line)
23
24
  out = ''
24
25
  while (@current_line = file.gets)
25
- out <<
26
- process_line(&count_violations_on_line)
26
+ out += process_line(&count_violations_on_line)
27
27
  end
28
28
  out
29
29
  end
@@ -1,8 +1,9 @@
1
+ # frozen_string_literal: true
1
2
  # XXX: I should figure out how to use tagged releases in github. Example:
2
3
  # https://github.com/xsc/lein-ancient/issues/29
3
4
  # https://github.com/xsc/lein-ancient/releases
4
5
 
5
- require 'source_finder/source_file_globber'
6
+ require_relative 'linguist_source_file_globber'
6
7
 
7
8
  module Quality
8
9
  # Configuration for running quality tool
@@ -10,84 +11,49 @@ module Quality
10
11
  attr_accessor :skip_tools, :verbose, :quality_name, :ratchet_name,
11
12
  :output_dir, :punchlist_regexp
12
13
 
13
- extend Forwardable
14
-
15
- def_delegators(:source_file_globber,
16
- :ruby_dirs_arr=, :ruby_dirs_arr,
17
- :extra_ruby_files_arr=, :extra_ruby_files_arr,
18
- :ruby_file_extensions_arr=, :ruby_file_extensions_arr,
19
- :ruby_file_extensions_glob=, :ruby_file_extensions_glob,
20
- :ruby_files_glob, :ruby_files_arr)
14
+ attr_writer :source_files_exclude_glob, :exclude_files
21
15
 
22
- def_delegators(:source_file_globber,
23
- :js_dirs_arr=, :js_dirs_arr,
24
- :extra_js_files_arr=, :extra_js_files_arr,
25
- :js_file_extensions_arr=, :js_file_extensions_arr,
26
- :js_file_extensions_glob=, :js_file_extensions_glob,
27
- :js_files_glob, :js_files_arr)
16
+ extend Forwardable
28
17
 
29
- def_delegators(:source_file_globber,
30
- :python_dirs_arr=, :python_dirs_arr,
31
- :extra_python_files_arr=, :extra_python_files_arr,
32
- :python_file_extensions_arr=, :python_file_extensions_arr,
33
- :python_file_extensions_glob=, :python_file_extensions_glob,
34
- :python_files_glob, :python_files_arr)
18
+ def_delegators(:@source_file_globber, :ruby_files, :python_files,
19
+ :js_files, :source_and_doc_files, :source_files)
35
20
 
36
- def_delegators(:source_file_globber,
37
- :source_dirs_arr=, :source_dirs_arr,
38
- :extra_source_files_arr=, :extra_source_files_arr,
39
- :exclude_files_arr=, :exclude_files_arr,
40
- :source_file_extensions_arr=, :source_file_extensions_arr,
41
- :source_file_extensions_glob=, :source_file_extensions_glob,
42
- :source_and_doc_files_glob,
43
- :source_files_glob,
44
- :source_files_exclude_glob,
45
- :source_files_exclude_glob=)
21
+ def to_glob(files)
22
+ "{#{files.join(',')}}"
23
+ end
46
24
 
47
- alias_method(:extra_ruby_files, :extra_ruby_files_arr)
48
- alias_method(:extra_ruby_files=, :extra_ruby_files_arr=)
49
- alias_method(:ruby_files, :ruby_files_arr)
50
- alias_method(:python_files, :python_files_arr)
51
- alias_method(:ruby_dirs, :ruby_dirs_arr)
52
- alias_method(:ruby_dirs=, :ruby_dirs_arr=)
53
- alias_method(:ruby_file_extensions, :ruby_file_extensions_glob)
54
- alias_method(:ruby_file_extensions=, :ruby_file_extensions_glob=)
25
+ def source_files_glob
26
+ to_glob(source_files)
27
+ end
55
28
 
56
- alias_method(:extra_files, :extra_source_files_arr)
57
- alias_method(:extra_files=, :extra_source_files_arr=)
58
- alias_method(:extra_source_files, :extra_source_files_arr)
59
- alias_method(:extra_source_files=, :extra_source_files_arr=)
60
- alias_method(:source_dirs, :source_dirs_arr)
61
- alias_method(:source_dirs=, :source_dirs_arr=)
62
- alias_method(:exclude_files, :exclude_files_arr)
63
- alias_method(:exclude_files=, :exclude_files_arr=)
29
+ def source_and_doc_files_glob
30
+ to_glob(source_and_doc_files)
31
+ end
64
32
 
65
- # This was named and documented poorly early on
66
- alias_method(:source_file_extensions, :source_file_extensions_glob)
67
- alias_method(:source_file_extensions=, :source_file_extensions_glob=)
33
+ def exclude_files
34
+ @exclude_files || []
35
+ end
68
36
 
69
- def source_file_globber
70
- @source_file_globber ||=
71
- SourceFinder::SourceFileGlobber.new(globber: @globber)
37
+ def source_files_exclude_glob
38
+ @source_files_exclude_glob || to_glob(exclude_files)
72
39
  end
73
40
 
74
41
  def all_output_files
75
- @globber.glob("#{output_dir}/*_high_water_mark")
42
+ @dir.glob("#{output_dir}/*_high_water_mark")
76
43
  end
77
44
 
78
45
  def initialize(quality_name: 'quality',
79
46
  ratchet_name: 'ratchet',
80
- globber: raise)
47
+ source_file_globber: Quality::LinguistSourceFileGlobber.new,
48
+ dir: Dir)
81
49
  @quality_name = quality_name
82
50
  @ratchet_name = ratchet_name
83
51
  @skip_tools = []
84
52
  @output_dir = 'metrics'
85
53
  @verbose = false
86
- @globber = globber
87
- source_file_globber.source_files_exclude_glob =
88
- '{' + source_file_globber.source_files_exclude_glob +
89
- ',db/schema.rb' \
90
- '}'
54
+ @source_file_globber = source_file_globber
55
+ @dir = dir
56
+ @source_files_exclude_glob = nil
91
57
  end
92
58
  end
93
59
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'active_support'
2
3
  require 'active_support/core_ext'
3
4
 
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+ require 'rugged'
3
+ require 'linguist'
4
+
5
+ module Quality
6
+ # Uses the Linguist gem to find and classify source files.
7
+ #
8
+ # Note: Requires files to be commited within a git repo.
9
+ class LinguistSourceFileGlobber
10
+ def initialize(repo: Rugged::Repository.new('.'),
11
+ commit: repo.head,
12
+ project: Linguist::Repository.new(repo, commit.target_id),
13
+ file_blob: Linguist::FileBlob,
14
+ pwd: Dir.pwd)
15
+ @repo = repo
16
+ @commit = commit
17
+ @project = project
18
+ @breakdown_by_file = @project.breakdown_by_file
19
+ @file_blob = file_blob
20
+ @pwd = pwd
21
+ end
22
+
23
+ def all_files
24
+ @source_files ||= begin
25
+ files = []
26
+ tree = @commit.target.tree
27
+ tree.walk(:preorder) do |root, file|
28
+ files << "#{root}#{file[:name]}" if file[:type] == :blob
29
+ end
30
+ files
31
+ end
32
+ end
33
+
34
+ def ruby_files
35
+ @breakdown_by_file['Ruby'] || []
36
+ end
37
+
38
+ def python_files
39
+ @breakdown_by_file['Python'] || []
40
+ end
41
+
42
+ def js_files
43
+ @breakdown_by_file['JavaScript'] || []
44
+ end
45
+
46
+ def real_files_matching
47
+ all_files.select do |filename|
48
+ blob = @file_blob.new(filename, @pwd)
49
+ if blob.generated? || blob.vendored?
50
+ false
51
+ else
52
+ yield blob, filename
53
+ end
54
+ end
55
+ end
56
+
57
+ def source_files
58
+ @source_files ||= begin
59
+ real_files_matching do |blob|
60
+ !blob.language.nil?
61
+ end
62
+ end
63
+ end
64
+
65
+ def source_and_doc_files
66
+ @source_and_doc_files ||= begin
67
+ real_files_matching do |blob, _filename|
68
+ if blob.documentation? || !blob.language.nil?
69
+ true
70
+ else
71
+ # puts "Excluding #{filename} from source_and_doc_files"
72
+ false
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'English'
2
3
 
3
4
  module Quality
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require_relative 'command_output_processor'
2
3
  require_relative 'process'
3
4
  require_relative 'ruby_spawn'
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  # XXX: There's an underlying issue with bundler, and knowing my luck,
4
5
  # probably RVM that is causing confusion on which version of rake is
@@ -45,15 +46,14 @@ module Quality
45
46
  cmd_runner: Kernel,
46
47
  count_file: File,
47
48
  count_io: IO,
48
- globber: Dir,
49
49
  gem_spec: Gem::Specification,
50
50
  quality_checker_class:
51
51
  Quality::QualityChecker,
52
- which: Which.new)
52
+ which: Which.new,
53
+ config: Quality::Config.new)
53
54
  @dsl = dsl
54
55
  @cmd_runner = cmd_runner
55
- @globber = globber
56
- @config = Quality::Config.new(globber: globber)
56
+ @config = config
57
57
  yield @config if block_given?
58
58
  @runner = Quality::Runner.new(@config,
59
59
  gem_spec: gem_spec,
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Quality
2
4
  # Spawn a ruby process
3
5
  class RubySpawn
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'active_support/inflector'
2
4
  require 'forwardable'
3
5
  require_relative 'which'
@@ -70,7 +72,7 @@ module Quality
70
72
 
71
73
  def count_existing_violations(filename)
72
74
  existing_violations = @count_io.read(filename).to_i
73
- raise("Problem with file #{filename}") if existing_violations < 0
75
+ raise("Problem with file #{filename}") if existing_violations.negative?
74
76
  existing_violations
75
77
  end
76
78
 
@@ -98,10 +100,16 @@ module Quality
98
100
  quality_checker.execute(&count_violations_on_line)
99
101
  end
100
102
 
101
- def_delegators :@config, :ruby_files, :ruby_files_glob,
102
- :python_files, :python_files_glob,
103
- :source_files_glob, :punchlist_regexp,
104
- :source_files_exclude_glob, :exclude_files,
105
- :source_and_doc_files_glob, :js_files_arr
103
+ def_delegators :@config,
104
+ :ruby_files,
105
+ :python_files,
106
+ :source_files,
107
+ :source_files_glob,
108
+ :source_and_doc_files,
109
+ :source_and_doc_files_glob,
110
+ :exclude_files,
111
+ :source_files_exclude_glob,
112
+ :punchlist_regexp,
113
+ :js_files
106
114
  end
107
115
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Quality
2
4
  module Tools
3
5
  # Adds 'bigfiles' tool support to quality gem
@@ -5,8 +7,8 @@ module Quality
5
7
  private
6
8
 
7
9
  def bigfiles_args
8
- args = ['--glob', "'#{source_files_glob}'"]
9
- if !exclude_files.empty?
10
+ args = ['--glob', "'#{source_and_doc_files_glob}'"]
11
+ unless source_files_exclude_glob == '{}'
10
12
  args << ['--exclude-glob', "'#{source_files_exclude_glob}'"]
11
13
  end
12
14
  args.join(' ')
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Quality
2
4
  module Tools
3
5
  # Adds 'rubocop' tool support to quality gem
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Quality
2
4
  module Tools
3
5
  # Adds 'bundler_audit' tool support to quality gem
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Quality
2
4
  module Tools
3
5
  # Adds 'cane' tool support to quality gem
@@ -12,11 +14,17 @@ module Quality
12
14
  ]
13
15
  end
14
16
 
17
+ def ruby_files_glob
18
+ "{#{ruby_files.join(',')}}"
19
+ end
20
+
15
21
  def cane_args
16
22
  args = [
17
23
  "-f '#{ruby_files_glob}'",
18
24
  ]
19
- args += cane_exclude_args unless exclude_files.empty?
25
+ unless exclude_files.nil? || exclude_files.empty?
26
+ args += cane_exclude_args
27
+ end
20
28
  args.join(' ')
21
29
  end
22
30
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Quality
2
4
  module Tools
3
5
  # Adds 'bigfiles' tool support to quality gem
@@ -5,7 +7,7 @@ module Quality
5
7
  private
6
8
 
7
9
  def eslint_args
8
- '-f unix ' + js_files_arr.join(' ')
10
+ '-f unix ' + js_files.join(' ')
9
11
  end
10
12
 
11
13
  def quality_eslint
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Quality
2
4
  module Tools
3
5
  # Adds 'flake8' tool support to quality gem
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Quality
2
4
  module Tools
3
5
  # Adds 'flay' tool support to quality gem
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Quality
2
4
  module Tools
3
5
  # Adds 'flog' tool support to quality gem
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Quality
2
4
  module Tools
3
5
  # Adds 'bigfiles' tool support to quality gem
@@ -5,11 +7,11 @@ module Quality
5
7
  private
6
8
 
7
9
  def jscs_args
8
- '-r unix ' + js_files_arr.join(' ')
10
+ '-r unix ' + js_files.join(' ')
9
11
  end
10
12
 
11
13
  def jscs_check_configured
12
- return 0 if js_files_arr.empty?
14
+ return 0 if js_files.empty?
13
15
 
14
16
  puts 'No JSCS config found! To generate one, run ' \
15
17
  'jscs --auto-configure representative_file.js'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Quality
2
4
  module Tools
3
5
  # Adds 'pep8' tool support to quality gem
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Quality
2
4
  module Tools
3
5
  # Adds 'punchlist' tool support to quality gem
@@ -7,7 +9,7 @@ module Quality
7
9
  def punchlist_args
8
10
  glob = "--glob '#{source_and_doc_files_glob}'"
9
11
  regexp = " --regexp '#{punchlist_regexp}'" if punchlist_regexp
10
- unless exclude_files.empty?
12
+ unless exclude_files.nil? || exclude_files.empty?
11
13
  exclude = " --exclude-glob '#{source_files_exclude_glob}'"
12
14
  end
13
15
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Quality
2
4
  module Tools
3
5
  # Adds 'rubocop' tool support to quality gem
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Quality
2
4
  module Tools
3
5
  # Adds 'reek' tool support to quality gem
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Quality
2
4
  module Tools
3
5
  # Adds 'rubocop' tool support to quality gem
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Quality is a tool that runs quality checks on Ruby code using cane,
2
4
  # reek, flog, flay and rubocop and makes sure your numbers don't get
3
5
  # any worse over time.
4
6
  module Quality
5
- VERSION = '22.0.0'.freeze
7
+ VERSION = '23.0.0'
6
8
  end
data/lib/quality/which.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # http://stackoverflow.com/questions/2108727/
2
4
  # which-in-ruby-checking-if-program-exists-in-path-from-ruby
3
5
  module Quality
data/quality.gemspec CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # ; -*-Ruby-*-
2
3
  # -*- encoding: utf-8 -*-
3
4
  $LOAD_PATH.push File.join(File.dirname(__FILE__), 'lib')
@@ -10,10 +11,10 @@ Gem::Specification.new do |s|
10
11
  s.authors = ['Vince Broz']
11
12
  # s.default_executable = %q{quality}
12
13
  s.description =
13
- 'Quality is a tool that runs quality checks on your code using ' \
14
+ "Quality is a tool that runs quality checks on your code using " \
14
15
  "community tools, and makes sure your numbers don't get any " \
15
16
  "worse over time. Just add 'rake quality' as part of your " \
16
- 'Continuous Integration'
17
+ "Continuous Integration"
17
18
  s.email = ['vince@broz.cc']
18
19
  # s.executables = ["quality"]
19
20
  # s.extra_rdoc_files = ["CHANGELOG", "License.txt"]
@@ -30,7 +31,7 @@ Gem::Specification.new do |s|
30
31
  s.summary = 'Code quality tools for Ruby'
31
32
 
32
33
  s.add_runtime_dependency('activesupport')
33
- s.add_runtime_dependency('source_finder', ['>=3.0.0'])
34
+ s.add_runtime_dependency('github-linguist')
34
35
  s.add_runtime_dependency('cane', ['>= 2.6'])
35
36
  s.add_runtime_dependency('reek', ['>= 1.3.4'])
36
37
  s.add_runtime_dependency('flog', ['>= 4.1.1'])
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quality
3
3
  version: !ruby/object:Gem::Version
4
- version: 22.0.0
4
+ version: 23.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vince Broz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-28 00:00:00.000000000 Z
11
+ date: 2016-09-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -25,19 +25,19 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: source_finder
28
+ name: github-linguist
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 3.0.0
33
+ version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 3.0.0
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: cane
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -316,6 +316,7 @@ files:
316
316
  - lib/quality/command_output_processor.rb
317
317
  - lib/quality/config.rb
318
318
  - lib/quality/directory_of_classes.rb
319
+ - lib/quality/linguist_source_file_globber.rb
319
320
  - lib/quality/process.rb
320
321
  - lib/quality/quality_checker.rb
321
322
  - lib/quality/rake/task.rb