syntax = "proto2";

package bazel_analyze;

// A DependencyGroup represents a list of alternatives for satisfying
// a missing dependency.
message DependencyGroup {
  // Represents the visibility status of this dependency group. All the
  // dependencies have the same visibility status indicated by the visibility
  // field. Producers of this message (i.e. checkdeps) will ensure that
  // the invariant is true.
  enum Visibility {
    // Visibility was not considered. (Default)
    UNKNOWN = 0;
    // All the alternatives are visible
    ALL_VISIBLE = 1;
    // All the alternatives are invisible
    ALL_INVISIBLE = 2;
  }

  repeated string dependency = 1;
  optional Visibility visibility = 2 [default = UNKNOWN];
  // The set of import paths for which any of these dependencies can provide.
  // It is legal for there to be multiple entries there (in practice it is
  // not very common). This happens if the dependencies required by one
  // import_path is a subset of the other. In that case, the smaller set of
  // dependencies is populated in dependency field, and both import_path's are
  // listed here.
  repeated string import_path = 3;
};

// Represents information about arbitrary non-deps attributes.
message AttributeReport {
  // Name of the attribute (e.g. "runtime_deps").
  optional string attribute = 1;
  // Attribute value that is required but missing.
  repeated string missing_value = 2;
  // Attribute value that is declared but not needed.
  repeated string unnecessary_value = 3;
}

// The result of checking a single build rule (called X in comments
// below) for missing or unnecessary dependencies.  Produced by
// java/com/google/devtools/build/checkbuilddeps (which for external
// users means it's produced by bazel analyze).
message DependencyReport {
  required string rule = 1;  // Name of rule X, in canonical google3 format.

  // Names of targets that are, or should be, declared as dependencies
  // by rule X.  Some need to be declared and some don't; in some
  // cases it is impossible to tell by static analysis.  Each is the
  // full canonical name of the target, i.e. //x/y:z, or the shorthand
  // form if the target name equals the package name, i.e. //x/y
  // (shorthand for //x/y:y).

  // Declared and needed. Removing these dependencies should break the build.
  repeated string necessary_dependency = 2;

  // Declared but not needed. Removing these dependencies should not break
  // the build.
  repeated string unnecessary_dependency = 3;

  // Can't tell. These may be dependencies where no corresponding imports
  // were found, but alwayslink=1.
  repeated string ambiguous_dependency = 4;

  // Needed but not declared. If there are imports which can be satisfied
  // by more than one dependency declared in a best-matching package, list
  // all of them. If this list is not empty, we expect the build to break.
  repeated DependencyGroup missing_dependency_group = 8;

  // Files/classes that a source file imports, but for which no
  // appropriate dependency could be found. We expect the build to break
  // if this list is not empty.
  // NOTE: If there are unreseolved imports, it may indicate that
  // analysis failed to connect a declared dependency with a
  // corresponding import statement, and so you may want to have less
  // faith in the unnecessary_dependency field (though, in general,
  // rules in unnecessary_dependency are still PROBABLY unnecessary).
  repeated string unresolved_import = 7;

  // Source files that are inputs to the rule but cannot be found.
  // Values are absolute labels, e.g. '//foo:bar/baz.c'.
  repeated string missing_source_file = 13;

  // General-purpose feedback messages from the dependency checker
  // (errors, warnings, any kind of info).
  repeated string feedback = 6;

  // Indicates whether the dependency analysis completed without errors.
  optional bool successful = 10 [default=true];
};

// Aggregate DependencyReports for multiple analysis
// targets - used to support bazel analyze --analysis_output=proto
message AnalyzeResult {
  repeated DependencyReport dependency_report = 1;
}
