Sha256: e4a21c8e0738ce92212217eb993aff31e333009af647e0c1239b69382a5632ee

Contents?: true

Size: 1.72 KB

Versions: 12

Compression:

Stored size: 1.72 KB

Contents

module Parser
  module Source

    class Range
      attr_reader :source_buffer
      attr_reader :begin_pos, :end_pos

      def initialize(source_buffer, begin_pos, end_pos)
        @source_buffer       = source_buffer
        @begin_pos, @end_pos = begin_pos, end_pos

        freeze
      end

      def begin
        Range.new(@source_buffer, @begin_pos, @begin_pos)
      end

      def end
        Range.new(@source_buffer, @end_pos, @end_pos)
      end

      def size
        @end_pos - @begin_pos
      end

      alias length size

      def line
        line, _ = @source_buffer.decompose_position(@begin_pos)

        line
      end

      def column
        _, column = @source_buffer.decompose_position(@begin_pos)

        column
      end

      def column_range
        self.begin.column...self.end.column
      end

      def source_line
        @source_buffer.source_line(line)
      end

      def source
        @source_buffer.source[self.begin_pos...self.end_pos]
      end

      def is?(*what)
        what.include?(source)
      end

      def to_a
        (@begin_pos...@end_pos).to_a
      end

      def to_s
        line, column = @source_buffer.decompose_position(@begin_pos)

        [@source_buffer.name, line, column + 1].join(':')
      end

      def join(other)
        Range.new(@source_buffer,
            [@begin_pos, other.begin_pos].min,
            [@end_pos,   other.end_pos].max)
      end

      def ==(other)
        other.is_a?(Range) &&
          @source_buffer == other.source_buffer &&
          @begin_pos     == other.begin_pos     &&
          @end_pos       == other.end_pos
      end

      def inspect
        "#<Source::Range #{@source_buffer.name} #{@begin_pos}...#{@end_pos}>"
      end
    end

  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
parser-2.0.0.pre2 lib/parser/source/range.rb
parser-2.0.0.pre1 lib/parser/source/range.rb
parser-2.0.0.beta10 lib/parser/source/range.rb
parser-2.0.0.beta9 lib/parser/source/range.rb
parser-2.0.0.beta8 lib/parser/source/range.rb
parser-2.0.0.beta7 lib/parser/source/range.rb
parser-2.0.0.beta6 lib/parser/source/range.rb
parser-2.0.0.beta5 lib/parser/source/range.rb
parser-2.0.0.beta4 lib/parser/source/range.rb
parser-2.0.0.beta3 lib/parser/source/range.rb
parser-2.0.0.beta2 lib/parser/source/range.rb
parser-2.0.0.beta1 lib/parser/source/range.rb