/*
 * Copyright (C) 2024 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
syntax = "proto3";

package cc_analyzer;

option go_package = "ide_query/cc_analyzer_proto";

// Indicates the success/failure for analysis.
message Status {
  enum Code {
    OK = 0;
    FAILURE = 1;
  }
  Code code = 1;
  // Details about the status, might be displayed to user.
  optional string message = 2;
}

// Represents an Android checkout on user's workstation.
message RepoState {
  // Absolute path for the checkout in the workstation.
  // e.g. /home/user/work/android/
  string repo_dir = 1;
  // Relative to repo_dir.
  repeated string active_file_path = 2;
  // Repository relative path to output directory in workstation.
  string out_dir = 3;
  // Repository relative path to compile_commands.json in workstation.
  string comp_db_path = 4;
}

// Provides all the targets that are pre-requisities for running language
// services on active_file_paths.
message DepsResponse {
  // Build dependencies of a source file for providing language services.
  message Deps {
    // Relative to repo_dir.
    string source_file = 1;
    // Build target to execute for generating dep.
    repeated string build_target = 2;
    optional Status status = 3;
  }
  repeated Deps deps = 1;
  optional Status status = 2;
}

// Returns all the information necessary for providing language services for the
// active files.
message GeneratedFile {
  // Path to the file relative to repository root.
  string path = 1;

  // The text of the generated file, if not provided contents will be read
  // from the path above in user's workstation.
  optional bytes contents = 2;
}

message SourceFile {
  // Path to the source file relative to repository root.
  string path = 1;

  // Working directory used by the build system. All the relative
  // paths in compiler_arguments should be relative to this path.
  // Relative to repository root.
  string working_dir = 2;

  // Compiler arguments to compile the source file. If multiple variants
  // of the module being compiled are possible, the query script will choose
  // one.
  repeated string compiler_arguments = 3;

  // Any generated files that are used in compiling the file.
  repeated GeneratedFile generated = 4;

  // Paths to all of the sources, like build files, code generators,
  // proto files etc. that were used during analysis. Used to figure
  // out when a set of build artifacts are stale and the query tool
  // must be re-run.
  // Relative to repository root.
  repeated string deps = 5;

  // Represents analysis status for this particular file. e.g. not part
  // of the build graph.
  optional Status status = 6;
}

message IdeAnalysis {
  repeated SourceFile sources = 2;

  // Status representing overall analysis.
  // Should fail only when no analysis can be performed.
  optional Status status = 3;

  reserved 1;
}
