git-lint 6.2.0 → 7.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.adoc +234 -104
  4. data/git-lint.gemspec +12 -12
  5. data/lib/git/lint/analyzer.rb +8 -4
  6. data/lib/git/lint/analyzers/abstract.rb +3 -3
  7. data/lib/git/lint/analyzers/commit_author_capitalization.rb +1 -1
  8. data/lib/git/lint/analyzers/commit_body_bullet_capitalization.rb +1 -1
  9. data/lib/git/lint/analyzers/commit_body_bullet_delimiter.rb +1 -1
  10. data/lib/git/lint/analyzers/{commit_body_single_bullet.rb → commit_body_bullet_only.rb} +4 -4
  11. data/lib/git/lint/analyzers/commit_body_phrase.rb +2 -5
  12. data/lib/git/lint/analyzers/commit_body_presence.rb +3 -3
  13. data/lib/git/lint/analyzers/commit_body_tracker_shorthand.rb +2 -2
  14. data/lib/git/lint/analyzers/commit_body_word_repeat.rb +31 -0
  15. data/lib/git/lint/analyzers/commit_signature.rb +2 -2
  16. data/lib/git/lint/analyzers/commit_subject_prefix.rb +3 -3
  17. data/lib/git/lint/analyzers/commit_subject_suffix.rb +2 -2
  18. data/lib/git/lint/analyzers/commit_subject_word_repeat.rb +20 -0
  19. data/lib/git/lint/analyzers/commit_trailer_collaborator_capitalization.rb +2 -2
  20. data/lib/git/lint/analyzers/commit_trailer_collaborator_email.rb +3 -4
  21. data/lib/git/lint/analyzers/commit_trailer_collaborator_key.rb +4 -6
  22. data/lib/git/lint/analyzers/commit_trailer_collaborator_name.rb +2 -2
  23. data/lib/git/lint/analyzers/commit_trailer_format_key.rb +4 -6
  24. data/lib/git/lint/analyzers/commit_trailer_format_value.rb +4 -4
  25. data/lib/git/lint/analyzers/commit_trailer_issue_key.rb +4 -6
  26. data/lib/git/lint/analyzers/commit_trailer_issue_value.rb +4 -4
  27. data/lib/git/lint/analyzers/commit_trailer_milestone_key.rb +33 -0
  28. data/lib/git/lint/analyzers/commit_trailer_milestone_value.rb +35 -0
  29. data/lib/git/lint/analyzers/commit_trailer_order.rb +38 -0
  30. data/lib/git/lint/analyzers/commit_trailer_reviewer_key.rb +33 -0
  31. data/lib/git/lint/analyzers/commit_trailer_reviewer_value.rb +35 -0
  32. data/lib/git/lint/analyzers/commit_trailer_signer_capitalization.rb +2 -2
  33. data/lib/git/lint/analyzers/commit_trailer_signer_email.rb +3 -4
  34. data/lib/git/lint/analyzers/commit_trailer_signer_key.rb +4 -4
  35. data/lib/git/lint/analyzers/commit_trailer_signer_name.rb +2 -2
  36. data/lib/git/lint/analyzers/commit_trailer_tracker_key.rb +4 -6
  37. data/lib/git/lint/analyzers/commit_trailer_tracker_value.rb +4 -4
  38. data/lib/git/lint/commits/{systems → hosts}/circle_ci.rb +2 -2
  39. data/lib/git/lint/commits/{systems → hosts}/container.rb +2 -2
  40. data/lib/git/lint/commits/{systems → hosts}/git_hub_action.rb +2 -2
  41. data/lib/git/lint/commits/{systems → hosts}/import.rb +1 -1
  42. data/lib/git/lint/commits/{systems → hosts}/local.rb +2 -2
  43. data/lib/git/lint/commits/{systems → hosts}/netlify_ci.rb +2 -2
  44. data/lib/git/lint/commits/loader.rb +6 -6
  45. data/lib/git/lint/configuration/contract.rb +19 -11
  46. data/lib/git/lint/configuration/defaults.yml +43 -22
  47. data/lib/git/lint/configuration/model.rb +19 -11
  48. data/lib/git/lint/configuration/trailer.rb +10 -0
  49. data/lib/git/lint/container.rb +28 -6
  50. data/lib/git/lint/errors/severity.rb +6 -1
  51. data/lib/git/lint/kit/filter_list.rb +9 -4
  52. data/lib/git/lint/reporters/branch.rb +5 -5
  53. data/lib/git/lint/validators/name.rb +2 -2
  54. data/lib/git/lint/validators/repeated_word.rb +36 -0
  55. data/lib/git/lint.rb +3 -1
  56. data.tar.gz.sig +0 -0
  57. metadata +40 -32
  58. metadata.gz.sig +0 -0
  59. data/lib/git/lint/analyzers/commit_body_bullet.rb +0 -34
@@ -15,11 +15,33 @@ module Git
15
15
  extend Dry::Container::Mixin
16
16
 
17
17
  namespace :trailers do
18
- register(:collaborator, memoize: true) { /\ACo.*Authored.*By.*\Z/i }
19
- register(:format, memoize: true) { /\AFormat.*\Z/i }
20
- register(:issue, memoize: true) { /\AIssue.*\Z/i }
21
- register(:signer, memoize: true) { /\ASigned.*By.*\Z/i }
22
- register(:tracker, memoize: true) { /\ATracker.*\Z/i }
18
+ register :collaborator, memoize: true do
19
+ Configuration::Trailer[name: "Co-authored-by", pattern: /\ACo.*authored.*by.*\Z/i]
20
+ end
21
+
22
+ register :format, memoize: true do
23
+ Configuration::Trailer[name: "Format", pattern: /\AFormat.*\Z/i]
24
+ end
25
+
26
+ register :issue, memoize: true do
27
+ Configuration::Trailer[name: "Issue", pattern: /\AIssue.*\Z/i]
28
+ end
29
+
30
+ register :milestone, memoize: true do
31
+ Configuration::Trailer[name: "Milestone", pattern: /\AMilestone.*\Z/i]
32
+ end
33
+
34
+ register :reviewer, memoize: true do
35
+ Configuration::Trailer[name: "Reviewer", pattern: /\AReviewer.*\Z/i]
36
+ end
37
+
38
+ register :signer, memoize: true do
39
+ Configuration::Trailer[name: "Signed-off-by", pattern: /\ASigned.*off.*by.*\Z/i]
40
+ end
41
+
42
+ register :tracker, memoize: true do
43
+ Configuration::Trailer[name: "Tracker", pattern: /\ATracker.*\Z/i]
44
+ end
23
45
  end
24
46
 
25
47
  namespace :parsers do
@@ -27,7 +49,6 @@ module Git
27
49
  end
28
50
 
29
51
  namespace :sanitizers do
30
- register(:email) { Gitt::Sanitizers::Email }
31
52
  register(:signature) { Gitt::Sanitizers::Signature }
32
53
  end
33
54
 
@@ -35,6 +56,7 @@ module Git
35
56
  register(:capitalization, memoize: true) { Validators::Capitalization.new }
36
57
  register(:email, memoize: true) { Validators::Email.new }
37
58
  register(:name, memoize: true) { Validators::Name.new }
59
+ register(:repeated_word, memoize: true) { Validators::RepeatedWord.new }
38
60
  end
39
61
 
40
62
  register :configuration, memoize: true do
@@ -1,12 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "refinements/array"
4
+
3
5
  module Git
4
6
  module Lint
5
7
  module Errors
6
8
  # Categorizes severity errors.
7
9
  class Severity < Base
10
+ using Refinements::Array
11
+
8
12
  def initialize level
9
- super %(Invalid severity level: #{level}. Use: #{Analyzers::Abstract::LEVELS.join ", "}.)
13
+ usage = Analyzers::Abstract::LEVELS.to_usage "or"
14
+ super %(Invalid severity level: #{level}. Use: #{usage}.)
10
15
  end
11
16
  end
12
17
  end
@@ -1,21 +1,26 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "core"
4
+ require "refinements/array"
4
5
 
5
6
  module Git
6
7
  module Lint
7
8
  module Kit
8
9
  # Represents an regular expression list which may be used as an analyzer setting.
9
10
  class FilterList
11
+ using Refinements::Array
12
+
10
13
  def initialize list = Core::EMPTY_ARRAY
11
- @list = Array list
14
+ @list = Array(list).map { |item| Regexp.new item }
12
15
  end
13
16
 
14
- def to_hint = to_regexp.map(&:inspect).join(", ")
17
+ def empty? = list.empty?
18
+
19
+ def to_a = list
15
20
 
16
- def to_regexp = list.map { |item| Regexp.new item }
21
+ alias to_ary to_a
17
22
 
18
- def empty? = list.empty?
23
+ def to_usage(...) = list.to_usage(...)
19
24
 
20
25
  private
21
26
 
@@ -6,7 +6,7 @@ module Git
6
6
  # Reports issues related to a single branch.
7
7
  class Branch
8
8
  include Import[:color]
9
- using ::Refinements::Strings
9
+ using Refinements::String
10
10
 
11
11
  def initialize(collector: Collector.new, **)
12
12
  super(**)
@@ -38,7 +38,7 @@ module Git
38
38
 
39
39
  def commit_total
40
40
  total = collector.total_commits
41
- %(#{total} #{"commit".pluralize "s", count: total} inspected)
41
+ %(#{total} #{"commit".pluralize "s", total} inspected)
42
42
  end
43
43
 
44
44
  def issue_totals
@@ -52,19 +52,19 @@ module Git
52
52
  def issue_total
53
53
  style = collector.errors? ? :red : :yellow
54
54
  total = collector.total_issues
55
- color["#{total} issue".pluralize("s", count: total), style]
55
+ color["#{total} issue".pluralize("s", total), style]
56
56
  end
57
57
 
58
58
  def warning_total
59
59
  style = collector.warnings? ? :yellow : :green
60
60
  total = collector.total_warnings
61
- color["#{total} warning".pluralize("s", count: total), style]
61
+ color["#{total} warning".pluralize("s", total), style]
62
62
  end
63
63
 
64
64
  def error_total
65
65
  style = collector.errors? ? :red : :green
66
66
  total = collector.total_errors
67
- color["#{total} error".pluralize("s", count: total), style]
67
+ color["#{total} error".pluralize("s", total), style]
68
68
  end
69
69
  end
70
70
  end
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "refinements/strings"
3
+ require "refinements/string"
4
4
 
5
5
  module Git
6
6
  module Lint
7
7
  module Validators
8
8
  # Validates the format of names.
9
9
  class Name
10
- using Refinements::Strings
10
+ using Refinements::String
11
11
 
12
12
  DELIMITER = /\s{1}/
13
13
  MINIMUM = 2
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "core"
4
+
5
+ module Git
6
+ module Lint
7
+ module Validators
8
+ # Validates content has no repeated words.
9
+ class RepeatedWord
10
+ PATTERN = /
11
+ \w+(?=\s) # Match word with trailing space.
12
+ | # Or.
13
+ (?<=\s)\w+(?=\s) # Match word between two spaces.
14
+ | # Or.
15
+ (?<=\s)\w+ # Match word with leading space.
16
+ /x
17
+
18
+ def initialize pattern: PATTERN
19
+ @pattern = pattern
20
+ end
21
+
22
+ def call(content) = content ? scan(content) : Core::EMPTY_ARRAY
23
+
24
+ private
25
+
26
+ attr_reader :pattern
27
+
28
+ def scan content
29
+ content.scan(pattern).each_cons(2).with_object [] do |(current, future), repeats|
30
+ repeats.append future if current.casecmp(future).zero?
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
data/lib/git/lint.rb CHANGED
@@ -17,6 +17,8 @@ end
17
17
  module Git
18
18
  # Main namespace.
19
19
  module Lint
20
- def self.loader(registry = Zeitwerk::Registry) = registry.loader_for __FILE__
20
+ def self.loader registry = Zeitwerk::Registry
21
+ @loader ||= registry.loaders.find { |loader| loader.tag == "git-lint" }
22
+ end
21
23
  end
22
24
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git-lint
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.2.0
4
+ version: 7.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brooke Kuhlmann
@@ -35,7 +35,7 @@ cert_chain:
35
35
  3n5C8/6Zh9DYTkpcwPSuIfAga6wf4nXc9m6JAw8AuMLaiWN/r/2s4zJsUHYERJEu
36
36
  gZGm4JqtuSg8pYjPeIJxS960owq+SfuC+jxqmRA54BisFCv/0VOJi7tiJVY=
37
37
  -----END CERTIFICATE-----
38
- date: 2023-10-15 00:00:00.000000000 Z
38
+ date: 2024-01-01 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: cogger
@@ -43,28 +43,28 @@ dependencies:
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: '0.12'
46
+ version: '0.15'
47
47
  type: :runtime
48
48
  prerelease: false
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '0.12'
53
+ version: '0.15'
54
54
  - !ruby/object:Gem::Dependency
55
55
  name: core
56
56
  requirement: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '0.1'
60
+ version: '1.0'
61
61
  type: :runtime
62
62
  prerelease: false
63
63
  version_requirements: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: '0.1'
67
+ version: '1.0'
68
68
  - !ruby/object:Gem::Dependency
69
69
  name: dry-container
70
70
  requirement: !ruby/object:Gem::Requirement
@@ -113,112 +113,112 @@ dependencies:
113
113
  requirements:
114
114
  - - "~>"
115
115
  - !ruby/object:Gem::Version
116
- version: '0.2'
116
+ version: '1.0'
117
117
  type: :runtime
118
118
  prerelease: false
119
119
  version_requirements: !ruby/object:Gem::Requirement
120
120
  requirements:
121
121
  - - "~>"
122
122
  - !ruby/object:Gem::Version
123
- version: '0.2'
123
+ version: '1.0'
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: gitt
126
126
  requirement: !ruby/object:Gem::Requirement
127
127
  requirements:
128
128
  - - "~>"
129
129
  - !ruby/object:Gem::Version
130
- version: '2.0'
130
+ version: '3.0'
131
131
  type: :runtime
132
132
  prerelease: false
133
133
  version_requirements: !ruby/object:Gem::Requirement
134
134
  requirements:
135
135
  - - "~>"
136
136
  - !ruby/object:Gem::Version
137
- version: '2.0'
137
+ version: '3.0'
138
138
  - !ruby/object:Gem::Dependency
139
139
  name: infusible
140
140
  requirement: !ruby/object:Gem::Requirement
141
141
  requirements:
142
142
  - - "~>"
143
143
  - !ruby/object:Gem::Version
144
- version: '2.2'
144
+ version: '3.0'
145
145
  type: :runtime
146
146
  prerelease: false
147
147
  version_requirements: !ruby/object:Gem::Requirement
148
148
  requirements:
149
149
  - - "~>"
150
150
  - !ruby/object:Gem::Version
151
- version: '2.2'
151
+ version: '3.0'
152
152
  - !ruby/object:Gem::Dependency
153
153
  name: refinements
154
154
  requirement: !ruby/object:Gem::Requirement
155
155
  requirements:
156
156
  - - "~>"
157
157
  - !ruby/object:Gem::Version
158
- version: '11.0'
158
+ version: '12.0'
159
159
  type: :runtime
160
160
  prerelease: false
161
161
  version_requirements: !ruby/object:Gem::Requirement
162
162
  requirements:
163
163
  - - "~>"
164
164
  - !ruby/object:Gem::Version
165
- version: '11.0'
165
+ version: '12.0'
166
166
  - !ruby/object:Gem::Dependency
167
167
  name: runcom
168
168
  requirement: !ruby/object:Gem::Requirement
169
169
  requirements:
170
170
  - - "~>"
171
171
  - !ruby/object:Gem::Version
172
- version: '10.0'
172
+ version: '11.0'
173
173
  type: :runtime
174
174
  prerelease: false
175
175
  version_requirements: !ruby/object:Gem::Requirement
176
176
  requirements:
177
177
  - - "~>"
178
178
  - !ruby/object:Gem::Version
179
- version: '10.0'
179
+ version: '11.0'
180
180
  - !ruby/object:Gem::Dependency
181
181
  name: sod
182
182
  requirement: !ruby/object:Gem::Requirement
183
183
  requirements:
184
184
  - - "~>"
185
185
  - !ruby/object:Gem::Version
186
- version: '0.0'
186
+ version: '0.4'
187
187
  type: :runtime
188
188
  prerelease: false
189
189
  version_requirements: !ruby/object:Gem::Requirement
190
190
  requirements:
191
191
  - - "~>"
192
192
  - !ruby/object:Gem::Version
193
- version: '0.0'
193
+ version: '0.4'
194
194
  - !ruby/object:Gem::Dependency
195
195
  name: spek
196
196
  requirement: !ruby/object:Gem::Requirement
197
197
  requirements:
198
198
  - - "~>"
199
199
  - !ruby/object:Gem::Version
200
- version: '2.0'
200
+ version: '3.0'
201
201
  type: :runtime
202
202
  prerelease: false
203
203
  version_requirements: !ruby/object:Gem::Requirement
204
204
  requirements:
205
205
  - - "~>"
206
206
  - !ruby/object:Gem::Version
207
- version: '2.0'
207
+ version: '3.0'
208
208
  - !ruby/object:Gem::Dependency
209
209
  name: tone
210
210
  requirement: !ruby/object:Gem::Requirement
211
211
  requirements:
212
212
  - - "~>"
213
213
  - !ruby/object:Gem::Version
214
- version: '0.3'
214
+ version: '1.0'
215
215
  type: :runtime
216
216
  prerelease: false
217
217
  version_requirements: !ruby/object:Gem::Requirement
218
218
  requirements:
219
219
  - - "~>"
220
220
  - !ruby/object:Gem::Version
221
- version: '0.3'
221
+ version: '1.0'
222
222
  - !ruby/object:Gem::Dependency
223
223
  name: zeitwerk
224
224
  requirement: !ruby/object:Gem::Requirement
@@ -253,20 +253,21 @@ files:
253
253
  - lib/git/lint/analyzers/commit_author_capitalization.rb
254
254
  - lib/git/lint/analyzers/commit_author_email.rb
255
255
  - lib/git/lint/analyzers/commit_author_name.rb
256
- - lib/git/lint/analyzers/commit_body_bullet.rb
257
256
  - lib/git/lint/analyzers/commit_body_bullet_capitalization.rb
258
257
  - lib/git/lint/analyzers/commit_body_bullet_delimiter.rb
258
+ - lib/git/lint/analyzers/commit_body_bullet_only.rb
259
259
  - lib/git/lint/analyzers/commit_body_leading_line.rb
260
260
  - lib/git/lint/analyzers/commit_body_line_length.rb
261
261
  - lib/git/lint/analyzers/commit_body_paragraph_capitalization.rb
262
262
  - lib/git/lint/analyzers/commit_body_phrase.rb
263
263
  - lib/git/lint/analyzers/commit_body_presence.rb
264
- - lib/git/lint/analyzers/commit_body_single_bullet.rb
265
264
  - lib/git/lint/analyzers/commit_body_tracker_shorthand.rb
265
+ - lib/git/lint/analyzers/commit_body_word_repeat.rb
266
266
  - lib/git/lint/analyzers/commit_signature.rb
267
267
  - lib/git/lint/analyzers/commit_subject_length.rb
268
268
  - lib/git/lint/analyzers/commit_subject_prefix.rb
269
269
  - lib/git/lint/analyzers/commit_subject_suffix.rb
270
+ - lib/git/lint/analyzers/commit_subject_word_repeat.rb
270
271
  - lib/git/lint/analyzers/commit_trailer_collaborator_capitalization.rb
271
272
  - lib/git/lint/analyzers/commit_trailer_collaborator_email.rb
272
273
  - lib/git/lint/analyzers/commit_trailer_collaborator_key.rb
@@ -276,6 +277,11 @@ files:
276
277
  - lib/git/lint/analyzers/commit_trailer_format_value.rb
277
278
  - lib/git/lint/analyzers/commit_trailer_issue_key.rb
278
279
  - lib/git/lint/analyzers/commit_trailer_issue_value.rb
280
+ - lib/git/lint/analyzers/commit_trailer_milestone_key.rb
281
+ - lib/git/lint/analyzers/commit_trailer_milestone_value.rb
282
+ - lib/git/lint/analyzers/commit_trailer_order.rb
283
+ - lib/git/lint/analyzers/commit_trailer_reviewer_key.rb
284
+ - lib/git/lint/analyzers/commit_trailer_reviewer_value.rb
279
285
  - lib/git/lint/analyzers/commit_trailer_signer_capitalization.rb
280
286
  - lib/git/lint/analyzers/commit_trailer_signer_email.rb
281
287
  - lib/git/lint/analyzers/commit_trailer_signer_key.rb
@@ -287,16 +293,17 @@ files:
287
293
  - lib/git/lint/cli/actions/hook.rb
288
294
  - lib/git/lint/cli/shell.rb
289
295
  - lib/git/lint/collector.rb
296
+ - lib/git/lint/commits/hosts/circle_ci.rb
297
+ - lib/git/lint/commits/hosts/container.rb
298
+ - lib/git/lint/commits/hosts/git_hub_action.rb
299
+ - lib/git/lint/commits/hosts/import.rb
300
+ - lib/git/lint/commits/hosts/local.rb
301
+ - lib/git/lint/commits/hosts/netlify_ci.rb
290
302
  - lib/git/lint/commits/loader.rb
291
- - lib/git/lint/commits/systems/circle_ci.rb
292
- - lib/git/lint/commits/systems/container.rb
293
- - lib/git/lint/commits/systems/git_hub_action.rb
294
- - lib/git/lint/commits/systems/import.rb
295
- - lib/git/lint/commits/systems/local.rb
296
- - lib/git/lint/commits/systems/netlify_ci.rb
297
303
  - lib/git/lint/configuration/contract.rb
298
304
  - lib/git/lint/configuration/defaults.yml
299
305
  - lib/git/lint/configuration/model.rb
306
+ - lib/git/lint/configuration/trailer.rb
300
307
  - lib/git/lint/container.rb
301
308
  - lib/git/lint/errors/base.rb
302
309
  - lib/git/lint/errors/severity.rb
@@ -313,6 +320,7 @@ files:
313
320
  - lib/git/lint/validators/capitalization.rb
314
321
  - lib/git/lint/validators/email.rb
315
322
  - lib/git/lint/validators/name.rb
323
+ - lib/git/lint/validators/repeated_word.rb
316
324
  homepage: https://alchemists.io/projects/git-lint
317
325
  licenses:
318
326
  - Hippocratic-2.1
@@ -332,14 +340,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
332
340
  requirements:
333
341
  - - "~>"
334
342
  - !ruby/object:Gem::Version
335
- version: '3.2'
343
+ version: '3.3'
336
344
  required_rubygems_version: !ruby/object:Gem::Requirement
337
345
  requirements:
338
346
  - - ">="
339
347
  - !ruby/object:Gem::Version
340
348
  version: '0'
341
349
  requirements: []
342
- rubygems_version: 3.4.20
350
+ rubygems_version: 3.5.3
343
351
  signing_key:
344
352
  specification_version: 4
345
353
  summary: A command line interface for linting Git commits.
metadata.gz.sig CHANGED
Binary file
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Git
4
- module Lint
5
- module Analyzers
6
- # Analyzes commit body for correct bullet point syntax.
7
- class CommitBodyBullet < Abstract
8
- def valid? = commit.body_lines.all? { |line| !invalid_line? line }
9
-
10
- def issue
11
- return {} if valid?
12
-
13
- {
14
- hint: %(Avoid: #{filter_list.to_hint}.),
15
- lines: affected_commit_body_lines
16
- }
17
- end
18
-
19
- protected
20
-
21
- def load_filter_list
22
- Kit::FilterList.new configuration.commits_body_bullet_excludes
23
- end
24
-
25
- # :reek:FeatureEnvy
26
- def invalid_line? line
27
- return false if line.strip.empty?
28
-
29
- !line.match?(/\A(?!\s*#{Regexp.union filter_list.to_regexp}\s+).+\Z/)
30
- end
31
- end
32
- end
33
- end
34
- end