git-lint 2.3.3 → 3.0.2

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 (75) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/LICENSE.adoc +207 -155
  4. data/README.adoc +203 -222
  5. data/{bin → exe}/git-lint +1 -3
  6. data/lib/git/lint/analyzer.rb +76 -0
  7. data/lib/git/lint/analyzers/abstract.rb +8 -18
  8. data/lib/git/lint/analyzers/commit_author_capitalization.rb +3 -9
  9. data/lib/git/lint/analyzers/commit_author_email.rb +3 -9
  10. data/lib/git/lint/analyzers/commit_author_name.rb +5 -14
  11. data/lib/git/lint/analyzers/commit_body_bullet.rb +2 -9
  12. data/lib/git/lint/analyzers/commit_body_bullet_capitalization.rb +2 -9
  13. data/lib/git/lint/analyzers/commit_body_bullet_delimiter.rb +2 -9
  14. data/lib/git/lint/analyzers/commit_body_leading_line.rb +1 -7
  15. data/lib/git/lint/analyzers/commit_body_line_length.rb +4 -11
  16. data/lib/git/lint/analyzers/commit_body_paragraph_capitalization.rb +1 -7
  17. data/lib/git/lint/analyzers/commit_body_phrase.rb +2 -38
  18. data/lib/git/lint/analyzers/commit_body_presence.rb +5 -12
  19. data/lib/git/lint/analyzers/commit_body_single_bullet.rb +2 -9
  20. data/lib/git/lint/analyzers/commit_body_tracker_shorthand.rb +27 -0
  21. data/lib/git/lint/analyzers/commit_subject_length.rb +4 -11
  22. data/lib/git/lint/analyzers/commit_subject_prefix.rb +2 -9
  23. data/lib/git/lint/analyzers/commit_subject_suffix.rb +2 -13
  24. data/lib/git/lint/analyzers/commit_trailer_collaborator_capitalization.rb +3 -12
  25. data/lib/git/lint/analyzers/commit_trailer_collaborator_duplication.rb +3 -11
  26. data/lib/git/lint/analyzers/commit_trailer_collaborator_email.rb +3 -12
  27. data/lib/git/lint/analyzers/commit_trailer_collaborator_key.rb +4 -13
  28. data/lib/git/lint/analyzers/commit_trailer_collaborator_name.rb +5 -15
  29. data/lib/git/lint/cli/actions/analyze/branch.rb +43 -0
  30. data/lib/git/lint/cli/actions/analyze/commit.rb +44 -0
  31. data/lib/git/lint/cli/actions/config.rb +37 -0
  32. data/lib/git/lint/cli/actions/hook.rb +34 -0
  33. data/lib/git/lint/cli/parser.rb +33 -0
  34. data/lib/git/lint/cli/parsers/analyze.rb +40 -0
  35. data/lib/git/lint/cli/parsers/core.rb +72 -0
  36. data/lib/git/lint/cli/shell.rb +56 -0
  37. data/lib/git/lint/collector.rb +3 -4
  38. data/lib/git/lint/commits/container.rb +19 -0
  39. data/lib/git/lint/commits/loader.rb +51 -0
  40. data/lib/git/lint/commits/systems/circle_ci.rb +26 -0
  41. data/lib/git/lint/{branches/environments → commits/systems}/git_hub_action.rb +10 -8
  42. data/lib/git/lint/commits/systems/local.rb +26 -0
  43. data/lib/git/lint/{branches/environments → commits/systems}/netlify_ci.rb +14 -10
  44. data/lib/git/lint/configuration/content.rb +26 -0
  45. data/lib/git/lint/configuration/defaults.yml +118 -0
  46. data/lib/git/lint/configuration/loader.rb +50 -0
  47. data/lib/git/lint/configuration/setting.rb +24 -0
  48. data/lib/git/lint/container.rb +41 -0
  49. data/lib/git/lint/errors/severity.rb +1 -0
  50. data/lib/git/lint/errors/sha.rb +1 -0
  51. data/lib/git/lint/identity.rb +2 -1
  52. data/lib/git/lint/kit/filter_list.rb +1 -1
  53. data/lib/git/lint/parsers/trailers/collaborator.rb +1 -0
  54. data/lib/git/lint/rake/tasks.rb +5 -4
  55. data/lib/git/lint/reporters/branch.rb +12 -6
  56. data/lib/git/lint/reporters/commit.rb +3 -1
  57. data/lib/git/lint/reporters/line.rb +3 -5
  58. data/lib/git/lint/reporters/lines/paragraph.rb +3 -0
  59. data/lib/git/lint/reporters/lines/sentence.rb +3 -0
  60. data/lib/git/lint/reporters/style.rb +3 -1
  61. data/lib/git/lint/validators/capitalization.rb +1 -0
  62. data/lib/git/lint/validators/email.rb +1 -0
  63. data/lib/git/lint/validators/name.rb +1 -0
  64. data/lib/git/lint.rb +18 -47
  65. data.tar.gz.sig +0 -0
  66. metadata +55 -29
  67. metadata.gz.sig +0 -0
  68. data/lib/git/lint/analyzers/commit_body_issue_tracker_link.rb +0 -39
  69. data/lib/git/lint/branches/environments/circle_ci.rb +0 -24
  70. data/lib/git/lint/branches/environments/local.rb +0 -24
  71. data/lib/git/lint/branches/environments/travis_ci.rb +0 -49
  72. data/lib/git/lint/branches/feature.rb +0 -42
  73. data/lib/git/lint/cli.rb +0 -117
  74. data/lib/git/lint/refinements/strings.rb +0 -21
  75. data/lib/git/lint/runner.rb +0 -35
@@ -0,0 +1,118 @@
1
+ :analyzers:
2
+ :commit_author_capitalization:
3
+ :enabled: true
4
+ :severity: :error
5
+ :commit_author_email:
6
+ :enabled: true
7
+ :severity: :error
8
+ :commit_author_name:
9
+ :enabled: true
10
+ :severity: :error
11
+ :minimum: 2
12
+ :commit_body_bullet:
13
+ :enabled: true
14
+ :severity: :error
15
+ :excludes:
16
+ - "\\*"
17
+ - "•"
18
+ :commit_body_bullet_capitalization:
19
+ :enabled: true
20
+ :severity: :error
21
+ :includes: "\\-"
22
+ :commit_body_bullet_delimiter:
23
+ :enabled: true
24
+ :severity: :error
25
+ :includes: "\\-"
26
+ :commit_body_tracker_shorthand:
27
+ :enabled: true
28
+ :severity: :error
29
+ :excludes:
30
+ - "(f|F)ix(es|ed)?\\s\\#\\d+"
31
+ - "(c|C)lose(s|d)?\\s\\#\\d+"
32
+ - "(r|R)esolve(s|d)?\\s\\#\\d+"
33
+ :commit_body_leading_line:
34
+ :enabled: false
35
+ :severity: :warn
36
+ :commit_body_line_length:
37
+ :enabled: true
38
+ :severity: :error
39
+ :maximum: 72
40
+ :commit_body_paragraph_capitalization:
41
+ :enabled: true
42
+ :severity: :error
43
+ :commit_body_phrase:
44
+ :enabled: true
45
+ :severity: :error
46
+ :excludes:
47
+ - "absolutely"
48
+ - "actually"
49
+ - "all intents and purposes"
50
+ - "along the lines"
51
+ - "at this moment in time"
52
+ - "basically"
53
+ - "each and every one"
54
+ - "everyone knows"
55
+ - "fact of the matter"
56
+ - "furthermore"
57
+ - "however"
58
+ - "in due course"
59
+ - "in the end"
60
+ - "last but not least"
61
+ - "matter of fact"
62
+ - "obviously"
63
+ - "of course"
64
+ - "really"
65
+ - "simply"
66
+ - "things being equal"
67
+ - "would like to"
68
+ - "\\beasy\\b"
69
+ - "\\bjust\\b"
70
+ - "\\bquite\\b"
71
+ - "as\\sfar\\sas\\s.+\\sconcerned"
72
+ - "of\\sthe\\s(fact|opinion)\\sthat"
73
+ :commit_body_presence:
74
+ :enabled: false
75
+ :severity: :warn
76
+ :minimum: 1
77
+ :commit_body_single_bullet:
78
+ :enabled: true
79
+ :severity: :error
80
+ :includes: "\\-"
81
+ :commit_subject_length:
82
+ :enabled: true
83
+ :severity: :error
84
+ :maximum: 72
85
+ :commit_subject_prefix:
86
+ :enabled: true
87
+ :severity: :error
88
+ :includes:
89
+ - Fixed
90
+ - Added
91
+ - Updated
92
+ - Removed
93
+ - Refactored
94
+ :commit_subject_suffix:
95
+ :enabled: true
96
+ :severity: :error
97
+ :excludes:
98
+ - "\\."
99
+ - "\\?"
100
+ - "\\!"
101
+ :commit_trailer_collaborator_capitalization:
102
+ :enabled: true
103
+ :severity: :error
104
+ :commit_trailer_collaborator_duplication:
105
+ :enabled: true
106
+ :severity: :error
107
+ :commit_trailer_collaborator_email:
108
+ :enabled: true
109
+ :severity: :error
110
+ :commit_trailer_collaborator_key:
111
+ :enabled: true
112
+ :severity: :error
113
+ :includes:
114
+ - "Co-Authored-By"
115
+ :commit_trailer_collaborator_name:
116
+ :enabled: true
117
+ :severity: :error
118
+ :minimum: 2
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "pathname"
4
+ require "refinements/hashes"
5
+ require "refinements/structs"
6
+ require "runcom"
7
+ require "yaml"
8
+
9
+ module Git
10
+ module Lint
11
+ module Configuration
12
+ # Represents the fully assembled Command Line Interface (CLI) configuration.
13
+ class Loader
14
+ using ::Refinements::Hashes
15
+ using ::Refinements::Structs
16
+
17
+ DEFAULTS = YAML.load_file(Pathname(__dir__).join("defaults.yml")).freeze
18
+ CLIENT = Runcom::Config.new "#{Identity::NAME}/configuration.yml", defaults: DEFAULTS
19
+
20
+ def self.call = new.call
21
+
22
+ def self.with_defaults = new(client: DEFAULTS)
23
+
24
+ def initialize content: Content.new, client: CLIENT, setting: Setting
25
+ @content = content
26
+ @client = client
27
+ @setting = setting
28
+ end
29
+
30
+ def call
31
+ client.to_h
32
+ .then do |defaults|
33
+ content.merge(
34
+ **defaults.except(:analyzers).flatten_keys,
35
+ analyzers: load_analyzer_settings(defaults)
36
+ ).freeze
37
+ end
38
+ end
39
+
40
+ private
41
+
42
+ attr_reader :content, :client, :setting
43
+
44
+ def load_analyzer_settings defaults
45
+ defaults.fetch(:analyzers).map { |id, body| setting[id:, **body] }
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Git
4
+ module Lint
5
+ module Configuration
6
+ # Defines analyzer specific settings.
7
+ Setting = Struct.new(
8
+ :enabled,
9
+ :excludes,
10
+ :id,
11
+ :includes,
12
+ :maximum,
13
+ :minimum,
14
+ :severity,
15
+ keyword_init: true
16
+ ) do
17
+ def initialize *arguments
18
+ super
19
+ freeze
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry-container"
4
+ require "git_plus"
5
+ require "logger"
6
+ require "pastel"
7
+
8
+ module Git
9
+ module Lint
10
+ # Provides a global gem container for injection into other objects.
11
+ module Container
12
+ extend Dry::Container::Mixin
13
+
14
+ register(:configuration) { Configuration::Loader.call }
15
+ register(:repository) { GitPlus::Repository.new }
16
+ register(:colorizer) { Pastel.new enabled: $stdout.tty? }
17
+ register(:kernel) { Kernel }
18
+
19
+ register :log_colors do
20
+ {
21
+ "DEBUG" => self[:colorizer].white.detach,
22
+ "INFO" => self[:colorizer].green.detach,
23
+ "WARN" => self[:colorizer].yellow.detach,
24
+ "ERROR" => self[:colorizer].red.detach,
25
+ "FATAL" => self[:colorizer].white.bold.on_red.detach,
26
+ "ANY" => self[:colorizer].white.bold.detach
27
+ }
28
+ end
29
+
30
+ register :logger do
31
+ Logger.new $stdout,
32
+ level: Logger.const_get(ENV.fetch("LOG_LEVEL", "INFO")),
33
+ formatter: (
34
+ lambda do |severity, _at, _name, message|
35
+ self[:log_colors][severity].call "#{message}\n"
36
+ end
37
+ )
38
+ end
39
+ end
40
+ end
41
+ end
@@ -3,6 +3,7 @@
3
3
  module Git
4
4
  module Lint
5
5
  module Errors
6
+ # Categorizes severity errors.
6
7
  class Severity < Base
7
8
  def initialize level
8
9
  super %(Invalid severity level: #{level}. Use: #{Analyzers::Abstract::LEVELS.join ", "}.)
@@ -3,6 +3,7 @@
3
3
  module Git
4
4
  module Lint
5
5
  module Errors
6
+ # Categorizes commit SHA errors.
6
7
  class SHA < Base
7
8
  def initialize sha
8
9
  super %(Invalid commit SHA: "#{sha}". Unable to obtain commit details.)
@@ -6,8 +6,9 @@ module Git
6
6
  module Identity
7
7
  NAME = "git-lint"
8
8
  LABEL = "Git Lint"
9
- VERSION = "2.3.3"
9
+ VERSION = "3.0.2"
10
10
  VERSION_LABEL = "#{LABEL} #{VERSION}".freeze
11
+ SUMMARY = "A command line interface for linting Git commits."
11
12
  end
12
13
  end
13
14
  end
@@ -3,8 +3,8 @@
3
3
  module Git
4
4
  module Lint
5
5
  module Kit
6
+ # Represents an regular expression list which may be used as an analyzer setting.
6
7
  class FilterList
7
- # Represents an regular expression list which may be used as an analyzer setting.
8
8
  def initialize list = []
9
9
  @list = Array list
10
10
  end
@@ -4,6 +4,7 @@ module Git
4
4
  module Lint
5
5
  module Parsers
6
6
  module Trailers
7
+ # Parses collaborator information within a commit trailer.
7
8
  class Collaborator
8
9
  DEFAULT_KEY_PATTERN = /\ACo.*Authored.*By.*\Z/i
9
10
 
@@ -6,25 +6,26 @@ require "git/lint"
6
6
  module Git
7
7
  module Lint
8
8
  module Rake
9
+ # Defines and installs Rake tasks for use in downstream projects.
9
10
  class Tasks
10
11
  include ::Rake::DSL
11
12
 
12
13
  def self.setup = new.install
13
14
 
14
- def initialize cli: CLI
15
- @cli = cli
15
+ def initialize shell: CLI::Shell.new
16
+ @shell = shell
16
17
  end
17
18
 
18
19
  def install
19
20
  desc "Run Git Lint"
20
21
  task :git_lint do
21
- cli.start ["--analyze"]
22
+ shell.call ["--analyze"]
22
23
  end
23
24
  end
24
25
 
25
26
  private
26
27
 
27
- attr_reader :cli
28
+ attr_reader :shell
28
29
  end
29
30
  end
30
31
  end
@@ -7,7 +7,7 @@ module Git
7
7
  module Reporters
8
8
  # Reports issues related to a single branch.
9
9
  class Branch
10
- using GitPlus::Refinements::Strings
10
+ using ::Refinements::Strings
11
11
 
12
12
  def initialize collector: Collector.new, colorizer: Pastel.new
13
13
  @collector = collector
@@ -19,6 +19,8 @@ module Git
19
19
  "#{commit_total}. #{issue_totals}.\n"
20
20
  end
21
21
 
22
+ alias to_str to_s
23
+
22
24
  private
23
25
 
24
26
  attr_reader :collector, :colorizer
@@ -31,12 +33,13 @@ module Git
31
33
 
32
34
  def commit_report
33
35
  collector.to_h.reduce "" do |details, (commit, analyzers)|
34
- details + Commit.new(commit: commit, analyzers: analyzers).to_s
36
+ details + Commit.new(commit:, analyzers:)
35
37
  end
36
38
  end
37
39
 
38
40
  def commit_total
39
- %(#{"commit".pluralize count: collector.total_commits} inspected)
41
+ total = collector.total_commits
42
+ %(#{total} #{"commit".pluralize "s", count: total} inspected)
40
43
  end
41
44
 
42
45
  def issue_totals
@@ -49,17 +52,20 @@ module Git
49
52
 
50
53
  def issue_total
51
54
  color = collector.errors? ? :red : :yellow
52
- colorizer.public_send color, "issue".pluralize(count: collector.total_issues)
55
+ total = collector.total_issues
56
+ colorizer.public_send color, "#{total} issue".pluralize("s", count: total)
53
57
  end
54
58
 
55
59
  def warning_total
56
60
  color = collector.warnings? ? :yellow : :green
57
- colorizer.public_send color, "warning".pluralize(count: collector.total_warnings)
61
+ total = collector.total_warnings
62
+ colorizer.public_send color, "#{total} warning".pluralize("s", count: total)
58
63
  end
59
64
 
60
65
  def error_total
61
66
  color = collector.errors? ? :red : :green
62
- colorizer.public_send color, "error".pluralize(count: collector.total_errors)
67
+ total = collector.total_errors
68
+ colorizer.public_send color, "#{total} error".pluralize("s", count: total)
63
69
  end
64
70
  end
65
71
  end
@@ -17,11 +17,13 @@ module Git
17
17
  "#{commit.subject}\n#{report}\n"
18
18
  end
19
19
 
20
+ alias to_str to_s
21
+
20
22
  private
21
23
 
22
24
  attr_reader :commit, :analyzers
23
25
 
24
- def report = analyzers.reduce("") { |report, analyzer| report + Style.new(analyzer).to_s }
26
+ def report = analyzers.reduce("") { |report, analyzer| report + Style.new(analyzer) }
25
27
  end
26
28
  end
27
29
  end
@@ -12,13 +12,11 @@ module Git
12
12
  end
13
13
 
14
14
  def to_s
15
- if content.include? "\n"
16
- Lines::Paragraph.new(data).to_s
17
- else
18
- Lines::Sentence.new(data).to_s
19
- end
15
+ content.include?("\n") ? Lines::Paragraph.new(data).to_s : Lines::Sentence.new(data).to_s
20
16
  end
21
17
 
18
+ alias to_str to_s
19
+
22
20
  private
23
21
 
24
22
  attr_reader :data
@@ -4,6 +4,7 @@ module Git
4
4
  module Lint
5
5
  module Reporters
6
6
  module Lines
7
+ # Reports paragraph details.
7
8
  class Paragraph
8
9
  def initialize data = {}
9
10
  @data = data
@@ -13,6 +14,8 @@ module Git
13
14
  %(#{label}"#{paragraph}"\n)
14
15
  end
15
16
 
17
+ alias to_str to_s
18
+
16
19
  private
17
20
 
18
21
  attr_reader :data
@@ -4,6 +4,7 @@ module Git
4
4
  module Lint
5
5
  module Reporters
6
6
  module Lines
7
+ # Reports sentence details.
7
8
  class Sentence
8
9
  def initialize data = {}
9
10
  @data = data
@@ -11,6 +12,8 @@ module Git
11
12
 
12
13
  def to_s = %(#{Line::DEFAULT_INDENT}Line #{number}: "#{content}"\n)
13
14
 
15
+ alias to_str to_s
16
+
14
17
  private
15
18
 
16
19
  attr_reader :data
@@ -15,6 +15,8 @@ module Git
15
15
 
16
16
  def to_s = colorizer.public_send(color, message)
17
17
 
18
+ alias to_str to_s
19
+
18
20
  private
19
21
 
20
22
  attr_reader :analyzer, :issue, :colorizer
@@ -42,7 +44,7 @@ module Git
42
44
  end
43
45
 
44
46
  def affected_lines
45
- issue.fetch(:lines, []).reduce("") { |lines, line| lines + Line.new(line).to_s }
47
+ issue.fetch(:lines, []).reduce("") { |lines, line| lines + Line.new(line) }
46
48
  end
47
49
  end
48
50
  end
@@ -3,6 +3,7 @@
3
3
  module Git
4
4
  module Lint
5
5
  module Validators
6
+ # Validates the capitalizationn of text.
6
7
  class Capitalization
7
8
  DEFAULT_PATTERN = /\A[[:upper:]].*\Z/
8
9
 
@@ -5,6 +5,7 @@ require "uri"
5
5
  module Git
6
6
  module Lint
7
7
  module Validators
8
+ # Validates the format of email addresses.
8
9
  class Email
9
10
  def initialize text, pattern: URI::MailTo::EMAIL_REGEXP
10
11
  @text = text
@@ -3,6 +3,7 @@
3
3
  module Git
4
4
  module Lint
5
5
  module Validators
6
+ # Validates the format of names.
6
7
  class Name
7
8
  DEFAULT_DELIMITER = /\s{1}/
8
9
  DEFAULT_MINIMUM = 2
data/lib/git/lint.rb CHANGED
@@ -1,50 +1,21 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "zeitwerk"
3
4
  require "git_plus"
4
- require "git/lint/identity"
5
- require "git/lint/refinements/strings"
6
- require "git/lint/errors/base"
7
- require "git/lint/errors/severity"
8
- require "git/lint/errors/sha"
9
- require "git/lint/kit/filter_list"
10
- require "git/lint/validators/email"
11
- require "git/lint/validators/name"
12
- require "git/lint/validators/capitalization"
13
- require "git/lint/parsers/trailers/collaborator"
14
- require "git/lint/branches/environments/local"
15
- require "git/lint/branches/environments/circle_ci"
16
- require "git/lint/branches/environments/git_hub_action"
17
- require "git/lint/branches/environments/netlify_ci"
18
- require "git/lint/branches/environments/travis_ci"
19
- require "git/lint/branches/feature"
20
- require "git/lint/analyzers/abstract"
21
- require "git/lint/analyzers/commit_author_capitalization"
22
- require "git/lint/analyzers/commit_author_email"
23
- require "git/lint/analyzers/commit_author_name"
24
- require "git/lint/analyzers/commit_body_bullet"
25
- require "git/lint/analyzers/commit_body_bullet_capitalization"
26
- require "git/lint/analyzers/commit_body_bullet_delimiter"
27
- require "git/lint/analyzers/commit_body_issue_tracker_link"
28
- require "git/lint/analyzers/commit_body_leading_line"
29
- require "git/lint/analyzers/commit_body_line_length"
30
- require "git/lint/analyzers/commit_body_paragraph_capitalization"
31
- require "git/lint/analyzers/commit_body_phrase"
32
- require "git/lint/analyzers/commit_body_presence"
33
- require "git/lint/analyzers/commit_body_single_bullet"
34
- require "git/lint/analyzers/commit_subject_length"
35
- require "git/lint/analyzers/commit_subject_prefix"
36
- require "git/lint/analyzers/commit_subject_suffix"
37
- require "git/lint/analyzers/commit_trailer_collaborator_capitalization"
38
- require "git/lint/analyzers/commit_trailer_collaborator_duplication"
39
- require "git/lint/analyzers/commit_trailer_collaborator_email"
40
- require "git/lint/analyzers/commit_trailer_collaborator_key"
41
- require "git/lint/analyzers/commit_trailer_collaborator_name"
42
- require "git/lint/collector"
43
- require "git/lint/reporters/lines/sentence"
44
- require "git/lint/reporters/lines/paragraph"
45
- require "git/lint/reporters/line"
46
- require "git/lint/reporters/style"
47
- require "git/lint/reporters/commit"
48
- require "git/lint/reporters/branch"
49
- require "git/lint/runner"
50
- require "git/lint/cli"
5
+
6
+ Zeitwerk::Loader.new.then do |loader|
7
+ loader.inflector.inflect "cli" => "CLI",
8
+ "sha" => "SHA",
9
+ "circle_ci" => "CircleCI",
10
+ "netlify_ci" => "NetlifyCI",
11
+ "travis_ci" => "TravisCI"
12
+ loader.push_dir "#{__dir__}/.."
13
+ loader.ignore "#{__dir__}/lint/rake"
14
+ loader.setup
15
+ end
16
+
17
+ module Git
18
+ # Main namespace.
19
+ module Lint
20
+ end
21
+ end
data.tar.gz.sig CHANGED
Binary file