reviewer 0.1.1 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/.alexignore +1 -0
  3. data/.flayignore +1 -0
  4. data/.github/workflows/main.yml +14 -4
  5. data/.gitignore +5 -0
  6. data/.inch.yml +4 -0
  7. data/.reviewer.example.yml +63 -0
  8. data/.reviewer.future.yml +221 -0
  9. data/.reviewer.yml +140 -0
  10. data/.reviewer_stdout +0 -0
  11. data/.rubocop.yml +20 -0
  12. data/CHANGELOG.md +38 -3
  13. data/Gemfile +2 -4
  14. data/Gemfile.lock +103 -20
  15. data/LICENSE.txt +4 -20
  16. data/README.md +23 -29
  17. data/Rakefile +5 -5
  18. data/bin/console +4 -4
  19. data/exe/fmt +7 -0
  20. data/exe/rvw +7 -0
  21. data/lib/reviewer/arguments/files.rb +94 -0
  22. data/lib/reviewer/arguments/keywords.rb +133 -0
  23. data/lib/reviewer/arguments/tags.rb +71 -0
  24. data/lib/reviewer/arguments.rb +54 -10
  25. data/lib/reviewer/batch.rb +91 -0
  26. data/lib/reviewer/command/string/env.rb +44 -0
  27. data/lib/reviewer/command/string/flags.rb +51 -0
  28. data/lib/reviewer/command/string.rb +66 -0
  29. data/lib/reviewer/command.rb +75 -0
  30. data/lib/reviewer/configuration.rb +32 -7
  31. data/lib/reviewer/conversions.rb +16 -0
  32. data/lib/reviewer/guidance.rb +77 -0
  33. data/lib/reviewer/history.rb +69 -0
  34. data/lib/reviewer/keywords/git/staged.rb +64 -0
  35. data/lib/reviewer/keywords/git.rb +14 -0
  36. data/lib/reviewer/keywords.rb +9 -0
  37. data/lib/reviewer/loader.rb +36 -9
  38. data/lib/reviewer/output/printer.rb +44 -0
  39. data/lib/reviewer/output/scrubber.rb +48 -0
  40. data/lib/reviewer/output/token.rb +85 -0
  41. data/lib/reviewer/output.rb +122 -0
  42. data/lib/reviewer/runner/strategies/captured.rb +157 -0
  43. data/lib/reviewer/runner/strategies/passthrough.rb +63 -0
  44. data/lib/reviewer/runner.rb +131 -0
  45. data/lib/reviewer/shell/result.rb +84 -0
  46. data/lib/reviewer/shell/timer.rb +72 -0
  47. data/lib/reviewer/shell.rb +54 -0
  48. data/lib/reviewer/tool/settings.rb +38 -19
  49. data/lib/reviewer/tool.rb +137 -23
  50. data/lib/reviewer/tools.rb +87 -8
  51. data/lib/reviewer/version.rb +1 -1
  52. data/lib/reviewer.rb +107 -28
  53. data/reviewer.gemspec +34 -19
  54. data/structure.svg +1 -0
  55. metadata +244 -12
  56. data/bin/review +0 -5
  57. data/lib/reviewer/tool/command.rb +0 -78
  58. data/lib/reviewer/tool/env.rb +0 -39
  59. data/lib/reviewer/tool/flags.rb +0 -39
  60. data/lib/reviewer/tool/verbosity.rb +0 -39
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reviewer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Garrett Dimon
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-04-18 00:00:00.000000000 Z
11
+ date: 2021-12-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: activesupport
14
+ name: rainbow
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -38,15 +38,221 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler-audit
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: codecov
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: flay
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: flog
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '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'
97
+ - !ruby/object:Gem::Dependency
98
+ name: inch
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: minitest
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: minitest-heat
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: psych
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: reek
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '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'
167
+ - !ruby/object:Gem::Dependency
168
+ name: rubocop
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: rubocop-minitest
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: rubocop-rake
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ - !ruby/object:Gem::Dependency
210
+ name: simplecov
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: yard
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ">="
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ">="
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
41
237
  description: Provides a unified approach to managing automated code quality tools.
42
238
  email:
43
239
  - email@garrettdimon.com
44
- executables: []
240
+ executables:
241
+ - fmt
242
+ - rvw
45
243
  extensions: []
46
244
  extra_rdoc_files: []
47
245
  files:
246
+ - ".alexignore"
247
+ - ".flayignore"
48
248
  - ".github/workflows/main.yml"
49
249
  - ".gitignore"
250
+ - ".inch.yml"
251
+ - ".reviewer.example.yml"
252
+ - ".reviewer.future.yml"
253
+ - ".reviewer.yml"
254
+ - ".reviewer_stdout"
255
+ - ".rubocop.yml"
50
256
  - CHANGELOG.md
51
257
  - CODE_OF_CONDUCT.md
52
258
  - Gemfile
@@ -55,28 +261,54 @@ files:
55
261
  - README.md
56
262
  - Rakefile
57
263
  - bin/console
58
- - bin/review
59
264
  - bin/setup
265
+ - exe/fmt
266
+ - exe/rvw
60
267
  - lib/reviewer.rb
61
268
  - lib/reviewer/arguments.rb
269
+ - lib/reviewer/arguments/files.rb
270
+ - lib/reviewer/arguments/keywords.rb
271
+ - lib/reviewer/arguments/tags.rb
272
+ - lib/reviewer/batch.rb
273
+ - lib/reviewer/command.rb
274
+ - lib/reviewer/command/string.rb
275
+ - lib/reviewer/command/string/env.rb
276
+ - lib/reviewer/command/string/flags.rb
62
277
  - lib/reviewer/configuration.rb
278
+ - lib/reviewer/conversions.rb
279
+ - lib/reviewer/guidance.rb
280
+ - lib/reviewer/history.rb
281
+ - lib/reviewer/keywords.rb
282
+ - lib/reviewer/keywords/git.rb
283
+ - lib/reviewer/keywords/git/staged.rb
63
284
  - lib/reviewer/loader.rb
285
+ - lib/reviewer/output.rb
286
+ - lib/reviewer/output/printer.rb
287
+ - lib/reviewer/output/scrubber.rb
288
+ - lib/reviewer/output/token.rb
289
+ - lib/reviewer/runner.rb
290
+ - lib/reviewer/runner/strategies/captured.rb
291
+ - lib/reviewer/runner/strategies/passthrough.rb
292
+ - lib/reviewer/shell.rb
293
+ - lib/reviewer/shell/result.rb
294
+ - lib/reviewer/shell/timer.rb
64
295
  - lib/reviewer/tool.rb
65
- - lib/reviewer/tool/command.rb
66
- - lib/reviewer/tool/env.rb
67
- - lib/reviewer/tool/flags.rb
68
296
  - lib/reviewer/tool/settings.rb
69
- - lib/reviewer/tool/verbosity.rb
70
297
  - lib/reviewer/tools.rb
71
298
  - lib/reviewer/version.rb
72
299
  - reviewer.gemspec
300
+ - structure.svg
73
301
  homepage: https://github.com/garrettdimon/reviewer
74
302
  licenses:
75
303
  - MIT
76
304
  metadata:
77
305
  homepage_uri: https://github.com/garrettdimon/reviewer
78
- source_code_uri: https://github.com/garrettdimon/reviewer
306
+ bug_tracker_uri: https://github.com/garrettdimon/reviewer/issues
79
307
  changelog_uri: https://github.com/garrettdimon/reviewer/CHANGELOG.md
308
+ documentation_uri: https://www.rubydoc.info/gems/reviewer
309
+ source_code_uri: https://github.com/garrettdimon/reviewer
310
+ wiki_uri: https://github.com/garrettdimon/reviewer/wiki
311
+ rubygems_mfa_required: 'true'
80
312
  post_install_message:
81
313
  rdoc_options: []
82
314
  require_paths:
@@ -85,14 +317,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
85
317
  requirements:
86
318
  - - ">="
87
319
  - !ruby/object:Gem::Version
88
- version: 2.4.0
320
+ version: 2.5.9
89
321
  required_rubygems_version: !ruby/object:Gem::Requirement
90
322
  requirements:
91
323
  - - ">="
92
324
  - !ruby/object:Gem::Version
93
325
  version: '0'
94
326
  requirements: []
95
- rubygems_version: 3.2.16
327
+ rubygems_version: 3.2.32
96
328
  signing_key:
97
329
  specification_version: 4
98
330
  summary: Provides a unified approach to managing automated code quality tools.
data/bin/review DELETED
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require_relative '../lib/reviewer'
4
-
5
- Reviewer.review
@@ -1,78 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Assembles tool tool_settings into a usable command string
4
- module Reviewer
5
- class Tool
6
- class Command
7
- class InvalidTypeError < StandardError; end
8
- class NotConfiguredError < StandardError; end
9
-
10
- TYPES = %i[install prepare review format].freeze
11
-
12
- attr_reader :command_type, :tool_settings, :verbosity_level
13
-
14
- def initialize(command_type, tool_settings:, verbosity_level: nil)
15
- @command_type = command_type
16
- @tool_settings = tool_settings
17
- @verbosity_level = verbosity_level
18
-
19
- verify_command_type!
20
- end
21
-
22
- def to_s
23
- to_a
24
- .map(&:strip)
25
- .join(' ')
26
- .strip
27
- end
28
-
29
- def to_a
30
- [
31
- env,
32
- body,
33
- flags,
34
- verbosity
35
- ].compact
36
- end
37
-
38
- def env
39
- Env.new(tool_settings.env).to_s
40
- end
41
-
42
- def body
43
- tool_settings.commands.fetch(command_type)
44
- end
45
-
46
- def flags
47
- # :review commands are the only commands that use flags (except the :quiet_flag)
48
- return nil unless review?
49
-
50
- Flags.new(tool_settings.flags).to_s
51
- end
52
-
53
- def verbosity
54
- Verbosity.new(tool_settings.quiet_flag, level: verbosity_level).to_s
55
- end
56
-
57
-
58
- private
59
-
60
- def review?
61
- command_type == :review
62
- end
63
-
64
- def valid_command?
65
- TYPES.include?(command_type)
66
- end
67
-
68
- def command_defined?
69
- tool_settings.commands.key?(command_type)
70
- end
71
-
72
- def verify_command_type!
73
- raise InvalidTypeError, "'#{body}' is not a supported command type. (Make sure it's not a typo.)" unless valid_command?
74
- raise NotConfiguredError, "The '#{body}' command is not configured for #{tool_settings.name}. (Make sure it's not a typo.)" unless command_defined?
75
- end
76
- end
77
- end
78
- end
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Assembles tool environment variables into a single string or array
4
- module Reviewer
5
- class Tool
6
- class Env
7
- attr_reader :env_pairs
8
-
9
- def initialize(env_pairs)
10
- @env_pairs = env_pairs
11
- end
12
-
13
- def to_s
14
- to_a.compact.join(' ')
15
- end
16
-
17
- def to_a
18
- env = []
19
- env_pairs.each { |key, value| env << env(key, value) }
20
- env
21
- end
22
-
23
-
24
- private
25
-
26
- def env(key, value)
27
- return nil if key.to_s.blank? || value.to_s.blank?
28
-
29
- value = needs_quotes?(value) ? "'#{value}'" : value
30
-
31
- "#{key.to_s.strip.upcase}=#{value.to_s.strip};"
32
- end
33
-
34
- def needs_quotes?(value)
35
- value.is_a?(String) && value.include?(' ')
36
- end
37
- end
38
- end
39
- end
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Assembles tool flag settings into a single string or array
4
- module Reviewer
5
- class Tool
6
- class Flags
7
- attr_reader :flag_pairs
8
-
9
- def initialize(flag_pairs)
10
- @flag_pairs = flag_pairs
11
- end
12
-
13
- def to_s
14
- to_a.join(' ')
15
- end
16
-
17
- def to_a
18
- flags = []
19
- flag_pairs.each { |key, value| flags << flag(key, value) }
20
- flags
21
- end
22
-
23
-
24
- private
25
-
26
- def flag(key, value)
27
- dash = key.to_s.size == 1 ? '-' : '--'
28
-
29
- value = needs_quotes?(value) ? "'#{value}'" : value
30
-
31
- "#{dash}#{key} #{value}".strip
32
- end
33
-
34
- def needs_quotes?(value)
35
- value.is_a?(String) && value.include?(' ')
36
- end
37
- end
38
- end
39
- end
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Assembles tool settings and provided context for silencing output
4
- module Reviewer
5
- class Tool
6
- class Verbosity
7
- class InvalidLevelError < StandardError; end
8
- # :total_silence = Use the quiet flag and send everything to dev/null.
9
- # For some tools "quiet" means "less noisy" rather than truly silent.
10
- # So in those cases, dev/null handles lingering noise.
11
- # :tool_silence = Just the quiet flag
12
- # :no_silence = Let the output scroll for eternity
13
- LEVELS = %i[total_silence tool_silence no_silence].freeze
14
- SEND_TO_DEV_NULL = "> /dev/null".freeze
15
-
16
- attr_reader :flag, :level
17
-
18
- def initialize(flag, level: :total_silence)
19
- @flag = flag
20
-
21
- raise InvalidLevelError, "Invalid Verbosity Level: '#{level}'" unless LEVELS.include?(level)
22
-
23
- @level = level
24
- end
25
-
26
- def to_s
27
- to_a.join(' ').strip
28
- end
29
-
30
- def to_a
31
- case level
32
- when :total_silence then [flag, SEND_TO_DEV_NULL].compact
33
- when :tool_silence then [flag].compact
34
- when :no_silence then []
35
- end
36
- end
37
- end
38
- end
39
- end