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