Sha256: afe2c5d0c7fad3ad0b1e12657f00772c2c44cde548a97423c1ca0882968ba862

Contents?: true

Size: 1.34 KB

Versions: 12

Compression:

Stored size: 1.34 KB

Contents

# frozen_string_literal: true

module Overcommit::Hook::PreCommit
  # Runs `php-cs-fixer` against any modified PHP files.
  class PhpCsFixer < Base
    MESSAGE_REGEX = /\s+\d+\)\s+(?<file>.*\.php)(?<violated_rules>\s+\(\w+(?:,\s+)?\))?/.freeze

    def run
      messages = []
      feedback = ''

      # Exit status for all of the runs. Should be zero!
      exit_status_sum = 0

      applicable_files.each do |file|
        result = execute(command, args: [file])
        output = result.stdout.chomp
        exit_status_sum += result.status

        if result.status
          messages = output.lstrip.split("\n")
        end
      end

      unless messages.empty?
        feedback = parse_messages(messages)
      end

      :pass if exit_status_sum == 0
      :pass if feedback.empty?

      feedback
    end

    def parse_messages(messages)
      output = []

      messages.map do |message|
        message.scan(MESSAGE_REGEX).map do |file, violated_rules|
          type = :error
          unless violated_rules.nil?
            type = :warning
          end
          text = if type == :error
                   "Cannot process #{file}: Syntax error"
                 else
                   "#{file} has been fixed"
                 end

          output << Overcommit::Hook::Message.new(type, file, 0, text)
        end
      end

      output
    end
  end
end

Version data entries

12 entries across 12 versions & 2 rubygems

Version Path
overcommit-0.67.0 lib/overcommit/hook/pre_commit/php_cs_fixer.rb
overcommit-0.66.0 lib/overcommit/hook/pre_commit/php_cs_fixer.rb
overcommit-0.65.0 lib/overcommit/hook/pre_commit/php_cs_fixer.rb
overcommit-0.64.1 lib/overcommit/hook/pre_commit/php_cs_fixer.rb
overcommit-0.64.0 lib/overcommit/hook/pre_commit/php_cs_fixer.rb
overcommit-0.63.0 lib/overcommit/hook/pre_commit/php_cs_fixer.rb
overcommit-0.62.0 lib/overcommit/hook/pre_commit/php_cs_fixer.rb
overcommit-0.61.0 lib/overcommit/hook/pre_commit/php_cs_fixer.rb
overcommit-0.60.0 lib/overcommit/hook/pre_commit/php_cs_fixer.rb
overcommit-0.59.1 lib/overcommit/hook/pre_commit/php_cs_fixer.rb
overcommit-0.59.0 lib/overcommit/hook/pre_commit/php_cs_fixer.rb
overcommit-jeygeethanmedia-0.58.0 lib/overcommit/hook/pre_commit/php_cs_fixer.rb