diff --git a/README.md b/README.md index 0a62737f..445dfd1a 100644 --- a/README.md +++ b/README.md @@ -542,6 +542,7 @@ issue](https://github.com/brigade/overcommit/issues/238) for more details. * [SlimLint](lib/overcommit/hook/pre_commit/slim_lint.rb) * [Sqlint](lib/overcommit/hook/pre_commit/sqlint.rb) * [Standard](lib/overcommit/hook/pre_commit/standard.rb) +* [StyleLint](lib/overcommit/hook/pre_commit/style_lint.rb) * [TrailingWhitespace](lib/overcommit/hook/pre_commit/trailing_whitespace.rb) * [TravisLint](lib/overcommit/hook/pre_commit/travis_lint.rb) * [TsLint](lib/overcommit/hook/pre_commit/ts_lint.rb) diff --git a/config/default.yml b/config/default.yml index 2f73647d..05379491 100644 --- a/config/default.yml +++ b/config/default.yml @@ -641,6 +641,15 @@ PreCommit: install_command: 'npm install -g standard' include: '**/*.js' + StyleLint: + enabled: false + description: 'Analyze with Stylelint' + required_executable: 'stylelint' + install_command: 'npm install -g stylelint' + include: + - '**/*.scss' + - '**/*.css' + TsLint: enabled: false description: 'Analyze with TSLint' diff --git a/lib/overcommit/hook/pre_commit/style_lint.rb b/lib/overcommit/hook/pre_commit/style_lint.rb new file mode 100644 index 00000000..029dc109 --- /dev/null +++ b/lib/overcommit/hook/pre_commit/style_lint.rb @@ -0,0 +1,23 @@ +module Overcommit::Hook::PreCommit + # Runs `stylelint` against any modified CSS files. + # + # @see https://github.com/stylelint/stylelint + class StyleLint < Base + MESSAGE_REGEX = /(?✖|⚠) + ((?(\/\D+)*\D+\.\D+)) + ((?\d+):) + /x + + def run + result = execute(command, args: applicable_files) + output = result.stdout.chomp + return :pass if result.success? && output.empty? + + extract_messages( + output.split("\n").reject(&:empty?), + MESSAGE_REGEX, + lambda { |type| type.downcase.to_sym } + ) + end + end +end diff --git a/lib/overcommit/version.rb b/lib/overcommit/version.rb index 4ab9e73c..dc2affcd 100644 --- a/lib/overcommit/version.rb +++ b/lib/overcommit/version.rb @@ -2,5 +2,5 @@ # Defines the gem version. module Overcommit - VERSION = '0.41.0'.freeze + VERSION = '0.42.0'.freeze end