Sha256: 08895a2682791103615b8b080087032b9b1470e6804d0f8c3bb1bd770642c25c

Contents?: true

Size: 1.6 KB

Versions: 1

Compression:

Stored size: 1.6 KB

Contents

# frozen_string_literal: true

module RuboCop
  module Cop
    module Style
      # Checks for presence or absence of braces around hash literal as a last
      # array item depending on configuration.
      #
      # @example EnforcedStyle: braces (default)
      #   # bad
      #   [1, 2, one: 1, two: 2]
      #
      #   # good
      #   [1, 2, { one: 1, two: 2 }]
      #
      # @example EnforcedStyle: no_braces
      #   # bad
      #   [1, 2, { one: 1, two: 2 }]
      #
      #   # good
      #   [1, 2, one: 1, two: 2]
      #
      class HashAsLastArrayItem < Base
        include ConfigurableEnforcedStyle
        extend AutoCorrector

        def on_hash(node)
          return unless last_array_item?(node)

          if braces_style?
            check_braces(node)
          else
            check_no_braces(node)
          end
        end

        private

        def last_array_item?(node)
          parent = node.parent
          return false unless parent

          parent.array_type? && parent.values.last == node
        end

        def check_braces(node)
          return if node.braces?

          add_offense(node, message: 'Wrap hash in `{` and `}`.') do |corrector|
            corrector.wrap(node, '{', '}')
          end
        end

        def check_no_braces(node)
          return unless node.braces?

          add_offense(node, message: 'Omit the braces around the hash.') do |corrector|
            corrector.remove(node.loc.begin)
            corrector.remove(node.loc.end)
          end
        end

        def braces_style?
          style == :braces
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rubocop-0.89.0 lib/rubocop/cop/style/hash_as_last_array_item.rb