reviewer 0.1.5 → 1.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.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/.github/FUNDING.yml +3 -0
  3. data/.github/workflows/main.yml +79 -11
  4. data/.github/workflows/release.yml +98 -0
  5. data/.gitignore +1 -1
  6. data/.inch.yml +3 -1
  7. data/.reek.yml +175 -0
  8. data/.reviewer.example.yml +7 -2
  9. data/.reviewer.yml +166 -40
  10. data/.rubocop.yml +34 -2
  11. data/CHANGELOG.md +42 -2
  12. data/Gemfile +39 -1
  13. data/Gemfile.lock +291 -70
  14. data/LICENSE.txt +20 -4
  15. data/README.md +310 -21
  16. data/RELEASING.md +190 -0
  17. data/Rakefile +117 -0
  18. data/dependency_decisions.yml +61 -0
  19. data/exe/fmt +1 -1
  20. data/exe/rvw +1 -1
  21. data/lib/reviewer/arguments/files.rb +47 -20
  22. data/lib/reviewer/arguments/keywords.rb +34 -41
  23. data/lib/reviewer/arguments/tags.rb +11 -11
  24. data/lib/reviewer/arguments.rb +100 -29
  25. data/lib/reviewer/batch/formatter.rb +87 -0
  26. data/lib/reviewer/batch.rb +32 -48
  27. data/lib/reviewer/capabilities.rb +81 -0
  28. data/lib/reviewer/command/string/env.rb +12 -6
  29. data/lib/reviewer/command/string/flags.rb +2 -4
  30. data/lib/reviewer/command/string.rb +47 -12
  31. data/lib/reviewer/command.rb +65 -10
  32. data/lib/reviewer/configuration/loader.rb +70 -0
  33. data/lib/reviewer/configuration.rb +6 -3
  34. data/lib/reviewer/context.rb +15 -0
  35. data/lib/reviewer/doctor/config_check.rb +46 -0
  36. data/lib/reviewer/doctor/environment_check.rb +58 -0
  37. data/lib/reviewer/doctor/formatter.rb +75 -0
  38. data/lib/reviewer/doctor/keyword_check.rb +85 -0
  39. data/lib/reviewer/doctor/opportunity_check.rb +88 -0
  40. data/lib/reviewer/doctor/report.rb +63 -0
  41. data/lib/reviewer/doctor/tool_inventory.rb +41 -0
  42. data/lib/reviewer/doctor.rb +28 -0
  43. data/lib/reviewer/history.rb +10 -17
  44. data/lib/reviewer/output/formatting.rb +40 -0
  45. data/lib/reviewer/output/printer.rb +70 -9
  46. data/lib/reviewer/output.rb +37 -78
  47. data/lib/reviewer/prompt.rb +38 -0
  48. data/lib/reviewer/report/formatter.rb +124 -0
  49. data/lib/reviewer/report.rb +100 -0
  50. data/lib/reviewer/runner/failed_files.rb +66 -0
  51. data/lib/reviewer/runner/formatter.rb +103 -0
  52. data/lib/reviewer/runner/guidance.rb +79 -0
  53. data/lib/reviewer/runner/result.rb +150 -0
  54. data/lib/reviewer/runner/strategies/captured.rb +98 -23
  55. data/lib/reviewer/runner/strategies/passthrough.rb +2 -11
  56. data/lib/reviewer/runner.rb +126 -40
  57. data/lib/reviewer/session/formatter.rb +87 -0
  58. data/lib/reviewer/session.rb +208 -0
  59. data/lib/reviewer/setup/catalog.rb +233 -0
  60. data/lib/reviewer/setup/detector.rb +61 -0
  61. data/lib/reviewer/setup/formatter.rb +94 -0
  62. data/lib/reviewer/setup/gemfile_lock.rb +55 -0
  63. data/lib/reviewer/setup/generator.rb +54 -0
  64. data/lib/reviewer/setup/tool_block.rb +112 -0
  65. data/lib/reviewer/setup.rb +41 -0
  66. data/lib/reviewer/shell/result.rb +14 -15
  67. data/lib/reviewer/shell/timer.rb +40 -35
  68. data/lib/reviewer/shell.rb +41 -12
  69. data/lib/reviewer/tool/conversions.rb +20 -0
  70. data/lib/reviewer/tool/file_resolver.rb +54 -0
  71. data/lib/reviewer/tool/settings.rb +88 -44
  72. data/lib/reviewer/tool/test_file_mapper.rb +73 -0
  73. data/lib/reviewer/tool/timing.rb +78 -0
  74. data/lib/reviewer/tool.rb +88 -69
  75. data/lib/reviewer/tools.rb +47 -33
  76. data/lib/reviewer/version.rb +1 -1
  77. data/lib/reviewer.rb +109 -50
  78. data/reviewer.gemspec +16 -19
  79. metadata +101 -142
  80. data/lib/reviewer/conversions.rb +0 -16
  81. data/lib/reviewer/guidance.rb +0 -77
  82. data/lib/reviewer/keywords/git/staged.rb +0 -64
  83. data/lib/reviewer/keywords/git.rb +0 -14
  84. data/lib/reviewer/keywords.rb +0 -9
  85. data/lib/reviewer/loader.rb +0 -59
  86. data/lib/reviewer/output/scrubber.rb +0 -48
  87. data/lib/reviewer/output/token.rb +0 -85
metadata CHANGED
@@ -1,240 +1,171 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reviewer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Garrett Dimon
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2021-12-21 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
- name: rainbow
13
+ name: benchmark
15
14
  requirement: !ruby/object:Gem::Requirement
16
15
  requirements:
17
- - - ">="
16
+ - - "~>"
18
17
  - !ruby/object:Gem::Version
19
- version: '0'
18
+ version: '0.5'
20
19
  type: :runtime
21
20
  prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
- - - ">="
23
+ - - "~>"
25
24
  - !ruby/object:Gem::Version
26
- version: '0'
25
+ version: '0.5'
27
26
  - !ruby/object:Gem::Dependency
28
- name: slop
27
+ name: pstore
29
28
  requirement: !ruby/object:Gem::Requirement
30
29
  requirements:
31
- - - ">="
30
+ - - "~>"
32
31
  - !ruby/object:Gem::Version
33
- version: '0'
32
+ version: '0.2'
34
33
  type: :runtime
35
34
  prerelease: false
36
35
  version_requirements: !ruby/object:Gem::Requirement
37
36
  requirements:
38
- - - ">="
37
+ - - "~>"
39
38
  - !ruby/object:Gem::Version
40
- version: '0'
39
+ version: '0.2'
41
40
  - !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
41
+ name: rainbow
71
42
  requirement: !ruby/object:Gem::Requirement
72
43
  requirements:
73
- - - ">="
44
+ - - "~>"
74
45
  - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
46
+ version: '3.1'
47
+ type: :runtime
77
48
  prerelease: false
78
49
  version_requirements: !ruby/object:Gem::Requirement
79
50
  requirements:
80
- - - ">="
51
+ - - "~>"
81
52
  - !ruby/object:Gem::Version
82
- version: '0'
53
+ version: '3.1'
83
54
  - !ruby/object:Gem::Dependency
84
- name: flog
55
+ name: ruby-progressbar
85
56
  requirement: !ruby/object:Gem::Requirement
86
57
  requirements:
87
- - - ">="
58
+ - - "~>"
88
59
  - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
60
+ version: '1.13'
61
+ type: :runtime
91
62
  prerelease: false
92
63
  version_requirements: !ruby/object:Gem::Requirement
93
64
  requirements:
94
- - - ">="
65
+ - - "~>"
95
66
  - !ruby/object:Gem::Version
96
- version: '0'
67
+ version: '1.13'
97
68
  - !ruby/object:Gem::Dependency
98
- name: inch
69
+ name: slop
99
70
  requirement: !ruby/object:Gem::Requirement
100
71
  requirements:
101
- - - ">="
72
+ - - "~>"
102
73
  - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
74
+ version: '4.10'
75
+ type: :runtime
105
76
  prerelease: false
106
77
  version_requirements: !ruby/object:Gem::Requirement
107
78
  requirements:
108
- - - ">="
79
+ - - "~>"
109
80
  - !ruby/object:Gem::Version
110
- version: '0'
81
+ version: '4.10'
111
82
  - !ruby/object:Gem::Dependency
112
83
  name: minitest
113
84
  requirement: !ruby/object:Gem::Requirement
114
85
  requirements:
115
- - - ">="
86
+ - - "~>"
116
87
  - !ruby/object:Gem::Version
117
- version: '0'
88
+ version: '5.27'
118
89
  type: :development
119
90
  prerelease: false
120
91
  version_requirements: !ruby/object:Gem::Requirement
121
92
  requirements:
122
- - - ">="
93
+ - - "~>"
123
94
  - !ruby/object:Gem::Version
124
- version: '0'
95
+ version: '5.27'
125
96
  - !ruby/object:Gem::Dependency
126
97
  name: minitest-heat
127
98
  requirement: !ruby/object:Gem::Requirement
128
99
  requirements:
129
- - - ">="
100
+ - - "~>"
130
101
  - !ruby/object:Gem::Version
131
- version: '0'
102
+ version: '2.1'
132
103
  type: :development
133
104
  prerelease: false
134
105
  version_requirements: !ruby/object:Gem::Requirement
135
106
  requirements:
136
- - - ">="
107
+ - - "~>"
137
108
  - !ruby/object:Gem::Version
138
- version: '0'
109
+ version: '2.1'
139
110
  - !ruby/object:Gem::Dependency
140
- name: psych
111
+ name: rdoc
141
112
  requirement: !ruby/object:Gem::Requirement
142
113
  requirements:
143
- - - ">="
114
+ - - "~>"
144
115
  - !ruby/object:Gem::Version
145
- version: '0'
116
+ version: '7.1'
146
117
  type: :development
147
118
  prerelease: false
148
119
  version_requirements: !ruby/object:Gem::Requirement
149
120
  requirements:
150
- - - ">="
121
+ - - "~>"
151
122
  - !ruby/object:Gem::Version
152
- version: '0'
123
+ version: '7.1'
153
124
  - !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
125
+ name: simplecov
197
126
  requirement: !ruby/object:Gem::Requirement
198
127
  requirements:
199
- - - ">="
128
+ - - "~>"
200
129
  - !ruby/object:Gem::Version
201
- version: '0'
130
+ version: '0.22'
202
131
  type: :development
203
132
  prerelease: false
204
133
  version_requirements: !ruby/object:Gem::Requirement
205
134
  requirements:
206
- - - ">="
135
+ - - "~>"
207
136
  - !ruby/object:Gem::Version
208
- version: '0'
137
+ version: '0.22'
209
138
  - !ruby/object:Gem::Dependency
210
- name: simplecov
139
+ name: simplecov_json_formatter
211
140
  requirement: !ruby/object:Gem::Requirement
212
141
  requirements:
213
- - - ">="
142
+ - - "~>"
214
143
  - !ruby/object:Gem::Version
215
- version: '0'
144
+ version: '0.1'
216
145
  type: :development
217
146
  prerelease: false
218
147
  version_requirements: !ruby/object:Gem::Requirement
219
148
  requirements:
220
- - - ">="
149
+ - - "~>"
221
150
  - !ruby/object:Gem::Version
222
- version: '0'
151
+ version: '0.1'
223
152
  - !ruby/object:Gem::Dependency
224
153
  name: yard
225
154
  requirement: !ruby/object:Gem::Requirement
226
155
  requirements:
227
- - - ">="
156
+ - - "~>"
228
157
  - !ruby/object:Gem::Version
229
- version: '0'
158
+ version: '0.9'
230
159
  type: :development
231
160
  prerelease: false
232
161
  version_requirements: !ruby/object:Gem::Requirement
233
162
  requirements:
234
- - - ">="
163
+ - - "~>"
235
164
  - !ruby/object:Gem::Version
236
- version: '0'
237
- description: Provides a unified approach to managing automated code quality tools.
165
+ version: '0.9'
166
+ description: Run tests, linters, security audits, and formatters with a single command.
167
+ Reviewer wraps your code quality tools into a consistent interface with git-aware
168
+ file targeting, auto-detection, and multiple output formats.
238
169
  email:
239
170
  - email@garrettdimon.com
240
171
  executables:
@@ -245,9 +176,12 @@ extra_rdoc_files: []
245
176
  files:
246
177
  - ".alexignore"
247
178
  - ".flayignore"
179
+ - ".github/FUNDING.yml"
248
180
  - ".github/workflows/main.yml"
181
+ - ".github/workflows/release.yml"
249
182
  - ".gitignore"
250
183
  - ".inch.yml"
184
+ - ".reek.yml"
251
185
  - ".reviewer.example.yml"
252
186
  - ".reviewer.future.yml"
253
187
  - ".reviewer.yml"
@@ -259,9 +193,11 @@ files:
259
193
  - Gemfile.lock
260
194
  - LICENSE.txt
261
195
  - README.md
196
+ - RELEASING.md
262
197
  - Rakefile
263
198
  - bin/console
264
199
  - bin/setup
200
+ - dependency_decisions.yml
265
201
  - exe/fmt
266
202
  - exe/rvw
267
203
  - lib/reviewer.rb
@@ -270,30 +206,55 @@ files:
270
206
  - lib/reviewer/arguments/keywords.rb
271
207
  - lib/reviewer/arguments/tags.rb
272
208
  - lib/reviewer/batch.rb
209
+ - lib/reviewer/batch/formatter.rb
210
+ - lib/reviewer/capabilities.rb
273
211
  - lib/reviewer/command.rb
274
212
  - lib/reviewer/command/string.rb
275
213
  - lib/reviewer/command/string/env.rb
276
214
  - lib/reviewer/command/string/flags.rb
277
215
  - lib/reviewer/configuration.rb
278
- - lib/reviewer/conversions.rb
279
- - lib/reviewer/guidance.rb
216
+ - lib/reviewer/configuration/loader.rb
217
+ - lib/reviewer/context.rb
218
+ - lib/reviewer/doctor.rb
219
+ - lib/reviewer/doctor/config_check.rb
220
+ - lib/reviewer/doctor/environment_check.rb
221
+ - lib/reviewer/doctor/formatter.rb
222
+ - lib/reviewer/doctor/keyword_check.rb
223
+ - lib/reviewer/doctor/opportunity_check.rb
224
+ - lib/reviewer/doctor/report.rb
225
+ - lib/reviewer/doctor/tool_inventory.rb
280
226
  - lib/reviewer/history.rb
281
- - lib/reviewer/keywords.rb
282
- - lib/reviewer/keywords/git.rb
283
- - lib/reviewer/keywords/git/staged.rb
284
- - lib/reviewer/loader.rb
285
227
  - lib/reviewer/output.rb
228
+ - lib/reviewer/output/formatting.rb
286
229
  - lib/reviewer/output/printer.rb
287
- - lib/reviewer/output/scrubber.rb
288
- - lib/reviewer/output/token.rb
230
+ - lib/reviewer/prompt.rb
231
+ - lib/reviewer/report.rb
232
+ - lib/reviewer/report/formatter.rb
289
233
  - lib/reviewer/runner.rb
234
+ - lib/reviewer/runner/failed_files.rb
235
+ - lib/reviewer/runner/formatter.rb
236
+ - lib/reviewer/runner/guidance.rb
237
+ - lib/reviewer/runner/result.rb
290
238
  - lib/reviewer/runner/strategies/captured.rb
291
239
  - lib/reviewer/runner/strategies/passthrough.rb
240
+ - lib/reviewer/session.rb
241
+ - lib/reviewer/session/formatter.rb
242
+ - lib/reviewer/setup.rb
243
+ - lib/reviewer/setup/catalog.rb
244
+ - lib/reviewer/setup/detector.rb
245
+ - lib/reviewer/setup/formatter.rb
246
+ - lib/reviewer/setup/gemfile_lock.rb
247
+ - lib/reviewer/setup/generator.rb
248
+ - lib/reviewer/setup/tool_block.rb
292
249
  - lib/reviewer/shell.rb
293
250
  - lib/reviewer/shell/result.rb
294
251
  - lib/reviewer/shell/timer.rb
295
252
  - lib/reviewer/tool.rb
253
+ - lib/reviewer/tool/conversions.rb
254
+ - lib/reviewer/tool/file_resolver.rb
296
255
  - lib/reviewer/tool/settings.rb
256
+ - lib/reviewer/tool/test_file_mapper.rb
257
+ - lib/reviewer/tool/timing.rb
297
258
  - lib/reviewer/tools.rb
298
259
  - lib/reviewer/version.rb
299
260
  - reviewer.gemspec
@@ -309,7 +270,6 @@ metadata:
309
270
  source_code_uri: https://github.com/garrettdimon/reviewer
310
271
  wiki_uri: https://github.com/garrettdimon/reviewer/wiki
311
272
  rubygems_mfa_required: 'true'
312
- post_install_message:
313
273
  rdoc_options: []
314
274
  require_paths:
315
275
  - lib
@@ -317,15 +277,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
317
277
  requirements:
318
278
  - - ">="
319
279
  - !ruby/object:Gem::Version
320
- version: 2.5.9
280
+ version: '3.2'
321
281
  required_rubygems_version: !ruby/object:Gem::Requirement
322
282
  requirements:
323
283
  - - ">="
324
284
  - !ruby/object:Gem::Version
325
285
  version: '0'
326
286
  requirements: []
327
- rubygems_version: 3.2.32
328
- signing_key:
287
+ rubygems_version: 3.6.9
329
288
  specification_version: 4
330
- summary: Provides a unified approach to managing automated code quality tools.
289
+ summary: Frictionless code quality. One command for all your review tools.
331
290
  test_files: []
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Reviewer
4
- # Conversion functions for special types in Reviewer
5
- module Conversions
6
- def Tool(value) # rubocop:disable Naming/MethodName
7
- case value
8
- when Tool then value
9
- when Symbol then Tool.new(value)
10
- when String then Tool.new(value.to_sym)
11
- else raise TypeError, "Cannot convert #{value} to Tool"
12
- end
13
- end
14
- module_function :Tool
15
- end
16
- end
@@ -1,77 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'yaml/store'
4
-
5
- module Reviewer
6
- # Handles the logic around what to display after a command has been run
7
- class Guidance
8
- attr_reader :command, :result, :output
9
-
10
- # Create an instance of guidance for suggesting recovery steps after errors
11
- # @param command: [Command] the command that was run and needs recovery guidance
12
- # @param result: [Result] the result of the command
13
- # @param output: Reviewer.output [Output] the output channel for displaying content
14
- #
15
- # @return [Guidance] the guidance class to suggest relevant recovery steps
16
- def initialize(command:, result:, output: Reviewer.output)
17
- @command = command
18
- @result = result
19
- @output = output
20
- end
21
-
22
- # Prints the relevant guidance based on the command and result context
23
- #
24
- # @return [void] prints the relevant guidance to the stream
25
- def show
26
- case result
27
- when executable_not_found? then show_missing_executable_guidance
28
- when cannot_execute? then show_unrecoverable_guidance
29
- else show_syntax_guidance
30
- end
31
- end
32
-
33
- private
34
-
35
- # Conditional check for when the command result was that the executable couldn't be found
36
- #
37
- # @return [Boolean] true if the result indicates the command couldn't be found
38
- def executable_not_found?
39
- ->(result) { result.executable_not_found? }
40
- end
41
-
42
- # Conditional check for when the command result was that it was unable to be executed
43
- #
44
- # @return [Boolean] true if the result indicates the command couldn't be executed
45
- def cannot_execute?
46
- ->(result) { result.cannot_execute? }
47
- end
48
-
49
- # Shows the recovery guidance for when a command is missing
50
- #
51
- # @return [void] prints missing executable guidance
52
- def show_missing_executable_guidance
53
- tool = command.tool
54
- installation_command = Command.new(tool, :install).string if tool.installable?
55
- install_link = tool.install_link
56
-
57
- output.failure("Missing executable for '#{tool}'", command: command)
58
- output.guidance('Try installing the tool:', installation_command)
59
- output.guidance('Read the installation guidance:', install_link)
60
- end
61
-
62
- # Shows the recovery guidance for when a command generates an unrecoverable error
63
- #
64
- # @return [void] prints unrecoverable error guidance
65
- def show_unrecoverable_guidance
66
- output.unrecoverable(result.stderr)
67
- end
68
-
69
- # Shows suggestions for ignoring or disable rules when a command fails after reviewing code
70
- #
71
- # @return [void] prints syntax guidance
72
- def show_syntax_guidance
73
- output.guidance('Selectively Ignore a Rule:', command.tool.links[:ignore_syntax])
74
- output.guidance('Fully Disable a Rule:', command.tool.links[:disable_syntax])
75
- end
76
- end
77
- end
@@ -1,64 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Reviewer
4
- module Keywords
5
- module Git
6
- # Provides a convenient interface to get the list of staged files via Git
7
- class Staged
8
- OPTIONS = [
9
- 'diff',
10
- '--staged',
11
- '--name-only'
12
- ].freeze
13
-
14
- attr_reader :stdout, :stderr, :status, :exit_status
15
-
16
- def to_a
17
- stdout.strip.empty? ? [] : stdout.split("\n")
18
- end
19
-
20
- # Gets the list of staged files
21
- #
22
- # @example Get the list of files
23
- # staged.list #=> ['/Code/example.rb', '/Code/run.rb']
24
- #
25
- # @return [Array<String>] the array of staged filenames as strings
26
- def list
27
- @stdout, @stderr, @status = Open3.capture3(command)
28
- @exit_status = @status.exitstatus.to_i
29
-
30
- @status.success? ? to_a : raise_command_line_error
31
- end
32
-
33
- # Convenience method for retrieving the list of staged files since there's no parameters
34
- # for an initializer.
35
- #
36
- # @example Get the list of files
37
- # Reviewer::Keywords::Git::Staged.list #=> ['/Code/example.rb', '/Code/run.rb']
38
- #
39
- # @return [Array<String>] the array of staged filenames as strings
40
- def self.list
41
- new.list
42
- end
43
-
44
- # Assembles the pieces of the command that gets the list of staged files
45
- #
46
- # @return [String] the full command to run to retrieve the list of staged files
47
- def command
48
- command_parts.join(' ')
49
- end
50
-
51
- private
52
-
53
- def raise_command_line_error
54
- message = "Git Error: #{stderr} (#{command})"
55
- raise SystemCallError.new(message, exit_status)
56
- end
57
-
58
- def command_parts
59
- BASE_COMMAND + OPTIONS
60
- end
61
- end
62
- end
63
- end
64
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'git/staged'
4
-
5
- module Reviewer
6
- module Keywords
7
- module Git
8
- BASE_COMMAND = [
9
- 'git',
10
- '--no-pager'
11
- ].freeze
12
- end
13
- end
14
- end
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'keywords/git'
4
-
5
- module Keywords
6
- # Grouping for individual commands
7
- module Git
8
- end
9
- end
@@ -1,59 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'yaml'
4
-
5
- module Reviewer
6
- # Provides a collection of the configured tools
7
- class Loader
8
- class MissingConfigurationError < StandardError; end
9
-
10
- class InvalidConfigurationError < StandardError; end
11
-
12
- class MissingReviewCommandError < StandardError; end
13
-
14
- attr_reader :configuration, :file
15
-
16
- def initialize(file = Reviewer.configuration.file)
17
- @file = file
18
- @configuration = configuration_hash
19
-
20
- validate_configuration!
21
- end
22
-
23
- def to_h
24
- configuration
25
- end
26
-
27
- def self.configuration
28
- new.configuration
29
- end
30
-
31
- private
32
-
33
- def validate_configuration!
34
- # Any additional guidance for configuration issues will live here
35
- require_review_commands!
36
- end
37
-
38
- def require_review_commands!
39
- configuration.each do |key, value|
40
- commands = value[:commands]
41
-
42
- next if commands.key?(:review)
43
-
44
- # Ideally, folks would want to fill out everything to receive the most benefit,
45
- # but realistically, the 'review' command is the only required value. If the key
46
- # is missing, or maybe there was a typo, fail right away.
47
- raise MissingReviewCommandError, "'#{key}' does not have a 'review' key under 'commands' in `#{file}`"
48
- end
49
- end
50
-
51
- def configuration_hash
52
- @configuration_hash ||= Psych.safe_load_file(@file, symbolize_names: true)
53
- rescue Errno::ENOENT
54
- raise MissingConfigurationError, "Tools configuration file couldn't be found at `#{file}`"
55
- rescue Psych::SyntaxError => e
56
- raise InvalidConfigurationError, "Tools configuration file (#{file}) has a syntax error: #{e.message}"
57
- end
58
- end
59
- end