overcommit 0.56.0 → 0.59.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 (99) hide show
  1. checksums.yaml +4 -4
  2. data/bin/overcommit +6 -5
  3. data/config/default.yml +28 -1
  4. data/lib/overcommit/cli.rb +14 -13
  5. data/lib/overcommit/command_splitter.rb +2 -0
  6. data/lib/overcommit/configuration.rb +1 -1
  7. data/lib/overcommit/configuration_loader.rb +11 -8
  8. data/lib/overcommit/git_config.rb +1 -0
  9. data/lib/overcommit/git_repo.rb +4 -4
  10. data/lib/overcommit/hook/commit_msg/base.rb +1 -1
  11. data/lib/overcommit/hook/commit_msg/spell_check.rb +1 -1
  12. data/lib/overcommit/hook/commit_msg/text_width.rb +1 -1
  13. data/lib/overcommit/hook/post_checkout/base.rb +1 -0
  14. data/lib/overcommit/hook/post_commit/git_guilt.rb +2 -1
  15. data/lib/overcommit/hook/pre_commit/bundle_audit.rb +1 -1
  16. data/lib/overcommit/hook/pre_commit/chamber_compare.rb +5 -5
  17. data/lib/overcommit/hook/pre_commit/chamber_security.rb +1 -0
  18. data/lib/overcommit/hook/pre_commit/coffee_lint.rb +1 -1
  19. data/lib/overcommit/hook/pre_commit/css_lint.rb +1 -1
  20. data/lib/overcommit/hook/pre_commit/dart_analyzer.rb +22 -0
  21. data/lib/overcommit/hook/pre_commit/erb_lint.rb +20 -0
  22. data/lib/overcommit/hook/pre_commit/es_lint.rb +3 -6
  23. data/lib/overcommit/hook/pre_commit/fasterer.rb +1 -1
  24. data/lib/overcommit/hook/pre_commit/foodcritic.rb +3 -1
  25. data/lib/overcommit/hook/pre_commit/hlint.rb +1 -1
  26. data/lib/overcommit/hook/pre_commit/html_tidy.rb +1 -1
  27. data/lib/overcommit/hook/pre_commit/java_checkstyle.rb +1 -1
  28. data/lib/overcommit/hook/pre_commit/js_lint.rb +1 -1
  29. data/lib/overcommit/hook/pre_commit/jsl.rb +1 -1
  30. data/lib/overcommit/hook/pre_commit/kt_lint.rb +1 -1
  31. data/lib/overcommit/hook/pre_commit/license_finder.rb +1 -0
  32. data/lib/overcommit/hook/pre_commit/line_endings.rb +3 -2
  33. data/lib/overcommit/hook/pre_commit/nginx_test.rb +1 -1
  34. data/lib/overcommit/hook/pre_commit/php_cs.rb +1 -1
  35. data/lib/overcommit/hook/pre_commit/php_cs_fixer.rb +1 -1
  36. data/lib/overcommit/hook/pre_commit/php_lint.rb +3 -3
  37. data/lib/overcommit/hook/pre_commit/php_stan.rb +1 -1
  38. data/lib/overcommit/hook/pre_commit/puppet_lint.rb +1 -1
  39. data/lib/overcommit/hook/pre_commit/puppet_metadata_json_lint.rb +1 -1
  40. data/lib/overcommit/hook/pre_commit/pyflakes.rb +1 -1
  41. data/lib/overcommit/hook/pre_commit/pylint.rb +1 -1
  42. data/lib/overcommit/hook/pre_commit/python_flake8.rb +1 -1
  43. data/lib/overcommit/hook/pre_commit/rails_best_practices.rb +1 -1
  44. data/lib/overcommit/hook/pre_commit/rails_schema_up_to_date.rb +2 -2
  45. data/lib/overcommit/hook/pre_commit/rst_lint.rb +1 -1
  46. data/lib/overcommit/hook/pre_commit/scalariform.rb +1 -1
  47. data/lib/overcommit/hook/pre_commit/scalastyle.rb +1 -1
  48. data/lib/overcommit/hook/pre_commit/scss_lint.rb +3 -3
  49. data/lib/overcommit/hook/pre_commit/semi_standard.rb +1 -1
  50. data/lib/overcommit/hook/pre_commit/sqlint.rb +1 -1
  51. data/lib/overcommit/hook/pre_commit/standard.rb +1 -1
  52. data/lib/overcommit/hook/pre_commit/stylelint.rb +2 -1
  53. data/lib/overcommit/hook/pre_commit/swift_lint.rb +1 -1
  54. data/lib/overcommit/hook/pre_commit/ts_lint.rb +4 -4
  55. data/lib/overcommit/hook/pre_commit/w3c_css.rb +4 -4
  56. data/lib/overcommit/hook/pre_commit/w3c_html.rb +4 -4
  57. data/lib/overcommit/hook/pre_commit/xml_lint.rb +1 -1
  58. data/lib/overcommit/hook/pre_commit/yaml_lint.rb +25 -4
  59. data/lib/overcommit/hook/pre_commit/yaml_syntax.rb +7 -3
  60. data/lib/overcommit/hook/pre_commit/yard_coverage.rb +0 -1
  61. data/lib/overcommit/hook/pre_push/cargo_test.rb +1 -0
  62. data/lib/overcommit/hook/pre_push/flutter_test.rb +16 -0
  63. data/lib/overcommit/hook/pre_push/pub_test.rb +16 -0
  64. data/lib/overcommit/hook/prepare_commit_msg/base.rb +1 -0
  65. data/lib/overcommit/hook/prepare_commit_msg/replace_branch.rb +1 -1
  66. data/lib/overcommit/hook/shared/bower_install.rb +1 -0
  67. data/lib/overcommit/hook/shared/bundle_install.rb +1 -0
  68. data/lib/overcommit/hook/shared/composer_install.rb +1 -0
  69. data/lib/overcommit/hook/shared/npm_install.rb +1 -0
  70. data/lib/overcommit/hook/shared/pronto.rb +16 -4
  71. data/lib/overcommit/hook/shared/yarn_install.rb +1 -0
  72. data/lib/overcommit/hook_context/helpers/file_modifications.rb +1 -0
  73. data/lib/overcommit/hook_context/helpers/stash_unstaged_changes.rb +4 -1
  74. data/lib/overcommit/hook_context/post_commit.rb +1 -0
  75. data/lib/overcommit/hook_context/pre_push.rb +1 -0
  76. data/lib/overcommit/hook_context/run_all.rb +1 -0
  77. data/lib/overcommit/hook_context.rb +3 -3
  78. data/lib/overcommit/hook_loader/base.rb +3 -3
  79. data/lib/overcommit/hook_loader/plugin_hook_loader.rb +3 -3
  80. data/lib/overcommit/hook_runner.rb +8 -7
  81. data/lib/overcommit/hook_signer.rb +1 -0
  82. data/lib/overcommit/installer.rb +2 -1
  83. data/lib/overcommit/logger.rb +5 -0
  84. data/lib/overcommit/printer.rb +3 -4
  85. data/lib/overcommit/subprocess.rb +24 -2
  86. data/lib/overcommit/utils/messages_utils.rb +1 -0
  87. data/lib/overcommit/version.rb +1 -1
  88. data/libexec/index-tags +6 -4
  89. data/template-dir/hooks/commit-msg +27 -20
  90. data/template-dir/hooks/overcommit-hook +27 -20
  91. data/template-dir/hooks/post-checkout +27 -20
  92. data/template-dir/hooks/post-commit +27 -20
  93. data/template-dir/hooks/post-merge +27 -20
  94. data/template-dir/hooks/post-rewrite +27 -20
  95. data/template-dir/hooks/pre-commit +27 -20
  96. data/template-dir/hooks/pre-push +27 -20
  97. data/template-dir/hooks/pre-rebase +27 -20
  98. data/template-dir/hooks/prepare-commit-msg +27 -20
  99. metadata +21 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d6ecbb7e4b390f8d17c9058da38464b73f7cec50a87e494430e9c15a9c40ecff
4
- data.tar.gz: f90974df2fe0b918ff8711a228608ad1b312a730abd9ad7c45b02ee512daa496
3
+ metadata.gz: 61c2ae9a910dd7a508c79a08564313b751646bb5bcdfdd1776b8eb5d58836f98
4
+ data.tar.gz: c3c3d555ee1919b68a5fba95f7e0b8a614c97459e71be94501fd822f94cc75e0
5
5
  SHA512:
6
- metadata.gz: a8b55f73d42ca1791bbd6a01281a0adbbe1f57385721d9ec4905e98dd9217480ae5b10ff8e9083048953974d40c97d104f126ca9b514fb05359ba6c402b4bf7b
7
- data.tar.gz: b9263d9c65fbbeaa4cf7a38d5b7c2bb4af6d6ec7abf5e3ee22209a455a3b7529718b6eb9adbc14161539861420242093c7b4c3564e248ce84bc663cfb354899f
6
+ metadata.gz: 3558b41b1158d11ee7d152119bfbd76cb3b205f4221f379d009e9e823c343cd56ceb109d04af2a464e4f4713d577fd1223572fdb8ddacd8641014f99cfa1dfa0
7
+ data.tar.gz: 110d94b41040610061815119882b0ec4ddf67ebe218a410de3d91c3bf6a47a2f5f689828b5a1d477f5b4b2cd3f70f2057c49f6674afaf6c2d0cbedf6bae4bdc1
data/bin/overcommit CHANGED
@@ -18,15 +18,16 @@ if gemfile = YAML.load_file('.overcommit.yml')['gemfile'] rescue nil
18
18
  ensure
19
19
  $stderr = old_stderr
20
20
  end
21
- rescue Bundler::BundlerError => ex
22
- puts "Problem loading '#{gemfile}': #{ex.message}"
23
- puts "Try running:\nbundle install --gemfile=#{gemfile}" if ex.is_a?(Bundler::GemNotFound)
21
+ rescue Bundler::BundlerError => e
22
+ puts "Problem loading '#{gemfile}': #{e.message}"
23
+ puts "Try running:\nbundle install --gemfile=#{gemfile}" if e.is_a?(Bundler::GemNotFound)
24
24
  exit 78 # EX_CONFIG
25
- rescue Gem::LoadError => ex
25
+ rescue Gem::LoadError => e
26
26
  # Handle case where user is executing overcommit without `bundle exec` and
27
27
  # whose local Gemfile has a gem requirement that does not match a gem
28
28
  # requirement of the installed version of Overcommit.
29
- raise unless ex.message =~ /already activated/i
29
+ raise unless e.message =~ /already activated/i
30
+
30
31
  exec('bundle', 'exec', $0, *ARGV)
31
32
  end
32
33
  end
data/config/default.yml CHANGED
@@ -266,6 +266,14 @@ PreCommit:
266
266
  install_command: 'npm install -g csslint'
267
267
  include: '**/*.css'
268
268
 
269
+ DartAnalyzer:
270
+ enabled: false
271
+ description: 'Analyze with dartanalyzer'
272
+ required_executable: 'dartanalyzer'
273
+ flags: []
274
+ include:
275
+ - '**/*.dart'
276
+
269
277
  Dogma:
270
278
  enabled: false
271
279
  description: 'Analyze with dogma'
@@ -275,6 +283,13 @@ PreCommit:
275
283
  - '**/*.ex'
276
284
  - '**/*.exs'
277
285
 
286
+ ErbLint:
287
+ enabled: false
288
+ description: 'Analyze with ERB Lint'
289
+ required_executable: 'erblint'
290
+ install_command: 'bundle install erb_lint'
291
+ include: '**/*.html.erb'
292
+
278
293
  EsLint:
279
294
  enabled: false
280
295
  description: 'Analyze with ESLint'
@@ -688,7 +703,7 @@ PreCommit:
688
703
  enabled: false
689
704
  description: 'Analyze with RuboCop'
690
705
  required_executable: 'rubocop'
691
- flags: ['--format=emacs', '--force-exclusion', '--display-cop-names']
706
+ flags: ['--format=emacs', '--force-exclusion', '--display-cop-names', '--disable-pending-cops']
692
707
  install_command: 'gem install rubocop'
693
708
  include:
694
709
  - '**/*.gemspec'
@@ -1269,6 +1284,12 @@ PrePush:
1269
1284
  flags: ['test']
1270
1285
  include: 'src/**/*.rs'
1271
1286
 
1287
+ FlutterTest:
1288
+ enabled: false
1289
+ description: 'Run flutter test suite'
1290
+ required_executable: 'flutter'
1291
+ flags: ['test']
1292
+
1272
1293
  GitLfs:
1273
1294
  enabled: false
1274
1295
  description: 'Upload files tracked by Git LFS'
@@ -1315,6 +1336,12 @@ PrePush:
1315
1336
  destructive_only: true
1316
1337
  branches: ['master']
1317
1338
 
1339
+ PubTest:
1340
+ enabled: false
1341
+ description: 'Run pub test suite'
1342
+ required_executable: 'pub'
1343
+ flags: ['run', 'test']
1344
+
1318
1345
  Pytest:
1319
1346
  enabled: false
1320
1347
  description: 'Run pytest test suite'
@@ -6,7 +6,7 @@ require 'optparse'
6
6
  module Overcommit
7
7
  # Responsible for parsing command-line options and executing appropriate
8
8
  # application logic based on those options.
9
- class CLI # rubocop:disable ClassLength
9
+ class CLI # rubocop:disable Metrics/ClassLength
10
10
  def initialize(arguments, input, logger)
11
11
  @arguments = arguments
12
12
  @input = input
@@ -29,11 +29,11 @@ module Overcommit
29
29
  when :run_all
30
30
  run_all
31
31
  end
32
- rescue Overcommit::Exceptions::ConfigurationSignatureChanged => ex
33
- puts ex
32
+ rescue Overcommit::Exceptions::ConfigurationSignatureChanged => e
33
+ puts e
34
34
  exit 78 # EX_CONFIG
35
- rescue Overcommit::Exceptions::HookContextLoadError => ex
36
- puts ex
35
+ rescue Overcommit::Exceptions::HookContextLoadError => e
36
+ puts e
37
37
  exit 64 # EX_USAGE
38
38
  end
39
39
 
@@ -52,8 +52,8 @@ module Overcommit
52
52
 
53
53
  # Unconsumed arguments are our targets
54
54
  @options[:targets] = @arguments
55
- rescue OptionParser::InvalidOption => ex
56
- print_help @parser.help, ex
55
+ rescue OptionParser::InvalidOption => e
56
+ print_help @parser.help, e
57
57
  end
58
58
  end
59
59
 
@@ -94,8 +94,9 @@ module Overcommit
94
94
  @options[:force] = true
95
95
  end
96
96
 
97
- opts.on('-r', '--run', 'Run pre-commit hook against all git tracked files') do
97
+ opts.on('-r [hook]', '--run [hook]', 'Run specified hook against all git tracked files. Defaults to `pre_commit`.') do |arg| # rubocop:disable Layout/LineLength
98
98
  @options[:action] = :run_all
99
+ @options[:hook_to_run] = arg ? arg.to_s : 'run-all'
99
100
  end
100
101
  end
101
102
 
@@ -125,11 +126,11 @@ module Overcommit
125
126
  @options[:targets].each do |target|
126
127
  begin
127
128
  Installer.new(log).run(target, @options)
128
- rescue Overcommit::Exceptions::InvalidGitRepo => error
129
- log.warning "Invalid repo #{target}: #{error}"
129
+ rescue Overcommit::Exceptions::InvalidGitRepo => e
130
+ log.warning "Invalid repo #{target}: #{e}"
130
131
  halt 69 # EX_UNAVAILABLE
131
- rescue Overcommit::Exceptions::PreExistingHooks => error
132
- log.warning "Unable to install into #{target}: #{error}"
132
+ rescue Overcommit::Exceptions::PreExistingHooks => e
133
+ log.warning "Unable to install into #{target}: #{e}"
133
134
  halt 73 # EX_CANTCREAT
134
135
  end
135
136
  end
@@ -199,7 +200,7 @@ module Overcommit
199
200
 
200
201
  def run_all
201
202
  empty_stdin = File.open(File::NULL) # pre-commit hooks don't take input
202
- context = Overcommit::HookContext.create('run-all', config, @arguments, empty_stdin)
203
+ context = Overcommit::HookContext.create(@options[:hook_to_run], config, @arguments, empty_stdin) # rubocop:disable Layout/LineLength
203
204
  config.apply_environment!(context, ENV)
204
205
 
205
206
  printer = Overcommit::Printer.new(config, log, context)
@@ -107,8 +107,10 @@ module Overcommit
107
107
 
108
108
  loop do
109
109
  break if index > splittable_args.length - 1
110
+
110
111
  total_bytes += splittable_args[index].bytesize
111
112
  break if total_bytes > byte_limit # Not enough room
113
+
112
114
  index += 1
113
115
  end
114
116
 
@@ -5,7 +5,7 @@ require 'json'
5
5
 
6
6
  module Overcommit
7
7
  # Stores configuration for Overcommit and the hooks it runs.
8
- class Configuration # rubocop:disable ClassLength
8
+ class Configuration # rubocop:disable Metrics/ClassLength
9
9
  # Creates a configuration from the given hash.
10
10
  #
11
11
  # @param hash [Hash] loaded YAML config file as a hash
@@ -24,13 +24,16 @@ module Overcommit
24
24
  # @option logger [Overcommit::Logger]
25
25
  # @return [Overcommit::Configuration]
26
26
  def load_from_file(file, options = {})
27
- hash =
28
- if yaml = YAML.load_file(file)
29
- yaml.to_hash
30
- else
31
- {}
27
+ # Psych 4 introduced breaking behavior that doesn't support aliases by
28
+ # default. Explicitly enable aliases if the option is available.
29
+ yaml =
30
+ begin
31
+ YAML.load_file(file, aliases: true)
32
+ rescue ArgumentError
33
+ YAML.load_file(file)
32
34
  end
33
35
 
36
+ hash = yaml ? yaml.to_hash : {}
34
37
  Overcommit::Configuration.new(hash, options)
35
38
  end
36
39
  end
@@ -72,10 +75,10 @@ module Overcommit
72
75
  config
73
76
  rescue Overcommit::Exceptions::ConfigurationSignatureChanged
74
77
  raise
75
- rescue StandardError => error
78
+ rescue StandardError => e
76
79
  raise Overcommit::Exceptions::ConfigurationError,
77
- "Unable to load configuration from '#{file}': #{error}",
78
- error.backtrace
80
+ "Unable to load configuration from '#{file}': #{e}",
81
+ e.backtrace
79
82
  end
80
83
 
81
84
  private
@@ -16,6 +16,7 @@ module Overcommit
16
16
  def hooks_path
17
17
  path = `git config --get core.hooksPath`.chomp
18
18
  return File.join(Overcommit::Utils.git_dir, 'hooks') if path.empty?
19
+
19
20
  File.absolute_path(path, Dir.pwd)
20
21
  end
21
22
  end
@@ -14,7 +14,7 @@ module Overcommit
14
14
  [^\s]+\s # Ignore old file range
15
15
  \+(\d+)(?:,(\d+))? # Extract range of hunk containing start line and number of lines
16
16
  \s@@.*$
17
- /x
17
+ /x.freeze
18
18
 
19
19
  # Regular expression used to extract information from lines of
20
20
  # `git submodule status` output
@@ -22,7 +22,7 @@ module Overcommit
22
22
  ^\s*(?<prefix>[-+U]?)(?<sha1>\w+)
23
23
  \s(?<path>[^\s]+?)
24
24
  (?:\s\((?<describe>.+)\))?$
25
- /x
25
+ /x.freeze
26
26
 
27
27
  # Struct encapsulating submodule information extracted from the
28
28
  # output of `git submodule status`
@@ -262,9 +262,9 @@ module Overcommit
262
262
  end
263
263
 
264
264
  modules
265
- rescue IniParse::IniParseError => ex
265
+ rescue IniParse::IniParseError => e
266
266
  raise Overcommit::Exceptions::GitSubmoduleError,
267
- "Unable to read submodule information from #{ref}:.gitmodules file: #{ex.message}"
267
+ "Unable to read submodule information from #{ref}:.gitmodules file: #{e.message}"
268
268
  end
269
269
 
270
270
  # Returns the names of all branches containing the given commit.
@@ -9,6 +9,6 @@ module Overcommit::Hook::CommitMsg
9
9
 
10
10
  def_delegators :@context, :empty_message?, :commit_message,
11
11
  :update_commit_message, :commit_message_lines,
12
- :commit_message_file
12
+ :commit_message_file, :modified_lines_in_file
13
13
  end
14
14
  end
@@ -9,7 +9,7 @@ module Overcommit::Hook::CommitMsg
9
9
  class SpellCheck < Base
10
10
  Misspelling = Struct.new(:word, :suggestions)
11
11
 
12
- MISSPELLING_REGEX = /^[&#]\s(?<word>\w+)(?:.+?:\s(?<suggestions>.*))?/
12
+ MISSPELLING_REGEX = /^[&#]\s(?<word>\w+)(?:.+?:\s(?<suggestions>.*))?/.freeze
13
13
 
14
14
  def run
15
15
  result = execute(command + [uncommented_commit_msg_file])
@@ -32,7 +32,7 @@ module Overcommit::Hook::CommitMsg
32
32
  min_subject_width = config['min_subject_width']
33
33
  if subject.length < min_subject_width
34
34
  @errors << "Commit message subject must be >= #{min_subject_width} characters"
35
- return
35
+ nil
36
36
  end
37
37
  end
38
38
 
@@ -16,6 +16,7 @@ module Overcommit::Hook::PostCheckout
16
16
 
17
17
  def enabled?
18
18
  return false if file_checkout? && skip_file_checkout?
19
+
19
20
  super
20
21
  end
21
22
  end
@@ -5,12 +5,13 @@ module Overcommit::Hook::PostCommit
5
5
  #
6
6
  # @see https://www.npmjs.com/package/git-guilt
7
7
  class GitGuilt < Base
8
- PLUS_MINUS_REGEX = /^(.*?)(?:(\++)|(-+))$/
8
+ PLUS_MINUS_REGEX = /^(.*?)(?:(\++)|(-+))$/.freeze
9
9
  GREEN = 32
10
10
  RED = 31
11
11
 
12
12
  def run
13
13
  return :pass if initial_commit?
14
+
14
15
  result = execute(command)
15
16
  return :fail, result.stderr unless result.success?
16
17
 
@@ -17,7 +17,7 @@ module Overcommit::Hook::PreCommit
17
17
  if result.success?
18
18
  :pass
19
19
  else
20
- return [:warn, result.stdout]
20
+ [:warn, result.stdout]
21
21
  end
22
22
  end
23
23
  end
@@ -14,11 +14,11 @@ module Overcommit::Hook::PreCommit
14
14
  next unless second
15
15
 
16
16
  result = execute(
17
- command,
18
- args: [
19
- "--first=#{first.join(' ')}",
20
- "--second=#{second.join(' ')}",
21
- ],
17
+ command,
18
+ args: [
19
+ "--first=#{first.join(' ')}",
20
+ "--second=#{second.join(' ')}",
21
+ ],
22
22
  )
23
23
 
24
24
  unless result.stdout.empty?
@@ -9,6 +9,7 @@ module Overcommit::Hook::PreCommit
9
9
  result = execute(command, args: applicable_files)
10
10
 
11
11
  return :pass if result.stdout.empty?
12
+
12
13
  [:fail, "These settings appear to need to be secured but were not: #{result.stdout}"]
13
14
  end
14
15
  end
@@ -10,7 +10,7 @@ module Overcommit::Hook::PreCommit
10
10
  ,(?<line>\d*),\d*
11
11
  ,(?<type>\w+)
12
12
  ,(?<msg>.+)$
13
- /x
13
+ /x.freeze
14
14
 
15
15
  MESSAGE_TYPE_CATEGORIZER = lambda do |type|
16
16
  type.include?('w') ? :warning : :error
@@ -9,7 +9,7 @@ module Overcommit::Hook::PreCommit
9
9
  ^(?<file>(?:\w:)?[^:]+):\s
10
10
  (?:line\s(?<line>\d+)[^EW]+)?
11
11
  (?<type>Error|Warning)
12
- /x
12
+ /x.freeze
13
13
 
14
14
  def run
15
15
  result = execute(command, args: applicable_files)
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Overcommit::Hook::PreCommit
4
+ # Runs `dartanalyzer` against modified Dart files.
5
+ # @see https://dart.dev/tools/dartanalyzer
6
+ class DartAnalyzer < Base
7
+ MESSAGE_REGEX = /(?<type>.*)•\ (?<message>[^•]+)•\ (?<file>[^:]+):(?<line>\d+):(\d+)\.*/.freeze
8
+
9
+ def run
10
+ result = execute(command, args: applicable_files)
11
+ return :pass if result.success?
12
+
13
+ extract_messages(
14
+ result.stdout.split("\n").grep(MESSAGE_REGEX),
15
+ MESSAGE_REGEX,
16
+ lambda do |type|
17
+ type.include?('error') ? :error : :warning
18
+ end
19
+ )
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Overcommit::Hook::PreCommit
4
+ # Runs `erblint` against any modified ERB files.
5
+ #
6
+ # @see https://github.com/Shopify/erb-lint
7
+ class ErbLint < Base
8
+ MESSAGE_REGEX = /(?<message>.+)\nIn file: (?<file>.+):(?<line>\d+)/.freeze
9
+
10
+ def run
11
+ result = execute(command, args: applicable_files)
12
+ return :pass if result.success?
13
+
14
+ extract_messages(
15
+ result.stdout.split("\n\n")[1..-1],
16
+ MESSAGE_REGEX
17
+ )
18
+ end
19
+ end
20
+ end
@@ -19,20 +19,17 @@ module Overcommit::Hook::PreCommit
19
19
  # @see http://eslint.org/
20
20
  class EsLint < Base
21
21
  def run
22
+ eslint_regex = /^(?<file>[^\s](?:\w:)?[^:]+):[^\d]+(?<line>\d+).*?(?<type>Error|Warning)/
22
23
  result = execute(command, args: applicable_files)
23
24
  output = result.stdout.chomp
24
- messages = output.split("\n").grep(/Warning|Error/)
25
+ messages = output.split("\n").grep(eslint_regex)
25
26
 
26
27
  return [:fail, result.stderr] if messages.empty? && !result.success?
27
28
  return :pass if result.success? && output.empty?
28
29
 
29
30
  # example message:
30
31
  # path/to/file.js: line 1, col 0, Error - Error message (ruleName)
31
- extract_messages(
32
- messages,
33
- /^(?<file>(?:\w:)?[^:]+):[^\d]+(?<line>\d+).*?(?<type>Error|Warning)/,
34
- lambda { |type| type.downcase.to_sym }
35
- )
32
+ extract_messages(messages, eslint_regex, lambda { |type| type.downcase.to_sym })
36
33
  end
37
34
  end
38
35
  end
@@ -12,7 +12,7 @@ module Overcommit::Hook::PreCommit
12
12
  if extract_offense_num(output) == 0
13
13
  :pass
14
14
  else
15
- return [:warn, output]
15
+ [:warn, output]
16
16
  end
17
17
  end
18
18
 
@@ -102,7 +102,7 @@ module Overcommit::Hook::PreCommit
102
102
  if result.success?
103
103
  :pass
104
104
  else
105
- return [:warn, result.stderr + result.stdout]
105
+ [:warn, result.stderr + result.stdout]
106
106
  end
107
107
  end
108
108
 
@@ -137,12 +137,14 @@ module Overcommit::Hook::PreCommit
137
137
 
138
138
  def modified(type)
139
139
  return [] if !config["#{type}_directory"] || config["#{type}_directory"].empty?
140
+
140
141
  @modified ||= {}
141
142
  @modified[type] ||= directories_changed(full_directory_path("#{type}_directory"))
142
143
  end
143
144
 
144
145
  def full_directory_path(config_option)
145
146
  return config[config_option] if config[config_option].start_with?(File::SEPARATOR)
147
+
146
148
  File.absolute_path(File.join(Overcommit::Utils.repo_root, config[config_option]))
147
149
  end
148
150
  end
@@ -10,7 +10,7 @@ module Overcommit::Hook::PreCommit
10
10
  :(?<line>\d+)
11
11
  :\d+
12
12
  :\s*(?<type>\w+)
13
- /x
13
+ /x.freeze
14
14
 
15
15
  MESSAGE_TYPE_CATEGORIZER = lambda do |type|
16
16
  type.include?('W') ? :warning : :error
@@ -10,7 +10,7 @@ module Overcommit::Hook::PreCommit
10
10
  line\s(?<line>\d+)\s
11
11
  column\s(?<col>\d+)\s-\s
12
12
  (?<type>Error|Warning):\s(?<message>.+)$
13
- /x
13
+ /x.freeze
14
14
 
15
15
  def run
16
16
  # example message:
@@ -5,7 +5,7 @@ module Overcommit::Hook::PreCommit
5
5
  #
6
6
  # @see http://checkstyle.sourceforge.net/
7
7
  class JavaCheckstyle < Base
8
- MESSAGE_REGEX = /^(\[(?<type>[^\]]+)\]\s+)?(?<file>(?:\w:)?[^:]+):(?<line>\d+)/
8
+ MESSAGE_REGEX = /^(\[(?<type>[^\]]+)\]\s+)?(?<file>(?:\w:)?[^:]+):(?<line>\d+)/.freeze
9
9
 
10
10
  MESSAGE_TYPE_CATEGORIZER = lambda do |type|
11
11
  %w[WARN INFO].include?(type.to_s) ? :warning : :error
@@ -5,7 +5,7 @@ module Overcommit::Hook::PreCommit
5
5
  #
6
6
  # @see http://www.jslint.com/
7
7
  class JsLint < Base
8
- MESSAGE_REGEX = /(?<file>(?:\w:)?[^:]+):(?<line>\d+)/
8
+ MESSAGE_REGEX = /(?<file>(?:\w:)?[^:]+):(?<line>\d+)/.freeze
9
9
 
10
10
  def run
11
11
  result = execute(command, args: applicable_files)
@@ -5,7 +5,7 @@ module Overcommit::Hook::PreCommit
5
5
  #
6
6
  # @see http://www.javascriptlint.com/
7
7
  class Jsl < Base
8
- MESSAGE_REGEX = /(?<file>(?:\w:)?.+)\((?<line>\d+)\):(?<type>[^:]+)/
8
+ MESSAGE_REGEX = /(?<file>(?:\w:)?.+)\((?<line>\d+)\):(?<type>[^:]+)/.freeze
9
9
 
10
10
  MESSAGE_TYPE_CATEGORIZER = lambda do |type|
11
11
  type.match?(/warning/) ? :warning : :error
@@ -4,7 +4,7 @@ module Overcommit::Hook::PreCommit
4
4
  # Runs `ktlint` against modified Kotlin files.
5
5
  # @see https://github.com/shyiko/ktlint
6
6
  class KtLint < Base
7
- MESSAGE_REGEX = /((?<file>[^:]+):(?<line>\d+):(\d+):(?<message>.+))/
7
+ MESSAGE_REGEX = /((?<file>[^:]+):(?<line>\d+):(\d+):(?<message>.+))/.freeze
8
8
 
9
9
  def run
10
10
  result = execute(command, args: applicable_files)
@@ -7,6 +7,7 @@ module Overcommit::Hook::PreCommit
7
7
  def run
8
8
  result = execute(command)
9
9
  return :pass if result.success?
10
+
10
11
  output = result.stdout + result.stderr
11
12
  [:fail, output]
12
13
  end
@@ -12,14 +12,14 @@ module Overcommit::Hook::PreCommit
12
12
  file = File.open(file_name)
13
13
  begin
14
14
  messages += check_file(file, file_name)
15
- rescue ArgumentError => ex
15
+ rescue ArgumentError => e
16
16
  # File is likely a binary file which this check should ignore, but
17
17
  # print a warning just in case
18
18
  messages << Overcommit::Hook::Message.new(
19
19
  :warning,
20
20
  file_name,
21
21
  file.lineno,
22
- "#{file_name}:#{file.lineno}:#{ex.message}"
22
+ "#{file_name}:#{file.lineno}:#{e.message}"
23
23
  )
24
24
  end
25
25
  end
@@ -59,6 +59,7 @@ module Overcommit::Hook::PreCommit
59
59
  i = info.split.first
60
60
  next if i == 'l/-text' # ignore binary files
61
61
  next if i == "l/#{eol}"
62
+
62
63
  path
63
64
  end.compact
64
65
  end
@@ -5,7 +5,7 @@ module Overcommit::Hook::PreCommit
5
5
  #
6
6
  # @see https://www.nginx.com/resources/wiki/start/topics/tutorials/commandline/
7
7
  class NginxTest < Base
8
- MESSAGE_REGEX = /^nginx: .+ in (?<file>.+):(?<line>\d+)$/
8
+ MESSAGE_REGEX = /^nginx: .+ in (?<file>.+):(?<line>\d+)$/.freeze
9
9
 
10
10
  def run
11
11
  messages = []
@@ -4,7 +4,7 @@ module Overcommit::Hook::PreCommit
4
4
  # Runs `phpcs` against any modified PHP files.
5
5
  class PhpCs < Base
6
6
  # Parse `phpcs` csv mode output
7
- MESSAGE_REGEX = /^\"(?<file>.+)\",(?<line>\d+),\d+,(?<type>.+),\"(?<msg>.+)\"/
7
+ MESSAGE_REGEX = /^\"(?<file>.+)\",(?<line>\d+),\d+,(?<type>.+),\"(?<msg>.+)\"/.freeze
8
8
  MESSAGE_TYPE_CATEGORIZER = lambda do |type|
9
9
  'error'.include?(type) ? :error : :warning
10
10
  end
@@ -3,7 +3,7 @@
3
3
  module Overcommit::Hook::PreCommit
4
4
  # Runs `php-cs-fixer` against any modified PHP files.
5
5
  class PhpCsFixer < Base
6
- MESSAGE_REGEX = /\s+\d+\)\s+(?<file>.*\.php)(?<violated_rules>\s+\(\w+(?:,\s+)?\))?/
6
+ MESSAGE_REGEX = /\s+\d+\)\s+(?<file>.*\.php)(?<violated_rules>\s+\(\w+(?:,\s+)?\))?/.freeze
7
7
 
8
8
  def run
9
9
  messages = []
@@ -4,10 +4,10 @@ module Overcommit::Hook::PreCommit
4
4
  # Runs `php -l` against any modified PHP files.
5
5
  class PhpLint < Base
6
6
  # Sample String
7
- # rubocop:disable Metrics/LineLength
7
+ # rubocop:disable Layout/LineLength
8
8
  # PHP Parse error: syntax error, unexpected 'require_once' (T_REQUIRE_ONCE) in site/sumo.php on line 12
9
- # rubocop:enable Metrics/LineLength
10
- MESSAGE_REGEX = /^(?<type>.+)\:\s+(?<message>.+) in (?<file>.+) on line (?<line>\d+)/
9
+ # rubocop:enable Layout/LineLength
10
+ MESSAGE_REGEX = /^(?<type>.+)\:\s+(?<message>.+) in (?<file>.+) on line (?<line>\d+)/.freeze
11
11
 
12
12
  def run
13
13
  # A list of error messages
@@ -8,7 +8,7 @@ module Overcommit::Hook::PreCommit
8
8
  # https://github.com/phpstan/phpstan/issues/239
9
9
  # https://gist.github.com/edmondscommerce/89695c9cd2584fefdf540fb1c528d2c2
10
10
  class PhpStan < Base
11
- MESSAGE_REGEX = /^(?<file>.+)\:(?<line>\d+)\:(?<message>.+)/
11
+ MESSAGE_REGEX = /^(?<file>.+)\:(?<line>\d+)\:(?<message>.+)/.freeze
12
12
 
13
13
  def run
14
14
  messages = []
@@ -5,7 +5,7 @@ module Overcommit::Hook::PreCommit
5
5
  #
6
6
  # @see http://puppet-lint.com/
7
7
  class PuppetLint < Base
8
- MESSAGE_REGEX = /(?<file>(?:\w:)?.+):(?<line>\d+):\d+:(?<type>\w+)/
8
+ MESSAGE_REGEX = /(?<file>(?:\w:)?.+):(?<line>\d+):\d+:(?<type>\w+)/.freeze
9
9
 
10
10
  MESSAGE_TYPE_CATEGORIZER = lambda do |type|
11
11
  type == 'ERROR' ? :error : :warning