overcommit-jeygeethanmedia 0.53.1

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 (226) hide show
  1. checksums.yaml +7 -0
  2. data/bin/overcommit +50 -0
  3. data/config/default.yml +1356 -0
  4. data/config/starter.yml +33 -0
  5. data/lib/overcommit.rb +26 -0
  6. data/lib/overcommit/cli.rb +223 -0
  7. data/lib/overcommit/command_splitter.rb +146 -0
  8. data/lib/overcommit/configuration.rb +350 -0
  9. data/lib/overcommit/configuration_loader.rb +96 -0
  10. data/lib/overcommit/configuration_validator.rb +186 -0
  11. data/lib/overcommit/constants.rb +12 -0
  12. data/lib/overcommit/exceptions.rb +52 -0
  13. data/lib/overcommit/git_config.rb +22 -0
  14. data/lib/overcommit/git_repo.rb +286 -0
  15. data/lib/overcommit/git_version.rb +17 -0
  16. data/lib/overcommit/hook/base.rb +294 -0
  17. data/lib/overcommit/hook/commit_msg/base.rb +14 -0
  18. data/lib/overcommit/hook/commit_msg/capitalized_subject.rb +25 -0
  19. data/lib/overcommit/hook/commit_msg/empty_message.rb +12 -0
  20. data/lib/overcommit/hook/commit_msg/gerrit_change_id.rb +22 -0
  21. data/lib/overcommit/hook/commit_msg/hard_tabs.rb +17 -0
  22. data/lib/overcommit/hook/commit_msg/message_format.rb +31 -0
  23. data/lib/overcommit/hook/commit_msg/russian_novel.rb +16 -0
  24. data/lib/overcommit/hook/commit_msg/single_line_subject.rb +16 -0
  25. data/lib/overcommit/hook/commit_msg/spell_check.rb +45 -0
  26. data/lib/overcommit/hook/commit_msg/text_width.rb +56 -0
  27. data/lib/overcommit/hook/commit_msg/trailing_period.rb +16 -0
  28. data/lib/overcommit/hook/post_checkout/base.rb +22 -0
  29. data/lib/overcommit/hook/post_checkout/bower_install.rb +13 -0
  30. data/lib/overcommit/hook/post_checkout/bundle_install.rb +13 -0
  31. data/lib/overcommit/hook/post_checkout/composer_install.rb +13 -0
  32. data/lib/overcommit/hook/post_checkout/index_tags.rb +12 -0
  33. data/lib/overcommit/hook/post_checkout/npm_install.rb +13 -0
  34. data/lib/overcommit/hook/post_checkout/submodule_status.rb +12 -0
  35. data/lib/overcommit/hook/post_checkout/yarn_install.rb +13 -0
  36. data/lib/overcommit/hook/post_commit/base.rb +12 -0
  37. data/lib/overcommit/hook/post_commit/bower_install.rb +13 -0
  38. data/lib/overcommit/hook/post_commit/bundle_install.rb +13 -0
  39. data/lib/overcommit/hook/post_commit/commitplease.rb +16 -0
  40. data/lib/overcommit/hook/post_commit/composer_install.rb +13 -0
  41. data/lib/overcommit/hook/post_commit/git_guilt.rb +43 -0
  42. data/lib/overcommit/hook/post_commit/index_tags.rb +12 -0
  43. data/lib/overcommit/hook/post_commit/npm_install.rb +13 -0
  44. data/lib/overcommit/hook/post_commit/submodule_status.rb +12 -0
  45. data/lib/overcommit/hook/post_commit/yarn_install.rb +13 -0
  46. data/lib/overcommit/hook/post_merge/base.rb +12 -0
  47. data/lib/overcommit/hook/post_merge/bower_install.rb +13 -0
  48. data/lib/overcommit/hook/post_merge/bundle_install.rb +13 -0
  49. data/lib/overcommit/hook/post_merge/composer_install.rb +13 -0
  50. data/lib/overcommit/hook/post_merge/index_tags.rb +12 -0
  51. data/lib/overcommit/hook/post_merge/npm_install.rb +13 -0
  52. data/lib/overcommit/hook/post_merge/submodule_status.rb +12 -0
  53. data/lib/overcommit/hook/post_merge/yarn_install.rb +13 -0
  54. data/lib/overcommit/hook/post_rewrite/base.rb +12 -0
  55. data/lib/overcommit/hook/post_rewrite/bower_install.rb +13 -0
  56. data/lib/overcommit/hook/post_rewrite/bundle_install.rb +13 -0
  57. data/lib/overcommit/hook/post_rewrite/composer_install.rb +13 -0
  58. data/lib/overcommit/hook/post_rewrite/index_tags.rb +19 -0
  59. data/lib/overcommit/hook/post_rewrite/npm_install.rb +13 -0
  60. data/lib/overcommit/hook/post_rewrite/submodule_status.rb +12 -0
  61. data/lib/overcommit/hook/post_rewrite/yarn_install.rb +13 -0
  62. data/lib/overcommit/hook/pre_commit/author_email.rb +26 -0
  63. data/lib/overcommit/hook/pre_commit/author_name.rb +25 -0
  64. data/lib/overcommit/hook/pre_commit/base.rb +19 -0
  65. data/lib/overcommit/hook/pre_commit/berksfile_check.rb +24 -0
  66. data/lib/overcommit/hook/pre_commit/broken_symlinks.rb +17 -0
  67. data/lib/overcommit/hook/pre_commit/bundle_audit.rb +24 -0
  68. data/lib/overcommit/hook/pre_commit/bundle_check.rb +32 -0
  69. data/lib/overcommit/hook/pre_commit/bundle_outdated.rb +25 -0
  70. data/lib/overcommit/hook/pre_commit/case_conflicts.rb +27 -0
  71. data/lib/overcommit/hook/pre_commit/chamber_compare.rb +43 -0
  72. data/lib/overcommit/hook/pre_commit/chamber_security.rb +15 -0
  73. data/lib/overcommit/hook/pre_commit/chamber_verification.rb +36 -0
  74. data/lib/overcommit/hook/pre_commit/code_spell_check.rb +36 -0
  75. data/lib/overcommit/hook/pre_commit/coffee_lint.rb +35 -0
  76. data/lib/overcommit/hook/pre_commit/cook_style.rb +35 -0
  77. data/lib/overcommit/hook/pre_commit/credo.rb +27 -0
  78. data/lib/overcommit/hook/pre_commit/css_lint.rb +26 -0
  79. data/lib/overcommit/hook/pre_commit/dogma.rb +33 -0
  80. data/lib/overcommit/hook/pre_commit/es_lint.rb +38 -0
  81. data/lib/overcommit/hook/pre_commit/execute_permissions.rb +76 -0
  82. data/lib/overcommit/hook/pre_commit/fasterer.rb +25 -0
  83. data/lib/overcommit/hook/pre_commit/file_size.rb +47 -0
  84. data/lib/overcommit/hook/pre_commit/fix_me.rb +17 -0
  85. data/lib/overcommit/hook/pre_commit/flay.rb +38 -0
  86. data/lib/overcommit/hook/pre_commit/foodcritic.rb +149 -0
  87. data/lib/overcommit/hook/pre_commit/forbidden_branches.rb +26 -0
  88. data/lib/overcommit/hook/pre_commit/ginkgo_focus.rb +23 -0
  89. data/lib/overcommit/hook/pre_commit/go_fmt.rb +17 -0
  90. data/lib/overcommit/hook/pre_commit/go_lint.rb +29 -0
  91. data/lib/overcommit/hook/pre_commit/go_vet.rb +24 -0
  92. data/lib/overcommit/hook/pre_commit/golangci_lint.rb +21 -0
  93. data/lib/overcommit/hook/pre_commit/hadolint.rb +27 -0
  94. data/lib/overcommit/hook/pre_commit/haml_lint.rb +23 -0
  95. data/lib/overcommit/hook/pre_commit/hard_tabs.rb +15 -0
  96. data/lib/overcommit/hook/pre_commit/hlint.rb +34 -0
  97. data/lib/overcommit/hook/pre_commit/html_hint.rb +23 -0
  98. data/lib/overcommit/hook/pre_commit/html_tidy.rb +30 -0
  99. data/lib/overcommit/hook/pre_commit/image_optim.rb +28 -0
  100. data/lib/overcommit/hook/pre_commit/java_checkstyle.rb +27 -0
  101. data/lib/overcommit/hook/pre_commit/js_hint.rb +23 -0
  102. data/lib/overcommit/hook/pre_commit/js_lint.rb +22 -0
  103. data/lib/overcommit/hook/pre_commit/jscs.rb +27 -0
  104. data/lib/overcommit/hook/pre_commit/jsl.rb +28 -0
  105. data/lib/overcommit/hook/pre_commit/json_syntax.rb +21 -0
  106. data/lib/overcommit/hook/pre_commit/kt_lint.rb +19 -0
  107. data/lib/overcommit/hook/pre_commit/license_finder.rb +14 -0
  108. data/lib/overcommit/hook/pre_commit/license_header.rb +48 -0
  109. data/lib/overcommit/hook/pre_commit/line_endings.rb +77 -0
  110. data/lib/overcommit/hook/pre_commit/local_paths_in_gemfile.rb +16 -0
  111. data/lib/overcommit/hook/pre_commit/mdl.rb +29 -0
  112. data/lib/overcommit/hook/pre_commit/merge_conflicts.rb +16 -0
  113. data/lib/overcommit/hook/pre_commit/nginx_test.rb +26 -0
  114. data/lib/overcommit/hook/pre_commit/pep257.rb +23 -0
  115. data/lib/overcommit/hook/pre_commit/pep8.rb +23 -0
  116. data/lib/overcommit/hook/pre_commit/php_cs.rb +43 -0
  117. data/lib/overcommit/hook/pre_commit/php_cs_fixer.rb +57 -0
  118. data/lib/overcommit/hook/pre_commit/php_lint.rb +44 -0
  119. data/lib/overcommit/hook/pre_commit/php_stan.rb +30 -0
  120. data/lib/overcommit/hook/pre_commit/pronto.rb +12 -0
  121. data/lib/overcommit/hook/pre_commit/puppet_lint.rb +26 -0
  122. data/lib/overcommit/hook/pre_commit/puppet_metadata_json_lint.rb +29 -0
  123. data/lib/overcommit/hook/pre_commit/pycodestyle.rb +23 -0
  124. data/lib/overcommit/hook/pre_commit/pydocstyle.rb +23 -0
  125. data/lib/overcommit/hook/pre_commit/pyflakes.rb +32 -0
  126. data/lib/overcommit/hook/pre_commit/pylint.rb +32 -0
  127. data/lib/overcommit/hook/pre_commit/python_flake8.rb +32 -0
  128. data/lib/overcommit/hook/pre_commit/rails_best_practices.rb +34 -0
  129. data/lib/overcommit/hook/pre_commit/rails_schema_up_to_date.rb +58 -0
  130. data/lib/overcommit/hook/pre_commit/rake_target.rb +12 -0
  131. data/lib/overcommit/hook/pre_commit/reek.rb +26 -0
  132. data/lib/overcommit/hook/pre_commit/rst_lint.rb +27 -0
  133. data/lib/overcommit/hook/pre_commit/rubo_cop.rb +35 -0
  134. data/lib/overcommit/hook/pre_commit/ruby_lint.rb +23 -0
  135. data/lib/overcommit/hook/pre_commit/ruby_syntax.rb +27 -0
  136. data/lib/overcommit/hook/pre_commit/scalariform.rb +22 -0
  137. data/lib/overcommit/hook/pre_commit/scalastyle.rb +31 -0
  138. data/lib/overcommit/hook/pre_commit/scss_lint.rb +43 -0
  139. data/lib/overcommit/hook/pre_commit/semi_standard.rb +23 -0
  140. data/lib/overcommit/hook/pre_commit/shell_check.rb +23 -0
  141. data/lib/overcommit/hook/pre_commit/slim_lint.rb +23 -0
  142. data/lib/overcommit/hook/pre_commit/sqlint.rb +26 -0
  143. data/lib/overcommit/hook/pre_commit/standard.rb +23 -0
  144. data/lib/overcommit/hook/pre_commit/stylelint.rb +23 -0
  145. data/lib/overcommit/hook/pre_commit/swift_lint.rb +19 -0
  146. data/lib/overcommit/hook/pre_commit/terraform_format.rb +19 -0
  147. data/lib/overcommit/hook/pre_commit/trailing_whitespace.rb +15 -0
  148. data/lib/overcommit/hook/pre_commit/travis_lint.rb +15 -0
  149. data/lib/overcommit/hook/pre_commit/ts_lint.rb +28 -0
  150. data/lib/overcommit/hook/pre_commit/vint.rb +22 -0
  151. data/lib/overcommit/hook/pre_commit/w3c_css.rb +67 -0
  152. data/lib/overcommit/hook/pre_commit/w3c_html.rb +64 -0
  153. data/lib/overcommit/hook/pre_commit/xml_lint.rb +24 -0
  154. data/lib/overcommit/hook/pre_commit/xml_syntax.rb +21 -0
  155. data/lib/overcommit/hook/pre_commit/yaml_lint.rb +18 -0
  156. data/lib/overcommit/hook/pre_commit/yaml_syntax.rb +20 -0
  157. data/lib/overcommit/hook/pre_commit/yard_coverage.rb +90 -0
  158. data/lib/overcommit/hook/pre_commit/yarn_check.rb +37 -0
  159. data/lib/overcommit/hook/pre_push/base.rb +33 -0
  160. data/lib/overcommit/hook/pre_push/brakeman.rb +15 -0
  161. data/lib/overcommit/hook/pre_push/cargo_test.rb +12 -0
  162. data/lib/overcommit/hook/pre_push/go_test.rb +14 -0
  163. data/lib/overcommit/hook/pre_push/golangci_lint.rb +16 -0
  164. data/lib/overcommit/hook/pre_push/minitest.rb +20 -0
  165. data/lib/overcommit/hook/pre_push/php_unit.rb +16 -0
  166. data/lib/overcommit/hook/pre_push/pronto.rb +12 -0
  167. data/lib/overcommit/hook/pre_push/protected_branches.rb +74 -0
  168. data/lib/overcommit/hook/pre_push/pytest.rb +16 -0
  169. data/lib/overcommit/hook/pre_push/python_nose.rb +16 -0
  170. data/lib/overcommit/hook/pre_push/r_spec.rb +16 -0
  171. data/lib/overcommit/hook/pre_push/rake_target.rb +12 -0
  172. data/lib/overcommit/hook/pre_push/test_unit.rb +16 -0
  173. data/lib/overcommit/hook/pre_rebase/base.rb +14 -0
  174. data/lib/overcommit/hook/pre_rebase/merged_commits.rb +31 -0
  175. data/lib/overcommit/hook/prepare_commit_msg/base.rb +25 -0
  176. data/lib/overcommit/hook/prepare_commit_msg/replace_branch.rb +57 -0
  177. data/lib/overcommit/hook/shared/bower_install.rb +15 -0
  178. data/lib/overcommit/hook/shared/bundle_install.rb +15 -0
  179. data/lib/overcommit/hook/shared/composer_install.rb +15 -0
  180. data/lib/overcommit/hook/shared/index_tags.rb +14 -0
  181. data/lib/overcommit/hook/shared/npm_install.rb +15 -0
  182. data/lib/overcommit/hook/shared/pronto.rb +21 -0
  183. data/lib/overcommit/hook/shared/rake_target.rb +26 -0
  184. data/lib/overcommit/hook/shared/submodule_status.rb +32 -0
  185. data/lib/overcommit/hook/shared/yarn_install.rb +15 -0
  186. data/lib/overcommit/hook_context.rb +19 -0
  187. data/lib/overcommit/hook_context/base.rb +139 -0
  188. data/lib/overcommit/hook_context/commit_msg.rb +48 -0
  189. data/lib/overcommit/hook_context/post_checkout.rb +36 -0
  190. data/lib/overcommit/hook_context/post_commit.rb +33 -0
  191. data/lib/overcommit/hook_context/post_merge.rb +37 -0
  192. data/lib/overcommit/hook_context/post_rewrite.rb +49 -0
  193. data/lib/overcommit/hook_context/pre_commit.rb +212 -0
  194. data/lib/overcommit/hook_context/pre_push.rb +89 -0
  195. data/lib/overcommit/hook_context/pre_rebase.rb +38 -0
  196. data/lib/overcommit/hook_context/prepare_commit_msg.rb +34 -0
  197. data/lib/overcommit/hook_context/run_all.rb +48 -0
  198. data/lib/overcommit/hook_loader/base.rb +48 -0
  199. data/lib/overcommit/hook_loader/built_in_hook_loader.rb +14 -0
  200. data/lib/overcommit/hook_loader/plugin_hook_loader.rb +102 -0
  201. data/lib/overcommit/hook_runner.rb +219 -0
  202. data/lib/overcommit/hook_signer.rb +123 -0
  203. data/lib/overcommit/installer.rb +193 -0
  204. data/lib/overcommit/interrupt_handler.rb +91 -0
  205. data/lib/overcommit/logger.rb +92 -0
  206. data/lib/overcommit/message_processor.rb +148 -0
  207. data/lib/overcommit/os.rb +38 -0
  208. data/lib/overcommit/printer.rb +145 -0
  209. data/lib/overcommit/subprocess.rb +98 -0
  210. data/lib/overcommit/utils.rb +309 -0
  211. data/lib/overcommit/utils/file_utils.rb +71 -0
  212. data/lib/overcommit/utils/messages_utils.rb +77 -0
  213. data/lib/overcommit/version.rb +6 -0
  214. data/libexec/gerrit-change-id +174 -0
  215. data/libexec/index-tags +17 -0
  216. data/template-dir/hooks/commit-msg +116 -0
  217. data/template-dir/hooks/overcommit-hook +116 -0
  218. data/template-dir/hooks/post-checkout +116 -0
  219. data/template-dir/hooks/post-commit +116 -0
  220. data/template-dir/hooks/post-merge +116 -0
  221. data/template-dir/hooks/post-rewrite +116 -0
  222. data/template-dir/hooks/pre-commit +116 -0
  223. data/template-dir/hooks/pre-push +116 -0
  224. data/template-dir/hooks/pre-rebase +116 -0
  225. data/template-dir/hooks/prepare-commit-msg +116 -0
  226. metadata +303 -0
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Overcommit::Hook::PreCommit
4
+ # Runs `htmlhint` against any modified HTML files.
5
+ #
6
+ # @see http://htmlhint.com/
7
+ class HtmlHint < Base
8
+ def run
9
+ result = execute(command + applicable_files)
10
+ output = Overcommit::Utils.strip_color_codes(result.stdout.chomp)
11
+
12
+ message_groups = output.split("\n\n")[0..-2]
13
+ message_groups.map do |group|
14
+ lines = group.split("\n").map(&:strip)
15
+ file = lines[0][/(.+):/, 1]
16
+ extract_messages(
17
+ lines[1..-1].map { |msg| "#{file}: #{msg}" },
18
+ /^(?<file>(?:\w:)?[^:]+): line (?<line>\d+)/
19
+ )
20
+ end.flatten
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Overcommit::Hook::PreCommit
4
+ # Runs `tidy` against any modified HTML files.
5
+ #
6
+ # @see http://www.html-tidy.org/
7
+ class HtmlTidy < Base
8
+ MESSAGE_REGEX = /
9
+ ^(?<file>(?:\w:)?[^:]+):\s
10
+ line\s(?<line>\d+)\s
11
+ column\s(?<col>\d+)\s-\s
12
+ (?<type>Error|Warning):\s(?<message>.+)$
13
+ /x
14
+
15
+ def run
16
+ # example message:
17
+ # line 4 column 24 - Warning: <html> proprietary attribute "class"
18
+ applicable_files.collect do |file|
19
+ result = execute(command + [file])
20
+ output = result.stderr.chomp
21
+
22
+ extract_messages(
23
+ output.split("\n").collect { |msg| "#{file}: #{msg}" },
24
+ MESSAGE_REGEX,
25
+ lambda { |type| type.downcase.to_sym }
26
+ )
27
+ end.flatten
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Overcommit::Hook::PreCommit
4
+ # Checks for images that can be optimized with `image_optim`.
5
+ #
6
+ # @see https://github.com/toy/image_optim
7
+ class ImageOptim < Base
8
+ def run
9
+ result = execute(command, args: applicable_files)
10
+ return [:fail, result.stdout + result.stderr] unless result.success?
11
+
12
+ optimized_files = extract_optimized_files(result.stdout)
13
+ return :pass if optimized_files.empty?
14
+
15
+ output = "The following images are optimizable:\n#{optimized_files.join("\n")}"
16
+ output += "\n\nOptimize them by running `#{command.join(' ')} #{optimized_files.join(' ')}`"
17
+ [:fail, output]
18
+ end
19
+
20
+ private
21
+
22
+ def extract_optimized_files(output)
23
+ output.split("\n").
24
+ select { |line| line =~ /^\d+/ }.
25
+ map { |line| line.split(/\s+/).last }
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Overcommit::Hook::PreCommit
4
+ # Runs `checkstyle` against any modified Java files.
5
+ #
6
+ # @see http://checkstyle.sourceforge.net/
7
+ class JavaCheckstyle < Base
8
+ MESSAGE_REGEX = /^(\[(?<type>[^\]]+)\]\s+)?(?<file>(?:\w:)?[^:]+):(?<line>\d+)/
9
+
10
+ MESSAGE_TYPE_CATEGORIZER = lambda do |type|
11
+ %w[WARN INFO].include?(type.to_s) ? :warning : :error
12
+ end
13
+
14
+ def run
15
+ result = execute(command, args: applicable_files)
16
+ output = result.stdout.chomp
17
+
18
+ # example message:
19
+ # path/to/file.java:3:5: Error message
20
+ extract_messages(
21
+ output.split("\n").grep(MESSAGE_REGEX),
22
+ MESSAGE_REGEX,
23
+ MESSAGE_TYPE_CATEGORIZER
24
+ )
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Overcommit::Hook::PreCommit
4
+ # Runs `jshint` against any modified JavaScript files.
5
+ #
6
+ # @see http://jshint.com/
7
+ class JsHint < Base
8
+ def run
9
+ result = execute(command, args: applicable_files)
10
+ output = result.stdout.chomp
11
+
12
+ return :pass if result.success? && output.empty?
13
+
14
+ # example message:
15
+ # path/to/file.js: line 1, col 0, Error message (E001)
16
+ extract_messages(
17
+ output.split("\n").grep(/E|W/),
18
+ /^(?<file>(?:\w:)?[^:]+):[^\d]+(?<line>\d+).+\((?<type>E|W)\d+\)/,
19
+ lambda { |type| type.include?('W') ? :warning : :error }
20
+ )
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Overcommit::Hook::PreCommit
4
+ # Runs `jslint` against any modified JavaScript files.
5
+ #
6
+ # @see http://www.jslint.com/
7
+ class JsLint < Base
8
+ MESSAGE_REGEX = /(?<file>(?:\w:)?[^:]+):(?<line>\d+)/
9
+
10
+ def run
11
+ result = execute(command, args: applicable_files)
12
+ return :pass if result.success?
13
+
14
+ # example message:
15
+ # path/to/file.js:1:1: Error message
16
+ extract_messages(
17
+ result.stdout.split("\n").grep(MESSAGE_REGEX),
18
+ MESSAGE_REGEX
19
+ )
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Overcommit::Hook::PreCommit
4
+ # Runs `jscs` (JavaScript Code Style Checker) against any modified JavaScript
5
+ # files.
6
+ #
7
+ # @see http://jscs.info/
8
+ class Jscs < Base
9
+ def run
10
+ result = execute(command, args: applicable_files)
11
+ return :pass if result.success?
12
+
13
+ # Exit status 2 = Code style errors; everything else we don't know how to
14
+ # parse. https://github.com/jscs-dev/node-jscs/wiki/Exit-codes
15
+ unless result.status == 2
16
+ return :fail, result.stdout + result.stderr.chomp
17
+ end
18
+
19
+ # example message:
20
+ # path/to/file.js: line 7, col 0, ruleName: Error message
21
+ extract_messages(
22
+ result.stdout.split("\n"),
23
+ /^(?<file>(?:\w:)?[^:]+):[^\d]+(?<line>\d+)/,
24
+ )
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Overcommit::Hook::PreCommit
4
+ # Runs `jsl` against any modified JavaScript files.
5
+ #
6
+ # @see http://www.javascriptlint.com/
7
+ class Jsl < Base
8
+ MESSAGE_REGEX = /(?<file>(?:\w:)?.+)\((?<line>\d+)\):(?<type>[^:]+)/
9
+
10
+ MESSAGE_TYPE_CATEGORIZER = lambda do |type|
11
+ type.match?(/warning/) ? :warning : :error
12
+ end
13
+
14
+ def run
15
+ file_flags = applicable_files.map { |file| ['-process', file] }
16
+ result = execute(command + file_flags.flatten)
17
+ return :pass if result.success?
18
+
19
+ # example message:
20
+ # path/to/file.js(1): lint warning: Error message
21
+ extract_messages(
22
+ result.stdout.split("\n").grep(MESSAGE_REGEX),
23
+ MESSAGE_REGEX,
24
+ MESSAGE_TYPE_CATEGORIZER
25
+ )
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Overcommit::Hook::PreCommit
4
+ # Checks the syntax of any modified JSON files.
5
+ class JsonSyntax < Base
6
+ def run
7
+ messages = []
8
+
9
+ applicable_files.each do |file|
10
+ begin
11
+ JSON.parse(IO.read(file))
12
+ rescue JSON::ParserError => e
13
+ error = "#{e.message} parsing #{file}"
14
+ messages << Overcommit::Hook::Message.new(:error, file, nil, error)
15
+ end
16
+ end
17
+
18
+ messages
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Overcommit::Hook::PreCommit
4
+ # Runs `ktlint` against modified Kotlin files.
5
+ # @see https://github.com/shyiko/ktlint
6
+ class KtLint < Base
7
+ MESSAGE_REGEX = /((?<file>[^:]+):(?<line>\d+):(\d+):(?<message>.+))/
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
+ )
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Overcommit::Hook::PreCommit
4
+ # Runs LicenseFinder if any of your package manager declaration files have changed
5
+ # See more about LicenseFinder at https://github.com/pivotal/LicenseFinder
6
+ class LicenseFinder < Base
7
+ def run
8
+ result = execute(command)
9
+ return :pass if result.success?
10
+ output = result.stdout + result.stderr
11
+ [:fail, output]
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Overcommit::Hook::PreCommit
4
+ # Checks for license headers in source files
5
+ class LicenseHeader < Base
6
+ def run
7
+ begin
8
+ license_contents = license_lines
9
+ rescue Errno::ENOENT
10
+ return :fail, "Unable to load license file #{license_file}"
11
+ end
12
+
13
+ messages = applicable_files.map do |file|
14
+ check_file(file, license_contents)
15
+ end.compact
16
+
17
+ return :fail, messages.join("\n") if messages.any?
18
+
19
+ :pass
20
+ end
21
+
22
+ def check_file(file, license_contents)
23
+ File.readlines(file).each_with_index do |l, i|
24
+ if i >= license_contents.length
25
+ break
26
+ end
27
+
28
+ l.chomp!
29
+ unless l.end_with?(license_contents[i])
30
+ message = "#{file} missing header contents from line #{i} of "\
31
+ "#{license_file}: #{license_contents[i]}"
32
+ return message
33
+ end
34
+ end
35
+ end
36
+
37
+ def license_file
38
+ config['license_file']
39
+ end
40
+
41
+ def license_lines
42
+ @license_lines ||= begin
43
+ file_root = Overcommit::Utils.convert_glob_to_absolute(license_file)
44
+ File.read(file_root).split("\n")
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,77 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Overcommit::Hook::PreCommit
4
+ # Checks for line endings in files.
5
+ #
6
+ # WARNING: Works with Git 2.10.0 or newer.
7
+ class LineEndings < Base
8
+ def run
9
+ messages = []
10
+
11
+ offending_files.map do |file_name|
12
+ file = File.open(file_name)
13
+ begin
14
+ messages += check_file(file, file_name)
15
+ rescue ArgumentError => ex
16
+ # File is likely a binary file which this check should ignore, but
17
+ # print a warning just in case
18
+ messages << Overcommit::Hook::Message.new(
19
+ :warning,
20
+ file_name,
21
+ file.lineno,
22
+ "#{file_name}:#{file.lineno}:#{ex.message}"
23
+ )
24
+ end
25
+ end
26
+
27
+ messages
28
+ end
29
+
30
+ private
31
+
32
+ def check_file(file, file_name)
33
+ messages_for_file = []
34
+
35
+ file.each_line do |line|
36
+ # Remove configured line-ending
37
+ line.gsub!(/#{config['eol']}/, '')
38
+
39
+ # Detect any left over line-ending characters
40
+ next unless line.end_with?("\n", "\r")
41
+
42
+ messages_for_file << Overcommit::Hook::Message.new(
43
+ :error,
44
+ file_name,
45
+ file.lineno,
46
+ "#{file_name}:#{file.lineno}:#{line.inspect}"
47
+ )
48
+ end
49
+
50
+ messages_for_file
51
+ end
52
+
53
+ def offending_files
54
+ result = execute(%w[git ls-files --eol -z --], args: applicable_files)
55
+ raise 'Unable to access git tree' unless result.success?
56
+
57
+ result.stdout.split("\0").map do |file_info|
58
+ info, path = file_info.split("\t")
59
+ i = info.split.first
60
+ next if i == 'l/-text' # ignore binary files
61
+ next if i == "l/#{eol}"
62
+ path
63
+ end.compact
64
+ end
65
+
66
+ def eol
67
+ @eol ||= case config['eol']
68
+ when "\n"
69
+ 'lf'
70
+ when "\r\n"
71
+ 'crlf'
72
+ else
73
+ raise 'Invalid `eol` option specified: must be "\n" or "\r\n"'
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Overcommit::Hook::PreCommit
4
+ # Checks for local paths in files and issues a warning
5
+ class LocalPathsInGemfile < Base
6
+ def run
7
+ result = execute(command, args: applicable_files)
8
+
9
+ unless result.stdout.empty?
10
+ return :warn, "Avoid pointing to local paths in Gemfiles:\n#{result.stdout}"
11
+ end
12
+
13
+ :pass
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Overcommit::Hook::PreCommit
4
+ # Runs `mdl` against any modified Markdown files
5
+ #
6
+ # @see https://github.com/mivok/markdownlint
7
+ class Mdl < Base
8
+ def run
9
+ result = execute(command, args: applicable_files)
10
+ output = result.stdout.chomp
11
+
12
+ return :pass if result.success?
13
+ return [:fail, result.stderr] unless result.stderr.empty?
14
+
15
+ # example message:
16
+ # [{"filename":"file1.md","line":1,"rule":"MD013","aliases":["line-length"],
17
+ # "description":"Line length"}]
18
+ json_messages = JSON.parse(output)
19
+ json_messages.map do |message|
20
+ Overcommit::Hook::Message.new(
21
+ :error,
22
+ message['filename'],
23
+ message['line'],
24
+ "#{message['filename']}:#{message['line']} #{message['rule']} #{message['description']}"
25
+ )
26
+ end
27
+ end
28
+ end
29
+ end