Sha256: 6f0bde6d44a393c249fc396b046b10bc2a9c28d5eb2d956a021126712eb9e0f7

Contents?: true

Size: 1.26 KB

Versions: 1

Compression:

Stored size: 1.26 KB

Contents

# typed: strict
# frozen_string_literal: true

module RBI
  class Loc
    extend T::Sig

    sig { returns(T.nilable(String)) }
    attr_reader :file

    sig { returns(T.nilable(Integer)) }
    attr_reader :begin_line, :end_line, :begin_column, :end_column

    sig do
      params(
        file: T.nilable(String),
        begin_line: T.nilable(Integer),
        end_line: T.nilable(Integer),
        begin_column: T.nilable(Integer),
        end_column: T.nilable(Integer),
      ).void
    end
    def initialize(file: nil, begin_line: nil, end_line: nil, begin_column: nil, end_column: nil)
      @file = file
      @begin_line = begin_line
      @end_line = end_line
      @begin_column = begin_column
      @end_column = end_column
    end

    sig { returns(String) }
    def to_s
      "#{file}:#{begin_line}:#{begin_column}-#{end_line}:#{end_column}"
    end

    sig { returns(T.nilable(String)) }
    def source
      file = self.file
      return unless file
      return unless ::File.file?(file)

      return ::File.read(file) unless begin_line && end_line

      string = String.new
      ::File.foreach(file).with_index do |line, line_number|
        string << line if line_number + 1 >= begin_line && line_number + 1 <= end_line
      end
      string
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rbi-0.0.17 lib/rbi/loc.rb