Sha256: 0affcf705a141f52ccfc99f8e4d0a755ee839c369e2ce5b49e1f958310d35eca

Contents?: true

Size: 1.73 KB

Versions: 6795

Compression:

Stored size: 1.73 KB

Contents

# frozen_string_literal: true

module RuboCop
  module Cop
    # Identifier of all cops containing a department and cop name.
    #
    # All cops are identified by their badge. For example, the badge
    # for `RuboCop::Cop::Layout::Tab` is `Layout/Tab`. Badges can be
    # parsed as either `Department/CopName` or just `CopName` to allow
    # for badge references in source files that omit the department
    # for RuboCop to infer.
    class Badge
      # Error raised when a badge parse fails.
      class InvalidBadge < Error
        MSG = 'Invalid badge %<badge>p. ' \
              'Expected `Department/CopName` or `CopName`.'.freeze

        def initialize(token)
          super(format(MSG, badge: token))
        end
      end

      attr_reader :department, :cop_name

      def self.for(class_name)
        new(*class_name.split('::').last(2))
      end

      def self.parse(identifier)
        parts = identifier.split('/', 2)

        raise InvalidBadge, identifier if parts.size > 2

        if parts.one?
          new(nil, *parts)
        else
          new(*parts)
        end
      end

      def initialize(department, cop_name)
        @department = department.to_sym if department
        @cop_name   = cop_name
      end

      def ==(other)
        hash == other.hash
      end
      alias eql? ==

      def hash
        [department, cop_name].hash
      end

      def match?(other)
        cop_name == other.cop_name &&
          (!qualified? || department == other.department)
      end

      def to_s
        qualified? ? "#{department}/#{cop_name}" : cop_name
      end

      def qualified?
        !department.nil?
      end

      def with_department(department)
        self.class.new(department, cop_name)
      end
    end
  end
end

Version data entries

6,795 entries across 6,789 versions & 25 rubygems

Version Path
rubocop-0.58.0 lib/rubocop/cop/badge.rb
vagrant-packet-0.1.1 vendor/bundle/ruby/2.4.0/gems/rubocop-0.57.2/lib/rubocop/cop/badge.rb
rubocop-0.57.2 lib/rubocop/cop/badge.rb
rubocop-0.57.1 lib/rubocop/cop/badge.rb
rubocop-0.57.0 lib/rubocop/cop/badge.rb
rubocop-0.56.0 lib/rubocop/cop/badge.rb
rubocop-0.55.0 lib/rubocop/cop/badge.rb
rubocop-0.54.0 lib/rubocop/cop/badge.rb
rubocop-0.53.0 lib/rubocop/cop/badge.rb
rubocop-0.52.1 lib/rubocop/cop/badge.rb
rubocop-0.52.0 lib/rubocop/cop/badge.rb
rubocop-0.51.0 lib/rubocop/cop/badge.rb
rubocop-0.50.0 lib/rubocop/cop/badge.rb
rubocop-0.49.1 lib/rubocop/cop/badge.rb
rubocop-0.49.0 lib/rubocop/cop/badge.rb