class Overcommit::Hook::PreCommit::EsLint

Runs `eslint` against any modified JavaScript files.

Protip: if you have an npm script set up to run eslint, you can configure this hook to run eslint via your npm script by using the `command` option in your .overcommit.yml file. This can be useful if you have some eslint configuration built into your npm script that you don't want to repeat somewhere else. Example:

EsLint:
  required_executable: 'npm'
  enabled: true
  command: ['npm', 'run', 'lint', '--', '-f', 'compact']

Note: This hook supports only compact format.

@see eslint.org/

Public Instance Methods

run() click to toggle source
# File lib/overcommit/hook/pre_commit/es_lint.rb, line 21
def run
  result = execute(command, args: applicable_files)
  output = result.stdout.chomp
  messages = output.split("\n").grep(/Warning|Error/)

  return [:fail, result.stderr] if messages.empty? && !result.success?
  return :pass if result.success? && output.empty?

  # example message:
  #   path/to/file.js: line 1, col 0, Error - Error message (ruleName)
  extract_messages(
    messages,
    /^(?<file>(?:\w:)?[^:]+):[^\d]+(?<line>\d+).*?(?<type>Error|Warning)/,
    lambda { |type| type.downcase.to_sym }
  )
end