//===--- Index.proto - Remote index Protocol Buffers definition -----------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

syntax = "proto2";

package clang.clangd.remote;

// Common final result for streaming requests.
message FinalResult { optional bool has_more = 1; }

message LookupRequest { repeated string ids = 1; }

// The response is a stream of symbol messages and the terminating message
// indicating the end of stream.
message LookupReply {
  oneof kind {
    Symbol stream_result = 1;
    FinalResult final_result = 2;
  }
}

message FuzzyFindRequest {
  optional string query = 1;
  repeated string scopes = 2;
  optional bool any_scope = 3;
  optional uint32 limit = 4;
  optional bool restricted_for_code_completion = 5;
  repeated string proximity_paths = 6;
  repeated string preferred_types = 7;
}

// The response is a stream of symbol messages, and one terminating has_more
// message.
message FuzzyFindReply {
  oneof kind {
    Symbol stream_result = 1;
    FinalResult final_result = 2;
  }
}

message RefsRequest {
  repeated string ids = 1;
  optional uint32 filter = 2;
  optional uint32 limit = 3;
}

// The response is a stream of reference messages, and one terminating has_more
// message.
message RefsReply {
  oneof kind {
    Ref stream_result = 1;
    FinalResult final_result = 2;
  }
}

message Symbol {
  optional string id = 1;
  optional SymbolInfo info = 2;
  optional string name = 3;
  optional SymbolLocation definition = 4;
  optional string scope = 5;
  optional SymbolLocation canonical_declaration = 6;
  optional int32 references = 7;
  optional uint32 origin = 8;
  optional string signature = 9;
  optional string template_specialization_args = 10;
  optional string completion_snippet_suffix = 11;
  optional string documentation = 12;
  optional string return_type = 13;
  optional string type = 14;
  repeated HeaderWithReferences headers = 15;
  optional uint32 flags = 16;
}

message Ref {
  optional SymbolLocation location = 1;
  optional uint32 kind = 2;
}

message SymbolInfo {
  optional uint32 kind = 1;
  optional uint32 subkind = 2;
  optional uint32 language = 3;
  optional uint32 properties = 4;
}

message SymbolLocation {
  optional Position start = 1;
  optional Position end = 2;
  // clangd::SymbolLocation stores FileURI, but the protocol transmits a the
  // relative path. Because paths are different on the remote and local machines
  // they will be translated in the marshalling layer.
  optional string file_path = 3;
}

message Position {
  optional uint32 line = 1;
  optional uint32 column = 2;
}

message HeaderWithReferences {
  optional string header = 1;
  optional uint32 references = 2;
}

message RelationsRequest {
  repeated string subjects = 1;
  optional uint32 predicate = 2;
  optional uint32 limit = 3;
}

// The response is a stream of reference messages, and one terminating has_more
// message.
message RelationsReply {
  oneof kind {
    Relation stream_result = 1;
    FinalResult final_result = 2;
  }
}

// This struct does not mirror clangd::Relation but rather the arguments of
// SymbolIndex::relations callback.
message Relation {
  optional string subject_id = 1;
  optional Symbol object = 2;
}
