# frozen_string_literal: true

module RuboCop
  module Cop
    module Style
      # Bans the usage of “•” (bullet) in HTML/HAML in favor of “·” (middle dot) in string literals
      class MiddleDot < Base
        extend AutoCorrector
        extend Util

        # rubocop:disable Style/MiddleDot
        BULLET = '•'
        # rubocop:enable Style/MiddleDot
        MIDDLE_DOT = '·'
        MESSAGE = "Use '#{MIDDLE_DOT}' (middle dot) instead of '#{BULLET}' (bullet)".freeze

        def on_str(node)
          # Constants like __FILE__ are handled as strings,
          # but don't respond to begin.
          return unless node.loc.respond_to?(:begin) && node.loc.begin

          return unless node.value.include?(BULLET)

          add_offense(node, message: MESSAGE) do |corrector|
            corrector.replace(node, node.source.gsub(BULLET, MIDDLE_DOT))
          end
        end
      end
    end
  end
end