Sha256: 68cf6ca1dde22f7daf86e6009cd5d635589721d3d45efdcd03de0748faee9d6b

Contents?: true

Size: 1.95 KB

Versions: 338

Compression:

Stored size: 1.95 KB

Contents

RSpec::Support.require_rspec_support 'source/location'

module RSpec
  module Support
    class Source
      # @private
      # A wrapper for Ripper token which is generated with `Ripper.lex`.
      class Token
        CLOSING_TYPES_BY_OPENING_TYPE = {
          :on_lbracket    => :on_rbracket,
          :on_lparen      => :on_rparen,
          :on_lbrace      => :on_rbrace,
          :on_heredoc_beg => :on_heredoc_end
        }.freeze

        CLOSING_KEYWORDS_BY_OPENING_KEYWORD = {
          'def' => 'end',
          'do'  => 'end',
        }.freeze

        attr_reader :token

        def self.tokens_from_ripper_tokens(ripper_tokens)
          ripper_tokens.map { |ripper_token| new(ripper_token) }.freeze
        end

        def initialize(ripper_token)
          @token = ripper_token.freeze
        end

        def location
          @location ||= Location.new(*token[0])
        end

        def type
          token[1]
        end

        def string
          token[2]
        end

        def ==(other)
          token == other.token
        end

        alias_method :eql?, :==

        def inspect
          "#<#{self.class} #{type} #{string.inspect}>"
        end

        def keyword?
          type == :on_kw
        end

        def opening?
          opening_delimiter? || opening_keyword?
        end

        def closed_by?(other)
          closed_by_delimiter?(other) || closed_by_keyword?(other)
        end

      private

        def opening_delimiter?
          CLOSING_TYPES_BY_OPENING_TYPE.key?(type)
        end

        def opening_keyword?
          return false unless keyword?
          CLOSING_KEYWORDS_BY_OPENING_KEYWORD.key?(string)
        end

        def closed_by_delimiter?(other)
          other.type == CLOSING_TYPES_BY_OPENING_TYPE[type]
        end

        def closed_by_keyword?(other)
          return false unless other.keyword?
          other.string == CLOSING_KEYWORDS_BY_OPENING_KEYWORD[string]
        end
      end
    end
  end
end

Version data entries

338 entries across 269 versions & 68 rubygems

Version Path
mumukit-content-type-1.11.1 vendor/bundle/ruby/2.6.0/gems/rspec-support-3.10.2/lib/rspec/support/source/token.rb
logstash-output-scalyr-0.1.20.beta vendor/bundle/jruby/2.5.0/gems/rspec-support-3.8.2/lib/rspec/support/source/token.rb
logstash-output-scalyr-0.1.19.beta vendor/bundle/jruby/2.5.0/gems/rspec-support-3.8.2/lib/rspec/support/source/token.rb
logstash-output-scalyr-0.1.18.beta vendor/bundle/jruby/2.5.0/gems/rspec-support-3.8.2/lib/rspec/support/source/token.rb
logstash-output-scalyr-0.1.17.beta vendor/bundle/jruby/2.5.0/gems/rspec-support-3.8.2/lib/rspec/support/source/token.rb
logstash-output-scalyr-0.1.16.beta vendor/bundle/jruby/2.5.0/gems/rspec-support-3.8.2/lib/rspec/support/source/token.rb
logstash-output-scalyr-0.1.15.beta vendor/bundle/jruby/2.5.0/gems/rspec-support-3.8.2/lib/rspec/support/source/token.rb
logstash-output-scalyr-0.1.14.beta vendor/bundle/jruby/2.5.0/gems/rspec-support-3.8.2/lib/rspec/support/source/token.rb
logstash-output-scalyr-0.1.13 vendor/bundle/jruby/2.5.0/gems/rspec-support-3.8.2/lib/rspec/support/source/token.rb
passbase-1.3.0 vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/source/token.rb
logstash-output-scalyr-0.1.12 vendor/bundle/jruby/2.5.0/gems/rspec-support-3.8.2/lib/rspec/support/source/token.rb
logstash-output-scalyr-0.1.11.beta vendor/bundle/jruby/2.5.0/gems/rspec-support-3.8.2/lib/rspec/support/source/token.rb
logstash-output-scalyr-0.1.10.beta vendor/bundle/jruby/2.5.0/gems/rspec-support-3.8.2/lib/rspec/support/source/token.rb
logstash-output-scalyr-0.1.9 vendor/bundle/jruby/2.5.0/gems/rspec-support-3.8.2/lib/rspec/support/source/token.rb
logstash-output-scalyr-0.1.8 vendor/bundle/jruby/2.5.0/gems/rspec-support-3.8.2/lib/rspec/support/source/token.rb
logstash-output-scalyr-0.1.7 vendor/bundle/jruby/2.5.0/gems/rspec-support-3.8.2/lib/rspec/support/source/token.rb
tdiary-5.1.6 vendor/bundle/ruby/2.7.0/gems/tdiary-5.1.5/vendor/bundle/ruby/3.0.0/gems/rspec-support-3.10.0/lib/rspec/support/source/token.rb
tdiary-5.1.6 vendor/bundle/ruby/2.7.0/gems/tdiary-5.1.5/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.10.2/lib/rspec/support/source/token.rb
tdiary-5.1.6 vendor/bundle/ruby/2.7.0/gems/rspec-support-3.10.2/lib/rspec/support/source/token.rb
tdiary-5.1.6 vendor/bundle/ruby/3.0.0/gems/rspec-support-3.10.2/lib/rspec/support/source/token.rb