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.
- checksums.yaml +7 -0
- data/bin/overcommit +50 -0
- data/config/default.yml +1356 -0
- data/config/starter.yml +33 -0
- data/lib/overcommit.rb +26 -0
- data/lib/overcommit/cli.rb +223 -0
- data/lib/overcommit/command_splitter.rb +146 -0
- data/lib/overcommit/configuration.rb +350 -0
- data/lib/overcommit/configuration_loader.rb +96 -0
- data/lib/overcommit/configuration_validator.rb +186 -0
- data/lib/overcommit/constants.rb +12 -0
- data/lib/overcommit/exceptions.rb +52 -0
- data/lib/overcommit/git_config.rb +22 -0
- data/lib/overcommit/git_repo.rb +286 -0
- data/lib/overcommit/git_version.rb +17 -0
- data/lib/overcommit/hook/base.rb +294 -0
- data/lib/overcommit/hook/commit_msg/base.rb +14 -0
- data/lib/overcommit/hook/commit_msg/capitalized_subject.rb +25 -0
- data/lib/overcommit/hook/commit_msg/empty_message.rb +12 -0
- data/lib/overcommit/hook/commit_msg/gerrit_change_id.rb +22 -0
- data/lib/overcommit/hook/commit_msg/hard_tabs.rb +17 -0
- data/lib/overcommit/hook/commit_msg/message_format.rb +31 -0
- data/lib/overcommit/hook/commit_msg/russian_novel.rb +16 -0
- data/lib/overcommit/hook/commit_msg/single_line_subject.rb +16 -0
- data/lib/overcommit/hook/commit_msg/spell_check.rb +45 -0
- data/lib/overcommit/hook/commit_msg/text_width.rb +56 -0
- data/lib/overcommit/hook/commit_msg/trailing_period.rb +16 -0
- data/lib/overcommit/hook/post_checkout/base.rb +22 -0
- data/lib/overcommit/hook/post_checkout/bower_install.rb +13 -0
- data/lib/overcommit/hook/post_checkout/bundle_install.rb +13 -0
- data/lib/overcommit/hook/post_checkout/composer_install.rb +13 -0
- data/lib/overcommit/hook/post_checkout/index_tags.rb +12 -0
- data/lib/overcommit/hook/post_checkout/npm_install.rb +13 -0
- data/lib/overcommit/hook/post_checkout/submodule_status.rb +12 -0
- data/lib/overcommit/hook/post_checkout/yarn_install.rb +13 -0
- data/lib/overcommit/hook/post_commit/base.rb +12 -0
- data/lib/overcommit/hook/post_commit/bower_install.rb +13 -0
- data/lib/overcommit/hook/post_commit/bundle_install.rb +13 -0
- data/lib/overcommit/hook/post_commit/commitplease.rb +16 -0
- data/lib/overcommit/hook/post_commit/composer_install.rb +13 -0
- data/lib/overcommit/hook/post_commit/git_guilt.rb +43 -0
- data/lib/overcommit/hook/post_commit/index_tags.rb +12 -0
- data/lib/overcommit/hook/post_commit/npm_install.rb +13 -0
- data/lib/overcommit/hook/post_commit/submodule_status.rb +12 -0
- data/lib/overcommit/hook/post_commit/yarn_install.rb +13 -0
- data/lib/overcommit/hook/post_merge/base.rb +12 -0
- data/lib/overcommit/hook/post_merge/bower_install.rb +13 -0
- data/lib/overcommit/hook/post_merge/bundle_install.rb +13 -0
- data/lib/overcommit/hook/post_merge/composer_install.rb +13 -0
- data/lib/overcommit/hook/post_merge/index_tags.rb +12 -0
- data/lib/overcommit/hook/post_merge/npm_install.rb +13 -0
- data/lib/overcommit/hook/post_merge/submodule_status.rb +12 -0
- data/lib/overcommit/hook/post_merge/yarn_install.rb +13 -0
- data/lib/overcommit/hook/post_rewrite/base.rb +12 -0
- data/lib/overcommit/hook/post_rewrite/bower_install.rb +13 -0
- data/lib/overcommit/hook/post_rewrite/bundle_install.rb +13 -0
- data/lib/overcommit/hook/post_rewrite/composer_install.rb +13 -0
- data/lib/overcommit/hook/post_rewrite/index_tags.rb +19 -0
- data/lib/overcommit/hook/post_rewrite/npm_install.rb +13 -0
- data/lib/overcommit/hook/post_rewrite/submodule_status.rb +12 -0
- data/lib/overcommit/hook/post_rewrite/yarn_install.rb +13 -0
- data/lib/overcommit/hook/pre_commit/author_email.rb +26 -0
- data/lib/overcommit/hook/pre_commit/author_name.rb +25 -0
- data/lib/overcommit/hook/pre_commit/base.rb +19 -0
- data/lib/overcommit/hook/pre_commit/berksfile_check.rb +24 -0
- data/lib/overcommit/hook/pre_commit/broken_symlinks.rb +17 -0
- data/lib/overcommit/hook/pre_commit/bundle_audit.rb +24 -0
- data/lib/overcommit/hook/pre_commit/bundle_check.rb +32 -0
- data/lib/overcommit/hook/pre_commit/bundle_outdated.rb +25 -0
- data/lib/overcommit/hook/pre_commit/case_conflicts.rb +27 -0
- data/lib/overcommit/hook/pre_commit/chamber_compare.rb +43 -0
- data/lib/overcommit/hook/pre_commit/chamber_security.rb +15 -0
- data/lib/overcommit/hook/pre_commit/chamber_verification.rb +36 -0
- data/lib/overcommit/hook/pre_commit/code_spell_check.rb +36 -0
- data/lib/overcommit/hook/pre_commit/coffee_lint.rb +35 -0
- data/lib/overcommit/hook/pre_commit/cook_style.rb +35 -0
- data/lib/overcommit/hook/pre_commit/credo.rb +27 -0
- data/lib/overcommit/hook/pre_commit/css_lint.rb +26 -0
- data/lib/overcommit/hook/pre_commit/dogma.rb +33 -0
- data/lib/overcommit/hook/pre_commit/es_lint.rb +38 -0
- data/lib/overcommit/hook/pre_commit/execute_permissions.rb +76 -0
- data/lib/overcommit/hook/pre_commit/fasterer.rb +25 -0
- data/lib/overcommit/hook/pre_commit/file_size.rb +47 -0
- data/lib/overcommit/hook/pre_commit/fix_me.rb +17 -0
- data/lib/overcommit/hook/pre_commit/flay.rb +38 -0
- data/lib/overcommit/hook/pre_commit/foodcritic.rb +149 -0
- data/lib/overcommit/hook/pre_commit/forbidden_branches.rb +26 -0
- data/lib/overcommit/hook/pre_commit/ginkgo_focus.rb +23 -0
- data/lib/overcommit/hook/pre_commit/go_fmt.rb +17 -0
- data/lib/overcommit/hook/pre_commit/go_lint.rb +29 -0
- data/lib/overcommit/hook/pre_commit/go_vet.rb +24 -0
- data/lib/overcommit/hook/pre_commit/golangci_lint.rb +21 -0
- data/lib/overcommit/hook/pre_commit/hadolint.rb +27 -0
- data/lib/overcommit/hook/pre_commit/haml_lint.rb +23 -0
- data/lib/overcommit/hook/pre_commit/hard_tabs.rb +15 -0
- data/lib/overcommit/hook/pre_commit/hlint.rb +34 -0
- data/lib/overcommit/hook/pre_commit/html_hint.rb +23 -0
- data/lib/overcommit/hook/pre_commit/html_tidy.rb +30 -0
- data/lib/overcommit/hook/pre_commit/image_optim.rb +28 -0
- data/lib/overcommit/hook/pre_commit/java_checkstyle.rb +27 -0
- data/lib/overcommit/hook/pre_commit/js_hint.rb +23 -0
- data/lib/overcommit/hook/pre_commit/js_lint.rb +22 -0
- data/lib/overcommit/hook/pre_commit/jscs.rb +27 -0
- data/lib/overcommit/hook/pre_commit/jsl.rb +28 -0
- data/lib/overcommit/hook/pre_commit/json_syntax.rb +21 -0
- data/lib/overcommit/hook/pre_commit/kt_lint.rb +19 -0
- data/lib/overcommit/hook/pre_commit/license_finder.rb +14 -0
- data/lib/overcommit/hook/pre_commit/license_header.rb +48 -0
- data/lib/overcommit/hook/pre_commit/line_endings.rb +77 -0
- data/lib/overcommit/hook/pre_commit/local_paths_in_gemfile.rb +16 -0
- data/lib/overcommit/hook/pre_commit/mdl.rb +29 -0
- data/lib/overcommit/hook/pre_commit/merge_conflicts.rb +16 -0
- data/lib/overcommit/hook/pre_commit/nginx_test.rb +26 -0
- data/lib/overcommit/hook/pre_commit/pep257.rb +23 -0
- data/lib/overcommit/hook/pre_commit/pep8.rb +23 -0
- data/lib/overcommit/hook/pre_commit/php_cs.rb +43 -0
- data/lib/overcommit/hook/pre_commit/php_cs_fixer.rb +57 -0
- data/lib/overcommit/hook/pre_commit/php_lint.rb +44 -0
- data/lib/overcommit/hook/pre_commit/php_stan.rb +30 -0
- data/lib/overcommit/hook/pre_commit/pronto.rb +12 -0
- data/lib/overcommit/hook/pre_commit/puppet_lint.rb +26 -0
- data/lib/overcommit/hook/pre_commit/puppet_metadata_json_lint.rb +29 -0
- data/lib/overcommit/hook/pre_commit/pycodestyle.rb +23 -0
- data/lib/overcommit/hook/pre_commit/pydocstyle.rb +23 -0
- data/lib/overcommit/hook/pre_commit/pyflakes.rb +32 -0
- data/lib/overcommit/hook/pre_commit/pylint.rb +32 -0
- data/lib/overcommit/hook/pre_commit/python_flake8.rb +32 -0
- data/lib/overcommit/hook/pre_commit/rails_best_practices.rb +34 -0
- data/lib/overcommit/hook/pre_commit/rails_schema_up_to_date.rb +58 -0
- data/lib/overcommit/hook/pre_commit/rake_target.rb +12 -0
- data/lib/overcommit/hook/pre_commit/reek.rb +26 -0
- data/lib/overcommit/hook/pre_commit/rst_lint.rb +27 -0
- data/lib/overcommit/hook/pre_commit/rubo_cop.rb +35 -0
- data/lib/overcommit/hook/pre_commit/ruby_lint.rb +23 -0
- data/lib/overcommit/hook/pre_commit/ruby_syntax.rb +27 -0
- data/lib/overcommit/hook/pre_commit/scalariform.rb +22 -0
- data/lib/overcommit/hook/pre_commit/scalastyle.rb +31 -0
- data/lib/overcommit/hook/pre_commit/scss_lint.rb +43 -0
- data/lib/overcommit/hook/pre_commit/semi_standard.rb +23 -0
- data/lib/overcommit/hook/pre_commit/shell_check.rb +23 -0
- data/lib/overcommit/hook/pre_commit/slim_lint.rb +23 -0
- data/lib/overcommit/hook/pre_commit/sqlint.rb +26 -0
- data/lib/overcommit/hook/pre_commit/standard.rb +23 -0
- data/lib/overcommit/hook/pre_commit/stylelint.rb +23 -0
- data/lib/overcommit/hook/pre_commit/swift_lint.rb +19 -0
- data/lib/overcommit/hook/pre_commit/terraform_format.rb +19 -0
- data/lib/overcommit/hook/pre_commit/trailing_whitespace.rb +15 -0
- data/lib/overcommit/hook/pre_commit/travis_lint.rb +15 -0
- data/lib/overcommit/hook/pre_commit/ts_lint.rb +28 -0
- data/lib/overcommit/hook/pre_commit/vint.rb +22 -0
- data/lib/overcommit/hook/pre_commit/w3c_css.rb +67 -0
- data/lib/overcommit/hook/pre_commit/w3c_html.rb +64 -0
- data/lib/overcommit/hook/pre_commit/xml_lint.rb +24 -0
- data/lib/overcommit/hook/pre_commit/xml_syntax.rb +21 -0
- data/lib/overcommit/hook/pre_commit/yaml_lint.rb +18 -0
- data/lib/overcommit/hook/pre_commit/yaml_syntax.rb +20 -0
- data/lib/overcommit/hook/pre_commit/yard_coverage.rb +90 -0
- data/lib/overcommit/hook/pre_commit/yarn_check.rb +37 -0
- data/lib/overcommit/hook/pre_push/base.rb +33 -0
- data/lib/overcommit/hook/pre_push/brakeman.rb +15 -0
- data/lib/overcommit/hook/pre_push/cargo_test.rb +12 -0
- data/lib/overcommit/hook/pre_push/go_test.rb +14 -0
- data/lib/overcommit/hook/pre_push/golangci_lint.rb +16 -0
- data/lib/overcommit/hook/pre_push/minitest.rb +20 -0
- data/lib/overcommit/hook/pre_push/php_unit.rb +16 -0
- data/lib/overcommit/hook/pre_push/pronto.rb +12 -0
- data/lib/overcommit/hook/pre_push/protected_branches.rb +74 -0
- data/lib/overcommit/hook/pre_push/pytest.rb +16 -0
- data/lib/overcommit/hook/pre_push/python_nose.rb +16 -0
- data/lib/overcommit/hook/pre_push/r_spec.rb +16 -0
- data/lib/overcommit/hook/pre_push/rake_target.rb +12 -0
- data/lib/overcommit/hook/pre_push/test_unit.rb +16 -0
- data/lib/overcommit/hook/pre_rebase/base.rb +14 -0
- data/lib/overcommit/hook/pre_rebase/merged_commits.rb +31 -0
- data/lib/overcommit/hook/prepare_commit_msg/base.rb +25 -0
- data/lib/overcommit/hook/prepare_commit_msg/replace_branch.rb +57 -0
- data/lib/overcommit/hook/shared/bower_install.rb +15 -0
- data/lib/overcommit/hook/shared/bundle_install.rb +15 -0
- data/lib/overcommit/hook/shared/composer_install.rb +15 -0
- data/lib/overcommit/hook/shared/index_tags.rb +14 -0
- data/lib/overcommit/hook/shared/npm_install.rb +15 -0
- data/lib/overcommit/hook/shared/pronto.rb +21 -0
- data/lib/overcommit/hook/shared/rake_target.rb +26 -0
- data/lib/overcommit/hook/shared/submodule_status.rb +32 -0
- data/lib/overcommit/hook/shared/yarn_install.rb +15 -0
- data/lib/overcommit/hook_context.rb +19 -0
- data/lib/overcommit/hook_context/base.rb +139 -0
- data/lib/overcommit/hook_context/commit_msg.rb +48 -0
- data/lib/overcommit/hook_context/post_checkout.rb +36 -0
- data/lib/overcommit/hook_context/post_commit.rb +33 -0
- data/lib/overcommit/hook_context/post_merge.rb +37 -0
- data/lib/overcommit/hook_context/post_rewrite.rb +49 -0
- data/lib/overcommit/hook_context/pre_commit.rb +212 -0
- data/lib/overcommit/hook_context/pre_push.rb +89 -0
- data/lib/overcommit/hook_context/pre_rebase.rb +38 -0
- data/lib/overcommit/hook_context/prepare_commit_msg.rb +34 -0
- data/lib/overcommit/hook_context/run_all.rb +48 -0
- data/lib/overcommit/hook_loader/base.rb +48 -0
- data/lib/overcommit/hook_loader/built_in_hook_loader.rb +14 -0
- data/lib/overcommit/hook_loader/plugin_hook_loader.rb +102 -0
- data/lib/overcommit/hook_runner.rb +219 -0
- data/lib/overcommit/hook_signer.rb +123 -0
- data/lib/overcommit/installer.rb +193 -0
- data/lib/overcommit/interrupt_handler.rb +91 -0
- data/lib/overcommit/logger.rb +92 -0
- data/lib/overcommit/message_processor.rb +148 -0
- data/lib/overcommit/os.rb +38 -0
- data/lib/overcommit/printer.rb +145 -0
- data/lib/overcommit/subprocess.rb +98 -0
- data/lib/overcommit/utils.rb +309 -0
- data/lib/overcommit/utils/file_utils.rb +71 -0
- data/lib/overcommit/utils/messages_utils.rb +77 -0
- data/lib/overcommit/version.rb +6 -0
- data/libexec/gerrit-change-id +174 -0
- data/libexec/index-tags +17 -0
- data/template-dir/hooks/commit-msg +116 -0
- data/template-dir/hooks/overcommit-hook +116 -0
- data/template-dir/hooks/post-checkout +116 -0
- data/template-dir/hooks/post-commit +116 -0
- data/template-dir/hooks/post-merge +116 -0
- data/template-dir/hooks/post-rewrite +116 -0
- data/template-dir/hooks/pre-commit +116 -0
- data/template-dir/hooks/pre-push +116 -0
- data/template-dir/hooks/pre-rebase +116 -0
- data/template-dir/hooks/prepare-commit-msg +116 -0
- 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
|