Sha256: 868593b930378130c6c9937821dbcd68d18c6f1602df3c2517a3f0a5dc8b1efc

Contents?: true

Size: 1.95 KB

Versions: 12

Compression:

Stored size: 1.95 KB

Contents

# encoding: utf-8

module RuboCop
  module Cop
    # Common functionality for checking for spaces inside various
    # kinds of brackets.
    module SpaceInside
      include SurroundingSpace
      MSG = 'Space inside %s detected.'

      def investigate(processed_source)
        @processed_source = processed_source
        brackets = Brackets.new(*specifics)
        processed_source.tokens.each_cons(2) do |t1, t2|
          next unless brackets.left_side?(t1) || brackets.right_side?(t2)

          # If the second token is a comment, that means that a line break
          # follows, and that the rules for space inside don't apply.
          next if t2.type == :tCOMMENT
          next unless t2.pos.line == t1.pos.line && space_between?(t1, t2)

          range = Parser::Source::Range.new(processed_source.buffer,
                                            t1.pos.end_pos,
                                            t2.pos.begin_pos)
          add_offense(range, range, format(MSG, brackets.kind))
        end
      end

      def autocorrect(range)
        @corrections << ->(corrector) { corrector.remove(range) }
      end

      # Wraps info about the brackets. Makes it easy to check whether a token
      # is one of the brackets.
      #
      # @example Parentheses `()`
      #   Brackets.new(:tLPAREN, :tRPAREN, 'parentheses')
      #
      # @example Square brackets `[]`
      #   Brackets.new([:tLBRACK, :tLBRACK2], :tRBRACK, 'square brackets')
      #
      class Brackets
        attr_reader :kind

        def initialize(left, right, kind)
          @left_side_types = [left].flatten
          @right_side_type = right
          @kind = kind
        end

        def left_side?(token)
          # Left side bracket has to be able to match multiple types
          # (e.g. :tLBRACK and :tLBRACK2)
          @left_side_types.include?(token.type)
        end

        def right_side?(token)
          @right_side_type == token.type
        end
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 2 rubygems

Version Path
rubyjobbuilderdsl-0.0.2 vendor/bundle/ruby/2.1.0/gems/rubocop-0.26.0/lib/rubocop/cop/mixin/space_inside.rb
rubyjobbuilderdsl-0.0.1 vendor/bundle/ruby/2.1.0/gems/rubocop-0.26.0/lib/rubocop/cop/mixin/space_inside.rb
rubocop-0.30.1 lib/rubocop/cop/mixin/space_inside.rb
rubocop-0.30.0 lib/rubocop/cop/mixin/space_inside.rb
rubocop-0.29.1 lib/rubocop/cop/mixin/space_inside.rb
rubocop-0.29.0 lib/rubocop/cop/mixin/space_inside.rb
rubocop-0.28.0 lib/rubocop/cop/mixin/space_inside.rb
rubocop-0.27.1 lib/rubocop/cop/mixin/space_inside.rb
rubocop-0.27.0 lib/rubocop/cop/mixin/space_inside.rb
rubocop-0.26.1 lib/rubocop/cop/mixin/space_inside.rb
rubocop-0.26.0 lib/rubocop/cop/mixin/space_inside.rb
rubocop-0.25.0 lib/rubocop/cop/mixin/space_inside.rb