// Copyright 2017 The Bazel Authors. All rights reserved.
//
// 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 command_line;

// option java_api_version = 2;
option java_package = "com.google.devtools.build.lib.runtime.proto";

import "src/main/protobuf/option_filters.proto";

// Representation of a Bazel command line.
message CommandLine {
  // A title for this command line value, to differentiate it from others.
  // In particular, a single invocation may wish to report both the literal and
  // canonical command lines, and this label would be used to differentiate
  // between both versions. This is a string for flexibility.
  string command_line_label = 1;

  // A Bazel command line is made of distinct parts. For example,
  //    `bazel --nomaster_bazelrc test --nocache_test_results //foo:aTest`
  // has the executable "bazel", a startup flag, a command "test", a command
  // flag, and a test target. There could be many more flags and targets, or
  // none (`bazel info` for example), but the basic structure is there. The
  // command line should be broken down into these logical sections here.
  repeated CommandLineSection sections = 2;
}

// A section of the Bazel command line.
message CommandLineSection {
  // The name of this section, such as "startup_option" or "command".
  string section_label = 1;

  oneof section_type {
    // Sections with non-options, such as the list of targets or the command,
    // should use simple string chunks.
    ChunkList chunk_list = 2;

    // Startup and command options are lists of options and belong here.
    OptionList option_list = 3;
  }
}

// Wrapper to allow a list of strings in the "oneof" section_type.
message ChunkList {
  repeated string chunk = 1;
}

// Wrapper to allow a list of options in the "oneof" section_type.
message OptionList {
  repeated Option option = 1;
}

// A single command line option.
//
// This represents the option itself, but does not take into account the type of
// option or how the parser interpreted it. If this option is part of a command
// line that represents the actual input that Bazel received, it would, for
// example, include expansion flags as they are. However, if this option
// represents the canonical form of the command line, with the values as Bazel
// understands them, then the expansion flag, which has no value, would not
// appear, and the flags it expands to would.
message Option {
  // How the option looks with the option and its value combined. Depending on
  // the purpose of this command line report, this could be the canonical
  // form, or the way that the flag was set.
  //
  // Some examples: this might be `--foo=bar` form, or `--foo bar` with a space;
  // for boolean flags, `--nobaz` is accepted on top of `--baz=false` and other
  // negating values, or for a positive value, the unqualified `--baz` form
  // is also accepted. This could also be a short `-b`, if the flag has an
  // abbreviated form.
  string combined_form = 1;

  // The canonical name of the option, without the preceding dashes.
  string option_name = 2;

  // The value of the flag, or unset for flags that do not take values.
  // Especially for boolean flags, this should be in canonical form, the
  // combined_form field above gives room for showing the flag as it was set
  // if that is preferred.
  string option_value = 3;

  // This flag's tagged effects. See OptionEffectTag's java documentation for
  // details.
  repeated options.OptionEffectTag effect_tags = 4;

  // Metadata about the flag. See OptionMetadataTag's java documentation for
  // details.
  repeated options.OptionMetadataTag metadata_tags = 5;
}
