Skip to content
Snippets Groups Projects
style.rb 1.37 KiB
Newer Older
AnastasiaSulyagina's avatar
AnastasiaSulyagina committed
require "English"

module Hbc
  class CLI
    class Style < AbstractCommand
      def self.help
        "checks Cask style using RuboCop"
      end
AnastasiaSulyagina's avatar
AnastasiaSulyagina committed

Markus Reiter's avatar
Markus Reiter committed
      option "--fix", :fix, false
AnastasiaSulyagina's avatar
AnastasiaSulyagina committed

      def run
        install_rubocop
Mike McQuaid's avatar
Mike McQuaid committed
        cache_env = { "XDG_CACHE_HOME" => "#{HOMEBREW_CACHE}/style" }
        system(cache_env, "rubocop", *rubocop_args, "--", *cask_paths)
Markus Reiter's avatar
Markus Reiter committed
        raise CaskError, "style check failed" unless $CHILD_STATUS.success?
        true
AnastasiaSulyagina's avatar
AnastasiaSulyagina committed

      def install_rubocop
        capture_stderr do
            Homebrew.install_gem_setup_path! "rubocop-cask", HOMEBREW_RUBOCOP_CASK_VERSION, "rubocop"
          rescue SystemExit
Markus Reiter's avatar
Markus Reiter committed
            raise CaskError, Tty.strip_ansi($stderr.string).chomp.sub(/\AError: /, "")
AnastasiaSulyagina's avatar
AnastasiaSulyagina committed
      end

      def cask_paths
Markus Reiter's avatar
Markus Reiter committed
        @cask_paths ||= if args.empty?
          Hbc.all_tapped_cask_dirs
Markus Reiter's avatar
Markus Reiter committed
        elsif args.any? { |file| File.exist?(file) }
          args
Markus Reiter's avatar
Markus Reiter committed
          args.map { |token| CaskLoader.path(token) }
AnastasiaSulyagina's avatar
AnastasiaSulyagina committed

      def rubocop_args
        fix? ? autocorrect_args : default_args
      end
AnastasiaSulyagina's avatar
AnastasiaSulyagina committed

      def default_args
        [
          "--require", "rubocop-cask",
          "--force-default-config",
          "--force-exclusion",
          "--format", "simple"
AnastasiaSulyagina's avatar
AnastasiaSulyagina committed

      def autocorrect_args
        default_args + ["--auto-correct"]
      end
    end
AnastasiaSulyagina's avatar
AnastasiaSulyagina committed
  end
end