Sha256: 00caf216e91fa4dcc6d36d4378602e652698d8c2dfc063a9958ff0c64c2ebb95

Contents?: true

Size: 1.76 KB

Versions: 17

Compression:

Stored size: 1.76 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::IndentationStyle` is `Layout/IndentationStyle`.
    # 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`.'

        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
        @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

17 entries across 17 versions & 4 rubygems

Version Path
plaid-14.13.0 vendor/bundle/ruby/3.0.0/gems/rubocop-0.91.1/lib/rubocop/cop/badge.rb
plaid-14.12.1 vendor/bundle/ruby/3.0.0/gems/rubocop-0.91.1/lib/rubocop/cop/badge.rb
plaid-14.12.0 vendor/bundle/ruby/2.6.0/gems/rubocop-0.91.1/lib/rubocop/cop/badge.rb
plaid-14.11.1 vendor/bundle/ruby/2.6.0/gems/rubocop-0.91.1/lib/rubocop/cop/badge.rb
plaid-14.10.0 vendor/bundle/ruby/2.6.0/gems/rubocop-0.91.1/lib/rubocop/cop/badge.rb
plaid-14.7.0 vendor/bundle/ruby/2.6.0/gems/rubocop-0.91.1/lib/rubocop/cop/badge.rb
rubocop-0.93.1 lib/rubocop/cop/badge.rb
rubocop-0.93.0 lib/rubocop/cop/badge.rb
rubocop-0.92.0 lib/rubocop/cop/badge.rb
rubocop-0.91.1 lib/rubocop/cop/badge.rb
rubocop-0.91.0 lib/rubocop/cop/badge.rb
grape-extra_validators-2.0.0 vendor/bundle/ruby/2.6.0/gems/rubocop-0.90.0/lib/rubocop/cop/badge.rb
rubocop-0.90.0 lib/rubocop/cop/badge.rb
rubocop-0.89.1 lib/rubocop/cop/badge.rb
rubocop-0.89.0 lib/rubocop/cop/badge.rb
rubocop-0.88.0 lib/rubocop/cop/badge.rb
rbhint-0.87.1.rc1 lib/rubocop/cop/badge.rb