quiet_quality 1.3.0 → 1.4.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 +4 -4
- data/CHANGELOG.md +10 -0
- data/README.md +17 -8
- data/lib/quiet_quality/annotators.rb +6 -2
- data/lib/quiet_quality/config/file_filter.rb +52 -0
- data/lib/quiet_quality/config/parser.rb +10 -1
- data/lib/quiet_quality/config/tool_options.rb +4 -7
- data/lib/quiet_quality/executors/pipeline.rb +2 -1
- data/lib/quiet_quality/version.rb +1 -1
- data/quiet_quality.gemspec +1 -0
- metadata +18 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 81e7296beb4ced635f0e6e0d1b5521adb6481b3ca4d027e86e76ad1ee8682643
|
4
|
+
data.tar.gz: 27dfab991d21f98536860a0fdbeed31faa1ea5b65a2af0941e0cc286fe6dcbc1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b84bb256a178326bc76143952098db02723fcfa792ed6e86f9b6b63a0c602d87eb270d81d93e34742c2026abd7fd2118964b3a039eb8e3968863a8d1e5fe1697
|
7
|
+
data.tar.gz: 76fc65f2ce473f91a8cb98bc32c62e98ecc154aef519ab8d9e908f7def8330306b76ee2c54ed99a57bfba4b5997065b6d953747756b9a0b83e9e557c96de1d23
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## Release 1.4.0
|
4
|
+
|
5
|
+
* Support specifying `excludes` per-tool, so that certain files won't be passed
|
6
|
+
to those tools on the command-line (#107 resolves #106)
|
7
|
+
|
8
|
+
## Release 1.3.1
|
9
|
+
|
10
|
+
* Fix a bug around the logging of nil commands when runners are skipped (#104
|
11
|
+
resolves #103)
|
12
|
+
|
3
13
|
## Release 1.3.0
|
4
14
|
|
5
15
|
* Support (and enable by default) colorizing the console stderr output from
|
data/README.md
CHANGED
@@ -156,14 +156,14 @@ And then each tool can have an entry, within which `changed_files` and
|
|
156
156
|
`filter_messages` can be specified - the tool-specific settings override the
|
157
157
|
global ones.
|
158
158
|
|
159
|
-
The tools have
|
160
|
-
`file_filter`.
|
161
|
-
used to limit what file paths are passed to the tool. For
|
162
|
-
working in a rails engine `engines/foo/`, and you touch one
|
163
|
-
there, you would not want `qq` in the root of the repository
|
164
|
-
`rspec engines/foo/spec/foo/thing_spec.rb` - that probably won't work, as
|
165
|
-
engine will have its own test setup code and Gemfile. This setting is
|
166
|
-
intended to be used like this:
|
159
|
+
The tools have two additional settings that are not available at a global level:
|
160
|
+
`file_filter` and `excludes`. `file_filter` is a string that will be turned into
|
161
|
+
a _ruby regex_, and used to limit what file paths are passed to the tool. For
|
162
|
+
example, if you are working in a rails engine `engines/foo/`, and you touch one
|
163
|
+
of the rspec tests there, you would not want `qq` in the root of the repository
|
164
|
+
to run `rspec engines/foo/spec/foo/thing_spec.rb` - that probably won't work, as
|
165
|
+
your engine will have its own test setup code and Gemfile. This setting is
|
166
|
+
mostly intended to be used like this:
|
167
167
|
|
168
168
|
```yaml
|
169
169
|
rspec:
|
@@ -172,6 +172,15 @@ rspec:
|
|
172
172
|
file_filter: "^spec/"
|
173
173
|
```
|
174
174
|
|
175
|
+
`excludes` are more specific in meaning - this is an _array_ of regexes, and any
|
176
|
+
file that matches any of these regexes will _not_ be passed to the tool as an
|
177
|
+
explicit command line argument. This is generally because tools like rubocop
|
178
|
+
have internal systems for excluding files, but if you pass a filename on the
|
179
|
+
cli, those systems are ignored. That means that if you have changes to a
|
180
|
+
generated file like `db/schema.rb`, and that file doesn't meet your rubocop (or
|
181
|
+
standardrb) rules, you'll get _told_ unless you exclude it at the quiet-quality
|
182
|
+
level as well.
|
183
|
+
|
175
184
|
### CLI Options
|
176
185
|
|
177
186
|
To specify which _tools_ to run (and if any are specified, the `default_tools`
|
@@ -1,10 +1,14 @@
|
|
1
|
+
module QuietQuality
|
2
|
+
module Annotators
|
3
|
+
Unrecognized = Class.new(Error)
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
1
7
|
glob = File.expand_path("../annotators/*.rb", __FILE__)
|
2
8
|
Dir.glob(glob).sort.each { |f| require(f) }
|
3
9
|
|
4
10
|
module QuietQuality
|
5
11
|
module Annotators
|
6
|
-
Unrecognized = Class.new(Error)
|
7
|
-
|
8
12
|
ANNOTATOR_TYPES = {
|
9
13
|
github_stdout: Annotators::GithubStdout
|
10
14
|
}.freeze
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module QuietQuality
|
2
|
+
module Config
|
3
|
+
class FileFilter
|
4
|
+
# * regex is a regex string
|
5
|
+
# * excludes is an array of regex strings OR a single regex string
|
6
|
+
def initialize(regex: nil, excludes: nil)
|
7
|
+
@regex_string = regex
|
8
|
+
@excludes_strings = excludes
|
9
|
+
end
|
10
|
+
|
11
|
+
def regex
|
12
|
+
return nil if @regex_string.nil?
|
13
|
+
@_regex ||= Regexp.new(@regex_string)
|
14
|
+
end
|
15
|
+
|
16
|
+
def excludes
|
17
|
+
return @_excludes if defined?(@_excludes)
|
18
|
+
|
19
|
+
@_excludes =
|
20
|
+
if @excludes_strings.nil?
|
21
|
+
nil
|
22
|
+
elsif @excludes_strings.is_a?(String)
|
23
|
+
[Regexp.new(@excludes_strings)]
|
24
|
+
else
|
25
|
+
@excludes_strings.map { |xs| Regexp.new(xs) }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# The filter _overall_ matches if:
|
30
|
+
# (a) the regex either matches or is not supplied AND
|
31
|
+
# (b) either none of the excludes match or none are supplied
|
32
|
+
def match?(s)
|
33
|
+
regex_match?(s) && !excludes_match?(s)
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
# The regex is an allow-match - if it's not supplied, treat everything as matching.
|
39
|
+
def regex_match?(s)
|
40
|
+
return true if regex.nil?
|
41
|
+
regex.match?(s)
|
42
|
+
end
|
43
|
+
|
44
|
+
# The excludes are a list of deny-matches - if they're not supplied, treat _nothing_
|
45
|
+
# as matching.
|
46
|
+
def excludes_match?(s)
|
47
|
+
return false if excludes.nil? || excludes.empty?
|
48
|
+
excludes.any? { |exclude| exclude.match?(s) }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -64,7 +64,7 @@ module QuietQuality
|
|
64
64
|
read_tool_option(opts, tool_name, :unfiltered, :filter_messages, as: :reversed_boolean)
|
65
65
|
read_tool_option(opts, tool_name, :changed_files, :limit_targets, as: :boolean)
|
66
66
|
read_tool_option(opts, tool_name, :all_files, :limit_targets, as: :reversed_boolean)
|
67
|
-
|
67
|
+
read_file_filter(opts, tool_name)
|
68
68
|
end
|
69
69
|
|
70
70
|
def invalid!(message)
|
@@ -97,6 +97,15 @@ module QuietQuality
|
|
97
97
|
opts.set_tool_option(tool, into, coerced_value)
|
98
98
|
end
|
99
99
|
|
100
|
+
def read_file_filter(opts, tool)
|
101
|
+
parsed_regex = data.dig(tool.to_sym, :file_filter)
|
102
|
+
parsed_excludes = data.dig(tool.to_sym, :excludes)
|
103
|
+
if parsed_regex || parsed_excludes
|
104
|
+
filter = Config::FileFilter.new(regex: parsed_regex, excludes: parsed_excludes)
|
105
|
+
opts.set_tool_option(tool, :file_filter, filter)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
100
109
|
def validate_value(name, value, as:, from: nil)
|
101
110
|
case as
|
102
111
|
when :boolean then validate_boolean(name, value)
|
@@ -8,8 +8,9 @@ module QuietQuality
|
|
8
8
|
@file_filter = file_filter
|
9
9
|
end
|
10
10
|
|
11
|
+
attr_accessor :file_filter
|
11
12
|
attr_reader :tool_name
|
12
|
-
attr_writer :limit_targets, :filter_messages
|
13
|
+
attr_writer :limit_targets, :filter_messages
|
13
14
|
|
14
15
|
def limit_targets?
|
15
16
|
@limit_targets
|
@@ -31,17 +32,13 @@ module QuietQuality
|
|
31
32
|
tool_namespace::Parser
|
32
33
|
end
|
33
34
|
|
34
|
-
def file_filter
|
35
|
-
return nil if @file_filter.nil?
|
36
|
-
Regexp.new(@file_filter)
|
37
|
-
end
|
38
|
-
|
39
35
|
def to_h
|
40
36
|
{
|
41
37
|
tool_name: tool_name,
|
42
38
|
limit_targets: limit_targets?,
|
43
39
|
filter_messages: filter_messages?,
|
44
|
-
file_filter: file_filter&.to_s
|
40
|
+
file_filter: file_filter&.regex&.to_s,
|
41
|
+
excludes: file_filter&.excludes&.map(&:to_s)
|
45
42
|
}
|
46
43
|
end
|
47
44
|
end
|
@@ -54,7 +54,8 @@ module QuietQuality
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def log_runner(r)
|
57
|
-
|
57
|
+
command_string = r.command ? "`#{r.command.join(" ")}`" : "(skipped)"
|
58
|
+
info("Runner #{r.tool_name} command: #{command_string}")
|
58
59
|
debug("Full command for #{r.tool_name}", data: r.command)
|
59
60
|
end
|
60
61
|
|
data/quiet_quality.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: quiet_quality
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Mueller
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-07-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: git
|
@@ -150,6 +150,20 @@ dependencies:
|
|
150
150
|
- - "~>"
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0.12'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: rspec-cover_it
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: 0.1.0
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: 0.1.0
|
153
167
|
description: |
|
154
168
|
Allow your CI to notice and/or annotate new quality issues, despite the presences of
|
155
169
|
many pre-existing issues in your codebase.
|
@@ -189,6 +203,7 @@ files:
|
|
189
203
|
- lib/quiet_quality/colorize.rb
|
190
204
|
- lib/quiet_quality/config.rb
|
191
205
|
- lib/quiet_quality/config/builder.rb
|
206
|
+
- lib/quiet_quality/config/file_filter.rb
|
192
207
|
- lib/quiet_quality/config/finder.rb
|
193
208
|
- lib/quiet_quality/config/options.rb
|
194
209
|
- lib/quiet_quality/config/parsed_options.rb
|
@@ -252,7 +267,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
252
267
|
- !ruby/object:Gem::Version
|
253
268
|
version: '0'
|
254
269
|
requirements: []
|
255
|
-
rubygems_version: 3.
|
270
|
+
rubygems_version: 3.4.10
|
256
271
|
signing_key:
|
257
272
|
specification_version: 4
|
258
273
|
summary: A system for comparing quality tool outputs against the forward diffs
|