[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/sds/overcommit/main/lib/overcommit/hook/pre_commit/solargraph.rb [Back]  [Original]

# frozen_string_literal: true

require 'overcommit'
require 'overcommit/hook/pre_commit/base'

module Overcommit
  module Hook
    module PreCommit
      # Runs `solargraph typecheck` against any modified Ruby files.
      #
      # @see https://github.com/castwide/solargraph
      class Solargraph < Base
        MESSAGE_REGEX = /^\s*(?(?:\w:)?[^:]+):(?\d+)(?: -|:) /.freeze

        def run
          result = execute(command, args: applicable_files)
          return :pass if result.success?

          stderr_lines = remove_harmless_glitches(result.stderr)
          violation_lines = result.stdout.split("\n").grep(MESSAGE_REGEX)
          if violation_lines.empty?
            if stderr_lines.empty?
              [:fail, 'Solargraph failed to run']
            else
              # let's feed it stderr so users see the errors
              extract_messages(stderr_lines, MESSAGE_REGEX)
            end
          else
            extract_messages(violation_lines, MESSAGE_REGEX)
          end
        end

        private

        # @param stderr [String]
        #
        # @return [Array]
        def remove_harmless_glitches(stderr)
          stderr.split("\n").reject do |line|
            line.include?('[WARN]') ||
              line.include?('warning: parser/current is loading') ||
              line.include?('Please see https://github.com/whitequark')
          end
        end
      end
    end
  end
end

Web Proxy Viewer  |  New URL  |  Original Page