lib/solargraph/source_map/region.rb



# frozen_string_literal: true


module Solargraph
  class SourceMap
    # Data used by the NodeProcessor library to track context at various

    # locations in a source.

    #

    class Region
      # @return [Pin::Closure]

      attr_reader :closure

      # @return [Symbol]

      attr_reader :scope

      # @return [Symbol]

      attr_reader :visibility

      # @return [Solargraph::Source]

      attr_reader :source

      # @param source [Source]

      # @param namespace [String]

      # @param scope [Symbol]

      # @param visibility [Symbol]

      def initialize source: Solargraph::Source.load_string(''), closure: nil,
                     scope: nil, visibility: :public
        @source = source
        # @closure = closure

        @closure = closure || Pin::Namespace.new(name: '', location: source.location)
        @scope = scope
        @visibility = visibility
      end

      # @return [String]

      def filename
        source.filename
      end

      # Generate a new Region with the provided attribute changes.

      #

      # @param closure [Pin::Closure, nil]

      # @param scope [Symbol, nil]

      # @param visibility [Symbol, nil]

      # @return [Region]

      def update closure: nil, scope: nil, visibility: nil
        Region.new(
          source: source,
          closure: closure || self.closure,
          scope: scope || self.scope,
          visibility: visibility || self.visibility
        )
      end

      # @param node [Parser::AST::Node]

      # @return [String]

      def code_for node
        source.code_for(node)
      end
    end
  end
end