blob: 1827a2a97b28c14f684162616a0cf9e6f7981b50 [file] [log] [blame]
// Copyright 2019 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.
//
// Protos for Stardoc data.
//
// Stardoc collects information about Starlark functions, providers, and rules.
syntax = "proto3";
package stardoc_output;
// option java_api_version = 2;
option java_package = "com.google.devtools.build.lib.starlarkdocextract";
option java_outer_classname = "StardocOutputProtos";
// The root output proto of Stardoc. An invocation of Stardoc on a single file
// will output exactly one instance of this proto, representing all
// documentation for the input Starlark file.
message ModuleInfo {
repeated RuleInfo rule_info = 1;
repeated ProviderInfo provider_info = 2;
repeated StarlarkFunctionInfo func_info = 3;
repeated AspectInfo aspect_info = 4;
// The docstring present at the top of the input Starlark file.
string module_docstring = 5;
// The display form of the label of the module file (as seen from the
// starlark_doc_extract or Stardoc target's repo). Unset when there is no
// module file (e.g. when the module is a REPL, or in Bazel's internal tests).
string file = 6;
repeated ModuleExtensionInfo module_extension_info = 7;
repeated RepositoryRuleInfo repository_rule_info = 8;
repeated MacroInfo macro_info = 9;
}
// Representation of a Starlark rule attribute type. These generally
// have a one-to-one correspondence with functions defined at
// https://bazel.build/rules/lib/attr.
enum AttributeType {
UNKNOWN = 0;
// A special case of STRING; all rules have exactly one implicit
// attribute "name" of type NAME.
NAME = 1;
INT = 2;
LABEL = 3;
STRING = 4;
STRING_LIST = 5;
INT_LIST = 6;
LABEL_LIST = 7;
BOOLEAN = 8;
LABEL_STRING_DICT = 9;
STRING_DICT = 10;
STRING_LIST_DICT = 11;
OUTPUT = 12;
OUTPUT_LIST = 13;
LABEL_DICT_UNARY = 14;
}
// Representation of a Starlark rule definition.
message RuleInfo {
// In Stardoc and starlark_doc_extract output, this is the name under which
// the rule is made accessible to a user of this module, including any structs
// it is nested in, for example "foo.foo_library".
//
// In query output, this is the name under which the rule was defined (which
// might be a private symbol prefixed with "_").
string rule_name = 1;
// The documentation string of the rule.
string doc_string = 2;
// The attributes of the rule.
repeated AttributeInfo attribute = 3;
// Note: legacy Stardoc (0.5.x and earlier) does not set any fields below.
// The module where and the name under which the rule was originally declared.
OriginKey origin_key = 4;
// The list of providers that the rule's implementation must return. Unset if
// the rule lists no advertised providers.
ProviderNameGroup advertised_providers = 5;
// True if this is a test rule.
bool test = 6;
// True if this is an executable rule.
//
// Note: if test is true, executable is also true (test rules are implicitly
// executable).
bool executable = 7;
}
// Representation of a Starlark symbolic macro definition.
// Note: symbolic macros (and thus, their documentation format) are an
// experimental feature gated by the --experimental_enable_first_class_macros
// flag.
message MacroInfo {
// The name under which the macro is made accessible to a user of this module,
// including any structs it is nested in, for example "foo.foo_library".
string macro_name = 1;
// The documentation string of the macro.
string doc_string = 2;
// The attributes of the macro.
repeated AttributeInfo attribute = 3;
// The module where and the name under which the macro was originally
// declared.
OriginKey origin_key = 4;
}
// Representation of a Starlark rule, repository rule, or module extension tag
// attribute definition, comprised of an attribute name, and a schema defined by
// a call to one of the 'attr' module methods enumerated at
// https://bazel.build/rules/lib/attr
message AttributeInfo {
// The name of the attribute.
string name = 1;
// The documentation string of the attribute, supplied via the 'doc'
// parameter to the schema-creation call.
string doc_string = 2;
// The type of the attribute, defined generally by which function is invoked
// in the attr module.
AttributeType type = 3;
// If true, all targets of the rule must specify a value for this attribute.
bool mandatory = 4;
// The target(s) in this attribute must define all the providers of at least
// one of the ProviderNameGroups in this list. If the Attribute Type is not a
// label, a label list, or a label-keyed string dictionary, the field will be
// left empty. For attributes of a repository rule or a module extension tag,
// this attribute is meaningless and may be ignored.
// TODO(b/290788853): ensure this field is always empty for attributes of a
// repository rule or a module extension tag.
repeated ProviderNameGroup provider_name_group = 5;
// The string representation of the default value of this attribute.
string default_value = 6;
// If true, the attribute is non-configurable.
bool nonconfigurable = 7;
}
// Representation of a set of providers.
message ProviderNameGroup {
// The names of the providers.
//
// This field is only intended for rendering human-readable output.
// Please use origin_key (a list of the same length and in the same order as
// this field) for cross-references and tooling.
//
// Note: legacy Stardoc (0.5.x and earlier) is unable to extract the name in
// some circumstances (for example, if the provider is nested in a struct),
// and in that case, the provider name will be "Unknown Provider".
repeated string provider_name = 1;
// A list of unambiguous references to providers, of the same length and in
// the same order as the provider_name list.
//
// For provider symbols, this means modules where and the names under which
// the providers were originally declared.
//
// For legacy struct providers, origin_key.file is unset.
//
// Note: legacy Stardoc (0.5.x and earlier) does not set this field.
repeated OriginKey origin_key = 2;
}
// Representation of Starlark function definition.
message StarlarkFunctionInfo {
// The name under which the function is made accessible to a user of this
// module, including any structs it is nested in, for example
// "foo.frobnicate".
string function_name = 1;
// The parameters for the function, in the following order:
// - positional parameters
// - keyword-only parameters
// - residual varargs parameter (`*args`)
// - residual keyword arguments parameter (`**kwargs`)
// This order differs from the order in which parameters are listed in the
// function's declaration (where positional parameters and keyword-only
// parameters are separated either by `*` or `*args`). The declaration order
// can be recovered by looking for the transition from ordinary/positional to
// keyword-only.
repeated FunctionParamInfo parameter = 2;
// The documented description of the function (if specified in the function's
// docstring).
string doc_string = 3;
// The return value for the function.
FunctionReturnInfo return = 4;
// The deprecation for the function.
FunctionDeprecationInfo deprecated = 5;
// The module where and the name under which the function was originally
// declared.
//
// Note: legacy Stardoc (0.5.x and earlier) does not set this field.
OriginKey origin_key = 6;
}
// Representation of the syntactic role of a given function parameter.
enum FunctionParamRole {
PARAM_ROLE_UNSPECIFIED = 0;
// An ordinary parameter which may be used as a positional or by keyword.
PARAM_ROLE_ORDINARY = 1;
// A positional-only parameter; such parameters cannot be defined in pure
// Starlark code, but exist in some natively-defined functions.
PARAM_ROLE_POSITIONAL_ONLY = 2;
// A keyword-only parameter, i.e. a non-vararg/kwarg parameter that follows
// `*` or `*args` in the function's declaration.
PARAM_ROLE_KEYWORD_ONLY = 3;
// Residual varargs, typically `*args` in the function's declaration.
PARAM_ROLE_VARARGS = 4;
// Residual keyword arguments, typically `**kwargs` in the function's
// declaration.
PARAM_ROLE_KWARGS = 5;
}
// Representation of a Starlark function parameter definition.
message FunctionParamInfo {
// The name of the parameter. This does *not* include the `*` or `**` prefix
// for varargs or residual keyword argument parameters.
string name = 1;
// The documented description of the parameter (if specified in the function's
// docstring).
string doc_string = 2;
// If not an empty string, the default value of the parameter displayed
// as a string.
string default_value = 3;
// If true, the default value is unset and a value is needed for this
// parameter. This might be false even if defaultValue is empty in the case of
// special parameter such as *args and **kwargs"
bool mandatory = 4;
// The parameter's syntactic role.
FunctionParamRole role = 5;
}
message FunctionReturnInfo {
// The documented return value of the function (if specified in the function's
// docstring).
string doc_string = 1;
}
message FunctionDeprecationInfo {
// The documented deprecation of the function (if specified in the function's
// docstring).
string doc_string = 1;
}
// Representation of a Starlark provider field definition, comprised of
// the field name and provider description.
message ProviderFieldInfo {
// The name of the field.
string name = 1;
// The description of the provider.
string doc_string = 2;
}
// Representation of a Starlark provider definition.
message ProviderInfo {
// The name under which the provider is made accessible to a user of this
// module, including any structs it is nested in, for example "foo.FooInfo".
string provider_name = 1;
// The description of the provider.
string doc_string = 2;
// The fields of the provider.
repeated ProviderFieldInfo field_info = 3;
// Note: legacy Stardoc (0.5.x and earlier) does not set any fields below.
// The module where and the name under which the provider was originally
// declared.
OriginKey origin_key = 4;
// The provider's init callback.
StarlarkFunctionInfo init = 5;
}
// Representation of a Starlark aspect definition.
message AspectInfo {
// The name under which the aspect is made accessible to a user of this
// module, including any structs it is nested in, for example
// "foo.foo_aspect".
string aspect_name = 1;
// The documentation string of the aspect.
string doc_string = 2;
// The rule attributes along which the aspect propagates.
repeated string aspect_attribute = 3;
// The attributes of the aspect.
repeated AttributeInfo attribute = 4;
// The module where and the name under which the aspect was originally
// declared.
//
// Note: legacy Stardoc (0.5.x and earlier) does not set this field.
OriginKey origin_key = 5;
}
// Representation of a Bazel module extension, i.e. the object returned by
// calling `module_extension(...)`.
//
// Note: legacy Stardoc (0.5.x and earlier) does not emit this message.
message ModuleExtensionInfo {
// The name under which the extension is made accessible to a user of this
// Starlark module.
string extension_name = 1;
// The documentation string of the extension.
string doc_string = 2;
// The tag classes of the extension.
repeated ModuleExtensionTagClassInfo tag_class = 3;
// The Starlark module where the Bazel module extension was originally
// declared; origin_key.name is currently never set.
// TODO(arostovtsev): attempt to retrieve the name under which the module
// extension was originally declared if it was declared as a global.
OriginKey origin_key = 4;
}
// Representation of a Bazel module extension tag class.
message ModuleExtensionTagClassInfo {
// The name of the tag for this tag class.
string tag_name = 1;
// The documentation string of the tag class.
string doc_string = 2;
// The tag class's attributes.
repeated AttributeInfo attribute = 3;
}
// Representation of a Bazel repository rule, i.e. the object returned by
// calling `repository_rule(...)`.
//
// Note: legacy Stardoc (0.5.x and earlier) does not emit this message, instead
// using RuleInfo.
message RepositoryRuleInfo {
// The name under which the repository rule is made accessible to a user of
// this Starlark module.
string rule_name = 1;
// The documentation string of the repository rule.
string doc_string = 2;
// The attributes of the repository rule.
repeated AttributeInfo attribute = 3;
// Environment variables that this repository rule depends on.
repeated string environ = 4;
// The Starlark module where and the name under which the repository rule was
// originally declared.
OriginKey origin_key = 5;
}
// Representation of the origin of a rule, provider, aspect, or function.
// Intended to be used for building unambiguous cross-references: for example,
// between an element of a ProviderNameGroup required by a rule attribute and
// its corresponding ProviderInfo.
message OriginKey {
// The name under which the entity was originally exported. Unset when the
// entity was not exported in its module.
string name = 1;
// The display form of the label of the module file in which the entity was
// originally declared (as seen from the starlark_doc_extract or Stardoc
// target's repo), or "<native>" for Bazel's built-in entities implemented in
// Java. Unset when there is no module file (such as for legacy struct
// providers, when the module is a REPL, or in Bazel's internal tests).
string file = 2;
}