| 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; |
| } |