Archivos .bzl

Informar un problema

Métodos globales disponibles en todos los archivos .bzl.

Miembros

analysis_test_transition

transition analysis_test_transition(settings)

Crea una transición de configuración que se aplicará en las dependencias de la regla de análisis y prueba. Esta transición solo puede aplicarse a atributos de reglas con analysis_test = True. Estas reglas tienen capacidades restringidas (por ejemplo, el tamaño de su árbol de dependencias es limitado), por lo que las transiciones creadas con esta función tienen un alcance potencial limitado en comparación con las transiciones creadas con transition().

Esta función está diseñada principalmente para facilitar la biblioteca principal de Analysis Test Framework. Consulta la documentación (o la implementación) para conocer las prácticas recomendadas.

Parámetros

Parámetro Descripción
settings required
Es un diccionario que contiene información sobre los parámetros de configuración que deben establecerse con esta transición de configuración. Las claves son las etiquetas de configuración de compilación y los valores son sus nuevos valores posteriores a la transición. Ninguna otra configuración se modificó. Úsalo para declarar parámetros de configuración específicos que se deben establecer para que se apruebe una prueba de análisis.

aspecto

Aspect aspect(implementation, attr_aspects=[], attrs={}, required_providers=[], required_aspect_providers=[], provides=[], requires=[], fragments=[], host_fragments=[], toolchains=[], incompatible_use_toolchain_transition=False, doc=None, *, apply_to_generating_rules=False, exec_compatible_with=[], exec_groups=None, subrules=[])

Crea un aspecto nuevo. El resultado de esta función debe almacenarse en un valor global. Consulta la introducción a los Aspectos para obtener más detalles.

Parámetros

Parámetro Descripción
implementation required
Una función de Starlark que implementa este aspecto, con exactamente dos parámetros: Target (el objetivo al que se aplica el aspecto) y ctx (el contexto de la regla a partir del cual se crea el destino). Los atributos del destino están disponibles a través del campo ctx.rule. Esta función se evalúa durante la fase de análisis para cada aplicación de un aspecto a un objetivo.
attr_aspects secuencia de strings; el valor predeterminado es []
Lista de nombres de atributos. El aspecto se propaga a lo largo de las dependencias especificadas en los atributos de un destino con estos nombres. Aquí, los valores comunes incluyen deps y exports. La lista también puede contener una sola string "*" para propagarse a lo largo de todas las dependencias de un destino.
attrs dict; el valor predeterminado es {}
Es un diccionario que declara todos los atributos del aspecto. Se asigna desde un nombre de atributo a un objeto de atributo, como `attr.label` o `attr.string` (consulta el módulo attr). Los atributos de aspecto están disponibles para la función de implementación como campos del parámetro ctx.

Los atributos implícitos que comienzan con _ deben tener valores predeterminados y tener el tipo label o label_list.

Los atributos explícitos deben tener el tipo string y deben usar la restricción values. Los atributos explícitos restringen el aspecto para que se use solo con reglas que tengan atributos del mismo nombre, tipo y valores válidos según la restricción.

required_providers el valor predeterminado es []
Este atributo permite que el aspecto limite su propagación solo a los objetivos cuyas reglas anuncian a los proveedores requeridos. El valor debe ser una lista que contenga proveedores individuales o listas de proveedores, pero no ambos. Por ejemplo, [[FooInfo], [BarInfo], [BazInfo, QuxInfo]] es un valor válido, mientras que [FooInfo, BarInfo, [BazInfo, QuxInfo]] no lo es.

Una lista de proveedores no anidada se convertirá automáticamente en una lista que contiene una lista de proveedores. Es decir, [FooInfo, BarInfo] se convertirá automáticamente en [[FooInfo, BarInfo]].

Para que algunos objetivos de regla (p.ej., some_rule) sean visibles para un aspecto, some_rule debe anunciar todos los proveedores de, al menos, una de las listas de proveedores obligatorias. Por ejemplo, si el required_providers de un aspecto es [[FooInfo], [BarInfo], [BazInfo, QuxInfo]], este aspecto puede ver objetivos de some_rule solo si some_rule proporciona FooInfo, o BarInfo o ambos BazInfo y QuxInfo.

required_aspect_providers el valor predeterminado es []
Este atributo permite que este aspecto inspeccione otros. El valor debe ser una lista que contenga proveedores individuales o listas de proveedores, pero no ambos. Por ejemplo, [[FooInfo], [BarInfo], [BazInfo, QuxInfo]] es un valor válido, mientras que [FooInfo, BarInfo, [BazInfo, QuxInfo]] no lo es.

Una lista de proveedores no anidada se convertirá automáticamente en una lista que contiene una lista de proveedores. Es decir, [FooInfo, BarInfo] se convertirá automáticamente en [[FooInfo, BarInfo]].

Para que otro aspecto (p.ej., other_aspect) sea visible para este, other_aspect debe proporcionar todos los proveedores de al menos una de las listas. En el ejemplo de [[FooInfo], [BarInfo], [BazInfo, QuxInfo]], este aspecto puede ver other_aspect solo si other_aspect proporciona FooInfo o BarInfo o ambos BazInfo y QuxInfo.

provides el valor predeterminado es []
Una lista de proveedores que la función de implementación debe mostrar.

Se generará un error si la función de implementación omite de su valor que se muestra alguno de los tipos de proveedores que se indican aquí. Sin embargo, la función de implementación puede mostrar proveedores adicionales que no se mencionan aquí.

Cada elemento de la lista es un objeto *Info que muestra provider(), con la excepción de que un proveedor heredado está representado por su nombre de cadena en su lugar.Cuando un destino de la regla se usa como una dependencia para un destino que declara un proveedor obligatorio, no es necesario especificar ese proveedor aquí. Basta con que la función de implementación lo muestre. Sin embargo, se considera una práctica recomendada especificarlo, aunque no es obligatorio. Sin embargo, el campo required_providers de un aspecto sí requiere que se especifiquen los proveedores aquí.

requires secuencia de Aspect; el valor predeterminado es []
Lista de aspectos que se deben propagar antes de este aspecto.
fragments secuencia de strings; el valor predeterminado es []
Lista de nombres de fragmentos de configuración que el aspecto requiere en la configuración de destino.
host_fragments secuencia de strings; el valor predeterminado es []
Lista de nombres de fragmentos de configuración que el aspecto requiere en la configuración del host.
toolchains secuencia; el valor predeterminado es []
Si se configura, el conjunto de cadenas de herramientas que requiere esta regla. La lista puede contener objetos String, Label o StarlarkToolchainTypeApi, en cualquier combinación. Para encontrar las cadenas de herramientas, verifica la plataforma actual y se proporcionan a la implementación de la regla a través de ctx.toolchain.
incompatible_use_toolchain_transition el valor predeterminado es False
Obsoleta, ya no se usa y debe quitarse.
doc string; o None; el valor predeterminado es None
Es una descripción del aspecto que se puede extraer con las herramientas de generación de documentación.
apply_to_generating_rules el valor predeterminado es False
Si el valor es "true", el aspecto se aplicará, cuando se aplique a un archivo de salida, a la regla de generación del archivo de salida.

Por ejemplo, supongamos que un aspecto se propaga transitivamente a través del atributo `deps` y se aplica al objetivo `alpha`. Supongamos que `alpha` tiene `deps = [':beta_output']`, donde `beta_output` es un resultado declarado de un `beta` de destino. Supón que `beta` tiene un `charlie` de destino como uno de sus `alpha` de destino, y luego propaga el `false` a través del 'Aspecto'.

Falso de forma predeterminada.

exec_compatible_with secuencia de cadenas; el valor predeterminado es []
Una lista de restricciones en la plataforma de ejecución que se aplican a todas las instancias de este aspecto.
exec_groups dict; o None; el valor predeterminado es None
Dictado del nombre del grupo de ejecución (string) en exec_groups. Si se configura, permite que los aspectos ejecuten acciones en múltiples plataformas de ejecución dentro de una sola instancia. Consulta la documentación sobre grupos de ejecución para obtener más información.
subrules secuencia de subregla; el valor predeterminado es []
Experimental: lista de subreglas que usa este aspecto.

configuration_field

LateBoundDefault configuration_field(fragment, name)

Hace referencia a un valor predeterminado de límite tardío para un atributo del tipo label. Un valor tiene “de vinculación tardía” si requiere que se compile la configuración antes de determinar el valor. Cualquier atributo que use este valor como valor debe ser privado.

Ejemplo de uso:

Define un atributo de regla:

'_foo': attr.label(default=configuration_field(fragment='java', name='toolchain'))

Se está accediendo en la implementación de reglas:

  def _rule_impl(ctx):
    foo_info = ctx.attr._foo
    ...

Parámetros

Parámetro Descripción
fragment required
Es el nombre de un fragmento de configuración que contiene el valor de vínculo tardío.
name required
Es el nombre del valor que se obtiene del fragmento de configuración.

salida

depset depset(direct=None, order="default", *, transitive=None)

Crea un depset. El parámetro direct es una lista de elementos directos del depset, y el parámetro transitive es una lista de dependencias cuyos elementos se convierten en elementos indirectos del depset creado. El parámetro order especifica el orden en el que se muestran los elementos cuando el depset se convierte en una lista. Consulta la descripción general de las dependencias para obtener más información.

Todos los elementos (directos e indirectos) de un depset deben ser del mismo tipo, como lo obtiene la expresión type(x).

Debido a que se usa un conjunto basado en hash para eliminar duplicados durante la iteración, todos los elementos de un depset deben poder generar un hash. Sin embargo, esta invariante actualmente no se verifica de manera coherente en todos los constructores. Usa la marca --incompatible_always_check_depset_elements para habilitar la verificación coherente. Este será el comportamiento predeterminado en versiones futuras; consulta el error 10313.

Además, los elementos deben ser inmutables, aunque esta restricción se relajará en el futuro.

El orden de la dependencia creada debe ser compatible con el orden de las dependencias de transitive. El pedido de "default" es compatible con cualquier otro pedido; los demás pedidos son compatibles solo con ellos mismos.

Parámetros

Parámetro Descripción
direct secuencia; o None; el valor predeterminado es None
Una lista de elementos directos de un depset.
order El valor predeterminado es "default".
La estrategia de recorrido para la instalación nueva. Consulta aquí los valores posibles.
transitive secuencia de depset o None; el valor predeterminado es None
Una lista de dependencias cuyos elementos se convertirán en elementos indirectos del depset.

exec_group

exec_group exec_group(toolchains=[], exec_compatible_with=[])

Crea un grupo de ejecución que se puede usar para crear acciones para una plataforma de ejecución específica durante la implementación de reglas.

Parámetros

Parámetro Descripción
toolchains secuencia; el valor predeterminado es []
El conjunto de cadenas de herramientas que requiere este grupo de ejecución. La lista puede contener objetos String, Label o StarlarkToolchainTypeApi, en cualquier combinación.
exec_compatible_with secuencia de strings; el valor predeterminado es []
Una lista de restricciones en la plataforma de ejecución.

module_extension

unknown module_extension(implementation, *, tag_classes={}, doc=None, environ=[], os_dependent=False, arch_dependent=False)

Crea una nueva extensión de módulo. Almacena los datos en un valor global para que se puedan exportar y usar en un archivo MODULE.bazel.

Parámetros

Parámetro Descripción
implementation required
Es la función que implementa la extensión de este módulo. Debe tomar un solo parámetro, module_ctx. Se llama a la función una vez al comienzo de una compilación para determinar el conjunto de repositorios disponibles.
tag_classes la opción predeterminada es {}
Un diccionario para declarar todas las clases de etiquetas que usa la extensión. Se asigna desde el nombre de la clase de etiqueta a un objeto tag_class.
doc string; o None; el valor predeterminado es None
Es una descripción de la extensión del módulo que se puede extraer con las herramientas de generación de documentación.
environ secuencia de strings; el valor predeterminado es []
Proporciona una lista de variables de entorno de la que depende la extensión de este módulo. Si una variable de entorno de esa lista cambia, se volverá a evaluar la extensión.
os_dependent la opción predeterminada es False
Indica si esta extensión depende o no del SO
arch_dependent la configuración predeterminada es False
Indica si esta extensión depende o no de la arquitectura

provider

unknown provider(doc=None, *, fields=None, init=None)

Define un símbolo de proveedor. Se puede crear una instancia del proveedor llamándolo o se puede usar directamente como clave para recuperar una instancia de ese proveedor desde un destino. Ejemplo:
MyInfo = provider()
...
def _my_library_impl(ctx):
    ...
    my_info = MyInfo(x = 2, y = 3)
    # my_info.x == 2
    # my_info.y == 3
    ...

Consulta Reglas (proveedores) para obtener una guía completa sobre cómo usar los proveedores.

Muestra un valor Provider que admite llamadas si no se especifica init.

Si se especifica init, muestra una tupla de 2 elementos: un valor Provider que admite llamadas y un valor que admite llamadas de constructor sin procesar. Consulta Reglas (inicialización personalizada de proveedores personalizados) y el análisis del parámetro init a continuación para obtener más detalles.

Parámetros

Parámetro Descripción
doc string; o None; el valor predeterminado es None
Es una descripción del proveedor que se puede extraer con las herramientas de generación de documentación.
fields Sequence de strings; dict; o None; el valor predeterminado es None
Si se especifica, restringe el conjunto de campos permitidos.
Los valores posibles son los siguientes:
  • lista de campos:
    provider(fields = ['a', 'b'])

  • nombre del campo del diccionario -> documentación:
    provider(
           fields = { 'a' : 'Documentation for a', 'b' : 'Documentation for b' })
Todos los campos son opcionales.
init que admite llamadas o None; el valor predeterminado es None
Una devolución de llamada opcional para el procesamiento previo y la validación de los valores de campo del proveedor durante la creación de instancias. Si se especifica init, provider() muestra una tupla de 2 elementos: el símbolo de proveedor normal y un constructor sin procesar.

A continuación, se incluye una descripción precisa. Consulta Reglas (inicialización personalizada de proveedores) para obtener un debate y casos de uso intuitivos.

Permite que P sea el símbolo del proveedor creado cuando se llama a provider(). Conceptualmente, una instancia de P se genera llamando a una función de constructor predeterminada c(*args, **kwargs), que hace lo siguiente:

  • Si el campo args no está vacío, se produce un error.
  • Si se especificó el parámetro fields cuando se llamó a provider() y si kwargs contiene alguna clave que no figure en fields, se produce un error.
  • De lo contrario, c muestra una instancia nueva que tiene, para cada entrada k: v en kwargs, un campo llamado k con el valor v.
En el caso de que no se proporcione una devolución de llamada a init, una llamada al símbolo P en sí funciona como una llamada a la función de constructor predeterminada c. En otras palabras, P(*args, **kwargs) muestra c(*args, **kwargs). Por ejemplo,
MyInfo = provider()
m = MyInfo(foo = 1)
hará que m sea una instancia MyInfo con m.foo == 1.

Sin embargo, en el caso en el que se especifique init, la llamada a P(*args, **kwargs) realizará los siguientes pasos:

  1. La devolución de llamada se invoca como init(*args, **kwargs), es decir, con los mismos argumentos posicionales y de palabras clave que se pasaron a P.
  2. Se espera que el valor que se muestra de init sea un diccionario, d, cuyas claves son strings de nombres de campo. Si no es así, se produce un error.
  3. Se genera una instancia nueva de P como si se llamara al constructor predeterminado con las entradas de d como argumentos de palabra clave, como en c(**d).

Nota: Los pasos anteriores implican que se produce un error si *args o **kwargs no coinciden con la firma de init, si falla la evaluación del cuerpo de init (quizás de manera intencional mediante una llamada a fail()) o si el valor que se muestra de init no es un diccionario con el esquema esperado.

De esta manera, la devolución de llamada init generaliza la construcción normal del proveedor, ya que permite argumentos posicionales y lógica arbitraria para el procesamiento previo y la validación. No permite eludir la lista de fields permitidos.

Cuando se especifica init, el valor que se muestra de provider() se convierte en una tupla (P, r), en la que r es el constructor sin procesar. De hecho, el comportamiento de r es exactamente el de la función de constructor predeterminada c que se analizó anteriormente. Por lo general, r está vinculado a una variable cuyo nombre tiene un prefijo de guion bajo para que solo el archivo .bzl actual tenga acceso directo a él:

MyInfo, _new_myinfo = provider(init = ...)

repository_rule

callable repository_rule(implementation, *, attrs=None, local=False, environ=[], configure=False, remotable=False, doc=None)

Crea una nueva regla de repositorio. Almacena este elemento en un valor global para que se pueda cargar y llamar desde el archivo WORKSPACE.

Parámetros

Parámetro Descripción
implementation required
es la función que implementa esta regla. Debe tener un solo parámetro, repository_ctx. Se llama a la función durante la fase de carga para cada instancia de la regla.
attrs dict o None; el valor predeterminado es el diccionario None
para declarar todos los atributos de la regla. Se asigna desde un nombre de atributo a un objeto de atributo (consulta el módulo attr). Los atributos que comienzan con _ son privados y se pueden usar para agregar a un archivo una dependencia implícita de una etiqueta (una regla de repositorio no puede depender de un artefacto generado). El atributo name se agrega de forma implícita y no se debe especificar.
local el valor predeterminado es False
Indica que esta regla recupera todo del sistema local y debe volver a evaluarse en cada recuperación.
environ secuencia de strings; el valor predeterminado es []
Obsoleto. Este parámetro ya no está disponible. En su lugar, migra a repository_ctx.getenv.
Proporciona una lista de variables de entorno de la que depende esta regla del repositorio. Si una variable de entorno de esa lista cambia, el repositorio se volverá a recuperar.
configure el valor predeterminado es False
Indica que el repositorio inspecciona el sistema para fines de configuración
remotable la configuración predeterminada es False
Experimental. Este parámetro es experimental y puede cambiar en cualquier momento. No dependas de ello. Se puede habilitar de forma experimental si configuras ---experimental_repo_remote_exec
Compatible con la ejecución remota.
doc string; o None; el valor predeterminado es None
Es una descripción de la regla del repositorio que se puede extraer con las herramientas de generación de documentos.

regla

callable rule(implementation, *, test=unbound, attrs={}, outputs=None, executable=unbound, output_to_genfiles=False, fragments=[], host_fragments=[], _skylark_testable=False, toolchains=[], incompatible_use_toolchain_transition=False, doc=None, provides=[], exec_compatible_with=[], analysis_test=False, build_setting=None, cfg=None, exec_groups=None, initializer=None, parent=None, extendable=None, subrules=[])

Crea una regla nueva, a la que se puede llamar desde un archivo BUILD o una macro para crear destinos.

Las reglas deben asignarse a variables globales en un archivo .bzl; el nombre de la variable global es el nombre de la regla.

Las reglas de prueba deben tener un nombre que termine en _test, mientras que las demás reglas no deben tener este sufijo. (Esta restricción se aplica solo a las reglas, no a sus objetivos).

Parámetros

Parámetro Descripción
implementation required
la función de Starlark que implementa esta regla, debe tener exactamente un parámetro: ctx. Se llama a la función durante la fase de análisis para cada instancia de la regla. Puede acceder a los atributos que proporciona el usuario. Debe crear acciones para generar todos los resultados declarados.
test bool; el valor predeterminado es unbound
Indica si esta regla es una regla de prueba, es decir, si puede estar sujeta a un comando blaze test. Todas las reglas de prueba se consideran ejecutables automáticamente. No es necesario (y no se recomienda) configurar executable = True de manera explícita para una regla de prueba. El valor predeterminado es False. Consulta la página de reglas para obtener más información.
attrs dict; el valor predeterminado es {}
para declarar todos los atributos de la regla. Se asigna desde un nombre de atributo a un objeto de atributo (consulta el módulo attr). Los atributos que comienzan con _ son privados y se pueden usar para agregar una dependencia implícita de una etiqueta. El atributo name se agrega de forma implícita y no se debe especificar. Los atributos visibility, deprecation, tags, testonly y features se agregan de forma implícita y no se pueden anular. La mayoría de las reglas solo necesitan algunos atributos. Para limitar el uso de memoria, la función de regla impone un límite en el tamaño de las attrs.
outputs dict, None o function; el valor predeterminado es None
Obsoleto. Este parámetro dejó de estar disponible y se quitará pronto. No dependas de ello. Está inhabilitada con ---incompatible_no_rule_outputs_param. Usa esta marca para verificar que tu código sea compatible con la eliminación inminente.
Este parámetro dejó de estar disponible. Migra las reglas para que usen OutputGroupInfo o attr.output en su lugar.

Un esquema para definir resultados declarados previamente. A diferencia de los atributos output y output_list, el usuario no especifica las etiquetas para estos archivos. Consulta la página Reglas para obtener más información sobre los resultados declarados previamente.

El valor de este argumento es un diccionario o una función de devolución de llamada que genera un diccionario. La devolución de llamada funciona de manera similar a los atributos de dependencias procesados: los nombres de los parámetros de la función se comparan con los atributos de la regla, por lo que, por ejemplo, si pasas outputs = _my_func con la definición def _my_func(srcs, deps): ..., la función tiene acceso a los atributos srcs y deps. Ya sea que el diccionario se especifique directamente o a través de una función, se interpreta de la siguiente manera:

Cada entrada en el diccionario crea un resultado declarado previamente en el que la clave es un identificador y el valor es una plantilla de string que determina la etiqueta de la salida. En la función de implementación de la regla, el identificador se convierte en el nombre de campo que se usa para acceder al File del resultado en ctx.outputs. La etiqueta del resultado tiene el mismo paquete que la regla, y la parte después del paquete se debe sustituir cada marcador de posición del formulario "%{ATTR}" por una cadena formada a partir del valor del atributo ATTR:

  • Los atributos de tipo cadena se sustituyen literalmente.
  • Los atributos de tipo de etiqueta se convierten en la parte de la etiqueta después del paquete, menos la extensión de archivo. Por ejemplo, la etiqueta "//pkg:a/b.c" se convierte en "a/b".
  • Los atributos de tipo de salida se convierten en la parte de la etiqueta después del paquete, incluida la extensión de archivo (en el ejemplo anterior, "a/b.c").
  • Todos los atributos de tipo de lista (por ejemplo, attr.label_list) que se usan en los marcadores de posición deben tener exactamente un elemento. Su conversión es la misma que la de su versión no lista (attr.label).
  • Es posible que otros tipos de atributos no aparezcan en los marcadores de posición.
  • Los marcadores de posición especiales que no son atributos %{dirname} y %{basename} se expanden a esas partes de la etiqueta de la regla y excluyen su paquete. Por ejemplo, en "//pkg:a/b.c", el dirname es a y el nombre base es b.c.

En la práctica, el marcador de posición de sustitución más común es "%{name}". Por ejemplo, para un destino llamado "foo", el dict de salida {"bin": "%{name}.exe"} declara previamente un resultado llamado foo.exe al que se puede acceder en la función de implementación como ctx.outputs.bin.

executable bool; el valor predeterminado es unbound
Indica si esta regla se considera ejecutable, es decir, si puede estar sujeta a un comando blaze run. La configuración predeterminada es False. Consulta la página de reglas para obtener más información.
output_to_genfiles el valor predeterminado es False
Si es verdadero, los archivos se generarán en el directorio genfiles, en lugar de hacerlo en el directorio bin. A menos que lo necesites para la compatibilidad con reglas existentes (p.ej., cuando se generan archivos de encabezado para C++), no establezcas esta marca.
fragments secuencia de strings; el valor predeterminado es []
Lista de nombres de fragmentos de configuración que la regla requiere en la configuración de destino.
host_fragments secuencia de strings; el valor predeterminado es []
Lista de nombres de fragmentos de configuración que la regla requiere en la configuración del host.
_skylark_testable el valor predeterminado es False
(Experimental)

Si es verdadero, esta regla expondrá sus acciones para su inspección mediante reglas que dependen de ella a través de un proveedor Actions. El proveedor también está disponible para la regla mediante una llamada a ctx.created_actions().

Solo se debe usar para probar el comportamiento de tiempo de análisis de las reglas de Starlark. Es posible que esta marca se quite en el futuro.
toolchains secuencia; el valor predeterminado es []
Si se configura, el conjunto de cadenas de herramientas que requiere esta regla. La lista puede contener objetos String, Label o StarlarkToolchainTypeApi, en cualquier combinación. Para encontrar las cadenas de herramientas, verifica la plataforma actual y se proporcionan a la implementación de la regla a través de ctx.toolchain.
incompatible_use_toolchain_transition el valor predeterminado es False
Obsoleta, ya no se usa y debe quitarse.
doc string; o None; el valor predeterminado es None
Es una descripción de la regla que se puede extraer con las herramientas de generación de documentación.
provides el valor predeterminado es []
Una lista de proveedores que la función de implementación debe mostrar.

Se generará un error si la función de implementación omite de su valor que se muestra alguno de los tipos de proveedores que se indican aquí. Sin embargo, la función de implementación puede mostrar proveedores adicionales que no se mencionan aquí.

Cada elemento de la lista es un objeto *Info que muestra provider(), con la excepción de que un proveedor heredado está representado por su nombre de cadena en su lugar.Cuando un destino de la regla se usa como una dependencia para un destino que declara un proveedor obligatorio, no es necesario especificar ese proveedor aquí. Basta con que la función de implementación lo muestre. Sin embargo, se considera una práctica recomendada especificarlo, aunque no es obligatorio. Sin embargo, el campo required_providers de un aspecto sí requiere que se especifiquen los proveedores aquí.

exec_compatible_with secuencia de strings; el valor predeterminado es []
Una lista de restricciones en la plataforma de ejecución que se aplican a todos los destinos de este tipo de regla.
analysis_test el valor predeterminado es False
Si es verdadero, esta regla se trata como una prueba de análisis.

Nota: Las reglas de prueba de análisis se definen principalmente con la infraestructura proporcionada en las bibliotecas principales de Starlark. Consulta Pruebas para obtener orientación.

Si una regla se define como una regla de prueba de análisis, puede usar las transiciones de configuración definidas mediante analysis_test_transition en sus atributos, pero tiene algunas restricciones:

  • Los objetivos de esta regla están limitados en la cantidad de dependencias transitivas que pueden tener.
  • La regla se considera una regla de prueba (como si se hubieran configurado test=True). Esto sustituye el valor de test
  • La función de implementación de reglas no puede registrar acciones. En su lugar, debe registrar un resultado aprobado o reprobado proporcionando AnalysisTestResultInfo.
build_setting BuildSetting; o None; el valor predeterminado es None
Si se establece, describe el tipo de build setting esta regla. Consulta el módulo config. Si se configura, se agrega automáticamente un atributo obligatorio llamado "build_setting_default" a esta regla, con un tipo correspondiente al valor que se pasa aquí.
cfg el valor predeterminado es None
Si se establece, apunta a la transición de configuración que la regla aplicará a su propia configuración antes del análisis.
exec_groups dict; o None; el valor predeterminado es None
Dictado del nombre del grupo de ejecución (string) en exec_groups. Si se configura, permite que las reglas ejecuten acciones en varias plataformas de ejecución dentro de un solo objetivo. Consulta la documentación sobre grupos de ejecución para obtener más información.
initializer el valor predeterminado es None
Experimental: la función Stalark que inicializa los atributos de la regla.

Se llama a la función en el momento de la carga para cada instancia de la regla. Se llama con name y los valores de los atributos públicos definidos por la regla (no con atributos genéricos, por ejemplo, tags).

Debe mostrar un diccionario desde los nombres de los atributos hasta los valores deseados. Los atributos que no se muestran no se ven afectados. Si se muestra None como valor, se usará el valor predeterminado especificado en la definición del atributo.

Los inicializadores se evalúan antes que los valores predeterminados especificados en una definición de atributo. En consecuencia, si un parámetro en la firma del inicializador contiene un valor predeterminado, reemplaza el valor predeterminado de la definición del atributo (excepto si se muestra None).

Del mismo modo, si un parámetro de la firma del inicializador no tiene un valor predeterminado, será obligatorio. En esos casos, se recomienda omitir la configuración obligatoria o predeterminada en una definición de atributo.

Se recomienda usar **kwargs para los atributos que no se controlan.

En el caso de las reglas extendidas, todos los inicializadores se denominan proceder del elemento secundario a los principales. A cada inicializador se le pasan solo los atributos públicos que conoce.

parent la opción predeterminada es None
Experimental: la regla de Stalark que se extiende. Cuando se establecen, se combinan los atributos públicos y los proveedores anunciados. La regla coincide con executable y test del elemento superior. Se combinan los valores de fragments, toolchains, exec_compatible_with y exec_groups. Es posible que no se puedan establecer los parámetros heredados u obsoletos. La transición de configuración entrante cfg del superior se aplica después de la configuración entrante de esta regla.
extendable bool, Label, string o None; el valor predeterminado es None
Experimental: Una etiqueta de una lista de entidades permitidas que define las reglas que pueden extender esta regla. También se puede establecer como Verdadero o Falso para permitir o rechazar las extensiones. De forma predeterminada, Bazel permite siempre las extensiones.
subrules secuencia de subregla; el valor predeterminado es []
Experimental: Lista de subreglas que usa esta regla.

select

unknown select(x, no_match_error='')

select() es la función auxiliar que hace que un atributo de regla sea configurable. Consulta la enciclopedia de compilaciones para obtener más detalles.

Parámetros

Parámetro Descripción
x required
Es un dict que asigna condiciones de configuración a valores. Cada clave es una Label o una cadena de etiqueta que identifica una instancia config_setting o constraint_value. Consulta la documentación sobre macros para saber cuándo usar una etiqueta en lugar de una string.
no_match_error la configuración predeterminada es ''
Error personalizado opcional para informar si no coincide ninguna condición.

subregla

Subrule subrule(implementation, attrs={}, toolchains=[], fragments=[], subrules=[])

Construye una instancia nueva de una subregla. El resultado de esta función se debe almacenar en una variable global antes de poder usarla.

Parámetros

Parámetro Descripción
implementation function; required
La función de Starlark que implementa esta subregla
attrs dict; el valor predeterminado es {}
Es un diccionario para declarar todos los atributos (privados) de la subregla.

Las subreglas solo pueden tener atributos privados con tipo de etiqueta (es decir, etiqueta o lista de etiquetas). Bazel pasa automáticamente los valores resueltos correspondientes a estas etiquetas a la función de implementación de la subregla como argumentos con nombre (por lo tanto, la función de implementación es necesaria para aceptar los parámetros con nombre que coincidan con los nombres de los atributos). Los tipos de estos valores serán los siguientes:

  • FilesToRunProvider para los atributos de etiqueta con executable=True
  • File para los atributos de etiqueta con allow_single_file=True
  • Target para todos los demás atributos de etiquetas
  • [Target] para todos los atributos de la lista de etiquetas
toolchains secuencia; el valor predeterminado es []
Si se configura, el conjunto de cadenas de herramientas que requiere esta subregla. La lista puede contener objetos String, Label o StarlarkToolchainTypeApi, en cualquier combinación. Para encontrar las cadenas de herramientas, verifica la plataforma actual y se proporcionan a la implementación de la subregla a través de ctx.toolchains.
fragments secuencia de strings; el valor predeterminado es []
Lista de nombres de fragmentos de configuración que la subregla requiere en la configuración de destino.
subrules secuencia de subregla; el valor predeterminado es []
Lista de otras subreglas que necesita esta subregla.

tag_class

tag_class tag_class(attrs={}, *, doc=None)

Crea un nuevo objeto tag_class, que define un esquema de atributos para una clase de etiquetas, que son objetos de datos que puede usar una extensión de módulo.

Parámetros

Parámetro Descripción
attrs la opción predeterminada es {}
Un diccionario para declarar todos los atributos de esta clase de etiqueta. Se asigna desde un nombre de atributo a un objeto de atributo (consulta el módulo attr).
doc string; o None; el valor predeterminado es None
Es una descripción de la clase de etiqueta que se puede extraer con las herramientas de generación de documentación.

visibilidad

None visibility(value)

Establece la visibilidad de la carga del módulo .bzl que se está inicializando en el momento.

La visibilidad de carga de un módulo determina si otros archivos BUILD y .bzl pueden cargarlo o no. (Esto es diferente de la visibilidad objetivo del archivo fuente .bzl subyacente, que determina si el archivo puede aparecer como una dependencia de otros objetivos). La visibilidad de carga funciona a nivel de paquetes: para cargar un módulo, el archivo que realiza la carga debe encontrarse en un paquete al que se le haya otorgado visibilidad para el módulo. Un módulo siempre se puede cargar dentro de su propio paquete, sin importar su visibilidad.

Solo se puede llamar a visibility() una vez por archivo .bzl y solo en el nivel superior, no dentro de una función. El estilo preferido es colocar esta llamada inmediatamente debajo de las sentencias load() y cualquier lógica breve necesaria para determinar el argumento.

Si se configura la marca --check_bzl_visibility como falsa, las infracciones de visibilidad de carga emitirán advertencias, pero no fallarán la compilación.

Parámetros

Parámetro Descripción
value required
Una lista de strings de especificación de paquete o una sola string de especificación de paquete.

Las especificaciones del paquete tienen el mismo formato que para package_group, excepto que no se permiten especificaciones de paquete negativas. Es decir, una especificación puede tener los siguientes formatos:

  • "//foo": El paquete //foo
  • "//foo/...": Es el paquete //foo y todos sus subpaquetes.
  • "public" o "private": Todos los paquetes o ninguno, respectivamente.

No se permite la sintaxis "@". Todas las especificaciones se interpretan en relación con el repositorio del módulo actual.

Si value es una lista de cadenas, el conjunto de paquetes a los que se les otorgó visibilidad para este módulo es la unión de los paquetes representados por cada especificación. (Una lista vacía tiene el mismo efecto que private). Si value es una sola string, se trata como si fuera la lista singleton [value].

Ten en cuenta que las marcas --incompatible_package_group_has_public_syntax y --incompatible_fix_package_group_reporoot_syntax no tienen efecto en este argumento. Los valores "public" y "private" siempre están disponibles, y "//..." siempre se interpreta como "todos los paquetes del repositorio actual".