nativo/nativa/indígena/aborigen

Informar un problema Ver fuente

Es un módulo integrado para admitir reglas nativas y otras funciones de ayuda de paquetes. Todas las reglas nativas aparecen como funciones en este módulo, p.ej., native.cc_library. Ten en cuenta que el módulo nativo solo está disponible en la fase de carga (es decir, para macros, no para implementaciones de reglas). Los atributos ignorarán los valores None y los tratarán como si no se hubiera establecido.
Las siguientes funciones también están disponibles:

Miembros

existing_rule

unknown native.existing_rule(name)

Muestra un objeto inmutable similar a un diccionario que describe los atributos de una regla cuya instancia se creó en el paquete de este subproceso, o None si no existe una instancia de regla con ese nombre.

En este caso, un objeto similar a un diccionario inmutable se refiere a un objeto x que admite iteraciones similares a un diccionario, len(x), name in x, x[name], x.get(name), x.items(), x.keys() y x.values().

Si se configura la marca --noincompatible_existing_rules_immutable_view, en su lugar, se muestra un nuevo diccionario mutable con el mismo contenido.

El resultado contiene una entrada para cada atributo, a excepción de los privados (cuyos nombres no comienzan con una letra) y algunos tipos de atributos heredados que no se pueden representar. Además, el dict contiene entradas para name y kind de la instancia de la regla (por ejemplo, 'cc_binary').

Los valores del resultado representan valores de atributos de la siguiente manera:

  • Los atributos de tipo str, int y bool se representan tal como están.
  • Las etiquetas se convierten en cadenas con el formato ':foo' para destinos en el mismo paquete o '//pkg:name' para destinos en un paquete diferente.
  • Las listas se representan como tuplas y los diccionarios se convierten en nuevos diccionarios mutables. Sus elementos se convierten de la misma manera de manera recurrente.
  • Los valores select se muestran con el contenido transformado como se describió anteriormente.
  • Los atributos para los que no se especificó ningún valor durante la creación de la instancia de la regla y cuyo valor predeterminado se calcula se excluyen del resultado. (Los valores predeterminados calculados no se pueden calcular hasta la fase de análisis).

Si es posible, evita usar esta función. Hace que los archivos BUILD sean frágiles y dependan del orden. Además, ten en cuenta que difiere sutilmente de las otras dos conversiones de valores de atributos de reglas del formato interno a Starlark: una se usa como valores predeterminados calculados y la otra que usa ctx.attr.foo.

Parámetros

Parámetro Descripción
name required
El nombre del destino.

existing_rules

unknown native.existing_rules()

Muestra un objeto inmutable similar a un diccionario que describe las reglas que se crearon hasta el momento en el paquete de este subproceso. Cada entrada del objeto similar a un diccionario asigna el nombre de la instancia de la regla al resultado que mostrará existing_rule(name).

En este caso, un objeto similar a un diccionario inmutable se refiere a un objeto x que admite iteraciones similares a un diccionario, len(x), name in x, x[name], x.get(name), x.items(), x.keys() y x.values().

Si se configura la marca --noincompatible_existing_rules_immutable_view, en su lugar, se muestra un nuevo diccionario mutable con el mismo contenido.

Nota: Si es posible, evita usar esta función. Hace que los archivos BUILD sean frágiles y dependan del orden. Además, si se configura la marca --noincompatible_existing_rules_immutable_view , esta función puede ser muy costosa, en especial si se llama dentro de un bucle.

exports_files

None native.exports_files(srcs, visibility=None, licenses=None)

Especifica una lista de archivos que pertenecen a este paquete que se exportan a otros paquetes.

Parámetros

Parámetro Descripción
srcs secuencia de strings; obligatorio
La lista de archivos para exportar.
visibility secuencia o None; el valor predeterminado es None
Se puede especificar una declaración de visibilidad. Los archivos serán visibles para los destinos especificados. Si no se especifica la visibilidad, los archivos serán visibles para todos los paquetes.
licenses secuencia de strings; o None; el valor predeterminado es None
Licencias que se especificarán.

glob

sequence native.glob(include=[], exclude=[], exclude_directories=1, allow_empty=unbound)

Glob muestra una nueva lista mutable y ordenada de cada archivo en el paquete actual que:
  • Coincide con al menos un patrón en include.
  • No coincide con ninguno de los patrones de exclude (el valor predeterminado es []).
Si el argumento exclude_directories está habilitado (establecido en 1), los archivos de tipo directorio se omitirán de los resultados (el valor predeterminado es 1).

Parámetros

Parámetro Descripción
include secuencia de strings; el valor predeterminado es []
La lista de patrones glob que se deben incluir.
exclude secuencia de strings; el valor predeterminado es []
La lista de patrones glob que se excluirán.
exclude_directories el valor predeterminado es 1
Es una marca que indica si se deben excluir directorios o no.
allow_empty El valor predeterminado es unbound
Indica si permitimos que los patrones glob no coincidan con nada. Si `allow_empty` es False, cada patrón de inclusión individual debe coincidir con algo y el resultado final no debe estar vacío (después de que se excluyen las coincidencias de los patrones `Exclude`).

module_name

string native.module_name()

Es el nombre del módulo de Bazel asociado con el repositorio en el que se encuentra este paquete. Si este paquete proviene de un repositorio definido en el ESPACIO DE TRABAJO en lugar de MODULE.bazel, está vacío. Para los repositorios generados por extensiones de módulo, este es el nombre del módulo que aloja la extensión. Es lo mismo que el campo module.name que se ve en module_ctx.modules. Puede devolver None.

module_version

string native.module_version()

Es la versión del módulo de Bazel asociado con el repositorio en el que se encuentra este paquete. Si este paquete proviene de un repositorio definido en el ESPACIO DE TRABAJO en lugar de MODULE.bazel, está vacío. En el caso de los repositorios generados por extensiones de módulo, esta es la versión del módulo que aloja la extensión. Es lo mismo que el campo module.version que se ve en module_ctx.modules. Puede devolver None.

package_group

None native.package_group(name, packages=[], includes=[])

Esta función define un conjunto de paquetes y le asigna una etiqueta al grupo. Se puede hacer referencia a la etiqueta en los atributos visibility.

Parámetros

Parámetro Descripción
name obligatorio
El nombre único de esta regla.
packages secuencia de strings; el valor predeterminado es []
Es una enumeración completa de los paquetes de este grupo.
includes secuencia de strings; el valor predeterminado es []
Otros grupos de paquetes que se incluyen en este.

package_name

string native.package_name()

El nombre del paquete que se evalúa. Por ejemplo, en el archivo BUILD some/package/BUILD, su valor será some/package. Si el archivo BUILD llama a una función definida en un archivo .bzl, package_name() coincidirá con el paquete del archivo BUILD que llama. Esta función es equivalente a la variable obsoleta PACKAGE_NAME.

package_relative_label

Label native.package_relative_label(input)

Convierte la string de entrada en un objeto Label, en el contexto del paquete que se está inicializando (es decir, el archivo BUILD para el que se ejecuta la macro actual). Si la entrada ya es Label, se muestra sin cambios.

Solo se puede llamar a esta función mientras se evalúa un archivo BUILD y las macros a las que llama directa o indirectamente; por ejemplo, no se la puede llamar en una función de implementación de reglas.

El resultado de esta función es el mismo valor de Label que se produciría si pasas la string determinada a un atributo con valor de etiqueta de un destino declarado en el archivo BUILD.

Nota de uso: La diferencia entre esta función y Label() es que Label() usa el contexto del paquete del archivo .bzl que la llamó, no el paquete del archivo BUILD. Usa Label() cuando necesites hacer referencia a un objetivo fijo codificado en la macro, como un compilador. Usa package_relative_label() cuando necesites normalizar una cadena de etiqueta proporcionada por el archivo BUILD en un objeto Label. (No hay forma de convertir una cadena en un Label en el contexto de un paquete que no sea el archivo BUILD o el archivo .bzl que realiza la llamada. Por este motivo, las macros externas siempre deben optar por pasar los objetos de etiqueta a las macros internas en lugar de las cadenas de etiquetas).

Parámetros

Parámetro Descripción
input string; o Label; obligatorio
La string de la etiqueta de entrada o el objeto Label. Si se pasa un objeto Label, se muestra tal como está.

repository_name

string native.repository_name()

El nombre del repositorio desde el que se llama a la regla o la extensión de compilación. Por ejemplo, en los paquetes a los que la estrofa local_repository(name='local', path=...) de WORKSPACE llama a existencia, se establecerá en @local. En los paquetes del repositorio principal, se establecerá como @. Esta función es equivalente a la variable obsoleta REPOSITORY_NAME.

subpaquetes

sequence native.subpackages(include, exclude=[], allow_empty=False)

Muestra una nueva lista mutable de cada subpaquete directo del paquete actual, sin importar la profundidad del directorio del sistema de archivos. La lista que se muestra está ordenada y contiene los nombres de los subpaquetes relacionados con el paquete actual. Se recomienda usar los métodos del módulo bazel_skylib.subpackages en lugar de llamar directamente a esta función.

Parámetros

Parámetro Descripción
include secuencia de strings; obligatorio
La lista de patrones glob que se incluirán en el análisis de subpaquetes.
exclude secuencia de strings; el valor predeterminado es []
La lista de patrones glob que se excluirán del análisis de subpaquetes.
allow_empty el valor predeterminado es False
Indica si la llamada muestra una lista vacía o no. De forma predeterminada, la lista vacía indica un posible error en el archivo BUILD, en el que la llamada a subpackages() es superflora. Si se establece como verdadero, se permitirá que esta función tenga éxito en ese caso.