module Prism

class ParseResult < Result
  class Comments
    interface _Target
      def start_offset: () -> Integer
      def end_offset: () -> Integer
      def encloses?: (comment) -> bool
      def leading_comment: (comment) -> void
      def trailing_comment: (comment) -> void
    end

    class NodeTarget
      include _Target

      attr_reader node: node

      def initialize: (node) -> void
    end

    class LocationTarget
      include _Target

      attr_reader location: Location

      def initialize: (Location location) -> void
    end

    attr_reader parse_result: ParseResult

    def initialize: (ParseResult parse_result) -> void
    def attach!: () -> void

    private

    def nearest_targets: (node, comment) -> [_Target?, _Target, _Target?]
  end
end

end